mercredi 20 février 2008

Listing all processes

Plop :)
Alors que je lisais un article de monsieur Ivanlef0u (article), un article très intéressant où ivan nous projette en ring0 avec l'API NtSystemDebugControl() et notamment deux contrôles qui sont DebugSysReadVirtual et DebugSysWriteVirtual (ce ne sont pas les seuls permettant de faire ça :]), je vois monsieur s'amuse à cacher des processus et nous laisse un petit message "Il existe tout de même une façon de le retrouver mais shuuuuut !". Je prends ça comme un petit défis et me dis qu'on va faire réapparaître sont processus ! Nan mais! Je prends mes petits doigts et je réfléchis... Je fais quelques petits tests et arrive par me demander s'il n'est pas possible de retrouver le nom d'un processus à partir de son ID. Je fais un saut chez la msdn et je vois la fonction GetModuleBaseName() :). Juste ce qu'il me fallait, il ne me reste plus qu'à faire un petit BF sur les ID des processus et récupérer les noms correspondant.
On prends le prog d'Ivan, on cache notre bien aimée calculatrice et on va essayer de la retrouver.


>tasklist

Nom de l'image PIDÿ Nom de la sessio Num‚ro d Utilisation
========================= ====== ================ ======== ============
System Idle Process 0 Console 0 28 Ko
System 4 Console 0 240 Ko
smss.exe 796 Console 0 408 Ko
csrss.exe 852 Console 0 3ÿ092 Ko
winlogon.exe 876 Console 0 3ÿ980 Ko
services.exe 920 Console 0 5ÿ436 Ko
lsass.exe 940 Console 0 1ÿ464 Ko
svchost.exe 1108 Console 0 5ÿ100 Ko
svchost.exe 1176 Console 0 4ÿ756 Ko
svchost.exe 1284 Console 0 23ÿ552 Ko
svchost.exe 1416 Console 0 3ÿ872 Ko
spoolsv.exe 1740 Console 0 4ÿ516 Ko
explorer.exe 1952 Console 0 11ÿ316 Ko
nod32kui.exe 2028 Console 0 2ÿ568 Ko
jusched.exe 2036 Console 0 5ÿ060 Ko
igfxtray.exe 188 Console 0 3ÿ412 Ko
hkcmd.exe 184 Console 0 3ÿ400 Ko
igfxpers.exe 200 Console 0 3ÿ044 Ko
SearchSettings.exe 212 Console 0 6ÿ000 Ko
FileZilla Server Interfac 244 Console 0 1ÿ708 Ko
msnmsgr.exe 328 Console 0 28ÿ980 Ko
igfxsrvc.exe 344 Console 0 2ÿ948 Ko
LightScribeControlPanel.e 348 Console 0 7ÿ360 Ko
RocketDock.exe 356 Console 0 9ÿ916 Ko
UberIcon Manager.exe 520 Console 0 3ÿ384 Ko
YzShadow.exe 532 Console 0 4ÿ768 Ko
msdtc.exe 596 Console 0 5ÿ044 Ko
aawservice.exe 704 Console 0 29ÿ644 Ko
FileZilla server.exe 728 Console 0 3ÿ072 Ko
LSSrvc.exe 772 Console 0 2ÿ660 Ko
nod32krn.exe 1580 Console 0 25ÿ504 Ko
kpf4ss.exe 1612 Console 0 14ÿ804 Ko
StarWindServiceAE.exe 1704 Console 0 4ÿ068 Ko
mqsvc.exe 1844 Console 0 6ÿ516 Ko
mqtgsvc.exe 1248 Console 0 4ÿ036 Ko
kpf4gui.exe 2128 Console 0 7ÿ168 Ko
svchost.exe 2144 Console 0 4ÿ180 Ko
alg.exe 2448 Console 0 4ÿ048 Ko
WgaTray.exe 3232 Console 0 188 Ko
kpf4gui.exe 3320 Console 0 9ÿ528 Ko
usnsvc.exe 3648 Console 0 2ÿ584 Ko
MDM.EXE 4008 Console 0 3ÿ136 Ko
firefox.exe 2484 Console 0 94ÿ372 Ko
mirc.exe 3564 Console 0 2ÿ344 Ko
devcpp.exe 2176 Console 0 1ÿ072 Ko
calc.exe 1012 Console 0 3ÿ116 Ko <-----
cmd.exe 2244 Console 0 3ÿ588 Ko
tasklist.exe 488 Console 0 4ÿ640 Ko
wmiprvse.exe 3904 Console 0 5ÿ692 Ko


