2006年PYG作业验证算法分析
【文章标题】: 2006年PYG作业验证算法分析【文章作者】: 千里之外
【作者邮箱】: [email protected]
【作者主页】: www.wm5.net.cn
【作者QQ号】: 506398911
【软件名称】: PYG5.4Crackers作业验证之CrackMe
【加壳方式】: UPX
【保护方式】: 注册码
【编写语言】: Borland Delphi 6.0 - 7.0
【使用工具】: PEID OD
【操作平台】: WINXP2
【作者声明】: 谢谢 fonge大哥的热心指导 没有你 我也许离写出算法还很远 再次感谢 祝好人一生平安
--------------------------------------------------------------------------------
【详细过程】
大家好 我是千里之外这个CrackMe 字符做了加密处理 可以用DEDE 找到确定按钮 然后找到关键算法
00468100/.55 PUSH EBP
00468101|.8BEC MOV EBP,ESP
00468103|.33C9 XOR ECX,ECX
00468105|.51 PUSH ECX
00468106|.51 PUSH ECX
00468107|.51 PUSH ECX
00468108|.51 PUSH ECX
00468109|.51 PUSH ECX
0046810A|.51 PUSH ECX
0046810B|.51 PUSH ECX
0046810C|.53 PUSH EBX
0046810D|.56 PUSH ESI
0046810E|.8BD8 MOV EBX,EAX
00468110|.33C0 XOR EAX,EAX
00468112|.55 PUSH EBP
00468113|.68 14824600 PUSH PYG5_4Cr.00468214
00468118|.64:FF30 PUSH DWORD PTR FS:
0046811B|.64:8920 MOV DWORD PTR FS:,ESP
0046811E|.8D55 FC LEA EDX,DWORD PTR SS:
00468121|.8B83 10030000 MOV EAX,DWORD PTR DS:
00468127|.E8 ECBBFCFF CALL PYG5_4Cr.00433D18 ;用户名位数
0046812C|.8D55 F8 LEA EDX,DWORD PTR SS:
0046812F|.8B83 14030000 MOV EAX,DWORD PTR DS:
00468135|.E8 DEBBFCFF CALL PYG5_4Cr.00433D18
0046813A|.8B45 FC MOV EAX,DWORD PTR SS: ;注册码位数
0046813D|.E8 CABFF9FF CALL PYG5_4Cr.0040410C
00468142|.8BF0 MOV ESI,EAX
00468144|.837D FC 00 CMP DWORD PTR SS:,0
00468148|.74 7E JE SHORT PYG5_4Cr.004681C8 ;没填就跳走
0046814A|.837D F8 00 CMP DWORD PTR SS:,0
0046814E|.74 78 JE SHORT PYG5_4Cr.004681C8
00468150|.83C6 08 ADD ESI,8 ;esi=用户名位数+8=4+8=c
00468153|.83EE 06 SUB ESI,6 ;esi=c-6=6
00468156|.8BC6 MOV EAX,ESI ;eax=esi=6
00468158|.C1E0 0A SHL EAX,0A ;eax左移a=1800
0046815B|.B9 36000000 MOV ECX,36 ;ecx=36
00468160|.99 CDQ
00468161|.F7F9 IDIV ECX ;eax=1800/36取商 71
00468163|.8BF0 MOV ESI,EAX ; esi=71
00468165|.8D55 F4 LEA EDX,DWORD PTR SS:
00468168|.8B83 14030000 MOV EAX,DWORD PTR DS:
0046816E|.E8 A5BBFCFF CALL PYG5_4Cr.00433D18 ;注册码位数
00468173|.8B45 F4 MOV EAX,DWORD PTR SS: ;注册码送EAX
00468176|.50 PUSH EAX
00468177|.8D55 F0 LEA EDX,DWORD PTR SS:
0046817A|.8BC6 MOV EAX,ESI ;EAX=71
0046817C|.E8 C3FBF9FF CALL PYG5_4Cr.00407D44 ;算法CALL
00468181|.8B55 F0 MOV EDX,DWORD PTR SS:
00468184|.58 POP EAX ;
00468185|.E8 CEC0F9FF CALL PYG5_4Cr.00404258 113 真码
0046818A|.75 1E JNZ SHORT PYG5_4Cr.004681AA
0046818C|.A1 D8A64600 MOV EAX,DWORD PTR DS:
00468191|.E8 76C1F9FF CALL PYG5_4Cr.0040430C
00468196|.8BD0 MOV EDX,EAX
00468198|.8D45 EC LEA EAX,DWORD PTR SS:
0046819B|.E8 A4BEF9FF CALL PYG5_4Cr.00404044
004681A0|.8B45 EC MOV EAX,DWORD PTR SS:
004681A3|.E8 B8F5FBFF CALL PYG5_4Cr.00427760
004681A8|.EB 3A JMP SHORT PYG5_4Cr.004681E4
004681AA|>A1 D4A64600 MOV EAX,DWORD PTR DS:
004681AF|.E8 58C1F9FF CALL PYG5_4Cr.0040430C
004681B4|.8BD0 MOV EDX,EAX
004681B6|.8D45 E8 LEA EAX,DWORD PTR SS:
004681B9|.E8 86BEF9FF CALL PYG5_4Cr.00404044
004681BE|.8B45 E8 MOV EAX,DWORD PTR SS:
004681C1|.E8 9AF5FBFF CALL PYG5_4Cr.00427760 ;注册码错误
004681C6|.EB 1C JMP SHORT PYG5_4Cr.004681E4
004681C8|>A1 D0A64600 MOV EAX,DWORD PTR DS:
第一个CALL
00407D44 56 PUSH ESI ; 71 为字符 q
00407D45 89E6 MOV ESI,ESP
00407D47 83EC 10 SUB ESP,10
00407D4A 31C9 XOR ECX,ECX
00407D4C 52 PUSH EDX
00407D4D 31D2 XOR EDX,EDX
00407D4F E8 A4FFFFFF CALL PYG5_4Cr.00407CF8 ; 113q算法CALL
00407D54 89F2 MOV EDX,ESI
00407D56 58 POP EAX
00407D57 E8 E0C1FFFF CALL PYG5_4Cr.00403F3C
00407D5C 83C4 10 ADD ESP,10
算法CALL
00407CF8 08C9 OR CL,CL
00407CFA 75 17 JNZ SHORT PYG5_4Cr.00407D13
00407CFC 09C0 OR EAX,EAX
00407CFE 79 0E JNS SHORT PYG5_4Cr.00407D0E
00407D00 F7D8 NEG EAX
00407D02 E8 07000000 CALL PYG5_4Cr.00407D0E
00407D07 B0 2D MOV AL,2D
00407D09 41 INC ECX
00407D0A 4E DEC ESI
00407D0B 8806 MOV BYTE PTR DS:,AL
00407D0D C3 RETN
00407D0E B9 0A000000 MOV ECX,0A ; ecx=0a
00407D13 52 PUSH EDX
00407D14 56 PUSH ESI ; 每步的商参与下次运算 直到商为0
00407D15 31D2 XOR EDX,EDX ; eax=71
00407D17 F7F1 DIV ECX ; 71/oa余数送DL=311
00407D19 4E DEC ESI
00407D1A 80C2 30 ADD DL,30 ; DL=3+30=33(字符3)1+30=31(字符1)1+30=31(字符1)
00407D1D 80FA 3A CMP DL,3A
00407D20 72 03 JB SHORT PYG5_4Cr.00407D25
00407D22 80C2 07 ADD DL,7
00407D25 8816 MOV BYTE PTR DS:,DL ; 字符113 就是真码
00407D27 09C0 OR EAX,EAX
00407D29^ 75 EA JNZ SHORT PYG5_4Cr.00407D15
00407D2B 59 POP ECX
00407D2C 5A POP EDX
--------------------------------------------------------------------------------
【经验总结】
我的试练码 hack 123456789
1.用户名长度+8-6后左移a 结果为 1800
2.1800/36 取商 71
3.71/A商B 余数 33+30=33取字符3
B/A 商1 余数 11+30=31取字符1
1/A 商0 余数 11+30=31取字符1
即每步的商参与下次运算 直到商为0
113 即为注册码
--------------------------------------------------------------------------------
【版权声明】: 谢谢 fonge大哥的热心指导 没有你 我也许离写出算法还很远 再次感谢 祝好人一生平安
2007年06月04日 20:22:36
[ 本帖最后由 千里之外 于 2007-6-5 08:37 编辑 ] 先顶你一个,再看 终于搞懂了,谢了!
另纠正一些错误
0046817C|.E8 C3FBF9FF CALL PYG5_4Cr.00407D44 ;算法CALL
00468181|.8B55 F0 MOV EDX,DWORD PTR SS:
00468184|.58 POP EAX ;113 真码
此时POP EAX EAX此是是假码 ,真码在EDX中 希望多出一些算法分析,呵,跟你学习1 /:02 00468158|.C1E0 0A SHL EAX,0A ;eax左移a=1800
弱弱的问下:eax=6左移A=10位.这个1800怎么算出来的呢?
还有:00468150|.83C6 08 ADD ESI,8 ;esi=注册码位数+8=4+8=c
这里的ESI是用户名位数吧?
[ 本帖最后由 yjz1409276 于 2007-6-5 01:46 编辑 ] 原帖由 千里之外 于 2007-6-4 20:24 发表 https://www.chinapyg.com/images/common/back.gif
【文章标题】: 2006年PYG作业验证算法分析
【文章作者】: 千里之外
【作者邮箱】: [email protected]
【作者主页】: www.wm5.net.cn
【作者QQ号】: 506398911
【软件名称】: PYG5.4Crackers作业验证之Crac ...
其实第三步是在求商的10进制的数,也就是经过第三步的时候直接转成10进制数就行了 原帖由 yjz1409276 于 2007-6-5 01:43 发表 https://www.chinapyg.com/images/common/back.gif
/:02 00468158|.C1E0 0A SHL EAX,0A ;eax左移a=1800
弱弱的问下:eax=6左移A=10位.这个1800怎么算出来的呢?
还有:00468150|.83C6 08 ADD ESI,8 ...
先谢谢大家的支持/:09 那个ESI是用户名的位数 呵呵 谢谢指正/:09
eax左移a=1800这个可用网上的科学计算器计算 注意都是16进制的 我提供个计算器地址 兄弟去试试
http://www.hao123.com/haoserver/jishuqii.htm /:09 赞一个!终于能看懂一点点的算法了~呵呵~感谢LZ发的这么好的破文~支持/:09 shl eax,0A
=imul eax,400h(16进制的1024)
就是eax乘以2的0A次方 我个人认为关键算法部分还可以写的更详细些,这样大家也容易看懂,祝你成功/:09
页:
[1]
2