[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 FC214000mov 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:
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 E0000000lea eax,dword ptr ds:
004014FB .8BCF mov ecx,edi
004014FD .50 push eax
004014FE .E8 41030000 call <jmp.&MFC42.#3874>
00401503 .8DBE E4000000lea edi,dword ptr ds:
00401509 .8BCD mov ecx,ebp
0040150B .57 push edi
0040150C .E8 33030000 call <jmp.&MFC42.#3874>
00401511 .8B07 mov eax,dword ptr ds: ;假码送到eax
00401513 .8038 36 cmp byte ptr ds:,36 ;第一位是否位36即字符6
00401516 75 1E jnz short chap202.00401536 ;不是则出错
00401518 .8078 01 32 cmp byte ptr ds:,32 ;第二位是否位32即字符2
0040151C 75 18 jnz short chap202.00401536 ;不是则出错
0040151E .8078 02 38 cmp byte ptr ds:,38 ;第三位是否位38即字符8
00401522 75 12 jnz short chap202.00401536 ;不是则出错
00401524 .8078 03 37 cmp byte ptr ds:,37 ;第四位是否为37即字符7
00401528 75 0C jnz short chap202.00401536 ;不是则出错
0040152A .8078 04 2D cmp byte ptr ds:,2D ;第五位是否位2D即符号“-”
0040152E 75 06 jnz short chap202.00401536 ;不是则出错
00401530 .8078 05 41 cmp byte ptr ds:,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 E0000000lea ecx,dword ptr ds:
00401553 .8D5424 14 lea edx,dword ptr ss:
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 这个确实不错啊,对于新手,得感谢我们的老大啊 辛苦,学习~ 呵呵~!这个是看雪的crackme 顶你一个, 学习! 呵呵,以前练习过,支持 练习下下。 老大
我会好好学习的
但也希望提供点破解工具
好让我们自己进行练习 我没有提供工具吗??