Avant d'aplliquer le prog d'ivan on vois bien la présence de calc.exe avec l'id 1012.
On applique son code :

>KFist.exe calc.exe
KFist : UserLand DKOM Process Hider (xp only)
By Ivanlef0u
BE MAD!
Current ETHREAD : 0x84165020
Current EPROCESS : 0x85388aa8
Process Name : KFist.exe
EPROCESS : 0x80562730
Process Name : ÿÿÿÿ
EPROCESS : 0x85fac830
Process Name : System
EPROCESS : 0x85dcf5e8
Process Name : smss.exe
EPROCESS : 0x85e85020
Process Name : csrss.exe
EPROCESS : 0x85be84d0
Process Name : winlogon.exe
EPROCESS : 0x85bd19d0
Process Name : services.exe
EPROCESS : 0x85ccd128
Process Name : lsass.exe
EPROCESS : 0x85cb8a48
Process Name : svchost.exe
EPROCESS : 0x85492318
Process Name : svchost.exe
EPROCESS : 0x85ca7c60
Process Name : svchost.exe
EPROCESS : 0x856fcda0
Process Name : svchost.exe
EPROCESS : 0x8540eda0
Process Name : spoolsv.exe
EPROCESS : 0x853ac7e0
Process Name : explorer.exe
EPROCESS : 0x853f2400
Process Name : nod32kui.exe
EPROCESS : 0x853e7888
Process Name : jusched.exe
EPROCESS : 0x85db5a78
Process Name : igfxtray.exe
EPROCESS : 0x85b903c8
Process Name : hkcmd.exe
EPROCESS : 0x85d52c10
Process Name : igfxpers.exe
EPROCESS : 0x85d5a560
Process Name : SearchSettings.
EPROCESS : 0x85428c10
Process Name : FileZilla Serve
EPROCESS : 0x85bfeda0
Process Name : msnmsgr.exe
EPROCESS : 0x853dec10
Process Name : igfxsrvc.exe
EPROCESS : 0x853dad78
Process Name : LightScribeCont
EPROCESS : 0x85db33c0
Process Name : RocketDock.exe
EPROCESS : 0x85be7da0
Process Name : UberIcon Manage
EPROCESS : 0x85bb9da0
Process Name : YzShadow.exe
EPROCESS : 0x853e02c8
Process Name : msdtc.exe
EPROCESS : 0x853d82a0
Process Name : aawservice.exe
EPROCESS : 0x853e1650
Process Name : FileZilla serve
EPROCESS : 0x853fdda0
Process Name : LSSrvc.exe
EPROCESS : 0x853eb8b0
Process Name : nod32krn.exe
EPROCESS : 0x85c0eab0
Process Name : kpf4ss.exe
EPROCESS : 0x85d6e998
Process Name : StarWindService
EPROCESS : 0x85be0850
Process Name : mqsvc.exe
EPROCESS : 0x83c11020
Process Name : mqtgsvc.exe
EPROCESS : 0x846ceda0
Process Name : kpf4gui.exe
EPROCESS : 0x85b77a20
Process Name : svchost.exe
EPROCESS : 0x846cb5b0
Process Name : alg.exe
EPROCESS : 0x846d5a38
Process Name : regedt32.exe
EPROCESS : 0x846b6da0
Process Name : WgaTray.exe
EPROCESS : 0x83baf728
Process Name : kpf4gui.exe
EPROCESS : 0x84680da0
Process Name : usnsvc.exe
EPROCESS : 0x8467a8e8
Process Name : MDM.EXE
EPROCESS : 0x85369020
Process Name : firefox.exe
EPROCESS : 0x85da3890
Process Name : regedt32.exe
EPROCESS : 0x85bfe248
Process Name : AcroRd32.exe
EPROCESS : 0x85c12c10
Process Name : mirc.exe
EPROCESS : 0x8475b9a8
Process Name : devcpp.exe
EPROCESS : 0x853436d0
Process Name : regedt32.exe
EPROCESS : 0x82b60318
Process Name : calc.exe
Process Found ! Now hiding it... <-----
Prev EPROCESS : 0x853436d0
Next EPROCESS : 0x83c08020
Hiding done, have fun!
EPROCESS : 0x83c08020
Process Name : cmd.exe
EPROCESS : 0x8465caf8
Process Name : wmiprvse.exe
EPROCESS : 0x853452e0
Process Name : notepad.exe
EPROCESS : 0x85388aa8

>tasklist

Nom de l'image PIDÿ Nom de la sessio Num‚ro d Utilisation
========================= ====== ================ ======== ============
System Idle Process 0 Console 0 28 Ko
System 4 Console 0 240 Ko
smss.exe 796 Console 0 408 Ko
csrss.exe 852 Console 0 3ÿ148 Ko
winlogon.exe 876 Console 0 3ÿ988 Ko
services.exe 920 Console 0 5ÿ436 Ko
lsass.exe 940 Console 0 1ÿ140 Ko
svchost.exe 1108 Console 0 5ÿ100 Ko
svchost.exe 1176 Console 0 4ÿ756 Ko
svchost.exe 1284 Console 0 23ÿ364 Ko
svchost.exe 1416 Console 0 3ÿ872 Ko
spoolsv.exe 1740 Console 0 4ÿ516 Ko
explorer.exe 1952 Console 0 11ÿ396 Ko
nod32kui.exe 2028 Console 0 2ÿ568 Ko
jusched.exe 2036 Console 0 5ÿ060 Ko
igfxtray.exe 188 Console 0 3ÿ412 Ko
hkcmd.exe 184 Console 0 3ÿ400 Ko
igfxpers.exe 200 Console 0 3ÿ044 Ko
SearchSettings.exe 212 Console 0 6ÿ000 Ko
FileZilla Server Interfac 244 Console 0 1ÿ708 Ko
msnmsgr.exe 328 Console 0 28ÿ980 Ko
igfxsrvc.exe 344 Console 0 2ÿ948 Ko
LightScribeControlPanel.e 348 Console 0 7ÿ360 Ko
RocketDock.exe 356 Console 0 9ÿ916 Ko
UberIcon Manager.exe 520 Console 0 3ÿ392 Ko
YzShadow.exe 532 Console 0 4ÿ956 Ko
msdtc.exe 596 Console 0 5ÿ044 Ko
aawservice.exe 704 Console 0 29ÿ644 Ko
FileZilla server.exe 728 Console 0 3ÿ072 Ko
LSSrvc.exe 772 Console 0 2ÿ660 Ko
nod32krn.exe 1580 Console 0 25ÿ504 Ko
kpf4ss.exe 1612 Console 0 14ÿ804 Ko
StarWindServiceAE.exe 1704 Console 0 4ÿ068 Ko
mqsvc.exe 1844 Console 0 6ÿ516 Ko
mqtgsvc.exe 1248 Console 0 4ÿ036 Ko
kpf4gui.exe 2128 Console 0 7ÿ168 Ko
svchost.exe 2144 Console 0 4ÿ180 Ko
alg.exe 2448 Console 0 4ÿ048 Ko
WgaTray.exe 3232 Console 0 188 Ko
kpf4gui.exe 3320 Console 0 9ÿ528 Ko
usnsvc.exe 3648 Console 0 2ÿ584 Ko
MDM.EXE 4008 Console 0 3ÿ136 Ko
firefox.exe 2484 Console 0 94ÿ784 Ko
mirc.exe 3564 Console 0 2ÿ344 Ko
devcpp.exe 2176 Console 0 1ÿ088 Ko
cmd.exe 2244 Console 0 3ÿ620 Ko
wmiprvse.exe 3904 Console 0 6ÿ028 Ko
notepad.exe 3744 Console 0 936 Ko
notepad.exe 3312 Console 0 3ÿ336 Ko
tasklist.exe 2748 Console 0 4ÿ636 Ko


calc.exe n'apparait plus dans la liste, le code d'ivan marche donc bien :).
A nous maintenant :


>ListAllProcess.exe

Enumerating processes...

