comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[C] Explorando la IT

  • 11 Respuestas
  • 3583 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado mr.blood

  • *
  • Underc0der
  • Mensajes: 73
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
  • Skype: red_ink@hotmail.es
« en: Mayo 14, 2013, 02:40:21 am »
Pues traigo un programa que busca X funcion en X libreria en su propia Import Table. No hay mucha explicacion. Esta bastante chapucero solo queria que pudieran ver un codigo sencillo que haga esto.

Código: C
  1. #include <string.h>
  2. #include <stdio.h>
  3. #include <windows.h>
  4.  
  5. int main()
  6. {
  7.         const char libreria[]="KERNEL32.dll";
  8.         const char funcion[]="ExitProcess";
  9.         DWORD image_base=(DWORD)GetModuleHandleA(0);
  10.         PIMAGE_DOS_HEADER DOS;
  11.         PIMAGE_NT_HEADERS NT;
  12.         PIMAGE_IMPORT_DESCRIPTOR IT;
  13.         PIMAGE_IMPORT_BY_NAME *IMPORTED_FUNCTIONS;
  14.         PIMAGE_THUNK_DATA Funcion;
  15.         DWORD *IMPORTED_DLL_NAME;
  16.         DWORD *IMPORTED_FUNCTION_NAME;
  17.         unsigned int i=0;
  18.        
  19.         DOS=(PIMAGE_DOS_HEADER)image_base;
  20.         NT=(PIMAGE_NT_HEADERS)(DOS->e_lfanew + image_base);
  21.         IT=(PIMAGE_IMPORT_DESCRIPTOR)(NT->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress + image_base);
  22.         IMPORTED_DLL_NAME=(DWORD *)(IT->Name + image_base);
  23.        
  24.         while( (IT->Name) != 0 )
  25.         {
  26.                 IMPORTED_DLL_NAME=(DWORD *)(IT->Name + image_base);
  27.                 if(!You are not allowed to view links. Register or Login((char *)IMPORTED_DLL_NAME, libreria))
  28.                 {
  29.                         You are not allowed to view links. Register or Login("%s\n", (char *)IMPORTED_DLL_NAME);
  30.                         break;
  31.                 }
  32.                 IT++;
  33.         }
  34.        
  35.         IMPORTED_FUNCTIONS=(PIMAGE_IMPORT_BY_NAME *)(IT->Characteristics + image_base);
  36.        
  37.         for(i=0;;i++)
  38.         {
  39.                 IMPORTED_FUNCTION_NAME=(DWORD *)((*IMPORTED_FUNCTIONS)->Name + image_base);
  40.                 if(((*IMPORTED_FUNCTIONS)!=0) && (!You are not allowed to view links. Register or Login((char *)IMPORTED_FUNCTION_NAME, funcion)))
  41.                 {
  42.                         You are not allowed to view links. Register or Login("\t%s\n", (char *)IMPORTED_FUNCTION_NAME);
  43.                         break;
  44.                 }
  45.                 IMPORTED_FUNCTIONS++;
  46.         }
  47.        
  48.         Funcion=(PIMAGE_THUNK_DATA)(IT->FirstThunk + image_base);
  49.         Funcion+=i;
  50.         You are not allowed to view links. Register or Login("\t\tDireccion funcion: %p \t Addr en IT: %p\n", *Funcion, Funcion);
  51.         You are not allowed to view links. Register or Login();
  52.         return 0;
  53. }
  54.  

Sa1uDoS
« Última modificación: Octubre 28, 2013, 09:19:11 am por Expermicid »

Desconectado Juan

  • *
  • Underc0der
  • Mensajes: 159
  • Actividad:
    0%
  • Reputación 0
  • Ex-Drinky
    • Ver Perfil
« Respuesta #1 en: Mayo 14, 2013, 07:42:28 am »
Código: C
  1. const char libreria[]="USER32.dll";
  2.             const char funcion[]="MessageBoxA";

 ::) ::) ::) ::)

plof  :-\

Desconectado mr.blood

  • *
  • Underc0der
  • Mensajes: 73
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
  • Skype: red_ink@hotmail.es
« Respuesta #2 en: Mayo 14, 2013, 11:19:31 am »
Logico... el codigo no llama esa API por lo que no esta en la Import Table. Este codigo lee SU PROPIO IMPORT TABLE.

