Notre objectif:
Vous apprendre a vous servir de SoftIce et meme à cracker avec SoftIce (tant ka faire ;)
Qu'est ce que SoftIce ?
SoftIce est un debuggeur. Il vous permet d'executer un programme pas a pas pour en trouver
les erreurs...enfin, ca c'est la mainiere officiel de s'en servir :)
Passke nous, les erreurs, on s'en fout ! Ce qu'on veut, c'est de faire tourner un programme
pas a pas pour trouver l'endroit d'ou on appelle un nagscreen
ou mieux encore, trouver l'endroit ou on compare un serial avec le bon (et donc chopper le bon!)
Vu comme ca, ca a l'air facile non ? En fait, les problemes viennent plutot de l'utilisation
du debuggueur et de l'analyse du code Assembleur qu'il nous affiche !
AhAh!! Oui, ici vous pouvez oublier les beau "string data ref" et tout ce qui s'apparente de
pres ou de loin a du texte !!! SoftIce, c'est du 100% ASM ! Avec des 'eax' 'ebx' '40000:02245'
'mov eax, [ebp-14]' etc....
C'est donc le but de se tut' de vous apprendre
a decortiquer tout ca ! :) Et c'est partit !!
Bon, ne mettons
pas la charrue avant les boeufs, et commencons deja par installer SoftIce correctement :
Ok, maintenant il faut que vous modifiez quelque parametres...Installer SoftIce
Lorsqu'on vous demande un serial...ben vous avez ka mettre 1900-0000DD-9B (v3.25)
Installez-le dans le repertoire par defaut...
Choisissez tous les composants...
Si vous trouvez pas votre carte video, mettez "Standard VGA" et cochez "Universal Video driver"...
Choisissez si votre souris est sur COM1, COM2 ou PS2...
Laissez l'installation modifiez votre autoexec.bat...
Faite "Register Later" puis "Yes, restart my computer now".
Vala, maintenant SoftIce est installe !! ;)
Editez le fichier winice.datqui se trouve dans le repertoire ou vous avez installe SoftIce.
(avec notepad, vous faites "ouvrir", vous allez dans
le repertoire de SoftIce, par defaut c:\program files\numega\softice95, et vous ouvrez le fichier winice.dat...)
Enlevez les ';' devant les dll suivantes : kernel32.dll, user32.dll, gdi32.dll.
Recherchez aussi une ligne commencant par ligne INIT= et remplacez là par ceci:
Vous avez redemarrez ? Et maintenant, vous vous dites : bon, comment on lance SoftIce ?Comment kon se sert de SoftIce ?
Reponse: on le lance pas, car vous etes deja dedans ! En fait, c'est comme dans Alien IV :))
Vous etes en apparence dans windows, mais au fond, ya SoftIce qui veille...
Et des que vous tapez Ctrl+D (ou F5), vous etes dans SoftIce !
Et la, vous allez me dire "mais a koi ca sert le Symbol Loader qu'il m'on mis en raccourci ??"
Et ben ca, c'est si vous voulez tracer un programme depuis sa premiere instruction !
Autant dire que ca sert pas a grand chose...du moins pas souvent :) Passke, entre le debut d'un
programme et son nagscreen, peut bien avoir des milliers d'instruction...imaginez si faisiez
chacune de ces instruction pas a pas !
Le probleme du debuggeur, c'est que quand vous entrez dedans, vous pouvez etre n'importe
ou !!
Je m'explique: windows, ca fait plein plein de truc en tache de fond...(vous
imaginez meme pas...) et comme le debuggueur il sait pas que vous vous interressez qu'a
tel ou tel programme, et ben il vous affiche les instructions en cours au moment ou vous l'appelez.
...Oauis...vous avez l'air perdu...En gros, des que vous faites Ctrl+D, vous tombez n'importe ou
dans windows !! (Meme si vous faite Ctrl+D alors que vous etes dans le programme a cracker..)
Va donc falloir trouver une ruse pour atterir ou on veut !
Et c'est ce qu'on appelle les "breakpoints" (= "point d'arret" = bpx).
Ca consiste a dire a SoftIce "Arrete toi a tel endroit".
Et alors je vous entend d'ici me crier :
"Comment kon sait a quel endroit faut s'arreter ?"
Ahhh...En fait on va dire au debuggeur "arretes toi des qu'il y a une fenetre de cree".
C'est alors qu'intervient les fonctions usuelles de windows...
Par exemple, quand un programme cree un fenetre, il utilise souvent
la fonction "CreateWindowExA" et "ShowWindow"...
Donc si on dit a SoftIce "Arretes toi des que la fonction CreateWindowExA intervient",
et ben il nous arretes des que la creation de la fenetre est appellee. Donc on a l'appellant,
et on peut empecher qu'il appelle le nagscreen...vous suivez ??
Bon, en techinque, pour poser un tel point d'arret, il suffit de rentrer dans SoftIce, puis de taper :
Notes toutes les fonctions ayant un A la fin signifie que ce sont des fonctions 32 bits.
C'est pas tout, mais faut bien que vous sachiez utiliser un peu SoftIce...Donc voci une liste
des principales commandes de SoftIce...
Voila, vous savez le principal sur l'utilisation de SoftIce...
N'hesitez pas a revenir sur cette partie du tutorial pour revoir les commandes et les fonctions
utilise dans SoftIce...Quelques fonctions souvent utilisee...
Pour le mode 16 bits enlever simplement le A...
Exemple : GetWindowTextA = GetWindowText
Lecture/Ecriture de fichier :
ReadFile
WriteFile
CreateFileA
Lecture de donnees d'un fichier ini :
GetPrivateProfileStringA
GetPrivateProfileIntA
WritePrivateProfileStringA
WritePrivateProfileIntA
Accès à la base de registre:
RegCreateKeyA
RegDeleteKeyA
RegQueryValueA
RegCloseKeyA
RegOpenKeyA
Boites de Dialogues:
GetWindowTextA
GetDlgItemTextA
GetDlgItemInt
Boite de messages:
MessageBox
MessageBoxA
MessageBoxExA
MessageBeep
Date et Heure :
GetLocalTime
GetSystemTime
GetFileTime
Creation d'une fenetre :
CreateWindowExA
ShowWindow
Fonctions utiles pour les programme en Visual Basic :
Hmempcy
MultiByteToWideChar (comparaison de deux chaines)
Don't Panic !! Si j'enumere ces fonctions (liste non exhaustive..)
c'est juste pour vous montrer quelque exemples...dans les autres parties du cours,
vous apprendrez a vous en servir :)
Commandes Principales de SoftIce
F8 = permet d'éxécuter le programme pas à pas tout en rentrant dans les CALL
(c'est à dire que le programme appelle une fonction, ou une routine de vérification
du serial par exemple...).
Exemple : CALL 000012345 => si ici on fait F8 on rentre dans la fonction.
F10 = la meme chose que F8 mais ne rentre pas dans les CALL : il les éxécutent,
vous n'avez simplement pas le détail de la fonctions ).
Si on fait F10 on éxécute le CALL mais on ne rentre pas dedans
on va directement a l'instruction suivante...
La nuance entre les deux est tres importantes:
Imaginez qu'un Call est une porte donnant sur une piece ayant elle meme d'autre porte,
et ainsi de suite a n'en plus finir...
Et ben, si vous rentrez dans une porte (un CALL) puis, a partir de cette porte,
vous entrez dans une autre, et une autre, et encore une autre....
ben vous vous etes plus qu'eloigner de l'origine... :)
c'est pour ca que F8 est a utiliser avec moderations, et il faut eviter de trop
s'enfoncer de call en call...
F12= permet de sortir d'un CALL et de reprendre l'éxécution juste après.
C'est comme ca que vous retrouverez l'appelant d'une fonction.(vous etes a l'endroit X,
appuyez sur F12 et vous arriverez juste apres l'endroit Y qui appelle X...)
"? nom_de_registre" = permet d'évaluer une valeur d'un registre en décimal
Exemple si eax = 00003039 faites "? eax" et vous obtiendrez : "12345"
? = aide, très utile, vous y trouverez toutes les fonction de SoftIce...
r = pour modifier la valeur d'un registre
Exemple si vous voulez que eax soit égal à 1 faites "r eax=1"
Attention : les valeurs contenues dans les registres sont des valeurs héxadécimale.
bpx nom_de_fonction = pour creer un breakpoint sur une fonction (ex: bpx showwindow).
bpm adresse_memoire = pour creer un breakpoint sur une addresse memoire (ex: bpx 0040660).
bc * = supprimmer tous les breakpoints, car quand vous en poser un, il reste
jusqu'a ce que vous l'effaciez....
Exit = forcer SoftIce à quitter le programme (pratique en cas plantage).
Task = permet de savoir sous quel nom tourne un programme précis.
HWND nom_du_programme = Pour connaître le différents sous objets d'une application
(fenetre, boite de dialogue...)
Ctrl+D ou F5 = Rentrer et sortir de SoftIce...une des touches les plus utile :)
Allez, en cadeau bonux, je vous offre un beau dessin d'une fenetre SoftIce, histoire que vous voyez a quoi ca
ressemble :) Ouais, je sais, ca parait austere vu comme ca, mais en fait c'est bien pratique :)