target | Folder Guard 4.11 - FGKey.exe - FGuard32.dll |
about the program | Folder Guard is a software-only security solution for personal or publicly accessible computers running the Windows 95/98 operating system |
about the tutorial |
In this tutorial we will see how to patch a packed dll the FGuard32.dll (packed with aspack) without unpacking it. Folder Guard is protecting files from accessing,Our aim is to crack the password code check made in the FGKey.dll, useful for those that forgot their passwords or they want to access files and they don't know the password ;) |
tolls needed | softice 3.x-4,a hex editor(I use Ultra Edit) |
Run FGKey.exe
set a bpx getdlgitemtexta
put a password (or don't put anything) and press ENTER
F12 once
at the second JN make a "R FL Z"
that's all
In the same way you can unlock the locked files
In the same way you can toggle the protection
Yes,in the same way it is checking all the real with the wrong passwords
As you see we mast patch the location
100089D3 in the FGuard32.dll 0F84B1000000 (NO JUMP) to 0F85B1000000
(JUMP) next step is to make this permanant
Lets see how we can patch
the packed dll that checks the real with the wrong password without unpacking.
The idea it's like this :Before the program its unpacked in the memory we have
to add a bit
of code that says : make the JN ,JNZ .
Load the FGKey.exe into the softice loader ,but before load it in ProcDump32 and with the PE Editor change in Sections the .text from C0000040 into E0000020 .Softice will break here ,in the beginning of the unpacking code:
Break due to Symbol Loader 015F:0040B000 60 PUSHAD 015F:0040B001 E800000000 CALL 0040B006 015F:0040B006 5D POP EBP 015F:0040B007 81ED0A4A4400 SUB EBP,00444A0A 015F:0040B00D BB044A4400 MOV EBX,00444A04 015F:0040B012 03DD ADD EBX,EBP 015F:0040B014 2B9DB1504400 SUB EBX,[EBP+004450B1] 015F:0040B01A 83BDAC50440000 CMP DWORD PTR [EBP+004450AC],00 015F:0040B021 899DBB4E4400 MOV [EBP+00444EBB],EBX 015F:0040B027 0F8517050000 JNZ 0040B544 (NO JUMP) since we are looking for a place to write our patching code lets make the 015F:0040B027 0F8517050000B JNZ 0040B544 (NO JUMP) into 015F:0040B027 0F84C35EFFFF JZ 00400EF0 (JUMP)
if you wonder why
,I'm gona tell you that into 00400EF0
I'll write the patching code and when it will run it will return to 0040B02D
to continue the unpacking code.How did I find that 00400EF0 is the correct place
to write the code ?With a Hex editor (Ultra Edit e.g.) you can see that the
offset EF0 it is empty ,enter "I AM BON JOVY" there and run FGkey.exe
with the symbol loader and search for s 0 l ffffffff "I AM BON JOVY"
you found it at 00400EF0 this place it is not modified by the packing-unpacking
in the memory .Now make the changes at 0040B027 and press F10 ,at 00400EF0 press
"a" and add the
code :
015F:00400EF0 8D05D4890010 LEA EAX,[100089D4] this is the adress of the dll we want to patch 015F:00400EF6 C60085 MOV BYTE PTR [EAX],85 this is the byte we want to patch 015F:00400EF9 8D0500B04000 LEA EAX,[0040B000] we set EAX in its original value 015F:00400EFF E929A10000 JMP 0040B02D and we jump back to the unpacking code
LETS PATCH --------------------------------------------------------------- OFFSET - Original File Bytes Patched File Bytes -------------------------------------------------------------- 00000EF0 - 00 00 00 00 00 00 00 00 --- 8D 05 D4 89 00 10 C6 00 00000EF8 - 00 00 00 00 00 00 00 00 --- 85 8D 05 00 B0 40 00 E9 00000F00 - 00 00 00 00 00 00 00 00 --- 29 A1 00 00 00 00 00 00 00005828 - 85 17 05 00 00 8D 85 D1 --- 84 C3 5E FF FF 8D 85 D1
COOL we patch a packed program without unpacking it in case we want to make a crack there are allot of patcher producers ,this will be useful in case we don't have softice in the computer that is protected by the Folder Guard.
MAKING A CRACK
Using the Flu[X] Byte Patcher Version 2.61 the following asm code it's created to compile do: tasm patch.asm tlink /t patch.obj
file: patch.asm
.model Tiny .code .386 ORG 100h start: mov ah,9 mov dx, offset WelcomeMessage int 21h mov ah, 4eh ;get fileinfo to memory mov cx, 10h mov dx, offset Filename int 21h mov ah, 2fh ;get address from above int 21 call int 21h mov eax, dword ptr es:[bx+1ah] cmp eax, [FileSize] jne FailTest mov ax, 3D02h ;open file mov dx, offset Filename int 21h ; return file handle to ax... mov bx,ax mov ax, 4200h ;seek mov cx,0 mov dx, 500 int 21h mov [newdata], 32 mov ax,4000h mov cx,1 mov dx,offset newdata int 21h mov ax, 4200h ;seek mov cx,0 mov dx, 503 int 21h mov [newdata], 224 mov ax,4000h mov cx,1 mov dx,offset newdata int 21h mov ax, 4200h ;seek mov cx,0 mov dx, 3824 int 21h mov [newdata], 141 mov ax,4000h mov cx,1 mov dx,offset newdata int 21h mov ax, 4200h ;seek mov cx,0 mov dx, 3825 int 21h mov [newdata], 5 mov ax,4000h mov cx,1 mov dx,offset newdata int 21h mov ax, 4200h ;seek mov cx,0 mov dx, 3826 int 21h mov [newdata], 212 mov ax,4000h mov cx,1 mov dx,offset newdata int 21h mov ax, 4200h ;seek mov cx,0 mov dx, 3827 int 21h mov [newdata], 137 mov ax,4000h mov cx,1 mov dx,offset newdata int 21h mov ax, 4200h ;seek mov cx,0 mov dx, 3829 int 21h mov [newdata], 16 mov ax,4000h mov cx,1 mov dx,offset newdata int 21h mov ax, 4200h ;seek mov cx,0 mov dx, 3830 int 21h mov [newdata], 198 mov ax,4000h mov cx,1 mov dx,offset newdata int 21h mov ax, 4200h ;seek mov cx,0 mov dx, 3832 int 21h mov [newdata], 133 mov ax,4000h mov cx,1 mov dx,offset newdata int 21h mov ax, 4200h ;seek mov cx,0 mov dx, 3833 int 21h mov [newdata], 141 mov ax,4000h mov cx,1 mov dx,offset newdata int 21h mov ax, 4200h ;seek mov cx,0 mov dx, 3834 int 21h mov [newdata], 5 mov ax,4000h mov cx,1 mov dx,offset newdata int 21h mov ax, 4200h ;seek mov cx,0 mov dx, 3836 int 21h mov [newdata], 176 mov ax,4000h mov cx,1 mov dx,offset newdata int 21h mov ax, 4200h ;seek mov cx,0 mov dx, 3837 int 21h mov [newdata], 64 mov ax,4000h mov cx,1 mov dx,offset newdata int 21h mov ax, 4200h ;seek mov cx,0 mov dx, 3839 int 21h mov [newdata], 233 mov ax,4000h mov cx,1 mov dx,offset newdata int 21h mov ax, 4200h ;seek mov cx,0 mov dx, 3840 int 21h mov [newdata], 41 mov ax,4000h mov cx,1 mov dx,offset newdata int 21h mov ax, 4200h ;seek mov cx,0 mov dx, 3841 int 21h mov [newdata], 161 mov ax,4000h mov cx,1 mov dx,offset newdata int 21h mov ax, 4200h ;seek mov cx,0 mov dx, 22568 int 21h mov [newdata], 132 mov ax,4000h mov cx,1 mov dx,offset newdata int 21h mov ax, 4200h ;seek mov cx,0 mov dx, 22569 int 21h mov [newdata], 195 mov ax,4000h mov cx,1 mov dx,offset newdata int 21h mov ax, 4200h ;seek mov cx,0 mov dx, 22570 int 21h mov [newdata], 94 mov ax,4000h mov cx,1 mov dx,offset newdata int 21h mov ax, 4200h ;seek mov cx,0 mov dx, 22571 int 21h mov [newdata], 255 mov ax,4000h mov cx,1 mov dx,offset newdata int 21h mov ax, 4200h ;seek mov cx,0 mov dx, 22572 int 21h mov [newdata], 255 mov ax,4000h mov cx,1 mov dx,offset newdata int 21h mov ax, 3e00h ; close file int 21h mov ah,9 ;print mov dx, offset Success int 21h jmp PassTest FailTest: mov ah,9 ; print mov dx, offset FAIL int 21h PassTest: mov ax,4c00h ;exit int 21h newdata db 090h Filename db 'FGKEY.EXE',0 FileSize dd 27136 WelcomeMessage db '',0dh,0Ah db 'Program Name: Folder Guard 4.11 - PASSWORD CRACK ',0dh,0Ah db 'Company: WinAbility(R)',0dh,0Ah db 'Size: FGKey.exe 27.136 b',0dh,0Ah db 'Date: September 26 1999',0dh,0Ah db 'Cracker: cupofcoffe',0dh,0Ah db '',0dh,0Ah db 'Description: This file is cracking the FGKey.exe-FGuard32.dll',0dh,0Ah db ' So you can access files protected with ',0dh,0Ah db ' Folder Guard 4.11',0dh,0Ah db '$' Success db 'Patch Successful',0dh,0Ah,'$' FAIL db 'Patch Failed.. Wrong Version',0dh,0Ah,'$' CrediT db 'FluX - PhrozenCrew98',0dh,0Ah,'$' end start |
tutorial by :
page created September 99