- UID
- 2
注册时间2004-12-1
阅读权限255
最后登录1970-1-1
总坛主
TA的每日心情 | 开心 2024-12-1 11:04 |
---|
签到天数: 12 天 [LV.3]偶尔看看II
|
【破文标题】[PYG]算法分析入门第一课
【破文作者】飘云[PYG]
【破解工具】PEiD0.93、od二哥修改版、w32dasm
【破解平台】winxp
【作者邮箱】[email protected]
【软件名称】crackme
【保护方式】用户名+注册码
★这是我以前学算法时研究过的一个crackme,比较简单,现在整理出来给大家参考一下,高手止步!!
先用PEiD0.93探视一下“敌情”:呵呵,没有壳,并且为C++编写,试着运行程序,填入注册信息:
PIAOYUN
789456123
弹出错误的窗口,^_^ 接下来w32dasm找到这里:
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004014E4(C), :004014F3(C), :00401516(C), :0040151C(C), :00401522(C)
|:00401528(C), :0040152E(C) 哇!这么多地方跳过来的啊,我们先找到最早的一个:004014E4(C)
|
:00401536 6A00 push 00000000
* Possible StringData Ref from Data Obj ->"ERROR"
|
:00401538 6864304000 push 00403064
* Possible StringData Ref from Data Obj ->"One of the Details you entered "
->"was wrong" ★★★这个就是出错语句,向上看★★★
**********************************************************************************************
现在为了说明方便,用od下断点:004014E4
运行程序然后输入注册相信,中断在此:
004014D6 . E8 6F030000 call <jmp.&MFC42.#3876> ; 取得用户名位数
004014DB . 8B1D FC214000 mov ebx,dword ptr ds:[<&USER32.>; USER32.PostQuitMessage
004014E1 . 83F8 05 cmp eax,5 ; 是否大于5位
004014E4 . 7E 50 jle short chap202.00401536 ; 小于就出错
004014E6 . 8D6E 60 lea ebp,dword ptr ds:[esi+60]
004014E9 . 8BCD mov ecx,ebp
004014EB . E8 5A030000 call <jmp.&MFC42.#3876> ; 取得假码位数
004014F0 . 83F8 05 cmp eax,5 ; 是否大于5位
004014F3 . 7E 41 jle short chap202.00401536 ; 小于则出错
004014F5 . 8D86 E0000000 lea eax,dword ptr ds:[esi+E0]
004014FB . 8BCF mov ecx,edi
004014FD . 50 push eax
004014FE . E8 41030000 call <jmp.&MFC42.#3874>
00401503 . 8DBE E4000000 lea edi,dword ptr ds:[esi+E4]
00401509 . 8BCD mov ecx,ebp
0040150B . 57 push edi
0040150C . E8 33030000 call <jmp.&MFC42.#3874>
00401511 . 8B07 mov eax,dword ptr ds:[edi] ; 假码送到eax
00401513 . 8038 36 cmp byte ptr ds:[eax],36 ; 第一位是否位36 即字符6
00401516 75 1E jnz short chap202.00401536 ; 不是则出错
00401518 . 8078 01 32 cmp byte ptr ds:[eax+1],32 ; 第二位是否位32 即字符2
0040151C 75 18 jnz short chap202.00401536 ; 不是则出错
0040151E . 8078 02 38 cmp byte ptr ds:[eax+2],38 ; 第三位是否位38 即字符8
00401522 75 12 jnz short chap202.00401536 ; 不是则出错
00401524 . 8078 03 37 cmp byte ptr ds:[eax+3],37 ; 第四位是否为37 即字符7
00401528 75 0C jnz short chap202.00401536 ; 不是则出错
0040152A . 8078 04 2D cmp byte ptr ds:[eax+4],2D ; 第五位是否位2D 即符号“-”
0040152E 75 06 jnz short chap202.00401536 ; 不是则出错
00401530 . 8078 05 41 cmp byte ptr ds:[eax+5],41 ; 第六位是否位41 即字母A
00401534 74 17 je short chap202.0040154D ; 这里不跳就Game Over!!
00401536 > \6A 00 push 0
00401538 . 68 64304000 push chap202.00403064 ; ASCII "ERROR"
0040153D . 68 38304000 push chap202.00403038 ; ASCII "One of the Details
you entered was wrong"
00401542 . 8BCE mov ecx,esi
00401544 . E8 F5020000 call <jmp.&MFC42.#4224>
00401549 . 6A 00 push 0
0040154B . FFD3 call ebx
0040154D > 8D8E E0000000 lea ecx,dword ptr ds:[esi+E0]
00401553 . 8D5424 14 lea edx,dword ptr ss:[esp+14]
00401557 . 51 push ecx
00401558 . 68 2C304000 push chap202.0040302C ; ASCII "Well done,"
0040155D . 52 push edx
0040155E . E8 D5020000 call <jmp.&MFC42.#926>
【算法总结】
用户名必须大于5位,但是没有参与运算
注册码是固定的:6287-A |
|