[+] Process Name : hkcmd.exe --- ID : 0xb8
[+] Process Name : hkcmd.exe --- ID : 0xb9
[+] Process Name : hkcmd.exe --- ID : 0xba
[+] Process Name : hkcmd.exe --- ID : 0xbb
[+] Process Name : igfxtray.exe --- ID : 0xbc
[+] Process Name : igfxtray.exe --- ID : 0xbd
[+] Process Name : igfxtray.exe --- ID : 0xbe
[+] Process Name : igfxtray.exe --- ID : 0xbf
[+] Process Name : igfxpers.exe --- ID : 0xc8
[+] Process Name : igfxpers.exe --- ID : 0xc9
[+] Process Name : igfxpers.exe --- ID : 0xca
[+] Process Name : igfxpers.exe --- ID : 0xcb
[+] Process Name : SearchSettings.exe --- ID : 0xd4
[+] Process Name : SearchSettings.exe --- ID : 0xd5
[+] Process Name : SearchSettings.exe --- ID : 0xd6
[+] Process Name : SearchSettings.exe --- ID : 0xd7
[+] Process Name : FileZilla Server Interface.exe --- ID : 0xf4
[+] Process Name : FileZilla Server Interface.exe --- ID : 0xf5
[+] Process Name : FileZilla Server Interface.exe --- ID : 0xf6
[+] Process Name : FileZilla Server Interface.exe --- ID : 0xf7
[+] Process Name : MsnMsgr.Exe --- ID : 0x148
[+] Process Name : MsnMsgr.Exe --- ID : 0x149
[+] Process Name : MsnMsgr.Exe --- ID : 0x14a
[+] Process Name : MsnMsgr.Exe --- ID : 0x14b
[+] Process Name : igfxsrvc.exe --- ID : 0x158
[+] Process Name : igfxsrvc.exe --- ID : 0x159
[+] Process Name : igfxsrvc.exe --- ID : 0x15a
[+] Process Name : igfxsrvc.exe --- ID : 0x15b
[+] Process Name : LightScribeControlPanel.exe --- ID : 0x15c
[+] Process Name : LightScribeControlPanel.exe --- ID : 0x15d
[+] Process Name : LightScribeControlPanel.exe --- ID : 0x15e
[+] Process Name : LightScribeControlPanel.exe --- ID : 0x15f
[+] Process Name : RocketDock.exe --- ID : 0x164
[+] Process Name : RocketDock.exe --- ID : 0x165
[+] Process Name : RocketDock.exe --- ID : 0x166
[+] Process Name : RocketDock.exe --- ID : 0x167
[+] Process Name : UberIcon Manager.exe --- ID : 0x208
[+] Process Name : UberIcon Manager.exe --- ID : 0x209
[+] Process Name : UberIcon Manager.exe --- ID : 0x20a
[+] Process Name : UberIcon Manager.exe --- ID : 0x20b
[+] Process Name : YzShadow.exe --- ID : 0x214
[+] Process Name : YzShadow.exe --- ID : 0x215
[+] Process Name : YzShadow.exe --- ID : 0x216
[+] Process Name : YzShadow.exe --- ID : 0x217
[+] Process Name : msdtc.exe --- ID : 0x254
[+] Process Name : msdtc.exe --- ID : 0x255
[+] Process Name : msdtc.exe --- ID : 0x256
[+] Process Name : msdtc.exe --- ID : 0x257
[+] Process Name : aawservice.exe --- ID : 0x2c0
[+] Process Name : aawservice.exe --- ID : 0x2c1
[+] Process Name : aawservice.exe --- ID : 0x2c2
[+] Process Name : aawservice.exe --- ID : 0x2c3
[+] Process Name : FileZilla Server.exe --- ID : 0x2d8
[+] Process Name : FileZilla Server.exe --- ID : 0x2d9
[+] Process Name : FileZilla Server.exe --- ID : 0x2da
[+] Process Name : FileZilla Server.exe --- ID : 0x2db
[+] Process Name : LSSrvc.exe --- ID : 0x304
[+] Process Name : LSSrvc.exe --- ID : 0x305
[+] Process Name : LSSrvc.exe --- ID : 0x306
[+] Process Name : LSSrvc.exe --- ID : 0x307
[+] Process Name : smss.exe --- ID : 0x31c
[+] Process Name : smss.exe --- ID : 0x31d
[+] Process Name : smss.exe --- ID : 0x31e
[+] Process Name : smss.exe --- ID : 0x31f
[+] Process Name : csrss.exe --- ID : 0x354
[+] Process Name : csrss.exe --- ID : 0x355
[+] Process Name : csrss.exe --- ID : 0x356
[+] Process Name : csrss.exe --- ID : 0x357
[+] Process Name : winlogon.exe --- ID : 0x36c
[+] Process Name : winlogon.exe --- ID : 0x36d
[+] Process Name : winlogon.exe --- ID : 0x36e
[+] Process Name : winlogon.exe --- ID : 0x36f
[+] Process Name : services.exe --- ID : 0x398
[+] Process Name : services.exe --- ID : 0x399
[+] Process Name : services.exe --- ID : 0x39a
[+] Process Name : services.exe --- ID : 0x39b
[+] Process Name : lsass.exe --- ID : 0x3ac
[+] Process Name : lsass.exe --- ID : 0x3ad
[+] Process Name : lsass.exe --- ID : 0x3ae
[+] Process Name : lsass.exe --- ID : 0x3af
[+] Process Name : calc.exe --- ID : 0x3f4 <----- Mais que voilà ?? :)
[+] Process Name : calc.exe --- ID : 0x3f5
[+] Process Name : calc.exe --- ID : 0x3f6
[+] Process Name : calc.exe --- ID : 0x3f7
[+] Process Name : svchost.exe --- ID : 0x454
[+] Process Name : svchost.exe --- ID : 0x455
[+] Process Name : svchost.exe --- ID : 0x456
[+] Process Name : svchost.exe --- ID : 0x457
[+] Process Name : svchost.exe --- ID : 0x498
[+] Process Name : svchost.exe --- ID : 0x499
[+] Process Name : svchost.exe --- ID : 0x49a
[+] Process Name : svchost.exe --- ID : 0x49b
[+] Process Name : mqtgsvc.exe --- ID : 0x4e0
[+] Process Name : mqtgsvc.exe --- ID : 0x4e1
[+] Process Name : mqtgsvc.exe --- ID : 0x4e2
[+] Process Name : mqtgsvc.exe --- ID : 0x4e3
[+] Process Name : svchost.exe --- ID : 0x504
[+] Process Name : svchost.exe --- ID : 0x505
[+] Process Name : svchost.exe --- ID : 0x506
[+] Process Name : svchost.exe --- ID : 0x507
[+] Process Name : svchost.exe --- ID : 0x588
[+] Process Name : svchost.exe --- ID : 0x589
[+] Process Name : svchost.exe --- ID : 0x58a
[+] Process Name : svchost.exe --- ID : 0x58b
[+] Process Name : nod32krn.exe --- ID : 0x62c
[+] Process Name : nod32krn.exe --- ID : 0x62d
[+] Process Name : nod32krn.exe --- ID : 0x62e
[+] Process Name : nod32krn.exe --- ID : 0x62f
[+] Process Name : kpf4ss.exe --- ID : 0x64c
[+] Process Name : kpf4ss.exe --- ID : 0x64d
[+] Process Name : kpf4ss.exe --- ID : 0x64e
[+] Process Name : kpf4ss.exe --- ID : 0x64f
[+] Process Name : StarWindServiceAE.exe --- ID : 0x6a8
[+] Process Name : StarWindServiceAE.exe --- ID : 0x6a9
[+] Process Name : StarWindServiceAE.exe --- ID : 0x6aa
[+] Process Name : StarWindServiceAE.exe --- ID : 0x6ab
[+] Process Name : spoolsv.exe --- ID : 0x6cc
[+] Process Name : spoolsv.exe --- ID : 0x6cd
[+] Process Name : spoolsv.exe --- ID : 0x6ce
[+] Process Name : spoolsv.exe --- ID : 0x6cf
[+] Process Name : mqsvc.exe --- ID : 0x734
[+] Process Name : mqsvc.exe --- ID : 0x735
[+] Process Name : mqsvc.exe --- ID : 0x736
[+] Process Name : mqsvc.exe --- ID : 0x737
[+] Process Name : Explorer.EXE --- ID : 0x7a0
[+] Process Name : Explorer.EXE --- ID : 0x7a1
[+] Process Name : Explorer.EXE --- ID : 0x7a2
[+] Process Name : Explorer.EXE --- ID : 0x7a3
[+] Process Name : nod32kui.exe --- ID : 0x7ec
[+] Process Name : nod32kui.exe --- ID : 0x7ed
[+] Process Name : nod32kui.exe --- ID : 0x7ee
[+] Process Name : nod32kui.exe --- ID : 0x7ef
[+] Process Name : jusched.exe --- ID : 0x7f4
[+] Process Name : jusched.exe --- ID : 0x7f5
[+] Process Name : jusched.exe --- ID : 0x7f6
[+] Process Name : jusched.exe --- ID : 0x7f7
[+] Process Name : kpf4gui.exe --- ID : 0x850
[+] Process Name : kpf4gui.exe --- ID : 0x851
[+] Process Name : kpf4gui.exe --- ID : 0x852
[+] Process Name : kpf4gui.exe --- ID : 0x853
[+] Process Name : svchost.exe --- ID : 0x860
[+] Process Name : svchost.exe --- ID : 0x861
[+] Process Name : svchost.exe --- ID : 0x862
[+] Process Name : svchost.exe --- ID : 0x863
[+] Process Name : devcpp.exe --- ID : 0x880
[+] Process Name : devcpp.exe --- ID : 0x881
[+] Process Name : devcpp.exe --- ID : 0x882
[+] Process Name : devcpp.exe --- ID : 0x883
[+] Process Name : cmd.exe --- ID : 0x8c4
[+] Process Name : cmd.exe --- ID : 0x8c5
[+] Process Name : cmd.exe --- ID : 0x8c6
[+] Process Name : cmd.exe --- ID : 0x8c7
[+] Process Name : alg.exe --- ID : 0x990
[+] Process Name : alg.exe --- ID : 0x991
[+] Process Name : alg.exe --- ID : 0x992
[+] Process Name : alg.exe --- ID : 0x993
[+] Process Name : firefox.exe --- ID : 0x9b4
[+] Process Name : firefox.exe --- ID : 0x9b5
[+] Process Name : firefox.exe --- ID : 0x9b6
[+] Process Name : firefox.exe --- ID : 0x9b7
[+] Process Name : ListAllProcesses.exe --- ID : 0xc64
[+] Process Name : ListAllProcesses.exe --- ID : 0xc65
[+] Process Name : ListAllProcesses.exe --- ID : 0xc66
[+] Process Name : ListAllProcesses.exe --- ID : 0xc67
[+] Process Name : WgaTray.exe --- ID : 0xca0
[+] Process Name : WgaTray.exe --- ID : 0xca1
[+] Process Name : WgaTray.exe --- ID : 0xca2
[+] Process Name : WgaTray.exe --- ID : 0xca3
[+] Process Name : NOTEPAD.EXE --- ID : 0xcf0
[+] Process Name : NOTEPAD.EXE --- ID : 0xcf1
[+] Process Name : NOTEPAD.EXE --- ID : 0xcf2
[+] Process Name : NOTEPAD.EXE --- ID : 0xcf3
[+] Process Name : kpf4gui.exe --- ID : 0xcf8
[+] Process Name : kpf4gui.exe --- ID : 0xcf9
[+] Process Name : kpf4gui.exe --- ID : 0xcfa
[+] Process Name : kpf4gui.exe --- ID : 0xcfb
[+] Process Name : mirc.exe --- ID : 0xdec
[+] Process Name : mirc.exe --- ID : 0xded
[+] Process Name : mirc.exe --- ID : 0xdee
[+] Process Name : mirc.exe --- ID : 0xdef
[+] Process Name : usnsvc.exe --- ID : 0xe40
[+] Process Name : usnsvc.exe --- ID : 0xe41
[+] Process Name : usnsvc.exe --- ID : 0xe42
[+] Process Name : usnsvc.exe --- ID : 0xe43
[+] Process Name : NOTEPAD.EXE --- ID : 0xea0
[+] Process Name : NOTEPAD.EXE --- ID : 0xea1
[+] Process Name : NOTEPAD.EXE --- ID : 0xea2
[+] Process Name : NOTEPAD.EXE --- ID : 0xea3
[+] Process Name : wmiprvse.exe --- ID : 0xf40
[+] Process Name : wmiprvse.exe --- ID : 0xf41
[+] Process Name : wmiprvse.exe --- ID : 0xf42
[+] Process Name : wmiprvse.exe --- ID : 0xf43
[+] Process Name : mdm.exe --- ID : 0xfa8
[+] Process Name : mdm.exe --- ID : 0xfa9
[+] Process Name : mdm.exe --- ID : 0xfaa
[+] Process Name : mdm.exe --- ID : 0xfab


Hop et voilà on a retrouvé notre calculatrice avec 0x3f4 comme ID et elle nous dis elle même que ça vaut 1012 en décimal :)).
Bref voilà je pourrais me coucher l'esprit tranquille maintenant :).

Je vous file le code, pas besoin de détailler c'est pas bien compliquer : ListAllProcesses.cpp

Le binaire est dispo ici : http://lilxam.free.fr/index.php?path=/repo/coding/windows/ListAllProcesses

mardi 19 février 2008

Gestionnaire des services windows

Hi all :)
Bon en ce moment je sais pas trop quoi faire alors me suis codé un petit prog pour gérer les services win. Ce prog se décompose en 5 fonctions à savoir :

-Enumération des service. Il suffit d'utiliser l'API EnumServicesStatusEx :


BOOL WINAPI EnumServicesStatusEx(
__in SC_HANDLE hSCManager,
__in SC_ENUM_TYPE InfoLevel,
__in DWORD dwServiceType,
__in DWORD dwServiceState,
__out_opt LPBYTE lpServices,
__in DWORD cbBufSize,
__out LPDWORD pcbBytesNeeded,
__out LPDWORD lpServicesReturned,
__inout_opt LPDWORD lpResumeHandle,
__in_opt LPCTSTR pszGroupName
);


Référence : http://msdn2.microsoft.com/en-us/library/ms682640(VS.85).aspx

On remplie ensuite la structure ENUM_SERVICE_STATUS_PROCESS dont voici la définition :


typedef struct _ENUM_SERVICE_STATUS_PROCESS {
LPTSTR lpServiceName;
LPTSTR lpDisplayName;
SERVICE_STATUS_PROCESS ServiceStatusProcess;
} ENUM_SERVICE_STATUS_PROCESS,
*LPENUM_SERVICE_STATUS_PROCESS;


Référence : http://msdn2.microsoft.com/en-us/library/ms682648(VS.85).aspx
On s'aperçoit de la présence de la structure SERVICE_STATUS_PROCESS :


typedef struct _SERVICE_STATUS_PROCESS {
DWORD dwServiceType;
DWORD dwCurrentState;
DWORD dwControlsAccepted;
DWORD dwWin32ExitCode;
DWORD dwServiceSpecificExitCode;
DWORD dwCheckPoint;
DWORD dwWaitHint;
DWORD dwProcessId;
DWORD dwServiceFlags;
} SERVICE_STATUS_PROCESS,
*LPSERVICE_STATUS_PROCESS;


Référence : http://msdn2.microsoft.com/en-us/library/ms685992(VS.85).aspx

