Voilà une tache hardue !
vous expliquer comment fonctionne Soft-Ice sans aucunes docs officielles
;) , on va y aller douçement et par le début, si vous lisez
quelque chose de faux, faites moi le savoir par un email.
5.1 Bpx
: Breakpoint on execution
5.2 Bpm
: Breakpoint on memory
5.3 Bpr
: Breakpoint on memory range
5.4 BPio
: Breakpoint on i/o port
5.5 BPint
: Breakpoint on Interruption
5.6 BMsg
: Breakpoint on windows message
Soft-Ice est un debugger, il se
charge bien avant Windows, c'est à dire qu'il prend en charge le
code, bref c'est ler kernel du kernel, vous pouvez à tout moment
basculer sous Soft-Ice et ainsi suivre un process en cours ...
Soft-Ice n'est pas le seul debugger
du marché, mais il a l'avantage de prend la main avant le windows,
ce qui fait de lui le contrôleur principal du système.
Ne vous attendez pas à avoir
une belle interface graphique à la Windoz, si la vue des caractères
systèmes vous donne des boutons, passez votre chemin, ces pages
ne sont pas pour vous... Sous Soft-Ice tout est en mode texte, je vous
rassure ce n'est pas du debug mais certaines notions d'assembleurs et de
fonctionnement des registres sont indispensables.
Vous pouvez trouver Soft-Ice dans
de nombreuses pages on the Oueb, je n'ai ni le temps, ni l'envie d'uploader
des centaines de Ko de fichiers sur ma page, on verra ça lorsque
l'Isdn ou l'Adsl se seront généralisé, c'est à
dire jamais tant que FT sera au pouvoir, bref ...
La procédure d'installation
est simple, vous double-cliquez sur Setup et le programme s'installera
tout seul dans un répertoire nommé Siw95, il plaçera
également dans la barre des programmes un zoli icone : le loader,
une fois tous les fichiers copiés, il est très important
de configuer Soft-Ice pour votre carte vidéo, sinon vous zaurez
droit à un bel écran noir lors du basculement sous le debugger,
pour çela rien de plus simple, il suffit de cliquer sur Soft-Ice
driver setup, une fois la procédure réalisé il
vous suffit de relancer la machine, et c'est parti ! au chargement vous
verrez Soft-Ice se charger ...
Petite précision, il est
important de configurer Soft-Ice à ses goûts, et Soft-Ice
dispose d'un fichier de configuration qui s'appelle Winice.dat,
il se trouve dans le répertoire Siw95 ...
Winice.dat renferme toute
la configuration des touches macros, ne les modifiez pas, elles sont très
pratiques et très souvent, dans les cours de cracks on nomme ces
touches, elles sont devenues des "standarts" en cracking, ce que vous pourrez
modifier c'est dans cette partie :
INIT = "X;"
Rajouter
la commande suivante Code on, se qui vous permettra de voir directement
le code en hexa des instructions que vous desassemblez :
INIT = "CODE ON;X;"
Une chose
importante, le chargement des symbols, c'est à dire le chargement
des modules dll qui permettront à Soft-Ice de savoir à
quoi correspond un hmemcpy ou un llseek, vous pouvez decommenter
(en supprimant le ;) les lignes concernant les symboles pour win95 (chicago
pour la version 2.00 de Soft-Ice), ce qui permettra de poser des breakpoints
sur les fonctions incluses dans ces librairies.
Notez
que vous pouvez charger n'importe quelle Dll incluse avec un programme
quelconque (cf cours sur Laplink).
Voilà,
c'est tout en ce qui concerne l'installation de Soft-Ice, nous allons maintenant
aborder la procédure à suivre pour le lancement d'un programme
à debugger.
Pour debugger
un programme sous Soft-Ice, il faut le lancer par le loader, pour cela
vous lancez le Loader et vous indiquez le fichier executable dans la zone
prévue à cette effet, puis vous cliquez sur Load, si vous
n'avez pas compris ca, je ne peux plus rien pour vous ... Au revoir ...
non j'déconne, si vous ne comprenez pas ca, changez de processeur
et faites vous en greffez un dans le cerveau, ou changez de système
d'exploitation, rajoutez des modules mémoires ou changez de tête,
essayez le ping-pong ou la broderie ;)
Dans la
série détails très cons : si le bouton load est grisé
c'est que winice.exe n'a pas été lancé dans
l'autoexec.bat ... ou encore c'est que vous n'avez pas rebooté votre
machine après l'installation, si c'est le cas, voyez quelques lignes
plus haut ;)
X
ou Ctrl-D ou F11 : execution du programme
?
: Help (très important)
T
: trace pas à pas - c'est à dire execute le programme
ligne par ligne, de ce fait on rentre dans les fonctions, les interruptions,
les apis ... pour cela, le programme utilise l'interruption matérielle
01 qui lui permet de tracer un programme pas à pas.
P
ou F10 : step, execute le programme comme pour trace, mais
il ne rentre pas dans les fonctions, les interruptions, les apis ... il
les execute, step = pas, il fait un pas au-dessus des fonctions... compris
?
BP...
: placement de Breakpoint, ou point d'arrêt, comment ca marche ???
il faut savoir qu'il existe une interruption matérielle : la 03,
qui permet de stopper un programme en cours d'execution, lorsque vous placez
un breakpoint sur une adresse précise, Soft-Ice y place en fait
une int 03, détournée bien sur, et de ce fait vous redonne
la main à l'emplacement souhaité, en y replacant la ligne
initiale bien entendu ...
F12
: Permet de sortir d'un call et de revenir juste après l'instruction
appelante du Call, c'est en fait une macro qui place un breakpoint sur
l'adresse qui a appelé le call, pour ceux qui ne savent pas, lors
d'un appel de call, le segment et l'offset de l'appel (CS:EIP) est placé
sur la pile automatiquement par le processeur, le ret dépile ces
adresse.
Les
breakpoints :
Note :
pour une lisibilité facile, les instructions seront en italiques,
les paramètres obligatoires en gras et les paramètres optionnels
entre crochets (les crochets ne doivent pas être mis quand vous tapez
l'instruction !).
Ils constituent une part importante dans le cracking d'un programme, c'est quasiment le nerf de guerre, il faut aboslument les maitriser pour (bien) contrôler le programme, voiçi quelques exemples :
Syntaxe : Bpx adresse [C=count]
Cette commande
permet l'execution du programme jusqu'à adresse, count
permet de définir le nombre d'itérations avant l'arrêt
du programme à adresse, dans adresse vous pouvez définir
soit une valeur explicite (ex: bpx 014F:023DF07C), soit un registre
(ex: bpx cs:eip).
Syntaxe : Bpm[B|W|D] adresse [R|W|RW|X] [qualifier value] [C=count]
Le breakpoint
on memory access peut-être de différent type : B pour un accès
byte (1 octet par défaut), W pour word (2 octets)
et D pour Double Word (4 octets). L'arrêt du programme se
fera lorsqu'un accès mémoire se fera à adresse,
l'accès peut être de type R (Read uniquement), W
(Write, ecriture), RW (Lecture-ecriture), X (execution).
Nous pouvons
spécifier également la valeur dans la zone mémoire
qui provoquera un breakpoint en spécifiant le paramètre [qualifier
value] (ex: bpm ds:eax W eq 1 provoquera un breakpoint lorsque
la zone située en ds:eax sera écrite avec la valeur hexadécimale
1), la syntaxe est la suivante : eq pour egal à, gt
pour greater than (plus grand que)et lt pour less than (plus petit
que), nous pouvons également spécifier un masque de bits
(ex: bpm ds:eax W eq M 1xx0 00x1). Le paramètre count est identique
au bpx.
Syntaxe : Bpr adresse1 adresse2 [R|W|RW|T|TW] [C=count]
Le breakpoint
on memory range vous permet de specifier toute une plage d'adresse dans
laquelle Soft-Ice s'arrétera, les paramètres R,W,RW
sont identiques au Bpm, idem pour le paramètre count.
J'ignore
à quoi serve les paramètres T et TW si quelqu'un
à une idée => mail !
exemple
: Bpr ds:eax ds:ebx R C=9
La zone
mémoire située entre ds:eax et ds:ebx est sous
le couvert d'un breakpoint, le programme donnera la main a Soft-Ice lorsque
9 accès aux données auront été fait.
Syntaxe : BPio port [R|W|RW] [qualifer value] [C=count]
Breakpoint sur un port d'entrée/sortie, la syntaxe [R|W|RW] est identique à ce que nous avons vu précedemment, idem pour qualifer value et count. Le port doit être en hexadécimal.
exemple
: BPio 378 R
Place
un breakpoint sur toute tentative de lecture sur le port 378 (Lpt1)
Syntaxe : BPint interrupt-number [[AL|AH|AX]=value] [C=count]
Voilà
revenir nos chères interruptions du Dos, les interruptions du dos
sont aux apis du windows, elles me permettent de me reperer dans un programme
complexe, on sait où on se trouve ...
Interrupt-number
spécifie le numéro de l'interruption à "breakpointer",
en paramètres éventuels vous pouvez spécifier la zone
inscrite dans le registre AL,AH ou AX, pour ce qui ne savent pas,
AX peut contenir un paramètre definissant soit une sous-interruption
(cf INT 21h qui contient au moins une 60aine de fonctions) soit un paramètre
précis d'une autre intérruption.
La valeur
count est identique à ce que nous avons vu précedemment.
exemple
: BPint 13 Ah=02
Breakpoint
sur l'interruption 13 (gestion des unités de disque), sous-fonction
02 (lecture d'un secteur précis sur un disque)
Syntaxe : BMsg Window-handle [L] [begin-message [end-message]] [C=count]
Breakpoint
très important qui peut très souvent nous sortir d'un mauvais
pas, on va y aller calmement et doucement :
Le Window-handle
est un numéro attribué par le système, c'est un numéro
d'identifiant qui sert à repertorier un element (fenètre,
boutton, boite de liste, etc...)pour visualiser l'ensemble des window-handle
il faut taper la commande hwnd, ou hwnd programme_executable
pour visualiser les handles attribués pour ce programme uniquement.
Les messages
windows sont standarts, ils ne peuvent changer, vous les trouverez tous
par la commande wmsg, les messages peuvent-être soit explicite
(ex : WM_LBUTTONUP) ou numérique (ex : 0202). Ainsi aussitôt
qu'un message précis sera associé à un handle de fenêtre,
Soft-Ice vous redonnera la main, il peut y avoir également un message
de début et un message de fin... Mais nous y reviendrons quand moi-même
j'aurais pigé ce truc.
Le paramètre
count est une fois de plus identique.
exemple
: Bmsg 04c8 WM_COMMAND
Breakpoint
aussitôt qu'une commande est passée à l'handle de la
fenêtre (WM_COMMAND peut signifier une fermeture de l'handle, un
bouton pressé, etc ...).
Conclusion de la première partie :
Voilà la fin de cette leçon qui
j'espère vous aura éclairé sur les breakpoints, nous
attaqueront par la suite les commandes de manipulation de breakpoints,
si je fais tout aussi court c'est pour ne pas vous faire perdre trop de
temps, lisez d'abord tout ca et d'içi 2-3 jours je vontinuerai mes
cours...
Si vous avez une question précise, ou
une remarque générale, mailez-moi.