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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ... 28
11  Programación / Programación C/C++ / Re: Un puntero ocupa memoria? en: 29 Junio 2012, 05:26 am
Hola

El número de bytes que necesita una variable de tipo apuntador no depende del tipo de dato que apunta, un apuntador siempre necesitará 4 bytes

O.o ? si es en 32 bits 4, si es en 64 bits 8... un puntero representa una dirección de memoria, lee algo de direcciones de memoria...

S2
12  Seguridad Informática / Análisis y Diseño de Malware / Re: Ejecución de Archivos desde Memoria [Base Relocation] en: 9 Junio 2012, 00:00 am
El ".dll" no es necesario para llamar a GetModuleHandle ni a LoadLibrary, si no se especifica extensión la API toma por defecto siempre ".dll" :) .

si y no, lo que pasa es que tengo mi custom GetModuleHandle también y para no tener que comprobar dos veces en la misma busco la dll con el nombre completo :P, pero si, si usás el GetModuleHandle original no es necesario...

S2
13  Programación / Ingeniería Inversa / Re: Anti breakpoint? en: 8 Junio 2012, 06:17 am
sin entrar al modo kernel... en modo usuario tenes varias formas, algunas ya descriptas... para los bp comunes tenes la opción de generar un hash del code y cada x tiempo comprobar que sea igual, para los MBP puedes comprobar (como ya dijeron) los permisos sobre los espacios de memoria, y para los HBP comprobar el registro CONTEXT, fuera de eso, creo que lo mejor para evitar intrusiones es evitar que ocurran (es mejor prevenir que curar... :P ) por lo que el tema sería evitar que puedan abrir tu programa con un depurador...

S2
14  Seguridad Informática / Análisis y Diseño de Malware / Re: Ejecución de Archivos desde Memoria [Base Relocation] en: 8 Junio 2012, 05:56 am
hay dos problemas con el código, 1º que no tiene en cuenta los imports que usan ordinal en vez de nombres y el segundo son los Forwarder imports

acá tienen una versión que hice de un "full"  GetProcAddress manual:

Código
  1. FARPROC WINAPI GetProcAddress(HMODULE hModule,LPCSTR lpProcName){
  2.  DWORD index,dwExportSize,dwOrdinal=0;
  3.  if(!hModule)return NULL;
  4.  PIMAGE_DOS_HEADER pDosHeader;
  5.  PIMAGE_NT_HEADERS pNTHeader;
  6.  PIMAGE_EXPORT_DIRECTORY pExportDir;
  7. pDosHeader=(PIMAGE_DOS_HEADER)hModule;
  8. if(pDosHeader->e_magic!=IMAGE_DOS_SIGNATURE)
  9. return NULL;
  10.  pNTHeader=RVAPTR(PIMAGE_NT_HEADERS,pDosHeader,pDosHeader->e_lfanew);
  11. if(pNTHeader->Signature!=IMAGE_NT_SIGNATURE)
  12. return NULL;
  13.  pExportDir=RVAPTR(PIMAGE_EXPORT_DIRECTORY,pDosHeader,pNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
  14.  dwExportSize=pNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].Size;
  15.  if(!pExportDir)
  16.    return NULL;
  17.  PCHAR* pszName=RVAPTR(PCHAR*,pDosHeader,pExportDir->AddressOfNames);
  18.  PDWORD pdwAddress=RVAPTR(PDWORD,pDosHeader,pExportDir->AddressOfFunctions);
  19.  PWORD pwOrdinals=RVAPTR(PWORD,pDosHeader,pExportDir->AddressOfNameOrdinals);
  20.  if(!pszName||!pwOrdinals||!pdwAddress)
  21.    return NULL;
  22.  if(HIWORD(lpProcName)==0){
  23.    // Look up by ordinal
  24.    dwOrdinal=(LOWORD((DWORD)lpProcName)-pExportDir->Base);
  25.  }else{
  26.    // Look up by name
  27.    for(index=0;index<pExportDir->NumberOfNames;index++){
  28.      if(!lstrcmpA(RVAPTR(PCHAR,pDosHeader,pszName[index]),lpProcName)){
  29.        dwOrdinal=pwOrdinals[index];
  30.        break;
  31.      }
  32.    }
  33.  }
  34.  //Get Func Address
  35.  DWORD dwFunction=RVAPTR(DWORD,pDosHeader,pdwAddress[dwOrdinal]);
  36.  // Let's Check if is Forwarder
  37.  if((dwFunction>(ULONG_PTR)pExportDir)&&(dwFunction<((ULONG_PTR)pExportDir+dwExportSize))){
  38.    CHAR ForwarderDllName[MAX_PATH],*ForwardImportName;USHORT len;
  39.    ForwardImportName=strchr((LPSTR)dwFunction,'.');
  40.    len=ForwardImportName++-(LPSTR)dwFunction;
  41.    strncpy(ForwarderDllName,(LPSTR)dwFunction,len);
  42.    strcpy(&ForwarderDllName[len],".dll");
  43.    // Find the module associated to it (should be already loaded)
  44.    return GetProcAddress(GetModuleHandleA(ForwarderDllName),ForwardImportName);
  45.  }
  46.  return (FARPROC)dwFunction;
  47. }