A l'aide de ces deux structures on peut déjà en connaitre pas mal sur les services.



-Démarrage d'un service. Ici on a besoin de récupérer un handle sur le service avec la fonction OpenService() puis d'utiliser la fonction StartService() pour le démarrer. Quelque fois certains services refusent d'être démarrer par n'importe quel processus. Vous risquez donc d'avoir des erreurs avec la fonction. Les prototypes des fonctions :


SC_HANDLE WINAPI OpenService(
__in SC_HANDLE hSCManager,
__in LPCTSTR lpServiceName,
__in DWORD dwDesiredAccess
);


Référence : http://msdn2.microsoft.com/en-us/library/ms684330(VS.85).aspx


BOOL WINAPI StartService(
__in SC_HANDLE hService,
__in DWORD dwNumServiceArgs,
__in_opt LPCTSTR* lpServiceArgVectors
);


Référence : http://msdn2.microsoft.com/en-us/library/ms686321(VS.85).aspx

-Arrêt d'un service. Pour celà on récupère un handle sur le service et on l'arrête avec ControlService() :


BOOL WINAPI ControlService(
__in SC_HANDLE hService,
__in DWORD dwControl,
__out LPSERVICE_STATUS lpServiceStatus
);


Référence : http://msdn2.microsoft.com/en-us/library/ms682108(VS.85).aspx

-Création d'un service. On a juste besoin de l'API CreateService() et le tour est joué :


SC_HANDLE WINAPI CreateService(
__in SC_HANDLE hSCManager,
__in LPCTSTR lpServiceName,
__in_opt LPCTSTR lpDisplayName,
__in DWORD dwDesiredAccess,
__in DWORD dwServiceType,
__in DWORD dwStartType,
__in DWORD dwErrorControl,
__in_opt LPCTSTR lpBinaryPathName,
__in_opt LPCTSTR lpLoadOrderGroup,
__out_opt LPDWORD lpdwTagId,
__in_opt LPCTSTR lpDependencies,
__in_opt LPCTSTR lpServiceStartName,
__in_opt LPCTSTR lpPassword
);


Référence : http://msdn2.microsoft.com/en-us/library/ms682450(VS.85).aspx

-Effacer un service. On récupère un handle sur le service, on l'arrête et on l'efface avec DeleteService().

Voilà, rien de bien compliqué.



Le code : gerstionnaire_services.cpp

Le code + binaire : gestionnaire_services.zip

PS: Ceci peut par exemple servir à installer un driver :)

PS2: Au passage j'en profite pour vous faire remarquer mon nouveau repo à l'adresse http://lilxam.free.fr/

Have Fun :)
lilxam.

dimanche 3 février 2008

Stack Watcher/Registers Viewer

Plop all :)
Voilà quelque temps que ce sujet m'intriguais, j'ai décidé de faire un petit programme pour voir l'état des registres d'un thread en temps réel.
Voici comme on va se dépatouiller :

1.La rien de bien compliqué, on récupère l'id du processus voulu.

Les APIs nécessaires :
-CreateToolhelp32Snapshot() -> http://msdn2.microsoft.com/en-us/library/ms682489(VS.85).aspx
-Process32First() -> http://msdn2.microsoft.com/en-us/library/ms684834(VS.85).aspx
-Process32Next() -> http://msdn2.microsoft.com/en-us/library/ms684836(VS.85).aspx
Sans oublier notre structure PROCESSENTRY32. -> http://msdn2.microsoft.com/en-us/library/ms684839(VS.85).aspx

