吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6030|回复: 8
收起左侧

[原创] Zapline 转载(CM--第八天)算法简析

[复制链接]
x80x88 发表于 2009-2-4 15:53
【文章标题】: ZAPLINE 转载(CM--第八天)算法分析
【文章作者】: x80x88
【作者邮箱】: x80x88@163.com
【下载地址】: http://www.52pojie.cn/thread-18487-1-1.html
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  初写破文,大家凑和着看吧!主要是骗点钱
  无壳,Z大说了是汇编的
  用户名:x80x88,试炼码:12345678,OD载入
  闲话少说,定位断点应该好找吧,用字串参考就可以了!
  从这里往下看:
  .......
  00401288  push ebp
  00401289  mov ebp,esp
  0040128B  add esp,-104
  00401291  mov dword ptr ss:[ebp-104],0
  0040129B  push 80
  004012A0  lea eax,dword ptr ss:[ebp-80]
  004012A3  push eax
  004012A4  push 3ED
  004012A9  push dword ptr ds:[40300C]
  004012AF  call <jmp.&user32.GetDlgItemTextA>       ; 取用户名
  004012B4  cmp eax,5                                ; 判断用户名位数是否大于5位
  004012B7  jb CRACKME1.00401384
  004012BD  push 80
  004012C2  lea eax,dword ptr ss:[ebp-100]
  004012C8  push eax
  004012C9  push 3EE
  004012CE  push dword ptr ds:[40300C]
  004012D4  call <jmp.&user32.GetDlgItemTextA>       ; 取假码
  004012D9  cmp eax,8                                ; 判断假码位数是否为8位
  004012DC  jnz CRACKME1.00401384
  004012E2  lea edx,dword ptr ss:[ebp-100]
  004012E8  push edx
  004012E9  call CRACKME1.00401470
  004012EE  push eax
  004012EF  call CRACKME1.00401386                   ; 经过这个Call以后eax=12345678,我输入的假码,前面就是格式转换了:)
  004012F4  cmp eax,0
  004012F7  je CRACKME1.00401384
  ---------------------------------
  004012FD  xor edx,edx
  004012FF  xor eax,52476433                         ; 12345678 xor 52476433=4073324B
  00401304  xor eax,52472456                         ; 4073324B xor 52472456=1234161D
  00401309  sub eax,4000000                          ; 1234161D-4000000=0E34161D
  ---------------------------------
  假码的一小段计算,最后结果为0E34161D-------->①
  
  0040130E  mov ebx,1
  00401313  rol ebx,10                               ; 经过rol 10后ebx=10000
  00401316  lea esi,dword ptr ss:[ebp-80]
  ★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  00401319  cmp byte ptr ds:[esi],0
  0040131C  je short CRACKME1.0040132B
  0040131E  movzx edx,byte ptr ds:[esi]              ; [esi]中为假码,按位取假码参与运算
  00401321  rol edx,10
  00401324  add eax,edx
  00401326  sub eax,ebx
  00401328  inc esi
  00401329  jmp short CRACKME1.00401319
  ★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  
  这1段循环计算看着有点头晕,自己跟一遍其实很简单,以我的为例
  假码经过前面1段计算后的值①为0E34161D,我的用户名为"x80x88",用户名各位ASCII码16进制和为1C8,用户名位
  数为6位,则这段的计算为0E34161D+(1C8 rol 10)+6*10000=0FF6161D-------->②
  
  0040132B  mov ebx,eax                              ; EAX=0FF6161D
  0040132D  ror ebx,10                               ; 高低位互换,此时EBX=161D0FF6
  00401330  cmp bx,0C390                             ; 比较上面计算结果的高4位是否为C390,即0FF6与C390比较,第1次验证
  00401335  jnz short CRACKME1.00401384              ; 可以知道高位必须为固定值C390
  00401337  mov dword ptr ss:[ebp-104],eax
  0040133D  mov ecx,4                                ; ECX赋值4,置循环次数
  00401342  xor edx,edx
  00401344  xor ebx,ebx
  
  ★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  00401346  cmp ecx,0
  00401349  je short CRACKME1.00401355
  0040134B  mov bl,al
  0040134D  add edx,ebx
  0040134F  ror eax,8
  00401352  dec ecx
  00401353  jmp short CRACKME1.00401346
  ★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  这段循环取前面一个循环的计算结果②为0FF6161D计算,即1D+16+F6+0F=138为EDX中的最后值
  
  
  00401355  cmp edx,285                              ; 比较上面循环的计算结果是否为285,此处为138与285进行比较
  0040135B  jnz short CRACKME1.00401384              ; 第2处验证
  0040135D  lea ebx,dword ptr ss:[ebp-104]           ; 将我们的计算结果②0FF6161D赋值给EBX
  00401363  call 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----->我们的真码
  
  
  00401365  cmp edi,0
  00401368  jnz short CRACKME1.00401384
  0040136A  push 1040
  0040136F  push CRACKME1.00402240                   ; keygen me - b2c_2k5
  00401374  push CRACKME1.00402254         ; congrats u did it :)\nnow code me a keygen and write a tut as alway..
  00401379  push dword ptr ds:[40300C]
  0040137F  call <jmp.&user32.MessageBoxA>           ; 注册成功提示
  00401384  leave
  00401385  retn
  
  
--------------------------------------------------------------------------------
【经验总结】
  没啥经验,感觉写文章好累:)
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于x80x88, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2009年02月04日 10:41:34

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

免费评分

参与人数 1威望 +1 收起 理由
mycsy + 1 x80x88大大很久不见了

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

zapline 发表于 2009-2-4 15:56
写得很好
写文章确实很累
【文章标题】: ZAPLINE (CM--第八天)算法分析
改成  ZAPLINE 转载(CM--第八天)算法分析[s:7]
 楼主| x80x88 发表于 2009-2-4 16:03
Z版真是细心认真 ,谢谢提醒,已经修改了!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
重新下載被刪除的檔案.不好意思!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 07:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表