capaz lo pueden adaptar...

S2
15  Programación / Programación C/C++ / Re: ayuda con VisualStudio2010,para que es "L" y "_T" y como lo arreglo[SOLUCIONADO] en: 1 Junio 2012, 04:45 am
hola

una pregunta, casi siempre e programado con MingW en windows, ahora quise usar Visual Studio 2010 y dejar GCC para linux

quise hacer un hook rapido a MessageBoxA, para ejecutar el clasico mensaje de hola mundo y probar como funciona, ya que siempre trabaje con codeblocks

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <Windows.h>
  4.  
  5. typedef int (CALLBACK *MSBX)(HWND, LPCTSTR, LPCTSTR, UINT);
  6.  
  7. int main(int *argv, char *argc){
  8.  
  9. HMODULE han;
  10. MSBX msgbox;
  11.  
  12. han = LoadLibrary(L"User32.dll");
  13. msgbox = (MSBX)GetProcAddress(han, "MessageBoxA");
  14.  
  15. msgbox(NULL,"mensaje","exito!!", NULL);
  16.  
  17. }

pero tengo una duda, como arreglo o cual es la nueva forma de llamar ciertas cosas por ejemplo

LoadLibrary, asi encontre que tenia que hacerlo funcionar

Código:
han = LoadLibrary(L"User32.dll");

pero para que es esa "L"?...
Código:
han = LoadLibrary(L"User32.dll");

ahora me aparece marcado esto

Código:
msgbox(NULL,"mensaje","exito!!", NULL);

"mensaje" y "exito!!"

si lo dejo asi, me aparece bien el mensaje, pero para quitar el mensaje de error, tengo que poner igual "L", tambien encontre que con "_T"... pero no me funciono

el mensaje de error es sobre puntero a char* que no es compatible con LPCTSTR

y con MingW y codeblocks nunca tuve ese problema, que podria hacer para solucionarlo? y si puede solucionar permanentemente o es algo que siempre tendre que ver como arreglarlo?

salu2

el problema es la definición que usás para el tipo de argumento que vas a utilizar:

LPCTSTR -> es un formato "variable" dependiendo si está o no definido UNICODE

si está definido UNICODE (dentro de los parámetros del proyecto lo encontrás) entonces la definición

LPCTSTR -> se traduce en -> LPCWSTR (puntero a wide string)

si no está definido UNICODE entonces

LPCTSTR -> se traduce en -> LPCSTR (puntero a ansi string)

y en tu definición llamada a getprocaddres:

Código
  1. msgbox = (MSBX)GetProcAddress(han, "MessageBoxA");

vos buscás la versión ansi (MessageBoxA)

también existe la versión wide

Código
  1. msgbox = (MSBX)GetProcAddress(han, "MessageBoxW");

por lo tanto, si queres que tu code se compatible tanto con wide string como con ansi string, te convendría hacer algo como:

Código
  1. #ifdef UNICODE
  2. msgbox = (MSBX)GetProcAddress(han, "MessageBoxW");
  3. #else
  4. msgbox = (MSBX)GetProcAddress(han, "MessageBoxA");
  5. #endif

entonces podrías llamar a tu función de la forma:

Código
  1. msgbox(NULL,:_T("mensaje"),_T("exito!!"), NULL);

sino, si solo te interesa utilizar ansi, tendrías que redefinir tu puntero a función:

Código
  1. typedef int (CALLBACK *MSBX)(HWND, LPCSTR, LPCSTR, UINT);

S2
16  Programación / Programación C/C++ / Re: convertir un char a tchar, wchar etc. en: 26 Abril 2012, 18:25 pm
si lo vas a imprimir en la consola OBVIO solo se imprimira la 1ra letra (si existiese) pues cada letra puede que este separada por bytes '\0' (nulos) es decir los que indican el final de una cadena ANSI... prueba a mostrarla con un MessageBoxW()... o checa la memoria...

no necesariamente, puedes escribir texto unicode en la consola usando "%ws" (WideString):

Código
  1. printf("%ws",L"texto unicode");

S2
17  Programación / Programación C/C++ / Re: Problema con Cast en Visual C en: 4 Abril 2012, 03:13 am
Karman XD k raro encontrarte por ak
sólo agarré tu code y lo puse en el visual c y lo compilé así,
sólo un cambio hice, pasa que lo hice en el Visual Studio 6.
vos seguro usás el 2010, lo tengo para instalar todavia :/

