Newsgroup: it.comp.programmare.win32
Titolo: monitorare le chiamate API

come faccio a vedere tutte le API che vengono chiamate da un programma
(compilato, non in debug) in esecuzione?
si può fare anche in Win2000?
per le chiavi lette/scritte conoscevo il regmon... ma per le api?
--
ciao
xAERO

 (compilato, non in debug) in esecuzione?
Bella domanda: se trovi dei metodi dicci qualcosa, che sono interessato
anche io. ;-)
In linea di principio scrivendo un driver dovrebbe essere possibile
intercettare certe chiamate di sistema, ma dubito che si possano
intercettare le chiamate alle DLL di sistema in user mode.
---
Bye! Lorenzo Lutti
http://www.geocities.com/SiliconValley/Peaks/6258/


Qualcosa in giro c'e', non mi ricordo dove ma sono sicuro al 99.9% di
aver qualcosa in giro... se vi interessa scartabello nell'hard disk e
vi posto un link.
di sicuro la cosa e' molto piu' facile sotto NT che sotto 9x :=)
 saluti 
garph0

 ha scritto nel messaggio
news:8tjuok$ngjdn$1...@ID-51253.news.dfncis.de...

ADA PRO disassembler intercetta il 99% delle chiamate di sistema.
Ovviamente non sono elencate.
Io lo utilizzo quando faccio del reverse engineering. ;-)
Ciao.
Il Michett@
--

 intercettare le chiamate alle DLL di sistema in user mode.
beh in realta l'api logging (o qualsivoglia altra definizione) e' una
pratica abbastanza consolidata dai tempi in cui winapi-god M. Pietrek in
persona apri' il vaso di pandora dell'api hooking...
Ora  immagino che tu ne conosca il sistema escogitato da Pietrek (e tutte le
variante da questo derivate) e quindi le limitazioni di questo, una su tutte
l'impossibilita' loggare api importate esplicitamente via LoadLibrary +
GetProcAddress (di cui non esiste un'entry nella IT/IAT e il cui binding non
avviene a load-fixup time). Tuttavia estendendo il ragionamento alla base
dell'api hooking si puo' loggare anche queste :
nell'api hooking "classico" l'hooking avviene diciamo sul lato applicativo..
cioe' si patcha il thunk della IAT del programma relativo all'api da hookare
in modo che venga rediretta ad un nostro stub, etc.. chiaramente le api
importate esplicitamente non posseggono un thunk nella IAT in quanto gli
indirizzi vengo direttamente salvati in variabili globali/locali dal codice
del programma.. tuttavia e' possibile hookare LoadLibrary (o LdrLoadDll x
NT) / GetProceAddress e conoscere quali moduli/funzioni il programma
richieda nel momento in cui li richiede (un sistema che consente di
rimpiazzare l'api di debug e i debug event relativi alla notifica del
caricamento di moduli UM):
a questo punto le possibilita' sono due a seconda del grado di "intusivita'"
del tuo programma di logging:
1) metodo "soft" : filtrare GetProceAddress in modo che restituisca
l'address del tuo stub :
 app -> my stub -> module ET -> api code
2) oppure hookare direttamente la Export Table dei  moduli da cui il
programma importa : avari cioe'
 app -> module ET -> my stub -> api code
E' chiaro che il metodo 2 e' il piu' generico (e se vuoi "intrusivo"
rispetto al sistema) e ti offre la possibilita' di hook "globali" su i
moduli di sistema, hook cioe' preesistensti rispetto all'esecuzione del
programma target, ma richiede molta piu' attenzione nella stesura del codice
che deve far i conti con problemi di rientranza, sincronizzazione, etc
specie in win9x dove le dll di sistema sono condivise fra tutti i processi
(ed istanze di questi).
Tutto questo e' possibile realizzarlo piu' o meno senza mai ricorrere a
codice in KM (almeno x win9x, ed con alcune limitazioni anche in NT/win2k).
Cmq senza entrare ulteriormente nei dettagli (se a qualcuno interessa
implementare del proprio codice x l' api hooking son lieto di discuterne in
privato senza floodare in newsg =) ) concludo dicendo che esistono tools
commerciali (BoundsCheckers, etc..) e non (qui mi sento di consigliare
l'ottimo APIHooks di Elicz fra tutti) che consentono di loggare le API
utilizzate da un programma praticamente nel 99% dei casi.
Saluti,
Walker Boh


API Monitor
lo trovi su WinFiles
gli mancano solo le funzioni di user32
(occhio che certi programmi rallentano di brutto)

 garph0
sono interessat(issim)o  :)
ho win2000 e sull'altro pc winnt4 wks
--
ciao
xAERO

http://www.rohitab.com/apimonitor/apimonitor.zip
trovato questo...
ancora lo devo provare
--
ciao
xAERO

--
trovato il proggie: 
protools.cjb.net
si chiama API Spy.
Un altro modo lo sto sviluppando, ma non e' facilerrimo, soprattutto
sotto Win9x e inoltre e' totalmente inaffidabile (ehehe explorer di
2000 si e' suicidato portandomi al boot :) ), e comunque troppo
'custom' quindi mi sa che per ora c'e' quello oppure Detours
(
microsoft.reasearch.com
 o 
research.microsoft.com
 non ricordo
che fa veramente di tutto di piu' oppure ancora puoi
1) scrivere un proggie scemo che dal .h ti tiri fuori una dll wrapper
che si occupera' di caricare la dll vera e forwardarle le chiamate
dopo averle loggate
2) a) copiare la dll wrapper nella dir del programma da spiare
     b) modifcare l'import table dell'exe per tirar su la dll nuova
cosi' non ha conflitti di sorta
problemi dell'ultima tecnica:
- e' menosa (parecchio menosa, ma anche le altr (apispy e affini non
sono agilissime)
- le funzioni undocumented sono caxxi acidi, l'unico modo che mi viene
in mente e' disassemblarsi la dll e vedere le funzioni di cui non si
sa nada di quanti e quali parametri prendono (mi sa che son tutte
dword :) ) per poi costruire una fne che le emuli ciecamente.
Se quello che ti interessa e' solo spiare che api chiama un proggie
allora probably ti basta ApiSpy, mentre detours e' piu' orientato alla
sostituzione delle varie api con le proprie che poi eventualmente
chiameranno quelle originali.
bon, that's all, folks! se mi viene in mente qualcosa d'altro o per
magia il mio tool si mette a funzionare bene ti faccio sapere; se ti
serve aiuto fammi sapere tu, visto che sto giocherellando da quelle
parti in questi giorni magari qualcosa mi viene in mente :)
cia'
g0
PS ho appena letto il post di WalkerBoh che mi era sfuggito ;)
riferitevi al suo che surely e' muy meglio :)

privato senza floodare in newsg =)
Personalmente sarei interessato a soluzioni gia' pronte per l'uso.
BoundChecker mi sembra troppo intrusivo.
Nel SDK c'e' ApiMon, pero' sono riuscito a farlo funzionare in
un'unica installazione.
-- 
Tieni per te il Papero se vuoi la mia email
Sito Papero -> 
http://utenti.tripod.it/papero