Oppure

Loading
16/07/09 21:10
norbix
salve non vedo forum migliore di questo per condividere il mio "problema"
devo modificare gli argomenti passati ad una WINAPI tramite dirottamento (detouring) della WINAPI stessa, conosco il nome della WINAPI (InterlockedExchangeAdd msdn.microsoft.com/en-us/library/…(VS.85).aspx), e volendo pure il codice assembly, abbastanza corto

mov ecx, [esp+4]
mov eax, [esp+8]
lock xadd [ecx], eax
retn 8


quello che voglio fare io è accedere tramite un debugger (uso ollydbg, ho comunque iniziato da poco in questo ambito), al codice macchina delle varie WINAPI, ollydbg può collegarsi ai processi o avviare DLL per ottenerne il codice macchina, quindi vorrei sapere dove sono queste benedette WINAPI.. grazie per le risposte, saluti
aaa
16/07/09 21:20
GoLDBeRG
difficile come domanda... credo sia troppo specifica perche tu possa trovare qui una risposta....
aaa
16/07/09 21:32
manvb.net
La maggior parte delle WinApi si trova in kernel32.dll e user32.dll in Windows->System32.
Ultima modifica effettuata da manvb.net 16/07/09 21:33
aaa
16/07/09 23:13
norbix
visto goldberg? l'ho trovata =P

edit: già, però anche se avevo come questo presentimento, ora che ne sono certo perchè ho pure trovato la stringa del nome della WINAPI in kernel32.dll, non so come trovare l'inizio della subroutine, le stringhe sono tutte dichiarate all'inizio, e non vicino alla corrispondente subroutine, di conseguenza io, che ho appena iniziato con il debugging, sono fregato, qui c'è kernel32.dll disassemblato, di windows xp professional sp2
Ultima modifica effettuata da norbix 16/07/09 23:29
aaa
17/07/09 1:28
manvb.net
Come avrai notato la maggior parte delle api si trova in ntdll.dll (sempre in System32).
Apri quella dll con ollydbg e clicca col destro in un punto qualsiasi del codice, poi vai su Search For -> Command e inserisci una linea con questo criterio:

CALL ntdll.api_cercata
es:
CALL ntdll.RtlInitUnicodeString

poi esegui la ricerca. A ricerca terminata verrà evidenziata una linea, allora premi invio e verrai magicamente trasportato nel codice dell'api. Puoi utilizzare questo metodo anche per kernel32 e user32.

Stai attento però perchè le api sono protette da copyright quindi copiare il loro codice è illegale.
Ultima modifica effettuata da manvb.net 17/07/09 1:29
aaa
17/07/09 5:43
theprogrammer
Se usi il tool

Dependency Walker

della Microsoft, hai un semplice elenco di tutte le funzioni di una libreria con il relativo indirizzo di entry point.
aaa
17/07/09 6:36
GoLDBeRG
se non mi sbaglio ce anche un sito che ha tutte le dll con le relative funzioni... oddio come si chiama nn ricordo.... ti installa pure un tool in visual studio...

pinvoke.net/

trovato questo sito ti aiuterà di certo
aaa
17/07/09 15:43
norbix
non riesco a trovarla, ho provato in vari modi, ho anche guardato, le 2 istruzioni seguenti caricano l'indirizzo della subroutine in EBX e successivamente la chiamano

005F7B6A . 8B1D 58116900 MOV EBX,DWORD PTR DS:[<&KERNEL32.Interlo>; kernel32.InterlockedExchangeAdd
005F7BA0 . FFD3 CALL EBX

ho cercato anche il comando "CALL kernel32.Interlo" e varie combinazioni, ma niente, solo "CALL kernel32.InterlockedExchangeAdd" la cerca senza problemi, ma senza trovarla

comunque ora penso di avere capito perchè gli sviluppatori del software che sto debuggando non hanno scritto loro stessi la funzione visto che è così corta: non volevano avere problemi col copiright, giusto? una vera fortuna per me, così posso dirottare la WINAPI senza che il software trovi corruzioni nella propria memoria

sto aspettando che un vecchio amico mi dia delle informazioni, mi sembrava corretto tenere il thread aggiornato visto che potrei non essere l'unico a cui interessa questa cosuccia

a presto
aaa