qxtianlong 发表于 2005-10-6 20:10:12

[原创]Official CFF CrackMe #2破解分析

【破文标题】 Crackme的详解
【对  象】初级新手
【下载地址】笨冬瓜
【破解工具】OD, W32
【保护方式】序号
【任  务】找出序号爆破不算
【破文作者】qxtianlong
【组  织】没有
【破解声明】我的破解很菜,写这篇东西是给对这个 crackme 有兴趣的兄弟们,分享一下破解心得
【电  邮】kk5910@sina.com
【调试环境】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
:00442B9E 8B00                  mov eax, dword ptr
: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
:00442BB8 8B00                  mov eax, dword ptr
: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
:00442B7C 8B83C4020000            mov eax, dword ptr
:00442B82 E835FCFDFF            call 004227BC
:00442B87 837DFC00                cmp dword ptr , 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
:00442B9E 8B00                  mov eax, dword ptr
: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
:00442B70 8B00                  mov eax, dword ptr
: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
:00442B7C 8B83C4020000            mov eax, dword ptr
:00442B82 E835FCFDFF            call 004227BC
:00442B87 837DFC00                cmp dword ptr , 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:
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
*************************************************************************************
页: [1]
查看完整版本: [原创]Official CFF CrackMe #2破解分析