Utilizala en cualquier punto del codigo y deberia funcionar. ExitProcess la importan todos los programas bajo Windows ;).

Sa1uDoS

Desconectado Juan

  • *
  • Underc0der
  • Mensajes: 159
  • Actividad:
    0%
  • Reputación 0
  • Ex-Drinky
    • Ver Perfil
« Respuesta #3 en: Mayo 14, 2013, 01:24:13 pm »
Código: C
  1.     #include <string.h>
  2.     #include <stdio.h>
  3.     #include <windows.h>
  4.  
  5.     int main()
  6.     {
  7.             const char libreria[]="USER32.dll";
  8.             const char funcion[]="MessageBoxA";
  9.             DWORD image_base=(DWORD)GetModuleHandleA(0);
  10.             PIMAGE_DOS_HEADER DOS;
  11.             PIMAGE_NT_HEADERS NT;
  12.             PIMAGE_IMPORT_DESCRIPTOR IT;
  13.             PIMAGE_IMPORT_BY_NAME *IMPORTED_FUNCTIONS;
  14.             PIMAGE_THUNK_DATA Funcion;
  15.             DWORD *IMPORTED_DLL_NAME;
  16.             DWORD *IMPORTED_FUNCTION_NAME;
  17.             unsigned int i=0;
  18.  
  19.             DOS=(PIMAGE_DOS_HEADER)image_base;
  20.             NT=(PIMAGE_NT_HEADERS)(DOS->e_lfanew + image_base);
  21.             IT=(PIMAGE_IMPORT_DESCRIPTOR)(NT->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress + image_base);
  22.             IMPORTED_DLL_NAME=(DWORD *)(IT->Name + image_base);
  23.  
  24.             while( (IT->Name) != 0 )
  25.             {
  26.                     IMPORTED_DLL_NAME=(DWORD *)(IT->Name + image_base);
  27.                     if(!You are not allowed to view links. Register or Login((char *)IMPORTED_DLL_NAME, libreria))
  28.                     {
  29.                             You are not allowed to view links. Register or Login("%s\n", (char *)IMPORTED_DLL_NAME);
  30.                             break;
  31.                     }
  32.                     IT++;
  33.             }
  34.  
  35.             IMPORTED_FUNCTIONS=(PIMAGE_IMPORT_BY_NAME *)(IT->Characteristics + image_base);
  36.  
  37.             for(i=0;;i++)
  38.             {
  39.                     IMPORTED_FUNCTION_NAME=(DWORD *)((*IMPORTED_FUNCTIONS)->Name + image_base);
  40.                     if(((*IMPORTED_FUNCTIONS)!=0) && (!You are not allowed to view links. Register or Login((char *)IMPORTED_FUNCTION_NAME, funcion)))
  41.                     {
  42.                             You are not allowed to view links. Register or Login("\t%s\n", (char *)IMPORTED_FUNCTION_NAME);
  43.                             break;
  44.                     }
  45.                     IMPORTED_FUNCTIONS++;
  46.             }
  47.  
  48.             Funcion=(PIMAGE_THUNK_DATA)(IT->FirstThunk + image_base);
  49.             Funcion+=i;
  50.             You are not allowed to view links. Register or Login("\t\tDireccion funcion: %p \t Addr en IT: %p\n", *Funcion, Funcion);
  51.             You are not allowed to view links. Register or Login();
  52.             return 0;
  53.  
  54.             MessageBoxA(0,0,0,0);
  55.     }
  56.  

Lo he probado correctamente y no funciona.

un saludo!

Desconectado mr.blood

  • *
  • Underc0der
  • Mensajes: 73
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
  • Skype: red_ink@hotmail.es
« Respuesta #4 en: Mayo 14, 2013, 01:48:37 pm »
Pues no se mDrinky, ahora estoy sin ningun Windows, cuando pueda lo miro, aunque las pruebas que hice yo funcionó todo bien.

Por favor, que alguien mas lo pruebe y comente si no le funciona...

Sa1uDoS

Desconectado Karcrack

  • *
  • Underc0der
  • Mensajes: 87
  • Actividad:
    0%
  • Reputación 0
  • Se siente observado ¬¬'
    • Ver Perfil
« Respuesta #5 en: Mayo 14, 2013, 02:24:16 pm »
@mDrinky: Revisa la IAT del ejecutable, sospecho que el compilador ha sido más listo que tú y ha quitado todo lo que hay después del return 0; xD
I code for $$$.

(PGP ID 0xCC050E77)
ASM, C, C++, VB6... skilled [malware] developer

Desconectado Juan

  • *
  • Underc0der
  • Mensajes: 159
  • Actividad:
    0%
  • Reputación 0
  • Ex-Drinky
    • Ver Perfil
« Respuesta #6 en: Mayo 14, 2013, 02:53:22 pm »
You are not allowed to view links. Register or Login
@mDrinky: Revisa la IAT del ejecutable, sospecho que el compilador ha sido más listo que tú y ha quitado todo lo que hay después del return 0; xD


 :o :o :o :o :o :o :o :o :-[ :-[ :-[ :-[ :-[ :-[


Efectivamente era eso... pero no veo el porque no lo compila, tendría que compilarlo desde mi punto de vista... Esto en ASM no pasa jajajaj

Desconectado mr.blood

  • *
  • Underc0der
  • Mensajes: 73
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
  • Skype: red_ink@hotmail.es
« Respuesta #7 en: Mayo 14, 2013, 03:02:39 pm »
WTF?! No contabas con la optimizacion de codigo del compilador? :P Ahora ya te funciona?

Ni me fije que estaba despues del return, bien visto Karcrack!

Es que si en ASM te optimizan el codigo... cagate lorito! xD

Sa1uDoS

Desconectado Karcrack

  • *
  • Underc0der
  • Mensajes: 87
  • Actividad:
    0%
  • Reputación 0
  • Se siente observado ¬¬'
    • Ver Perfil
« Respuesta #8 en: Mayo 14, 2013, 03:03:23 pm »
El compilador es terriblemente inteligente y es capaz de ver que dentro del scope (ámbito) actual ese código no será jamás ejecutado. Puedes desactivar casi todas las optimizaciones del compilador y obligarle a compilar a piñón.
Estuve estudiando el tema de los compiladores y es realmente interesante. Te recomiendo la lectura de: You are not allowed to view links. Register or Login de Alfred Aho, Ravi Sethi, Jeffrey Ullman.

En ASM no pasa porque se trata de un ensamblador. Algún HLA (High Level Assambly) hace estas optimizaciones y muchas otras.

Saludos :D
I code for $$$.

(PGP ID 0xCC050E77)
ASM, C, C++, VB6... skilled [malware] developer

Desconectado Juan

  • *
  • Underc0der
  • Mensajes: 159
  • Actividad:
    0%
  • Reputación 0
  • Ex-Drinky
    • Ver Perfil
« Respuesta #9 en: Mayo 14, 2013, 03:14:13 pm »
La verdad que no sabia que el compilador de C hacía eso, no os voy a engañar  :)

De lo que me gustaría aprender es más de ensamblador a 16 bits, y como obtienen los datos del PC en 16 bits y eso.... estoy buscando por ahí algun libro gratis en pdf donde expliquen todo esto.



Desconectado mr.blood

  • *
  • Underc0der
  • Mensajes: 73
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
  • Skype: red_ink@hotmail.es
« Respuesta #10 en: Mayo 14, 2013, 03:28:53 pm »
Tiene buena pinta la lectura Karcrack, le echaré un ojo ;).

En ASM no optimiza (o no debería) porque no se compila.


Si quieres trabajar mas con hardware, mira el código de Luxur o intenta hacer algo así desde 0.
mDrinky nunca pensaste en aprender a programar PICs? Creo que te gustaría... Y si quieres llevarlo a una placa de vidrio tampoco es caro el material ;).

Sa1uDoS

Desconectado Juan

  • *
  • Underc0der
  • Mensajes: 159
  • Actividad:
    0%
  • Reputación 0
  • Ex-Drinky
    • Ver Perfil
« Respuesta #11 en: Mayo 14, 2013, 04:53:03 pm »
Es que el mayor problema que tengo a la hora de leer información es que esta en ingles... y no tengo ni idea de ingles  :-[ Este año que biene me apuntare a la academia haber si obtengo resultados jajajajajajjaa

un saludo.

 

¿Te gustó el post? COMPARTILO!