Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Windows - posizione WINAPI
Forum - Windows - posizione WINAPI

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
norbix (Ex-Member)
Newbie


Messaggi: 15
Iscritto: 14/09/2008

Segnala al moderatore
Postato alle 23:10
Giovedì, 16/07/2009
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

  1. mov ecx, [esp+4]
  2. mov eax, [esp+8]
  3. lock xadd [ecx], eax
  4. 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

PM Quote
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 23:20
Giovedì, 16/07/2009
difficile come domanda... credo sia troppo specifica perche tu possa trovare qui una risposta....

PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 23:32
Giovedì, 16/07/2009
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
PM Quote
Avatar
norbix (Ex-Member)
Newbie


Messaggi: 15
Iscritto: 14/09/2008

Segnala al moderatore
Postato alle 1:13
Venerdì, 17/07/2009
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


norbix ha allegato un file: kernel32.dll.zip (1370256 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da norbix il 17/07/2009 alle 1:29
PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 3:28
Venerdì, 17/07/2009
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
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 7:43
Venerdì, 17/07/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.

PM Quote
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 8:36
Venerdì, 17/07/2009
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

PM Quote
Avatar
norbix (Ex-Member)
Newbie


Messaggi: 15
Iscritto: 14/09/2008

Segnala al moderatore
Postato alle 17:43
Venerdì, 17/07/2009
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

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 21:05
Venerdì, 17/07/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

  1. 7C809856 8B 4C 24 04      mov         ecx,dword ptr [esp+4]
  2. 7C80985A 8B 44 24 08      mov         eax,dword ptr [esp+8]
  3. 7C80985E F0 0F C1 01      lock xadd   dword ptr [ecx],eax
  4. 7C809862 C2 08 00         ret         8



Cosa non trovi ...?

Ultima modifica effettuata da theprogrammer il 17/07/2009 alle 21:17
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo