norbix (Ex-Member)
Newbie
Messaggi: 15
Iscritto: 14/09/2008
|
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 http://msdn.microsoft.com/en-us/library/ms683597(VS.85).aspx), e volendo pure il codice assembly, abbastanza corto
Codice sorgente - presumibilmente Windows |
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
|
|
GoLDBeRG (Ex-Member)
Expert
Messaggi: 331
Iscritto: 19/12/2005
|
difficile come domanda... credo sia troppo specifica perche tu possa trovare qui una risposta....
|
|
manvb.net (Member)
Guru
Messaggi: 663
Iscritto: 28/01/2008
|
La maggior parte delle WinApi si trova in kernel32.dll e user32.dll in Windows->System32.
Ultima modifica effettuata da manvb.net il 16/07/2009 alle 23:33 |
|
norbix (Ex-Member)
Newbie
Messaggi: 15
Iscritto: 14/09/2008
|
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 il 17/07/2009 alle 1:29 |
|
manvb.net (Member)
Guru
Messaggi: 663
Iscritto: 28/01/2008
|
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 il 17/07/2009 alle 3:29 |
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
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.
|
|
GoLDBeRG (Ex-Member)
Expert
Messaggi: 331
Iscritto: 19/12/2005
|
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...
http://www.pinvoke.net/
trovato questo sito ti aiuterà di certo
|
|
norbix (Ex-Member)
Newbie
Messaggi: 15
Iscritto: 14/09/2008
|
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
|
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Non ho capito il problema ... la funzione
InterlockedExchangeAdd
e' all'indirizzo (relativo) 0x00009856 della DLL (per quanto riguarda XP SP3).
In dettaglio, indirizzi (base dll = 0x7C800000), opcodes e istruzioni sono queste
Codice sorgente - presumibilmente Windows |
7C809856 8B 4C 24 04 mov ecx,dword ptr [esp+4]
7C80985A 8B 44 24 08 mov eax,dword ptr [esp+8]
7C80985E F0 0F C1 01 lock xadd dword ptr [ecx],eax
7C809862 C2 08 00 ret 8
|
Cosa non trovi ...?
Ultima modifica effettuata da theprogrammer il 17/07/2009 alle 21:17 |
|