typedef struct tagPROCESSENTRY32 {
DWORD dwSize;
DWORD cntUsage;
DWORD th32ProcessID;
ULONG_PTR th32DefaultHeapID;
DWORD th32ModuleID;
DWORD cntThreads;
DWORD th32ParentProcessID;
LONG pcPriClassBase;
DWORD dwFlags;
TCHAR szExeFile[MAX_PATH];
} PROCESSENTRY32,
*PPROCESSENTRY32;

2.On établit la liste de tous les threads en cour d'execution. Comme pour créer une liste des processus CreateToolhelp32Snapshot() mais avec TH32CS_SNAPTHREAD en premier argument.

3.On parcourt et recherche les threads appartenant à notre processus. On parcourt la liste des threads avec :
-Thread32First() -> http://msdn2.microsoft.com/en-us/library/ms686728(VS.85).aspx
-Thread32Next() -> http://msdn2.microsoft.com/en-us/library/ms686731(VS.85).aspx
Et on remplit la structure THREADENTRY32 -> http://msdn2.microsoft.com/en-us/library/ms686735(VS.85).aspx

typedef struct tagTHREADENTRY32 {
DWORD dwSize;
DWORD cntUsage;
DWORD th32ThreadID;
DWORD th32OwnerProcessID;
LONG tpBasePri;
LONG tpDeltaPri;
DWORD dwFlags;
} THREADENTRY32,
*PTHREADENTRY32;

Ceci reste très similaire à la façon de traiter les processus.

4.On récupère les informations sur la pile. Ce qui nous interresse.
Pour celà on doit stopper l'execution du thread avec SuspendThread() et reprendre son execution avec ResumeThread. Entre temps on aura utilisé la fonction
GetThreadContext() :

BOOL WINAPI GetThreadContext(
__in HANDLE hThread,
__inout LPCONTEXT lpContext
);

qui nous permet de récupérer les inforamtions sur la pile au travers de la structure CONTEXT (à voir dans winnt.h) :

typedef struct _CONTEXT {
DWORD ContextFlags;
DWORD Dr0;
DWORD Dr1;
DWORD Dr2;
DWORD Dr3;
DWORD Dr6;
DWORD Dr7;
FLOATING_SAVE_AREA FloatSave;
DWORD SegGs;
DWORD SegFs;
DWORD SegEs;
DWORD SegDs;
DWORD Edi;
DWORD Esi;
DWORD Ebx;
DWORD Edx;
DWORD Ecx;
DWORD Eax;
DWORD Ebp;
DWORD Eip;
DWORD SegCs;
DWORD EFlags;
DWORD Esp;
DWORD SegSs;
BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
} CONTEXT;


Voilà on a donc maintenant un dump des registres de notre processus.
Un petit rappel sur les registres :

Les registres principaux :

EAX : Registre 32 bits. 16 bits : Ax formé par Ah : 8 bits et Al : 8bits. Fonction : Accumulateur

EBX : Registre 32 bits. 16 bits : Bx formé par Bh : 8 bits et Bl : 8bits. Fonction : Base, utilisé lors de l'accès à une zone mémoire.

ECX : Registre 32 bits. 16 bits : Cx formé par Ch : 8 bits et Cl : 8bits. Fonction : Compteur.

EDX : Registre 32 bits. 16 bits : Dx formé par Dh : 8 bits et Dl : 8bits. Fonction : Stockage de données.

EIP (Instruction Pointer) : Registre 32 bits. Pointe sur la prochaine instruction a executer.

ESI (Source Index) : Registre 32 bits. Pointer sur la variable source.

EDI (Destination Pointer) : Registre 32 bits. Pointer sur la variable destinataire.

EBP (Base Pointer) : Registre 32 bits. Pointe sur le premier élémente de la pile.

ESP (Stack Pointer) : Registre 32 bits. Pointe sur le dernier élément de la pile.


Les registres debug :

Une bonne doc ici : http://en.wikipedia.org/wiki/Debug_register

Les registres de Segments :

CS (Code Segment) : Mémorise le segment où se trouve le code en cours d'execution

DS (Data Segment) : Mémorise le segment où se trouvent les données du programme

ES (Extra Segment) : Il peut être utilisé à faire ce que l'on veut.

SS (Stack Segment) : Mémorise le segment où se trouve la pile de données du programme.

Le code : Stack.cpp
Le projet + binaire : StackWatcher.zip

Voilà ce sera tout pour cet article.
Have Fun ;)
lilxam.