破解狼人 发表于 2010-10-31 23:42:38

一个Dll型Crackme的轻松KO

附件中文件列表及说明:
   |-- chkreg.dll               核心注册DLL
   |-- crackme.exe             主程序
   |-- Loader-crackme.exe LagLoader生成的补丁

Crack标准:
输入用户名和密码后,点击"注册",显示“注册成功”提示框

文首语:
Loader永远不会消失在cracker的视野里,一个好用的Loader可以让我们远离繁琐的SMC和文件校验等善后工作,使我们的效率更高
① Loader概念,loader又名载入器,本身是个程序,它的任务是动态执行目标并修改目标的指令,使被处理程序能完成预定的功能;
② 现在的壳种类繁多,有很多相关的Anti-Load技术,一般的Loader是以创建子进程的形式来进行工作,补丁的目标一般都是EXE本身,对于一些动态的对象,譬如DLL、OCX等,则无能为力,除非自己编程实现补丁。LagLoader是一款新的Loader,用来解决一些普遍问题,作为一个补充性的工具

初识:
带着些常用工具来对我们的目标来进行识别吧,PEID,OLLYDBG

外观:
crackme.exe    UPX
chkreg.dll      从PEID和区段信息看似PECompact,但OD之一跑,是个Rlpack处理过的,有防修改自保护         
   
内在:
“我是脱神,见壳就脱!”......
“等等,脱这些俩壳,特别还有个Dll,耗费精力不少,先掌握概况,见机行事吧。”
ollydbg载入crackme.exe,跑起,Alt+E观察模块,看看都调用了哪些东西,经过观察发现:
1、调用了msvbvm60.dll和chkreg.dll
2、chkreg.dll里有个export导出表项 Reg
随意输入一些用户名和注册码,进行数次测试

大印象:
crackme.exe系VB6所写,用户名必须长于6字符,检测注册码是否合法是通过chkreg.dll里的Reg来进行的

交心:
断点chkreg.dll里的Reg,输入检测

014F3A8C > 55 PUSH EBP
014F3A8D 8BEC MOV EBP,ESP
014F3A8F 6A 00 PUSH 0
014F3A91 6A 00 PUSH 0
014F3A93 6A 00 PUSH 0
014F3A95 53 PUSH EBX
014F3A96 56 PUSH ESI
014F3A97 57 PUSH EDI
014F3A98 8B45 08 MOV EAX,DWORD PTR SS:
014F3A9B E8 94FAFFFF CALL chkreg.014F3534
014F3AA0 8B45 0C MOV EAX,DWORD PTR SS:
014F3AA3 E8 8CFAFFFF CALL chkreg.014F3534
014F3AA8 33C0 XOR EAX,EAX
014F3AAA 55 PUSH EBP
014F3AAB 68 6D3B4F01 PUSH chkreg.014F3B6D
014F3AB0 64:FF30 PUSH DWORD PTR FS:
014F3AB3 64:8920 MOV DWORD PTR FS:,ESP
014F3AB6 33DB XOR EBX,EBX
014F3AB8 8D45 FC LEA EAX,DWORD PTR SS:
014F3ABB 8B55 08 MOV EDX,DWORD PTR SS:
014F3ABE E8 3DF9FFFF CALL chkreg.014F3400
014F3AC3 8D45 F8 LEA EAX,DWORD PTR SS:
014F3AC6 8B55 0C MOV EDX,DWORD PTR SS:
014F3AC9 E8 32F9FFFF CALL chkreg.014F3400
014F3ACE 8B45 FC MOV EAX,DWORD PTR SS:
014F3AD1 E8 CAF9FFFF CALL chkreg.014F34A0
014F3AD6 8BF0 MOV ESI,EAX
014F3AD8 8B45 F8 MOV EAX,DWORD PTR SS:
014F3ADB E8 C0F9FFFF CALL chkreg.014F34A0
014F3AE0 8BD0 MOV EDX,EAX
014F3AE2 33C0 XOR EAX,EAX
014F3AE4 3BD6 CMP EDX,ESI
014F3AE6 75 26 JNZ SHORT chkreg.014F3B0E
014F3AE8 8BD6 MOV EDX,ESI
014F3AEA 85D2 TEST EDX,EDX
014F3AEC 76 1B JBE SHORT chkreg.014F3B09
014F3AEE B8 01000000 MOV EAX,1
014F3AF3 8B4D FC MOV ECX,DWORD PTR SS:
014F3AF6 0FB64C01 FF MOVZX ECX,BYTE PTR DS:
014F3AFB 41 INC ECX
014F3AFC 8B7D F8 MOV EDI,DWORD PTR SS:
014F3AFF 3A4C07 FF CMP CL,BYTE PTR DS:
014F3B03 75 04 JNZ SHORT chkreg.014F3B09
014F3B05 40 INC EAX
014F3B06 4A DEC EDX
014F3B07 ^ 75 EA JNZ SHORT chkreg.014F3AF3
014F3B09 3BF0 CMP ESI,EAX
014F3B0B 0F92C0 SETB AL
014F3B0E 84C0 TEST AL,AL
014F3B10 74 33 JE SHORT chkreg.014F3B45               //注册码不对则跳
014F3B12 B3 01 MOV BL,1
014F3B14 6A 00 PUSH 0
014F3B16 68 803B4F01 PUSH chkreg.014F3B80
014F3B1B 68 903B4F01 PUSH chkreg.014F3B90
014F3B20 FF75 FC PUSH DWORD PTR SS:
014F3B23 68 A03B4F01 PUSH chkreg.014F3BA0
014F3B28 8D45 F4 LEA EAX,DWORD PTR SS:
014F3B2B BA 03000000 MOV EDX,3
014F3B30 E8 73F9FFFF CALL chkreg.014F34A8
014F3B35 8B45 F4 MOV EAX,DWORD PTR SS:
014F3B38 E8 07FAFFFF CALL chkreg.014F3544
014F3B3D 50 PUSH EAX
014F3B3E 6A 00 PUSH 0
014F3B40 E8 07FFFFFF CALL chkreg.014F3A4C ; JMP to user32.MessageBoxA
014F3B45 33C0 XOR EAX,EAX
014F3B47 5A POP EDX
014F3B48 59 POP ECX
014F3B49 59 POP ECX
014F3B4A 64:8910 MOV DWORD PTR FS:,EDX
014F3B4D 68 743B4F01 PUSH chkreg.014F3B74
014F3B52 8D45 F4 LEA EAX,DWORD PTR SS:
014F3B55 BA 03000000 MOV EDX,3
014F3B5A E8 2DF8FFFF CALL chkreg.014F338C
014F3B5F 8D45 08 LEA EAX,DWORD PTR SS:
014F3B62 BA 02000000 MOV EDX,2
014F3B67 E8 20F8FFFF CALL chkreg.014F338C
014F3B6C C3 RETN



上面算法不是我们关心的,我们主要是找到一个爆破点
014F3B10 74 33 JE SHORT chkreg.014F3B45
这里,不正确则跳出,我们爆破它的话,可以多种方法,可以改成 90 90、eb 00之类
要制作Loader必须了解我们补丁数据的位置,在这里我们做一下分析:

目标点状况分析:
主程序:crackme.exe
补丁点模块:chkreg.dll
Base Address 基址:014f0000(ALT+E)可查看到
VA绝对地址: 014f3b10
RVA 相对地址: 014f3b10-014f0000=3b10
补丁数据:74 33=> 90 90

吻别:
拿出LagLoader……,运行我们的Loader,Good bye
页: [1]
查看完整版本: 一个Dll型Crackme的轻松KO