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
  • 3875 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(!No tienes permisos para ver links. Registrate o Entra con tu cuenta((char *)IMPORTED_DLL_NAME, libreria))
  28.                 {
  29.                         No tienes permisos para ver links. Registrate o Entra con tu cuenta("%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) && (!No tienes permisos para ver links. Registrate o Entra con tu cuenta((char *)IMPORTED_FUNCTION_NAME, funcion)))
  41.                 {
  42.                         No tienes permisos para ver links. Registrate o Entra con tu cuenta("\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.         No tienes permisos para ver links. Registrate o Entra con tu cuenta("\t\tDireccion funcion: %p \t Addr en IT: %p\n", *Funcion, Funcion);
  51.         No tienes permisos para ver links. Registrate o Entra con tu cuenta();
  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(!No tienes permisos para ver links. Registrate o Entra con tu cuenta((char *)IMPORTED_DLL_NAME, libreria))
  28.                     {
  29.                             No tienes permisos para ver links. Registrate o Entra con tu cuenta("%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) && (!No tienes permisos para ver links. Registrate o Entra con tu cuenta((char *)IMPORTED_FUNCTION_NAME, funcion)))
  41.                     {
  42.                             No tienes permisos para ver links. Registrate o Entra con tu cuenta("\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.             No tienes permisos para ver links. Registrate o Entra con tu cuenta("\t\tDireccion funcion: %p \t Addr en IT: %p\n", *Funcion, Funcion);
  51.             No tienes permisos para ver links. Registrate o Entra con tu cuenta();
  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 »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
@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: No tienes permisos para ver links. Registrate o Entra con tu cuenta 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!