# Export Table --- Kernell32.dll --- GetProcAddress #

cs_joanna Messages postés 3 Date d'inscription dimanche 11 mai 2003 Statut Membre Dernière intervention 11 mai 2003 - 11 mai 2003 à 13:03
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 - 11 mai 2003 à 18:33
Voici le code qui devrait récupérer l'adresse de la fonction "GetProcessAddress" connaissant l'ImageBase du module "kernel32.dll".

Malheureusement à la ligne ### le programme plante. Tout ce que je sais pour le moment c'est qu'une exception est levée parce que je tente de lire à une adresse non valide.

Ce code ayant été récupéré d'un tutorial d'un pro en asm et cracking, je ne vois pas ce qui cloche.

_______________________________________________________
;ModuleA=ImageBase du module kernel32.dll
;ExportTableA=Adresse absolue de la table des exportations
;AddFunc=Adresse absolue du tableau contenant les RVAs des fonctions
;AddName=Adresse absolue du tableau contenant les RVAs des noms des fonctions
;AddOdr=Adresse absolue du tableau contenant les numéros d'ordre des fonctions
;limit=nombre de fonctions exportées par le module
;Nindex=Adresse absolue dans le tableau contenant les RVAs des noms des fonctions

------------------------------------------------------------------
;on récupère les infos essentielles depuis la table des exportations

;export table
;esi=ModuleA
mov esi,[esi+78h]
add esi,ModuleA
mov edx,Offset ExportTableA
mov [edx],esi

add esi,10h

;nBase
lodsd
mov edx,Offset base
mov [edx],eax

;NumberOfNames
lodsd
lodsd
mov edx,Offset limit
mov [edx],eax

;AddressOfFonctions
lodsd
add eax,ModuleA
mov edx,Offset AddFunc
mov [edx],eax

;AddressOfNames
lodsd
add eax,ModuleA
mov edx,Offset AddName
mov [edx],eax

;AddressOfNameOrdinals
lodsd
add eax,ModuleA
mov edx,Offset AddOrd
mov [edx],eax


--------------------------------------------------------------
;First_Api db 'GetProcAddress',0

Search_Apis:

mov esi,AddName
mov edx,offset Nindex
mov [edx],esi

mov edi,[esi]
add edi,ModuleA
mov ecx,0
mov ebx,offset First_Api



Try_Again:
mov esi,ebx


Match_Byte:
cmpsb
jne Next_One
cmp byte ptr [edi],0
je Got_It
jmp Match_Byte


Next_One:
inc ecx
cmp ecx,limit
je Fin

mov edx,offset Nindex
add dword ptr [edx],4

mov esi,Nindex
mov edi,[esi]
add edi,ModuleA
jmp Try_Again

--------------------------------------------------------------
;La fonction "GetProcAddress" est bien exportée par le module

Got_It:
shl ecx,1
mov esi,AddOrd
add esi,ecx
xor eax,eax

mov ax,word ptr [esi] #### ici ça plante ####

shl eax,2
mov esi,AddFunc
add esi,eax
mov edi,[esi]
add edi,ModuleA


mov edx,offset First_Api_A
mov [edx],edi

2 réponses

cs_joanna Messages postés 3 Date d'inscription dimanche 11 mai 2003 Statut Membre Dernière intervention 11 mai 2003
11 mai 2003 à 15:38
Problème résolu !!!

Le fait d'avoir mis des MessageBox en guise de test écrase la valeur du registre ecx contenant l'index de la fonction recherchée (les MessageBox n'apparaissent pas dans la source que j'ai postée)
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
11 mai 2003 à 18:33
Bah alors !!!

Core Breaker :)
0
Rejoignez-nous