------------------------------------------------------------------------------- NoRoute #1 ¦ Applic sur RingFence ¦ 4759 ¦ Pixel4 ¦ NoRoute #1 ------------------------------------------------------------------------------- ¦¦¦¦¦¦¦¦ Comment degager les ¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦ residents empecheur de ¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦ Hacker en rond... ¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦ Applic sur RingFence ¦¦¦¦¦¦¦¦ Texte et code par PiXel4 (20/02/97) Le hacking nous propose des themes tres varies... mais ds beaucoups de cas cela necessite 1 acces sur 1 becane relie sur rezo local. ( cas d'une universite !) Mais avant de travailler correctement, y fo installer kelque softs bien puissants :) Et c'est toujours po evidant, vu que certain sysop de bahu ou d'univ mettent des protections logicielles sur leurs becannes pour eviter le transfer par disquettes ! Bah, tu me dira, on n'a ka faire sauter le prg... po aussi simple ;) Tout d'abord, fo bien savoir de koa on parle... ----------------------------------------------- Le logiciel cibler ici est destine a ne laisser "passer" que les disquettes autorisees a etre utilises sur LE pc, elle sont dites "certifies". Si une autre disquette venait a etre introduite, le petit prg resident declanche aussi tot 1 message du genre *Disk etranger !!!* en emettant 1 bruit desagreable et strident, qui ne manquera po d'attirer l'attention de tout le monde et surtout ds op ! BIIIIP BIIIP BIIIP Hehe, cale :( Cela peut devenir genant puisque l'on peut meme plus stoker des utils, des prg, des jeux sur les ordis... Fo remedier a tout ca ! Analyse methodique : -------------------- Le logiciel que je vais decrire s'appelle Ring Fence, mais il en existe plein d'autres comme celui ci et ils marchent generalement tous de la meme facon, alors l'adaptation n'est po tres complique ! A vous de la faire en fonction de ce que vous avez. Mais pour vous aider, un fichier Zip a ete inclus avec l'article, pour vous permettre de vous faire la main, et de mieux comprendre sont fonctionnement :) Ring Fence (RF) est un petit residant en .COM, et il se charge en memoire, appele par l'autoexec.bat, et se trouve ds la racine du hdd en fichier cache. Certains ont bien essaye de l'effacer pour supprimer le probleme, mais c'est la qu'est le probleme !!! RF est se compose de 2 parties ! L'une visible, le fichier com, et l'autre sur les secteurs d'amorce du dur. Donc si vous enlever RF.com ,1 partie de rf se charge quand meme, et resultat: quand vous arrivez sous le dos, ben on ne peux rien faire (HDD en Read Only) Po moyen d'ecrire sur le dur ! et bien sur il reconnait po les autres lecteurs que le c: Recapitulons: - la partie cache de RF bride le hdd (read only) - le fichier fr.com debride le hdd ( hdd ok) mais en plus ajoute 1 vecteur qui controle si on place bien 1 disk certifie ds le lecteur A: ou B: (Int 13h) Actions : --------- Il existe plein de methode pour contourner ce petit pb... Je ne vais en developper qu'une... celle qui pour moa est la plus propre, car apres votre passage, un autre utilisateur trouvera le hdd, et la memoire intacte comme si le crack n'avait jamais eu lieu ( cas ds 1 univ.) C'est donc une intervention en memoire et non 1 modif sur 1 fichier. On pourrait aussi penser a 1 modif du fichier, en contournant le code implique ds la verif du disk, (ce qui necessite de localiser le test CRC du logiciel, car en principe ce genre de soft en on 1, pour eviter l'infection par ds virus ou la modif par 1 petit malin ... mais ca c'est po 1 pb le CRC ! ) Ou alors, carrement degager l'integralite de RF sur le hdd Mais alors la, c'est voyant et tout le monde peux faire ce qu'il veux avec les lecteurs, et vous n'aurez plus d'acces privilegié :( Ou tout simplement si vous ne savez po programmer, charger rf.com en memoire et formater des diskquettes, qui seront donc certifier. (tout ca chez vous, pour mettre les prg dont vous avez besion... ) Mais c'est certainement la solution la plus chiante... car elle necssite plein d'op de formatage a chaque fois de l'on veux modifier qque chose !!! (Ne marche po forcement avec un autres soft comme RF...) Et j'en oubli encore, parceque yen a plein ! La technique que nous allons utiliser necessite quelques conaisances en ASM et c'est la plus simple d'emploi, car on peut ensuite passer toutes les disquettes "normales". Alons bon, RF n'est po long, nous allons donc le dessember en integralite ! Pour ce genre 2 petit prg residant, c'est la sol qui s'impose... Vous trouverez join a ce fichier TxT le prg RF.COM et son code desass, ds le Zip. Les essais avec RF.com se font sans pb ! Il ne va po toucher o disk ! Il se charge juste en mem et controles les disks, comme ca vous pourrez voir si le crack marche ! Je ne detaille que les parties interessantes du code, vous avez le fichier RF.asm ds son integralite (source de desassemblage) ! START !!! (commence a 100, c'est 1 com... bien sur...) 0100 E9 0C1A jmp real_start ; (0D1D) # Bahhh, ca commence bien... ! on nous balance deja a la fin du prg... # allons bon... vers le 0D1D # 0D1D 0E push cs # 0D1E 1F pop ds # initialisation du seg de donnees # ici on place les textes ( les messages d'err et l'ecran de presentation...) 0D1F B4 0D mov ah,0Dh 0D21 CD 21 int 21h ; DOS Services ah=function 0Dh # 0D23 B4 09 mov ah,9 # 0D25 ·BA 0874 mov dx,offset data_64 ; (815C:0874=20h) # 0D28 CD 21 int 21h ; DOS Services ah=function 09h # Affiche l'ecran de presentation RF # 0D2A B4 62 mov ah,62h # 0D2C CD 21 int 21h ; DOS Services ah=function 62h # la c'est.... ... get Program Segment Prefix bx # # argggg... et puis merde, si je commence a tout detailler comme ca, je vais # po m'en sortir ! alors je vais a l'essentiel ! 0D2E 8E C3 mov es,bx 0D30 26: 8B 1E 002C mov bx,es:data_1e ; (0000:002C=0EF6Fh) 0D35 8E C3 mov es,bx 0D37 33 DB xor bx,bx ; Zero register # gna gna gna... tout ca on s'en fou... jusqu'a : 0D6B # ben vi, c'est les tests d'integritee.... # important selon la methode de crack choisie... ou autrement si vous voulez # ecrire des conneries a la place de l'ecran de presentation... :) # 0D6B ·BA 0C54 mov dx,offset data_86 ; (815C:0C54='') # 0D6E B4 09 mov ah,9 # 0D70 CD 21 int 21h ; DOS Services ah=function 09h # La il a affiche les tests d'integritees. # 0D72 B8 3D00 mov ax,3D00h # 0D75 ·BA 0C66 mov dx,0C66h ; (815C:0C66=0) # 0D78 CD 21 int 21h ; DOS Services ah=function 3Dh # Ici, le prg ouvre le fichier fr.com (pour test CRC) ; open file, al=mode,name@ds:dx 0D7A 8B D8 mov bx,ax 0D7C C7 06 0157 0000 mov data_24,0 ; (815C:0157=0) 0D82 BF 0001 mov di,1 0D85 loc_94: ; xref 815C:0DBA # 0D85 ·B4 3F mov ah,3Fh ; '?' # 0D87 B9 0200 mov cx,200h # 0D8A ·BA 0874 mov dx,offset data_64 ; (815C:0874=20h) # 0D8D CD 21 int 21h ; DOS Services ah=function 3Fh # La il lit le fichier... ; cx=bytes to ds:dx buffer 0D8F 73 03 jnc loc_95 ; Jump if carry=0 0D91 E9 003F jmp loc_98 ; (0DD3) 0D94 loc_95: ; xref 815C:0D8F 0D94 3D 0000 cmp ax,0 0D97 74 23 je loc_97 ; Jump if equal # et ici, si le test est bon, il poursuit... vers... cs:0DBC 0DBC loc_97: ; xref 815C:0D97 0DBC B4 3E mov ah,3Eh 0DBE CD 21 int 21h ; DOS Services ah=function 3Eh # Ici, il vient de fermer le fichier fr.com # Et alors, c'est la partie la + interessante du prg pour le test CRC ; close file, bx=file handle 0DC0 A1 0157 mov ax,data_24 ; (815C:0157=0) 0DC3 03 06 0104 add ax,data_5 ; (815C:0104=0BB0Dh) 0DC7 3D FFFF cmp ax,0FFFFh # 0DCA 74 0B je loc_99 ; Jump if equal # VOILA ce qui le perdra :))) # cet petit saut conditionnel ! # si il est po verifie , le prg quitte ! # alors remplacer le par 1 JMP # soit JMP 0DD7, ce qui pour 1 modif en editeur hexa donne : EB 0B # au lieu de 74 0B :) { Explic pour les neuneux... A l'aide d'1 editeur HEXA, ouvez le fichier RF.COM. Il fo ensuite remplacer notre branchement je par 1 jmp ! (jump...) On recherche donc un 74 0B, mais il se peux qu'il y ai plusieur 74 0B ds le prg. Alors on rallonge la chaine... on prend ce qui est devant ou derriere ! par exemple : - on va chercher : 04 3D FF FF 74 0B - pour le remplacer par : 04 3D FF FF EB 0B Et c'est tout ! } # 0DCC ·BA 0CB6 mov dx,offset data_88 ; (815C:0CB6='') # 0DCF B4 09 mov ah,9 # 0DD1 CD 21 int 21h ; DOS Services ah=function 09h # la il affiche que le prg est altere... utiliser 1 copie saine... # o cas ou le crc soit po bon ! ; display char string at ds:dx # 0DD3 loc_98: ; xref 815C:0D4B, 0D91 # 0DD3 B4 00 mov ah,0 # 0DD5 CD 21 int 21h ; DOS Services ah=function 00h # et fin du prg... termnaison ; terminate, cs=progm seg prefx # 0DD7 loc_99: ; xref 815C:0DCA # 0DD7 ·BA 0CF6 mov dx,offset data_90 ; (815C:0CF6='- OK') # 0DDA B4 09 mov ah,9 # 0DDC CD 21 int 21h ; DOS Services ah=function 09h # et ici , le fameux 0DD7 pour notre JMP ! # le prg affiche OK ! # et il continu normalement meme si le test est po bon !!! Bon ben voila c'est fini pour la partie controle de l'integrite ! On attaque maintenant la partie hack du sys de controle des disquettes. Et ya du boulot ! Bon tout d'abord, on remarque que losque l'on charge RF,le prg place 1 vecteur d'interruption : 13 2F (chez moa vers l'adrs 0510:0) Ben pour ceux qui connaisse deja bien les verteurs d'interuption, le compte est bon... on le degage ! (Apres quand on se casse, on relance rf.com [ex d'univ]) Mais y une autre solution plus subtile... Si on continue a desass le prg, on voit 1 petit truc interessant, en ce qui concerne la creation et la modif de vecteurs. En effet, le prog va intervenir sur l'int 13h (acces lecteurs etc...) et va creer de nouvelle fct. Reste donc plus qu'a analyser le code et a voir si ya po des fct qui pourrait nous interesser ! Trace Start ! (suite) 0DDE ·BB 013A mov bx,offset data_8 ; (815C:013A=6Eh) 0DE1 BA 0000 mov dx,0 0DE4 ·BE 0082 mov si,data_4e ; (815C:0082=0) 0DE7 loc_100: ; xref 815C:0DEE, 0E11, 0E3D, 0E45 ; 0E4D, 0E55 # 0DE7 ·AC lodsb ; String [si] to al # 0DE8 3C 0D cmp al,0Dh # 0DEA 74 6B je loc_109 ; Jump if equal # 0DEC 3C 2F cmp al,2Fh ; '/' # 0DEE 75 F7 jne loc_100 ; Jump if not equal # Le prg se casse generalement vers le loc 109... et ne continu po sur le # 0E62... # De toute facon on se retrouvera sur le loc 109. # On va donc faire 1 tour du cote du loc 109... ; 0E3B # 0E57 B8 3080 mov ax,3080h # 0E5A BF 5349 mov di,5349h # 0E5D BE 4E47 mov si,4E47h # 0E60 CD 13 int 13h ; ??int non-standard interrupt # AHHHH... Ici on n'a le droit de se poser des questions.... # Vois la connaisser cette fct de l'int 13h... non, ben moa non plus ! # Continuons 1 peu pour voir... 0E62 3C FF cmp al,0FFh 0E64 74 03 je loc_110 ; Jump if equal 0E66 E9 000C jmp loc_111 ; (0E75) 0E69 loc_110: ; xref 815C:0E64 # 0E69 B4 09 mov ah,9 # 0E6B ·BA 0CFD mov dx,offset data_91 ; (815C:0CFD='') (RF deja inst...) # 0E6E CD 21 int 21h ; DOS Services ah=function 09h # Ici, c'est tres clair... Le logiciel RF utilise 1 fonction qu'il definit lui # meme, mais comme il ne l'a pas encore definit, le test est negatif ! # ce qui signifie que c'est le permier lancement... il peut s'installer ! # Je reprend, la fonction 30h, sous fct 80h de l'int 13h est cree par RF. # Donc, on lance RF pour la premiere fois, le soft ne connait po cette fct # puisqu'il ne l'a po encore inst ! # Or, si il est deja resident, il reconnait cette fonction, et place donc # 0FFh ds AL, et suite a la comparaison, le test est positif, il saute donc # sur loc 110 et quitte vers le dos ! (message -RF deja installe-) # # Ici, on a avancé, on connait 1 fct posee par RF ds l'int 13h ! # mais elle ne nous sert po a grand chose! En grattant un peu on va trouver # des trucs plus interessant ! ; display char string at ds:dx # 0E70 B8 4C01 mov ax,4C01h # 0E73 CD 21 int 21h ; DOS Services ah=function 4Ch # termine le prg ; terminate with al=return code 0E75 loc_111: ; xref 815C:0E66 # 0E75 B8 4BFD mov ax,4BFDh # 0E78 CD 13 int 13h ; ??int non-standard interrupt # encore 1 op non conforme hehehe :)) # avec l'int 13h... a approfindir ! 0E7A ·BB 013A mov bx,offset data_8 ; (815C:013A=6Eh) 0E7D 8B 07 mov ax,[bx] 0E7F 33 47 02 xor ax,[bx+2] 0E82 33 47 04 xor ax,[bx+4] 0E85 33 47 06 xor ax,[bx+6] 0E88 A3 0143 mov data_13,ax ; (815C:0143=0) # 0E8B B8 3513 mov ax,3513h # 0E8E CD 21 int 21h ; DOS Services ah=function 35h # lit notre lecteur d'int ; get intrpt vector al in es:bx 0E90 89 1E 0198 mov word ptr ds:[198h],bx ; (815C:0198=0) 0E94 89 1E 019F mov word ptr ds:[19Fh],bx ; (815C:019F=0) 0E98 8C 06 019A mov word ptr ds:[19Ah],es ; (815C:019A=0EF6Fh) 0E9C 8C 06 01A1 mov word ptr ds:[1A1h],es ; (815C:01A1=0EF6Fh) # 0EA0 ·BA 0177 mov dx,offset int_13h_entry # 0EA3 B8 2513 mov ax,2513h # 0EA6 CD 21 int 21h ; DOS Services ah=function 25h # Et la, c'est 1 partie super importante !!! # noter bien le : dx,offset int_13h_entry # ce sont les routine qui vont etre pose ds notre vecteur. # je vous renvoye donc a cette adresse qui compose les 2.4ko du soft charge # en memoire. # (c'est a peu pres tout ce qu'il y a avant 0D1D ; # sans les messages de presentations...bien sur ) ; set intrpt vector al to ds:dx # 0EA8 B8 3513 mov ax,3513h # 0EAB CD 21 int 21h ; DOS Services ah=function 35h # Lit le vecteur # 1 peu + loin... # 0EBD ·BA 0242 mov dx,offset int_13h_ent_1 # 0EC0 B8 2513 mov ax,2513h # 0EC3 CD 21 int 21h ; DOS Services ah=function 25h # Encore 1 adressage qui compose le resident... # que l'on retrouve aussi a : # (pour la 2Fh) 0EF9 B4 25 mov ah,25h ; '%' 0EFB B0 2F mov al,2Fh ; '/' 0EFD ·BA 0712 mov dx,offset int_2Fh_entry 0F00 CD 21 int 21h ; DOS Services ah=function 25h # Apres + rien d'important... le programme se termine en restant residant. Pour ceux qui touche deja po mal, y ont du se faire chier jusqu'ici... Mais je voulais que cette article soit accessible a tout le monde. Alors les experts pourrons chercher ds la premiere partie du prog les fonctions interessante si ca les amuses... :) Pour les autres, ca commence a se corser, et mon article commence a etre long, vu que j'ai po encore traite la partie sur le crack ! Ha, la je sens que yen a qui vont dire... il se defile :)) Mais non, j'ai tous simplement prevu d'ecrire 1 article specialement oriente sur les vecteurs et les interruptions ! Et je reparlerais du cas de RF qui est tres interessent, (et bien sur je reprendrais la permiere partie du prg. Mais la, 1 connaissance parfaite de l'ASM est exigé et se sera 1 article plutot pour les experts en crk ;) Avis aux amateurs... Ben ouaip, jusque la yen a eu que pour les newbies :)) En attendant je vais vous filer du tout cuit ;) On connait deja la 3080h qui verifie si le prg est installe, mais ya aussi : - 3000h ,qui desactive RF !!! - 3002h ,qui reactive RF - 3009h ,qui certifie 1 disquette et yen a peut-etre d'autres... ( a vous de chercher =) Passons maintenant a l'elaboration du crack ! --------------------------------------------- Ben c'est po bien complique, il suffit d'appeler l'int 13h avec les bonnes valeurs ds les registres : mov di,5349h ;# Reportez vous a la loc 109 ! mov si,4e47h ;# " " mov ax,3000h (pour desactiver par exemple...) int 13h C'est TOUT !!! Tout compte fait, c'etait po si long ! Le plus rapide etant de faire 1 petit fichier com. Rmq: Le di et si doivent etre imperativement posé... sinon ca marche po. Ya des exemples ds le fichier ZIP: - ACTIV_RF.ASM - DESAC_RF.ASM - CERTIF.ASM - TESTRF.ASM Et les COM respectif. On peut aussi tout inclure ds 1 seul fichier... mais ca c'est de la prog classique : fichier KSILLY.COM (c'est qu'1 exemple, on peut faire 10 * mieux... mais aussi 10 * + long ... ;) Ben voila, c'est a peu pres tout ce que j'avais a dire sur RF :)) Je remercie tout particulierement Berth ( /MINE\ ), avec qui on s'est bien amusé a cracker cette petite merde hehehe :) GREETINGS: SD,Sorcery,CoD4,MikaSoft,Fft,Kwel,Doc. PiXel4