elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


  Mostrar Mensajes
Páginas: 1 [2] 3
11  Programación / Programación C/C++ / Re: ayuda CreateProcess con variables de entorno de sistema en: 5 Junio 2010, 13:15 pm
Era error 87, de parámetros.
Ya lo resolví, me ayudaron en el foro de la msdn, me dijeron que CreateEnvironmentBlock siempre devuelve un bloque unicode, así es que me faltaba el flag CREATE_UNICODE_ENVIRONMENT

Al final mi code quedó así:

Código:
#define UNICODE

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

int main()
{   
    LPVOID env_block;   
    if (!CreateEnvironmentBlock(&env_block, 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 = TEXT("");
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|CREATE_UNICODE_ENVIRONMENT|NORMAL_PRIORITY_CLASS, env_block, NULL, &si, &pi);
    if (!b)
    {
          printf("No CreateProcess. Error:%d\n",GetLastError());
    }
   
    WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
    DestroyEnvironmentBlock(env_block);
   
    getchar();
}
12  Programación / Programación C/C++ / ayuda CreateProcess con variables de entorno de sistema en: 5 Junio 2010, 07:32 am
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.

Código:
#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?
13  Programación / Scripting / Re: CarlitosSoft Batch Hide Compiler 1.2 en: 3 Junio 2010, 06:57 am
Publiqué nueva versión con cosas corregidas de la versión anterior.
Actualicé post principal.
14  Programación / Scripting / Re: CarlitosSoft Batch Hide Compiler 1.0 en: 2 Junio 2010, 02:22 am
Listo, por fin una versión 1.0 con la característica antes mencionada.
15  Programación / Programación C/C++ / main para unicode [solucionado] en: 1 Junio 2010, 11:40 am
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:

Código
  1. #define UNICODE
  2.  
  3. #include <windows.h>
  4. #include <stdio.h>
  5.  
  6. int main(int argc, TCHAR* argv[])
  7. {
  8.  
  9.    if (argc == 2)
  10.    {
  11.       HANDLE archivo;
  12.       int error;
  13.  
  14.       archivo = CreateFile(/*TEXT("texto.txt"),*/ argv[1],
  15.                            GENERIC_READ,
  16.                            FILE_SHARE_READ,
  17.                            NULL, // Descriptor de seguridad por defecto
  18.                            OPEN_EXISTING,
  19.                            FILE_ATTRIBUTE_NORMAL,
  20.                            NULL);
  21.  
  22.       error = GetLastError();
  23.       if (error != NO_ERROR) {
  24.          printf("Error: %d\n", error);
  25.       }
  26.       else
  27.       {
  28.          puts("No error");
  29.       }
  30.    }
  31.    else
  32.    {
  33.        puts("Use only one argument");
  34.    }
  35.  
  36.    return 0;
  37.  
  38. }
  39.  
  40.  

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


Código
  1. #ifdef UNICODE
  2. int main()
  3. #else
  4. int main(int argc, UCHAR* argv[])
  5. #endif
  6. {
  7.    #ifdef UNICODE
  8.    TCHAR** argv;
  9.    int argc;
  10.    argv = CommandLineToArgvW(GetCommandLineW(), &argc);
  11.    if (argv == NULL) {
  12.      return ERROR_DESCONOCIDO;
  13.    }
  14.    #endif
  15.  
  16.    int ret;
  17.    ret = mi_funcion(argv[1]);
  18.  
  19.    #ifdef UNICODE
  20.    LocalFree(argv);
  21.    #endif
  22.  
  23.    return ret;
  24. }
  25.  
16  Programación / Scripting / Re: CarlitosSoft Batch Hide Compiler 0.8 en: 1 Junio 2010, 06:16 am
Ahora me doy cuenta de que con dos líneas de código puedo personalizar el ejecutable para poder ejecutarlo en modo: invisible, normal y maximizado.

¿A alguien le interesa esta característica?
17  Programación / Scripting / CarlitosSoft Batch Compiler 1.3 en: 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:
Código:
http://carlitossoft.110mb.com/cbc/
18  Programación / Programación C/C++ / modificar arreglo de cadena de caracteres en: 31 Mayo 2010, 10:18 am
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?

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. char* listado[] = {
  6.        "_:\\mi_listado.txt",
  7.        "_:\\notas.txt",
  8.        "_:\\p.txt"
  9. };
  10.  
  11. int i;
  12.  
  13. for (i=0; i < 3; ++i)
  14. {
  15.     listado[i][0] = 'C';
  16.     printf("%s\n",listado[i]);
  17. }
  18.  
  19.  
  20. }
  21.  
  22.  
19  Programación / Programación C/C++ / No me funciona el unicode en: 29 Mayo 2010, 21:03 pm
Hola estoy usando el ide Dev-C++ para compilar lo siguiente, quiero usar unicode, pero no funciona.

Código
  1. #include <windows.h>
  2.  
  3. #define UNICODE
  4.  
  5. int main(int argc, char *argv[])
  6. {
  7.   TCHAR* ansi_o_unicode;
  8.   WCHAR* unicode;
  9.  
  10.   unicode = L"unicode";
  11.   ansi_o_unicode = TEXT("hola");
  12.  
  13.   return 0;
  14. }
  15.  
eso compila, pero si veo el ejecutable hola no está en unicode.
con un editor hexadecimal se ve así:

Código
  1. hola..u.n.i.c.o.d.e..
  2.  

y si quiero compilar lo siguiente no compila:

Código
  1. #include <windows.h>
  2.  
  3. #define UNICODE
  4.  
  5. int main(int argc, char *argv[])
  6. {
  7.   TCHAR* ansi_o_unicode;
  8.   WCHAR* unicode;
  9.  
  10.   unicode = L"unicode";
  11.   ansi_o_unicode = L"hola";
  12.  
  13.  
  14.   return 0;
  15. }
  16.  

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í:

Código
  1. #ifdef UNICODE
  2. typedef WCHAR TCHAR;
  3. #else
  4. typedef char TCHAR;
  5. #endif
  6.  

¿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.
20  Programación / Programación C/C++ / Re: Extraño error, puedo imprimir el texto pero no copiarlo. en: 29 Mayo 2010, 18:31 pm
gracias. Haciendo pruebas lo solucioné así:

Código
  1. #include <windows.h>
  2.  
  3. UCHAR* getUserSid();
  4.  
  5. int main(int argc, char *argv[])
  6. {
  7.   UCHAR* userSid;
  8.   userSid = getUserSid();
  9.   if (userSid != NULL)
  10.   {
  11.     printf("%s",userSid);
  12.     free(userSid);
  13.   }
  14.   return 0;
  15. }
  16.  
  17. UCHAR* getUserSid()
  18. {
  19.  HANDLE token = NULL;
  20.  DWORD dwBufferSize = 0;
  21.  PTOKEN_USER pTokenUser = NULL;
  22.  HANDLE currentProcess = NULL;
  23.  UCHAR* userSid = NULL;
  24.  
  25.  currentProcess = GetCurrentProcess();
  26.  if (OpenProcessToken(currentProcess, TOKEN_QUERY, &token)) {
  27.     GetTokenInformation(token, TokenUser, NULL, 0, &dwBufferSize);
  28.     pTokenUser = (PTOKEN_USER)malloc(dwBufferSize);
  29.     memset(pTokenUser, 0, dwBufferSize);
  30.     if (GetTokenInformation(token, TokenUser, pTokenUser, dwBufferSize, &dwBufferSize)) {
  31.        if (IsValidSid(pTokenUser->User.Sid)) {
  32.           BOOL WINAPI ConvertSidToStringSidA(PSID, UCHAR*);
  33.           ConvertSidToStringSidA(pTokenUser->User.Sid, (UCHAR*)&userSid);
  34.        }
  35.     }
  36.     free(pTokenUser);
  37.     CloseHandle(token);
  38.  }
  39.  CloseHandle(currentProcess);
  40.  return userSid;
  41. }
  42.  
  43.  
Páginas: 1 [2] 3
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines