Salut ;)) Apres une tres longue pause ... je reviens ... Kewl nope ? Dans ce phile je c poa trop koi faire .... alors je vais mettre des infos diverses ... Héhé deja presque 14 ko ce ch'tit phile ;)) Dans ce phile je v etre bref ... donner des trucs par ci par la et quelques fois tres pratique a avoir sous la main ... avec le temps on apprend a connaitre ce qui est decrit ici. Sinon j'ap- profondirais p-e par la suite en mettant des exemples. I. Description des commandes de Softice (pas complet) ----------------------------------------------------- 1) L'ecran sous softice ----------------------- EAX=00000167 EBX=00000000 ECX=C0FF8223 EDX=541D69D8 ESI=54ED96FE EDI=00000000 EBP=41444242 ESP=D8722E51 EIP=C000351C o d I S z A p c CS=00CA DS=3646 SS=F44E ES=5542 FS=FD41 GS=FED1 -------------------------------------------------------------------------------- ST0 empty ST4 empty ST1 empty ST5 empty ST2 empty ST6 empty ST3 empty ST7 empty -----WinMain+01FE---------------------------------byte--------------PROT---(1)-- 0137:00402C86 38 21 4D 00 3B CF 76 05-2B CF FC F3 AA 59 5F 64 8!M.;.v.+....Y_d 0137:00402C96 67 8B 16 04 00 8B 42 F8-A3 61 00 4B 00 8B 42 FC g.....B..a.K..B. -----WinMain+01FE--------------------------------------------------------PROT32- 0137:0041000D 6A00 PUSH 00000000 0137:0041000E 53 PUSH EBX 0137:0041000F E8FEFE0300 CALL 004AC031 0137:00410011 85C0 TEST EAX,EAX 0137:00410016 75BE JNE 0046C0F5 0137:0041001B A188884C00 MOV EAX, DWORD PTR [004C8888] 0137:0041001D 85C0 TEST EAX,EAX ------------------------------------MIRC32!CODE+0005C122------------------------ WINICE: Load32 Obj=0003 Add=013F:00CCE000 Len=000002400 Mod MSWSOCK WINICE: Load32 Obj=0003 Add=013F:00CD1000 Len=000000800 Mod MSWSOCK WINICE: Load32 Obj=0003 Add=013F:00CD2000 Len=000001A00 Mod MSWSOCK WINICE: Load32 Obj=0003 Add=013F:00CD4000 Len=000000C00 Mod MSWSOCK :Break due to Symbol Loader a) Description -------------- EAX=00000167 EBX=00000000 ECX=C0FF8223 EDX=541D69D8 ESI=54ED96FE EDI=00000000 EBP=41444242 ESP=D8722E51 EIP=C000351C o d I S z A p c CS=00CA DS=3646 SS=F44E ES=5542 FS=FD41 GS=FED1 Prenons cette premiere partie, elle est appellee sous Softice en tapant 'r' dans la partie commande elle nous donne l'etat des registres, des registres de segment, et des registres de flag. a1) Les registres ----------------- Les registres du processeur ;) Nan contrairement a ce que tout le monde pense les registres du processeur servent si on ne les connait pas on ne peut pas programmer ou alors en faisant plein d'erreurs ;) Ben a quoi ca sert les registres ? ben euh ? ! Les registres servent a pleins de choses à traiter des données, contenir des adresses, faire des opérations etc... etc... a plein de choses quoi ;) Alors les registres : ---------------------------------------------------- 32bits 16bits 8bits 8bits Fonction ---------------------------------------------------- EAX AX AH AL Accumulateur EBX BX BH BL Base ECX CX CH CL Compteur EDX DX DH DL Données ESI SI Index de source EDI DI Index de destination ESP SP Pointeur de pile EBP BP Pointeur de bas ---------------------------------------------------- Le tableau se lit en horizontale c'est a dire : EAX est un registre de 32bits qui peu être utilise par AX qui est de 16bits ou 2 registres de 8bits AH et AL ;) Il y a une différence entre les registres de 8bits un d'entre eux et le poids fort ;) et l'autre le poids faible comment les différencier ? ben euh ? ben en faite c'est simple celui en H est le fort ce qui traduit immédiatement le faible par la lettre L ;) (High et Low pour H et L bah ;) a2) Les registres de segment ---------------------------- CS Segment de code Début d'1 programme ou d'1 sous routine DS Segment de données Contient l'adresse du débuts des données du prog ES Extra segment Utilisé par certaines instructions de copie de bloc SS Segment de pile Pointe sur la pile FS Segment supp. 386 et + Même orle que ES GS Idem Idem Le registre IP (instruction Pointeur) C'est ce registre qui contient le déplacement à effectuer par rapport au début du segment CS pour se positionner sur la prochaine instruction à exécuter. Il ne faut jamais se soucier de ce registre ; il est entièrement géré par le processeur. Depuis le 386, ce registre est devenu 32 bits et s'appelle EIP. a3) Le registres de flag ------------------------ OF = Overflow flag (débordement) ZF = Zero flag (zéro) DF = Direction flag (direction) AF = Auxiliary flag (retenue auxiliaire) IF = Interrupt flag (interruption) PF = Parity flag (parité) TF = Trap flag (exécution pas a pas) CF = Carry flag (retenue) SF = Sign flag (signe) NT = Nested Task Flag (386 et +) IOPL = Input/Output privilege level (286 et plus) Liste des flags d'état : CF, PF, AF, ZF, SF et OF Liste des flags de contrôle : TF, IF et DF a4) Code hexadecimal -------------------- 0137:00402C86 38 21 4D 00 3B CF 76 05-2B CF FC F3 AA 59 5F 64 8!M.;.v.+....Y_d 0137:00402C96 67 8B 16 04 00 8B 42 F8-A3 61 00 4B 00 8B 42 FC g.....B..a.K..B. Appele avec la commande 'd' ou 'data' cette partie permet de voir le code en hexa de la ligne selectionne soit par un clique droit de la souris puis 'display' soit en tapant 'd n°de la ligne'. a5) Source en asm et hexa ------------------------- 0137:00410000 E82A000400 CALL 004AC151 0137:00410005 6A00 PUSH 00000000 0137:00410008 6A00 PUSH 00000000 0137:0041000D 6A00 PUSH 00000000 0137:0041000E 53 PUSH EBX 0137:0041000F E8FEFE0300 CALL 004AC031 0137:00410011 85C0 TEST EAX,EAX 0137:00410016 75BE JNE 0046C0F5 0137:0041001B A188884C00 MOV EAX, DWORD PTR [004C8888] 0137:0041001D 85C0 TEST EAX,EAX Bah pas besoin d'explication pour ca, sauf que pour avoir le code hexadecimale de cote il suffit de taper 'code on'. a6) Partie commande ------------------- Tout simplement l'interpretateur de vos commandes c'est ici que vous pouvez faire toutes choses de choses. Ci dessous un bref historique des touches sous Softice... Il n'est pas complet je l'updaterais au fur et a mesure. F1 : aide F2 : active/desactive la fentre des stacks et des registres F3 : F4 : Appercu de l'ecran F5 : Execute F6 : Change le curseur de fenetre F7 : here F8 : trace into en allant dans les call F9 : permet de mettre un bpx F10 : trace over cad sans passer dans les call F11 : va a l'adresse @ss:esp F12 : ret sF3 : change le format du code hexa cF1 : ecran 60 lignes fentre taille 32 et code hexa cF2 : wr;wd;wc --===} juste l'interpretateur de commande a l'ecran cF8 : cF9 : trace off cF10 : xp cF11 : show b cF12 : trace b aF1 : wr --===} reste a l'ecran l'interpretateur de commande et le code asm aF2 : wd --===} permet de voir le code hexa aF3 : wc --===} fenetre avec le code hexa aF4 : ww --===} espace entre les fenetres aF5 : cls aF11 : affiche la memoire aF12 : affiche la memoire a : permet d'assembler une ligne altkey : nous indique comment est appele softice par ex CTRL D en tapant altkey CTRL E on peut changer altscr VGA | MONO | OFF : dangereux ! permer de changer l'affichage answer : permet d'interroger le modem bc : effacer breakpoint : ex bc 0 efface votre 1er bp bd : meme chose que precedemment sauf qu'il y a moyen de le reactiver be : permet d'activer un bp bh : permet de voir la liste de bp pose bl : liste des bp poses bmsg : bp sur un message ex bmsg 0782 wm_gettext bpe : edit un breakpoint ex bp 0 edit votre 1er bp bpint : bp sur une interruption bpio : bp sur une e/s bpm : bp sur la memoire bpmb : idem bpmd : idem bpmw : idem bpr : memory range bprw : sur un module la memoire bpt : bp sur une zone temporaire bpx : bp sur l'execution bpstat : affiche les statistiques d'un bp ex : bp 0 cls : efface la fenetre class : informe sur la fenetre code on | off : affiche le code hexe color : permet de changer les couleurs cpu : donne des infos sur le processeur d : permet de voir le code hexa db : en byte dd : en dword dl : long real ds : short real dt : 10 byte real dw : word data : idem que d dial : permet de correspondre avec le modem e : editer le code hexa eb : editer la mem ec : " ed : " el : " es : " et : " ew : " exit : quitter le prog en cours exp : export les symboles dans les dll et exe faults : activer/desactiver l'appel de softice si erreur fkey : indique a quoi sert les touches F1 F2 ... flash : restore l'ecran format : change le format de la fenetre g : aller a l'adresse gdt : display descriptor table affiche une description de la table genint : genere une int h : aide hboot : permet de rebooter heap : diplay global windows heap help : aide here : va ou le curseur est hwnd : affiche les informations sur les fichiers en cours idt : affiche la decription de la table d'interruption ldt : afficle la description de la table local lines : permet de choisir ou de savoir la resolution en ligne de l'ecran, par defaut 25 mod : affiche la liste des modules map32 : affiche la map 32bits mapv86 : affiche v86 proc : affiche les procedures avec des infos ret : retout d'une procedure rs : appercu de l'ecran stack : affiche la 'pile' task : affiche les taches courantes vm : affiche des infos sur la 'Virtual Machine' ver : permet d'avoir la version wc : fenetre avec le code hexa wd : permet de voir le code hexa wf : info sur les stacks ww : espace entre les fentres (???) wmsg : affiche le nom et le n° des messages des box II. Configuration de Winice.dat ------------------------------- III. Quelques breakpoints utiles pour cracker ;) ------------------------------------------------ Voila une ch'tite liste des bp les plus courants pour cracker ;) Bien sur je suppose que vous savez que pour le mode 32bits en ajoute un 'a' a la fin ;) ou 'w' ReadFile : lis dans un fichier RegCloseKey : permet dde fermer une cle dans la base des registres RegCreateKey : creer une nouvelle cle dans la base des registres RegDeleteKey : supprime une cle dans la base des resgistres RegOpenKey : permet d'ouvrir une cle dans la base des registres RegQueryValue : permet de lire la valeur d'une cle dans la base des registres GetDiskFreeSpace : prend la taille du disque GetDriveType : se renseigne sur le type de lecteur (cdrom, hd ...) GetFileSize : prend la taille du fichier GetFileAttributes : permet de savoir les attibuts d'un fichier GetLocalTime : prend l'heure local GetSystemDirectory : permet de recup la location GetSystemTime : prend l'heure systeme GetVersion : prend la version GetVolumeInformation : prend le nom du volume de l'unite GetWindowDirectory : prend le rep de Windows Hmemcpy : appelle softice a chaque manip MessageBeep : fenetre avec un beep MessageBox : Une boite avec un message du genre 'Serial incorrect' WinHelp : aide de win WriteFile : ecris dans un fichier IV. Les sauts, test et comparaison ---------------------------------- Voici une liste tire de helppc par David Jurgens qui me semble complete, j'ai juste rajoute le code hexa. add Arithmetic Addition and Logical And cmp CoMPare call Procedure Call dec Decrement div divide inc Increment int Interrupt 77 ou 0F87 ja Jump if Above CF=0 and ZF=0 73 ou 0F83 jae Jump if Above or Equal CF=0 72 ou 0F82 jb Jump if Below CF=1 76 ou 0F86 jbe Jump if Bolow or Equal CF=1 or ZF=1 72 ou 0F82 jc Jump if Carry CF=1 E3 jcxz Jump if CX Zero CX=0 74 ou 0F84 je Jump if Equal ZF=1 7F ou 0F8F jg Jump if Greater (signed) ZF=0 and SF=OF 7E ou 0F8D jge Jump if Greater or Equal (signed) SF=OF 7C ou 0F8C jl Jump if Less SF != OF 7E ou 0F8E jle Jump if Less or Equal ZF=1 or SF != OF jmp Unconditionnal Jump uncondionnal 76 ou 0F86 jna Jump if Not Above CF=1 or ZF=1 72 ou 0F82 jnae Jump if Not Above or Equal CF=1 73 ou 0F83 jnb Jump if Not Below CF=0 72 ou 0F87 jnbe Jump if Not Below or Equal CF=0 and ZF=0 75 ou 0F83 jnc Jump if Not Carry CF=0 75 ou 0F85 jne Jump if Not Equal ZF=0 7E ou 0F8E jng Jump if Not Greater (signed) ZF=1 or SF ! = OF 7C ou 0F8C jnge Jump if Not Greater or Equal (signed) SF ! = OF 7D ou 0F8D jnl Jump if Not Less (signed) SF=OF 7F ou 0F8F jnle Jump if Not Less or Equal (signed) ZF=0 and SF=OF 71 ou 0F81 jno Jump if Not Overflow (signed) OF=0 7B ou 0F8B jnp Jump if No Parity PF=0 79 ou 0F8A jns Jump if Not Signed (signed) SF=0 75 ou 0F85 jnz Jump if Not Zero ZF=1 70 ou 0F80 jo Jump if Overflow (signed) OF=1 7A ou 0F8A jp Jump if Parity PF=1 7A ou 0F8A jpe Jump if Parity Even PF=1 7B ou 0F8B jpo Jump if Parity Odd PF=0 78 ou 0F88 js Jump if Signed (signed) SF=1 74 ou 0F84 jz Jump if Zero ZF=1 lea Load Effective Adress mov Move Byte or Word mul Unsigned Multiply not One's Compliment Negation (Logical NOT) nop No OPeration pop Pop Word off Stack push Push Word onto Stack test Test For Bit Pattern or Inclusive Logical OR ret(f) Return From Procedure sub Substract xor Exclusive OR Voila j'arrete la pour l'instant cause --===} héhéhé d'aut chose a faire ;) si du people souhaite m'aider il est le bienvenue ! A venir dans les modifs de ce texte --==> une section anti debugging :) keewwll ... Mais c'est tres dur seul .. :) Sinon j'ai change d'email ... cause petit prob avec caramail ... PS : aider a soutenir altern !!! http://www.altern.org/ ce n'est poa de sa faute alors aider le !! HaCkVaDoR hvador@moncourrier.com