x80x88 发表于 2009-2-4 15:53

Zapline 转载(CM--第八天)算法简析

【文章标题】: ZAPLINE 转载(CM--第八天)算法分析
【文章作者】: x80x88
【作者邮箱】: x80x88@163.com
【下载地址】: http://www.52pojie.cn/thread-18487-1-1.html
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
初写破文,大家凑和着看吧!主要是骗点钱:lol
无壳,Z大说了是汇编的
用户名:x80x88,试炼码:12345678,OD载入
闲话少说,定位断点应该好找吧,用字串参考就可以了!
从这里往下看:
.......
00401288push ebp
00401289mov ebp,esp
0040128Badd esp,-104
00401291mov dword ptr ss:,0
0040129Bpush 80
004012A0lea eax,dword ptr ss:
004012A3push eax
004012A4push 3ED
004012A9push dword ptr ds:
004012AFcall <jmp.&user32.GetDlgItemTextA>       ; 取用户名
004012B4cmp eax,5                              ; 判断用户名位数是否大于5位
004012B7jb CRACKME1.00401384
004012BDpush 80
004012C2lea eax,dword ptr ss:
004012C8push eax
004012C9push 3EE
004012CEpush dword ptr ds:
004012D4call <jmp.&user32.GetDlgItemTextA>       ; 取假码
004012D9cmp eax,8                              ; 判断假码位数是否为8位
004012DCjnz CRACKME1.00401384
004012E2lea edx,dword ptr ss:
004012E8push edx
004012E9call CRACKME1.00401470
004012EEpush eax
004012EFcall CRACKME1.00401386                   ; 经过这个Call以后eax=12345678,我输入的假码,前面就是格式转换了:)
004012F4cmp eax,0
004012F7je CRACKME1.00401384
---------------------------------
004012FDxor edx,edx
004012FFxor eax,52476433                         ; 12345678 xor 52476433=4073324B
00401304xor eax,52472456                         ; 4073324B xor 52472456=1234161D
00401309sub eax,4000000                        ; 1234161D-4000000=0E34161D
---------------------------------
假码的一小段计算,最后结果为0E34161D-------->①

0040130Emov ebx,1
00401313rol ebx,10                               ; 经过rol 10后ebx=10000
00401316lea esi,dword ptr ss:
★★★★★★★★★★★★★★★★★★★★★★★★★★★★
00401319cmp byte ptr ds:,0
0040131Cje short CRACKME1.0040132B
0040131Emovzx edx,byte ptr ds:            ; 中为假码,按位取假码参与运算
00401321rol edx,10
00401324add eax,edx
00401326sub eax,ebx
00401328inc esi
00401329jmp short CRACKME1.00401319
★★★★★★★★★★★★★★★★★★★★★★★★★★★★

这1段循环计算看着有点头晕,自己跟一遍其实很简单,以我的为例
假码经过前面1段计算后的值①为0E34161D,我的用户名为"x80x88",用户名各位ASCII码16进制和为1C8,用户名位
数为6位,则这段的计算为0E34161D+(1C8 rol 10)+6*10000=0FF6161D-------->②

0040132Bmov ebx,eax                              ; EAX=0FF6161D
0040132Dror ebx,10                               ; 高低位互换,此时EBX=161D0FF6
00401330cmp bx,0C390                           ; 比较上面计算结果的高4位是否为C390,即0FF6与C390比较,第1次验证
00401335jnz short CRACKME1.00401384            ; 可以知道高位必须为固定值C390
00401337mov dword ptr ss:,eax
0040133Dmov ecx,4                              ; ECX赋值4,置循环次数
00401342xor edx,edx
00401344xor ebx,ebx

★★★★★★★★★★★★★★★★★★★★★★★★★★★★
00401346cmp ecx,0
00401349je short CRACKME1.00401355
0040134Bmov bl,al
0040134Dadd edx,ebx
0040134Fror eax,8
00401352dec ecx
00401353jmp short CRACKME1.00401346
★★★★★★★★★★★★★★★★★★★★★★★★★★★★
这段循环取前面一个循环的计算结果②为0FF6161D计算,即1D+16+F6+0F=138为EDX中的最后值


00401355cmp edx,285                              ; 比较上面循环的计算结果是否为285,此处为138与285进行比较
0040135Bjnz short CRACKME1.00401384            ; 第2处验证
0040135Dlea ebx,dword ptr ss:         ; 将我们的计算结果②0FF6161D赋值给EBX
00401363call ebx                                 ; 这里是个很有意思的地方:)

到这里我们看一下下面,是对EDI的判断,EDI为0则注册成功,而前面EDI并未参与运算,加上一个Call ebx,我们猜测ebx中的值就是机
器码,如果还原得不对则程序出错!要edi为0一般是xor edi,edi,其机器码为33FF,验证一下是否满足第2个验证:33+FF+C3+90=285,ok了

现在我们可以逆推一下注册码了,要注册成功,则②处的值必须为C390FF33

C390FF33+6*10000-(1C8 rol 10)=C1CEFF33(1C8为用户名和位ASCII码16进制和)

C1CEFF33+4000000=C5CEFF33

C5CEFF33 XOR 52472456=9789DB65

9789DB65 XOR 52476433=C5CEBF56----->我们的真码


00401365cmp edi,0
00401368jnz short CRACKME1.00401384
0040136Apush 1040
0040136Fpush CRACKME1.00402240                   ; keygen me - b2c_2k5
00401374push CRACKME1.00402254         ; congrats u did it :)\nnow code me a keygen and write a tut as alway..
00401379push dword ptr ds:
0040137Fcall <jmp.&user32.MessageBoxA>         ; 注册成功提示
00401384leave
00401385retn


--------------------------------------------------------------------------------
【经验总结】
没啥经验,感觉写文章好累:)

--------------------------------------------------------------------------------
【版权声明】: 本文原创于x80x88, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2009年02月04日 10:41:34

[ 本帖最后由 x80x88 于 2009-2-4 16:01 编辑 ]

zapline 发表于 2009-2-4 15:56

写得很好
写文章确实很累
【文章标题】: ZAPLINE (CM--第八天)算法分析
改成ZAPLINE 转载(CM--第八天)算法分析

x80x88 发表于 2009-2-4 16:03

Z版真是细心认真:lol ,谢谢提醒,已经修改了!Z版的原贴中有大牛放出了注册机源码,大家去学习一下吧!:D

[ 本帖最后由 x80x88 于 2009-2-4 16:07 编辑 ]

Hmily 发表于 2009-2-4 16:08

欢迎多多发布算法分析教程,加精鼓励!

小生我怕怕 发表于 2009-2-4 16:36

膜拜下大牛,杀手啊!

creantan 发表于 2009-2-4 17:11

膜拜中。。。。嘎嘎。。X80X88兄出关了。。。

zyftheone 发表于 2009-2-4 18:48

写的不错,虽然比较简单,但是很详细。适合入门的

a2213572 发表于 2009-2-8 01:38

很有深度的教學!
感謝大大的分享.

a2213572 发表于 2009-2-10 08:03

重新下載被刪除的檔案.不好意思!
页: [1]
查看完整版本: Zapline 转载(CM--第八天)算法简析