Código:
class XX{
public:
};
 
class XY{
public:
};
 
//typedef void (XX::* pfun)(void);
typedef int (XX::* pfun)(int);

class X:public XX,XY{
public:
int ff(int a){
return a;
}
static pfun f;
static struct _t{
pfun f;
}t;
};
 
pfun X::f= pfun(&X::ff);
struct X::_t X::t={pfun(&X::ff)};

int main(){

//ilegal dentro de este ámbito
//pfun X::f=pfun(&X::ff);
//struct X::_t X::t={pfun(&X::ff)};


return 0;

}

ya lo solucioné... al parecer en el VS 2010 hay que forzar dos casts... uno de método a clase y otro de método a método... (aunque es medio chot...)

Código
  1. class XX{
  2. public:
  3. };
  4.  
  5. class XY{
  6. public:
  7. };
  8.  
  9. typedef void (XX::*pfun)(void);
  10.  
  11. class X:public XX,XY{
  12. public:
  13. int ff(int a){
  14. return a;
  15. }
  16. static pfun f;
  17. static struct _t{
  18. pfun f;
  19. }t;
  20. };
  21.  
  22. pfun X::f=pfun((int(XX::*)(int))&X::ff);//??????
  23. struct X::_t X::t={pfun((int(XX::*)(int))&X::ff)};//??????
  24.  
  25.  
  26. int main(int argc, char* argv[]){
  27. X a;
  28. a.t.f=pfun((int(XX::*)(int))&X::ff);
  29. return 0;
  30. }

EDIT: (Otro Caso)

Código
  1. class XX;
  2.  
  3. typedef void (XX::*pfun)(void);
  4.  
  5. class XX{
  6. public:
  7. void set(pfun fun){
  8. f=fun;
  9. }
  10. pfun f;
  11. };
  12.  
  13. class XZ{
  14. };
  15.  
  16. class XW{
  17. };
  18.  
  19. class XY:public XZ,XW{
  20. };
  21.  
  22. class X:public XY{
  23. public:
  24. X(){
  25. //a.set(pfun(&X::ff));//tira el mismo error anterior
  26. a.set(pfun((void(XZ::*)(void))(&X::ff)));
  27. }
  28.  
  29. void ff(void){}
  30. static XX a;
  31. };

a ver si alguien conoce otra solución...

S2
18  Programación / Programación C/C++ / Problema con Cast en Visual C en: 30 Marzo 2012, 22:23 pm
Buenas, estoy haciendo un programa con clases y me encontré con una incompatibilidad muy rara de Visual C, el siguiente código funciona perfectamente con GCC pero con Visual C me da error :S

Código
  1. class XX{
  2. public:
  3. };
  4.  
  5. class XY{
  6. public:
  7. };
  8.  
  9. typedef void (XX::*pfun)(void);
  10.  
  11. class X:public XX,XY{
  12. public:
  13. int ff(int a){
  14. return a;
  15. }
  16. static pfun f;
  17. static struct _t{
  18. pfun f;
  19. }t;
  20. };
  21.  
  22. pfun X::f=pfun(&X::ff);//??????
  23. struct X::_t X::t={pfun(&X::ff)};//??????

Citar
1>main.cpp(28): error C2440: '<function-style-cast>' : no se puede realizar la conversión de 'int (__thiscall X::* )(int)' a 'pfun'
1>          Los punteros a miembros tienen distintas representaciones; no se puede realizar la conversión entre ellos
1>main.cpp(29): error C2440: '<function-style-cast>' : no se puede realizar la conversión de 'int (__thiscall X::* )(int)' a 'pfun'
1>          Los punteros a miembros tienen distintas representaciones; no se puede realizar la conversión entre ellos

si utilizo herencia simple funciona... el tema es con la herencia múltiple:

Código
  1. class X:public XX,XY

alguno que utilice ese compilador me puede tirar un cable?

S2
19  Programación / Programación C/C++ / Re: Como saber que APIs estan hookeadas? en: 7 Febrero 2012, 05:16 am
fijate este código, sirve para detectar algunos tipos de hooks (en modo usuario) inyectando una dll (aunque también se puede hacer sin inyectar)...

Hook Finder

S2
20  Programación / Programación C/C++ / Re: Razones para no usar Dev-C++ en: 7 Febrero 2012, 05:04 am
Pues debido a que uso Dev C++, me veo obligado a entrar en el tema, no niego nada de lo que digas porque no se nada sobre compiladores y si están actualizados o no ,etc.

Cuál recomendáis, yo quiero un editor y compilador en el mimso programa, todo junto, para Windows. La interfaz me da igual, todo es acostumbrarse

code::blocks fue y es su actual reemplazante... la única diferencia es que está en ingles...

S2
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ... 28
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines