Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - kworld

#1
Hola, estoy intentando crear un proceso para una aplicación de consola, pero no quiero que el proceso creado herede las variables de entorno del proceso que lo crea, por eso quiero crear un bloque de proceso con solamente variables de sistema, sin embargo algo estoy haciendo mal porque CreateProcess me arroja error en el parámetro de la variable de entorno.


#include <windows.h>
#include <stdio.h>
#include <userenv.h>

int main()
{
    LPVOID env; 
    if (!CreateEnvironmentBlock(&env, NULL, FALSE))
    {
      printf("No CreateEnvironmentBlock. Error:%d\n",GetLastError());
    }
   
    PROCESS_INFORMATION pi;
    memset(&pi, 0, sizeof(pi));
   
    STARTUPINFO si;
    memset(&si, 0, sizeof(si));
    si.cb = sizeof(si);
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.lpTitle = "";
    si.wShowWindow = SW_NORMAL;
   
    LPTSTR program = TEXT("cmd.exe");
    LPTSTR params = TEXT("/c \"C:\\Users\\Carlos\\Desktop\\hola.cmd\"");
   
   BOOL b;
    b = CreateProcess(program, params, NULL, NULL, FALSE, CREATE_NEW_CONSOLE|NORMAL_PRIORITY_CLASS, env, NULL, &si, &pi);
    if (!b)
    {
          printf("No CreateProcess. Error:%d\n",GetLastError());
    }
   
    WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
   
    getchar();
}




¿Alguien podría ayudarme por favor?
#2
Hola, por favor ¿me podrían ayudar?

Estoy haciendo una aplicación de consola, y tengo un problema, quiero aceptar nombres unicode de los archivos, por si mi aplicación corre en algún windows en chino o algo así.

El asunto es que el main me da problemas:


#define UNICODE

#include <windows.h>
#include <stdio.h>

int main(int argc, TCHAR* argv[])
{
   
   if (argc == 2)
   {
      HANDLE archivo;
      int error;
     
      archivo = CreateFile(/*TEXT("texto.txt"),*/ argv[1],
                           GENERIC_READ,
                           FILE_SHARE_READ,
                           NULL, // Descriptor de seguridad por defecto
                           OPEN_EXISTING,
                           FILE_ATTRIBUTE_NORMAL,
                           NULL);
     
      error = GetLastError();
      if (error != NO_ERROR) {
         printf("Error: %d\n", error);
      }
      else
      {
         puts("No error");
      }
   }
   else
   {
       puts("Use only one argument");
   }
   
   return 0;
     
}



Así como está al especificar el nombre de archivo siempre me da error 2 (ERROR_FILE_NOT_FOUND), en cambio si descomento en el código y utilizo un nombre de archivo fijo existente, en este caso: texto.txt no da error.

A mi parecer el main es el que me da problemas, ¿cómo declaro un main que acepte unicode en la entrada?

He probado usando la cmd.exe en modo unicode:
cmd /u

y al especificar un nombre de archivo existente me da error 123 (ERROR_INVALID_NAME)

Entonces pienso que el problema está en la definición del main.
¿Por favor, alguien me puede ayudar? Tengo todo el resto del código listo para trabajar en unicode, pero me falta el poder aceptar un nombre de archivo desde el main, en este caso argv[1]

Estoy compilando con gcc 3.4.2 (mingw) bajo el ide Dev-C++ 4.9

EI: juntando mensajes.

busqué más información y leí que mingw no acepta wmain, así es que escribí esto como parche basado en: http://msdn.microsoft.com/en-us/library/bb776391%28v=VS.85%29.aspx



#ifdef UNICODE
int main()
#else
int main(int argc, UCHAR* argv[])
#endif
{
    #ifdef UNICODE
    TCHAR** argv;
    int argc;
    argv = CommandLineToArgvW(GetCommandLineW(), &argc);
    if (argv == NULL) {
      return ERROR_DESCONOCIDO;
    }
    #endif

    int ret;
    ret = mi_funcion(argv[1]);

    #ifdef UNICODE
    LocalFree(argv);
    #endif

    return ret;
}
#3
Scripting / CarlitosSoft Batch Compiler 1.3
1 Junio 2010, 02:46 AM
Nueva versión de CarlitosSoft Batch Compiler

Versión: 1.3
Características:

  • Genera ejecutables que se ejecutan en modo invisible, normal, maximizado y minimizado
  • Hasta el momento el ejecutable generado no es detectado por ningún antivirus, y no debería.
  • Si en el registro se activa DisableCMD para impedir la ejecución de la cmd.exe o de archivos batch el batch compilado se ejecuta igualmente. Único compilador batch con esta característica.
  • Sólo puede compilarse un archivo batch.
  • El código plano del batch no es mostrado dentro del ejecutable.
  • Si se ve la ventana de la cmd, esta tiene un título vacío y no aparece ningún menú de Propiedades.
  • Testeado exitosamente en Windows XP y Windows Seven.


Link:http://carlitossoft.110mb.com/cbc/
#4
Hola, quiero modificar un arreglo de cadena de caracteres, quiero asignarle al indice 0 de cada cadena un caracter, pero no funciona, ¿Alguien podría ayudarme?


#include <stdio.h>

int main()
{
char* listado[] = {
        "_:\\mi_listado.txt",
        "_:\\notas.txt",
        "_:\\p.txt"
};

int i;

for (i=0; i < 3; ++i)
{
     listado[i][0] = 'C';
     printf("%s\n",listado[i]);
}

getchar();
       
}
       

#5
Hola estoy usando el ide Dev-C++ para compilar lo siguiente, quiero usar unicode, pero no funciona.


#include <windows.h>

