千里之外 发表于 2007-6-4 20:24:04

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 编辑 ]

yingfeng 发表于 2007-6-4 21:07:58

先顶你一个,再看

yingfeng 发表于 2007-6-4 21:28:08

终于搞懂了,谢了!
另纠正一些错误
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中

yingfeng 发表于 2007-6-4 21:29:18

希望多出一些算法分析,呵,跟你学习1

yjz1409276 发表于 2007-6-5 01:43:20

/: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 编辑 ]

kill203 发表于 2007-6-5 06:41:16

原帖由 千里之外 于 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进制数就行了

千里之外 发表于 2007-6-5 08:41:45

原帖由 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

yjz1409276 发表于 2007-6-5 11:37:46

/:09 赞一个!终于能看懂一点点的算法了~呵呵~感谢LZ发的这么好的破文~支持/:09

fonge 发表于 2007-6-6 20:45:06

shl eax,0A
=imul eax,400h(16进制的1024)

就是eax乘以2的0A次方

kangroo 发表于 2007-6-7 09:46:23

我个人认为关键算法部分还可以写的更详细些,这样大家也容易看懂,祝你成功/:09
页: [1] 2
查看完整版本: 2006年PYG作业验证算法分析