- UID
- 3169
注册时间2005-9-17
阅读权限20
最后登录1970-1-1
以武会友
该用户从未签到
|
【破文标题】 Crackme 的详解
【对 象】初级新手
【下载地址】笨冬瓜
【破解工具】OD, W32
【保护方式】序号
【任 务】找出序号爆破不算
【破文作者】qxtianlong
【组 织】没有
【破解声明】我的破解很菜,写这篇东西是给对这个 crackme 有兴趣的兄弟们,分享一下破解心得
【电 邮】[email protected]
【调试环境】wxp
【破解过程】
=================================================================================
首先使用peid看看有没有壳,upx的壳,脱壳我就不说了,很简单的,自动或者手动都可以
然后输入试练码78787878,确认后出现友好提示
接下来使用W32分析一下,分析看到的字符串
代码如下
:00442B8B 751A jne 00442BA7
:00442B8D 6A00 push 00000000
* Possible StringData Ref from Code Obj ->"Nothing entered"
|
:00442B8F B92C2C4400 mov ecx, 00442C2C
* Possible StringData Ref from Code Obj ->"You have to enter a serial"
|
:00442B94 BA3C2C4400 mov edx, 00442C3C
:00442B99 A1543C4400 mov eax, dword ptr [00443C54]
:00442B9E 8B00 mov eax, dword ptr [eax]
:00442BA0 E85FBEFFFF call 0043EA04
:00442BA5 EB18 jmp 00442BBF
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00442B8B(C)
|
:00442BA7 6A00 push 00000000
* Possible StringData Ref from Code Obj ->"Wrong Serial"
|
:00442BA9 B9582C4400 mov ecx, 00442C58
* Possible StringData Ref from Code Obj ->"You are a bad cracker!"******看到的地方
|
:00442BAE BA682C4400 mov edx, 00442C68
:00442BB3 A1543C4400 mov eax, dword ptr [00443C54]
:00442BB8 8B00 mov eax, dword ptr [eax]
:00442BBA E845BEFFFF call 0043EA04
**************************************************************************
我们先向上看看错误的友好提示是从00442B8B处调来的
那么我们找到这个地方
:00442B8B 751A jne 00442BA7
可以看到跳向了错误的地方了
:00442BBA E845BEFFFF call 0043EA04
这个CALL就是错误的提示框了
我们再向上分析一下
==========================================================================
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00442B5D(C)
|
:00442B79 8D55FC lea edx, dword ptr [ebp-04]
:00442B7C 8B83C4020000 mov eax, dword ptr [ebx+000002C4]
:00442B82 E835FCFDFF call 004227BC
:00442B87 837DFC00 cmp dword ptr [ebp-04], 00000000
:00442B8B 751A jne 00442BA7
结合上一段的分析,这个一段很容易分析的
一个比较指令后面接一个跳转指令,这里的意思应该是不为空就到错误处了,可以看
上一段的分析,那么为空的话就会。。。。。
===========================================================================
:00442B8D 6A00 push 00000000
* Possible StringData Ref from Code Obj ->"Nothing entered"
|
:00442B8F B92C2C4400 mov ecx, 00442C2C
* Possible StringData Ref from Code Obj ->"You have to enter a serial"
|
:00442B94 BA3C2C4400 mov edx, 00442C3C
:00442B99 A1543C4400 mov eax, dword ptr [00443C54]
:00442B9E 8B00 mov eax, dword ptr [eax]
:00442BA0 E85FBEFFFF call 0043EA04
============================================================================
我想不用我说也应该知道了吧,对了,就是提示你应该输入serial的提示了
:00442BA0 E85FBEFFFF call 0043EA04
这个CALL就是对你的提示了
我们再向上分析一下
============================================================================
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00442AE7(C)
|
:00442B58 E8E70FFCFF call 00403B44
:00442B5D 751A jne 00442B79
:00442B5F 6A00 push 00000000
* Possible StringData Ref from Code Obj ->"Trial CrackMe Cracked!"
|
:00442B61 B9F42B4400 mov ecx, 00442BF4
* Possible StringData Ref from Code Obj ->"Congrats! You were successful!"
|
:00442B66 BA0C2C4400 mov edx, 00442C0C
:00442B6B A1543C4400 mov eax, dword ptr [00443C54]
:00442B70 8B00 mov eax, dword ptr [eax]
:00442B72 E88DBEFFFF call 0043EA04
:00442B77 EB46 jmp 00442BBF
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00442B5D(C)
|
:00442B79 8D55FC lea edx, dword ptr [ebp-04]
:00442B7C 8B83C4020000 mov eax, dword ptr [ebx+000002C4]
:00442B82 E835FCFDFF call 004227BC
:00442B87 837DFC00 cmp dword ptr [ebp-04], 00000000
:00442B8B 751A jne 00442BA7
*******************************************************************************
通过简单的分析不难看出,这段来自00442B5D处
我们来到
:00442B5D 751A jne 00442B79
看他跳到了00442B79的地方的吧!
这个地方我们已经分析过了
他的上面有一个关键CALL,估计里面应该有比较注册码的地方
如果这里不跳的话就会看到成功的提示了
:00442B72 E88DBEFFFF call 0043EA04
这个CALL就是提示你成功的啦!!!
=================================================================================
这是我们通过W32分析的,下面我们来用OD动态分析一下
我们在00442B50处下断
运行,确定后断下
00442B50 8B45 FC mov eax,dword ptr ss:[ebp-4]
00442B53 BA E82B4400 mov edx,CrackMe2.00442BE8 ; ASCII "12011982"
00442B58 E8 E70FFCFF call CrackMe2.00403B44
00442B5D 75 1A jnz short CrackMe2.00442B79
00442B5F 6A 00 push 0
00442B61 B9 F42B4400 mov ecx,CrackMe2.00442BF4 ; ASCII "Trial CrackMe
Cracked!"
00442B66 BA 0C2C4400 mov edx,CrackMe2.00442C0C ; ASCII "Congrats! You
were successful!"
************************************************************************************
F8跟,在00442B58处看到寄存器EAX:78787878,EDX:12011982
EDX应该就是正确的注册码了!
F7跟进call CrackMe2.00403B44
************************************************************************************
00403B47 89C6 mov esi,eax
00403B49 89D7 mov edi,edx
00403B4B 39D0 cmp eax,edx ; CrackMe2.00442BE8
00403B4D 0F84 8F000000 je CrackMe2.00403BE2
可以看到这是对假码和真码的比较了,相等的话就跳向成功的地方了!!!!
收工!
************************************************************************************
总结一下,这个比较的简单采用明码比较,爆破点
:00442B5D 751A jne 00442B79 je 或741A
内存注册机
中断地址 00442B58
中断次数 1
第一字节 E8
指令长度 5
保存信息内存方式-->寄存器EDX
************************************************************************************* |
|