#define UNICODE

int main(int argc, char *argv[])
{
  TCHAR* ansi_o_unicode;
  WCHAR* unicode;
 
  unicode = L"unicode";
  ansi_o_unicode = TEXT("hola");
     
  return 0;
}

eso compila, pero si veo el ejecutable hola no está en unicode.
con un editor hexadecimal se ve así:

Código (dos) [Seleccionar]

hola..u.n.i.c.o.d.e..


y si quiero compilar lo siguiente no compila:


#include <windows.h>

#define UNICODE

int main(int argc, char *argv[])
{
  TCHAR* ansi_o_unicode;
  WCHAR* unicode;
 
  unicode = L"unicode";
  ansi_o_unicode = L"hola";
 
     
  return 0;
}


al parecer el #define UNICODE no es considerado porque si se consideraría debería compilar porque en la msdn se dice que dice que TCHAR es definido así:


#ifdef UNICODE
typedef WCHAR TCHAR;
#else
typedef char TCHAR;
#endif


¿Cual será el problema?

edito: ya lo encontré: tenía que definir UNICODE antes de incluir windows.h me da verguenza el error tonto de parte mía.
#6
Quisiera que por favor alguien me ayudara con este código, logró obtener el texto que se necesita, pero no logro copiarlo a otro buffer.


#include <windows.h>

UCHAR* getUserSid();

int main(int argc, char *argv[])
{
   UCHAR* userSid;
   userSid = getUserSid();
   printf("%s",userSid);
   
   return 0;
 
}

UCHAR* getUserSid()
{
  HANDLE token = NULL;
  DWORD dwBufferSize = 0;
  PTOKEN_USER pTokenUser = NULL;
  HANDLE currentProcess = NULL;
  UCHAR* userSid = NULL;
 
  currentProcess = GetCurrentProcess();
  if (OpenProcessToken(currentProcess, TOKEN_QUERY, &token))
  {
     GetTokenInformation(token, TokenUser, NULL, 0, &dwBufferSize);
     pTokenUser = (PTOKEN_USER)malloc(dwBufferSize);
     memset(pTokenUser, 0, dwBufferSize);
     if (GetTokenInformation(token, TokenUser, pTokenUser, dwBufferSize, &dwBufferSize))
     {
         if (IsValidSid(pTokenUser->User.Sid))
         {
             UCHAR* localSID = NULL;
             size_t len;
             
             if (ConvertSidToStringSidA(pTokenUser->User.Sid, &localSID))
             {
                printf("%s\n",localSID); //esto se imprime bien
               
                len = strlen(localSID);
                printf("Len:%d\n",len); //esto se imprime bien
               
                userSid = (UCHAR*) malloc(len+1, sizeof(UCHAR));
                if (userSid != NULL)
                {
                  printf("memoria dinamica bien\n"); //esto se imprime bien
                  strncpy(userSid, localSID, len);
                  userSid[len] = 0;
                }
                printf("%s\n",userSid); //esto NO SE IMPRIME BIEN
                LocalFree(localSID);
             }
         }                         
     }
     free(pTokenUser);
     CloseHandle(token);
  }
  CloseHandle(currentProcess);
  return userSid;
}

#7
Hola.¿Alguien tiene el souce de BHC (Batch Hide Compiler 2.0)?

El enlace que aparece en:

http://foro.elhacker.net/analisis_y_diseno_de_malware/bhc_batch_hide_compiler_20_by_whk_proyecto_para_abril_negro-t253872.0.html
está caído.

Quisiera estudiar ese código de WHK para aprender.

Por favor si alguien lo tiene ¿podría enviarmelo?
#8
Solucionado.
#9
Hola quisiera saber si existe una forma de ejecutar un ejecutable en modo gui teniendo en el pe header el flag de aplicación de consola (3).
Pregunto esto porque tengo un ejecutable que no es virus ni nada y necesito ejecutarlo en modo gui. Estando en modo consola lo escaneo en virustotal y no detecta nada, pero si le cambio el flag en el pe header a aplación gui (2) inmediatamente es detectado por dos antivirus como:
TR/Crypt.XPACK.Gen
Packer.Win32.Agent.bk

y quiero tenerlo para ejecutarlo en modo gui pero que virustotal no dé esos falsos positivos.
#10
Programación C/C++ / Ayuda puntero
23 Mayo 2010, 04:47 AM
Hola. Estoy trabajando en la primera parte de una función, pero tengo un problema con un puntero de tipo unsigned char, resulta que le asigno memoria con malloc, y al salir de la función se pierde el contenido y no entiendo porqué.

¿Alguien podría ayudarme por favor, porque no logro ver el error ?


#include <windows.h>

int getSecureUserProfile(unsigned char* up);

int main(int argc, char* argv)
{
    unsigned char* up = NULL;
    if (getSecureUserProfile(up))
    {
      printf("Fuera:%s\n",up);
      free(up);
    }
   
   
}

int getSecureUserProfile(unsigned char* up)
{
  int ret;
  unsigned int tam;
 
  ret = 0;
  tam = GetWindowsDirectory(NULL, 0);
 
  up = (unsigned char*) malloc (tam * sizeof(*up));
 
  if (up != NULL)
  {
      GetWindowsDirectory(up, tam);
      ret = 1;
      printf("Dentro:%s\n",up);
  }

  return ret;
 
}


#11
Hola, preocupado por la seguridad, estoy leyendo sobre el uso de CreateFile, pero no entiendo realmente cuál es el problema, y cómo podría explotarse.
Aquí está la información:

https://buildsecurityin.us-cert.gov/bsi-rules/home/g1/717-BSI.html


Por favor alguien podría explicarme.