Soft-Ice version 2.0 - Part One by CyberBobJr - 07/03/1998

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.


Sommaire
    Présentation générale

    Installation

    Lancement de Soft-Ice

    Commandes utiles de base

    Les breakpoints

    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

    Conclusion de la première partie


Présentation générale :

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.

Installation :

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.

Lancement de Soft-Ice :

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 ;)

Commandes utiles de base :

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 :

  1. Bpx : Breakpoint on execution
  2. 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).
     

  3. Bpm : Breakpoint on memory
  4. 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.
     

  5. Bpr : Breakpoint on memory range
  6. 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.
     

  7. BPio : Breakpoint on i/o port
  8. 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)
     

  9. BPint : Breakpoint on Interruption
  10. 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)
     

  11. BMsg : Breakpoint on windows message
  12. 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.