首页
社区
课程
招聘
[原创][PYG]2007年度认证CrackMe的算法分析(DELPHI版)
发表于: 2007-12-29 13:55 10952

[原创][PYG]2007年度认证CrackMe的算法分析(DELPHI版)

2007-12-29 13:55
10952

【文章标题】: [PYG]2007年度认证CrackMe的算法分析(DELPHI版)


【文章作者】: aCaFeeL[DCG][OCN][PYG]


【软件名称】: [PYG]CrackMe2007.EXE


【软件大小】: 241 KB (247,021 字节)


【下载地址】:


【加壳方式】: NsPacK V3.7


【保护方式】: 压缩加壳


【编写语言】: delphi


【使用工具】: OllyDBG v1.10、C32Asm v0.412、DeDe v3.5、W32Dasm v8.93、ImportREC v1.6f、LordPE v1.4、PEid v0.94、Filemon v7.01


【操作平台】: Windows 98 second 或者 Windows XP sp2


【软件介绍】: [PYG]2007年度成员认证CrackMe程序


【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!


--------------------------------------------------------------------------------


【详细过程】


  


    简单说下注册流程:


   


    Form1.OnCreat事件: 检测文件自身的大小、名称,生成机器码,检测key文件,其格式成功、长度相等便成功读入,将读入的注册名运算


                       后与读入的注册码比较,如数据相等,则Button1按钮也就可用了;


   


    Timer2.Timer 事件: 再次检测文件大小、检测key文件,成功才会启用Button1按钮,否则是Button1_a假注册按钮;


   


    Button1.Click事件: 将Email的字符串运算之后,连接注册名,再次运算后,得到大数运算需要的KEY,大数运算后得到注册码的第一部份


                       数据,然后将机器码作浮点实数运算,结果转换为字符串后成为注册码的第二部分数据;


   


    Edit4.Change 事件: 重复Button1.Click事件的前面,然后将MD5加密后的真、假注册码比较,相同,再比较尾部是否为字符串"PYG2007",


                       相等,便启动Timer1.Timer事件;


   


    Timer1.Timer 事件: 将Email的字符串运算后连接注册名,再次运算后,得到大数运算需要的KEY。。。后面雷同,省略了。


   


   


   


    具体分析过程,如下:


   


    CrackMe用了NsPacK V3.7压缩,将其脱壳后,在窗口启动时下断点,得到与注册相关的信息如下:


   


    》》》》》》


    004747B9   .  64:FF30            push    dword ptr fs:[eax]              ;  窗口创建时:


    004747BC   .  64:8920            mov     dword ptr fs:[eax], esp


    004747BF   .  E8 3811FEFF        call    [PYG]Cra.004558FC


    004747C4   .  8D45 F4            lea     eax, dword ptr [ebp-C]


    004747C7   .  BA E04C4700        mov     edx, [PYG]Cra.00474CE0          ;  [PYG]CrackMe2007.EXE


    004747CC   .  E8 93FDF8FF        call    [PYG]Cra.00404564


    004747D1   .  8D95 18FEFFFF      lea     edx, dword ptr [ebp-1E8]


    004747D7   .  A1 0C934700        mov     eax, dword ptr [47930C]


    004747DC   .  8B00               mov     eax, dword ptr [eax]


    004747DE   .  E8 E9FDFDFF        call    [PYG]Cra.004545CC


    004747E3   .  8B85 18FEFFFF      mov     eax, dword ptr [ebp-1E8](TApplication):AnsiString


    004747E9   .  E8 360EFEFF        call    [PYG]Cra.00455624


    004747EE   .  8BD8               mov     ebx, eax


    004747F0   .  E8 0711FEFF        call    [PYG]Cra.004558FC


    004747F5   .  EB 01              jmp     short [PYG]Cra.004747F8


    004747F7      0F                 db      0F


    004747F8   >  31F0               xor     eax, esi


    004747FA   .  EB 0C              jmp     short [PYG]Cra.00474808


    004747FC   >  33C8               xor     ecx, eax


    004747FE   .  EB 03              jmp     short [PYG]Cra.00474803


    00474800   >  EB 09              jmp     short [PYG]Cra.0047480B


    00474802      0F                 db      0F


    00474803   >  59                 pop     ecx


    00474804   .  74 05              je      short [PYG]Cra.0047480B


    00474806   .^ 75 F8              jnz     short [PYG]Cra.00474800


    00474808   >  51                 push    ecx


    00474809   .^ EB F1              jmp     short [PYG]Cra.004747FC


    0047480B   >  81FB C0450400      cmp     ebx, 445C0                      ;  比较文件大小 与 280000


    00474811      7F 39              jg      short [PYG]Cra.0047484C         ;  小于或等于,则不跳,表示没有被脱壳


    00474813   .  8D95 14FEFFFF      lea     edx, dword ptr [ebp-1EC]


    00474819   .  A1 0C934700        mov     eax, dword ptr [47930C]


    0047481E   .  8B00               mov     eax, dword ptr [eax]


    00474820   .  E8 A7FDFDFF        call    [PYG]Cra.004545CC               ;  得到程序名称


    00474825   .  8B85 14FEFFFF      mov     eax, dword ptr [ebp-1EC]


    0047482B   .  50                 push    eax


    0047482C   .  8D95 10FEFFFF      lea     edx, dword ptr [ebp-1F0]


    00474832   .  8B45 F4            mov     eax, dword ptr [ebp-C]


    00474835   .  E8 8228FEFF        call    [PYG]Cra.004570BC               ;  Base64解密


    0047483A   .  8B95 10FEFFFF      mov     edx, dword ptr [ebp-1F0]        ;  界密结果: "[PYG]CrackMe2007.EXE"


    00474840   .  58                 pop     eax


    00474841   .  E8 9200F9FF        call    [PYG]Cra.004048D8               ;  比较文件名称


    00474846      0F84 CA000000      je      [PYG]Cra.00474916               ;  相等,则跳!


    0047484C   >  8B45 FC            mov     eax, dword ptr [ebp-4]


    0047484F   .  8B80 14030000      mov     eax, dword ptr [eax+314]        ;  TButton1


    00474855   .  33D2               xor     edx, edx


    00474857   .  E8 A0FBFBFF        call    [PYG]Cra.004343FC               ;Controls.TControl.SetVisible(TControl;Boolean)


    0047485C   .  8B45 FC            mov     eax, dword ptr [ebp-4]


    0047485F   .  8B80 14030000      mov     eax, dword ptr [eax+314]        ;  TButton1


    00474865   .  33D2               xor     edx, edx


    00474867   .  8B08               mov     ecx, dword ptr [eax]


    00474869   .  FF51 64            call    dword ptr [ecx+64]


    0047486C   .  8B45 FC            mov     eax, dword ptr [ebp-4]


    0047486F   .  8B80 30030000      mov     eax, dword ptr [eax+330]        ;  TButton1_a


    00474875   .  B2 01              mov     dl, 1


    00474877   .  8B08               mov     ecx, dword ptr [eax]


    00474879   .  FF51 64            call    dword ptr [ecx+64]


    0047487C   .  8B45 FC            mov     eax, dword ptr [ebp-4]


    0047487F   .  8B80 30030000      mov     eax, dword ptr [eax+330]        ;  TButton1_a


    00474885   .  B2 01              mov     dl, 1


    00474887   .  E8 70FBFBFF        call    [PYG]Cra.004343FC               ;Controls.TControl.SetVisible(TControl;Boolean)


    0047488C   .  8B45 FC            mov     eax, dword ptr [ebp-4]


    0047488F   .  8B80 00030000      mov     eax, dword ptr [eax+300]        ;  TEdit2


    00474895   .  33D2               xor     edx, edx


    00474897   .  E8 A48AFBFF        call    [PYG]Cra.0042D340               ;  StdCtrls.TCustomEdit.SetReadOnly


    0047489C   .  E8 170FFEFF        call    [PYG]Cra.004557B8               ;  TApplication._PROC_004557B8()


    004748A1   .  33C0               xor     eax, eax


    004748A3   .  55                 push    ebp


    004748A4   .  68 F4484700        push    [PYG]Cra.004748F4


    004748A9   .  64:FF30            push    dword ptr fs:[eax]              ;  ***** TRY


    004748AC   .  64:8920            mov     dword ptr fs:[eax], esp


    004748AF   .  B8 084D4700        mov     eax, [PYG]Cra.00474D08          ;  c:\


    004748B4   .  E8 E30CFEFF        call    [PYG]Cra.0045559C


    004748B9   .  69C0 39300000      imul    eax, eax, 3039


    004748BF   .  05 2770430B        add     eax, 0B437027


    004748C4   .  33D2               xor     edx, edx


    004748C6   .  52                 push    edx                             ; /Arg2 => 00000000


    004748C7   .  50                 push    eax                             ; |Arg1


    004748C8   .  8D85 0CFEFFFF      lea     eax, dword ptr [ebp-1F4]        ; |


    004748CE   .  E8 B93EF9FF        call    [PYG]Cra.0040878C               ; \[PYG]Cra.0040878C


    004748D3   .  8B95 0CFEFFFF      mov     edx, dword ptr [ebp-1F4]


    004748D9   .  8B45 FC            mov     eax, dword ptr [ebp-4]


    004748DC   .  8B80 FC020000      mov     eax, dword ptr [eax+2FC]        ;  TEdit1


    004748E2   .  E8 25FCFBFF        call    [PYG]Cra.0043450C               ;Controls.TControl.SetText(TControl;TCaption)


    004748E7   .  33C0               xor     eax, eax


    004748E9   .  5A                 pop     edx


    004748EA   .  59                 pop     ecx


    004748EB   .  59                 pop     ecx


    004748EC   .  64:8910            mov     dword ptr fs:[eax], edx


    004748EF   .  E9 9E030000        jmp     [PYG]Cra.00474C92


    004748F4   .^ E9 23F3F8FF        jmp     [PYG]Cra.00403C1C


    004748F9   .  8B45 FC            mov     eax, dword ptr [ebp-4]


    004748FC   .  8B80 FC020000      mov     eax, dword ptr [eax+2FC]        ;  TEdit1


    00474902   .  BA 144D4700        mov     edx, [PYG]Cra.00474D14          ;  123456789


    00474907   .  E8 00FCFBFF        call    [PYG]Cra.0043450C


    0047490C   .  E8 73F6F8FF        call    [PYG]Cra.00403F84


    00474911   .  E9 7C030000        jmp     [PYG]Cra.00474C92


    00474916   >  EB 01              jmp     short [PYG]Cra.00474919         ;  检测正确,跳来了这里


    00474918      0F                 db      0F


    00474919   >  31F0               xor     eax, esi


    0047491B   .  EB 0C              jmp     short [PYG]Cra.00474929


    0047491D   >  33C8               xor     ecx, eax


    0047491F   .  EB 03              jmp     short [PYG]Cra.00474924


    00474921   >  EB 09              jmp     short [PYG]Cra.0047492C


    00474923      0F                 db      0F


    00474924   >  59                 pop     ecx


    00474925   .  74 05              je      short [PYG]Cra.0047492C


    00474927   .^ 75 F8              jnz     short [PYG]Cra.00474921


    00474929   >  51                 push    ecx


    0047492A   .^ EB F1              jmp     short [PYG]Cra.0047491D


    0047492C   >  E8 770FFEFF        call    [PYG]Cra.004558A8               ;  CreateFileA -> 打开Key文件


    00474931   .  E8 820EFEFF        call    [PYG]Cra.004557B8               ;  TApplication._PROC_004557B8()


    00474936   .  33C0               xor     eax, eax


    00474938   .  55                 push    ebp


    00474939   .  68 86494700        push    [PYG]Cra.00474986


    0047493E   .  64:FF30            push    dword ptr fs:[eax]              ;  ***** TRY


    00474941   .  64:8920            mov     dword ptr fs:[eax], esp


    00474944   .  B8 084D4700        mov     eax, [PYG]Cra.00474D08          ;  c:\


    00474949   .  E8 4E0CFEFF        call    [PYG]Cra.0045559C               ;  得到C:\下的卷标号


    0047494E   .  69C0 39300000      imul    eax, eax, 3039                  ;  卷标号与$3039 相乘 -> eax


    00474954   .  05 2770430B        add     eax, 0B437027                   ;  其结果 + $0B437027 -> eax


    00474959   .  33D2               xor     edx, edx


    0047495B   .  52                 push    edx                             ; /Arg2 => 00000000


    0047495C   .  50                 push    eax                             ; |Arg1


    0047495D   .  8D85 08FEFFFF      lea     eax, dword ptr [ebp-1F8]        ; |


    00474963   .  E8 243EF9FF        call    [PYG]Cra.0040878C               ; \[将上面的结果转换为无符号数字(即:机器码)


    00474968   .  8B95 08FEFFFF      mov     edx, dword ptr [ebp-1F8]        ;  结果 -》 eax


    0047496E   .  8B45 FC            mov     eax, dword ptr [ebp-4]


    00474971   .  8B80 FC020000      mov     eax, dword ptr [eax+2FC]        ;  TEdit1


    00474977   .  E8 90FBFBFF        call    [PYG]Cra.0043450C               ;Controls.TControl.SetText(TControl;TCaption)


    0047497C   .  33C0               xor     eax, eax


    0047497E   .  5A                 pop     edx


    0047497F   .  59                 pop     ecx


    00474980   .  59                 pop     ecx


    00474981   .  64:8910            mov     dword ptr fs:[eax], edx


    00474984   .  EB 1D              jmp     short [PYG]Cra.004749A3


    00474986   .^ E9 91F2F8FF        jmp     [PYG]Cra.00403C1C


    0047498B   .  8B45 FC            mov     eax, dword ptr [ebp-4]


    0047498E   .  8B80 FC020000      mov     eax, dword ptr [eax+2FC]


    00474994   .  BA 144D4700        mov     edx, [PYG]Cra.00474D14          ;  123456789


    00474999   .  E8 6EFBFBFF        call    [PYG]Cra.0043450C


    0047499E   .  E8 E1F5F8FF        call    [PYG]Cra.00403F84


    004749A3   >  E8 100EFEFF        call    [PYG]Cra.004557B8


    004749A8   .  8D4D F8            lea     ecx, dword ptr [ebp-8]


    004749AB   .  33D2               xor     edx, edx


    004749AD   .  B8 284D4700        mov     eax, [PYG]Cra.00474D28          ;  tR^A+.-%=tpc*


    004749B2   .  E8 0D0DFEFF        call    [PYG]Cra.004556C4               ;  解密后:oJG_4207.dau=


    004749B7   .  E8 FC0DFEFF        call    [PYG]Cra.004557B8


    004749BC   .  8D4D F8            lea     ecx, dword ptr [ebp-8]


    004749BF   .  33D2               xor     edx, edx


    004749C1   .  B8 404D4700        mov     eax, [PYG]Cra.00474D40          ;  thg^%#()_=3WD


    004749C6   .  E8 F90CFEFF        call    [PYG]Cra.004556C4               ;  解密后:op~@:?5;L-"AS


    004749CB   .  E8 E80DFEFF        call    [PYG]Cra.004557B8


    004749D0   .  8D4D F8            lea     ecx, dword ptr [ebp-8]


    004749D3   .  33D2               xor     edx, edx


    004749D5   .  B8 584D4700        mov     eax, [PYG]Cra.00474D58          ;  FDS_^&$#@@~~_


    004749DA   .  E8 E50CFEFF        call    [PYG]Cra.004556C4               ;  解密后:]\JAA:91SPohH


    004749DF   .  E8 D40DFEFF        call    [PYG]Cra.004557B8


    004749E4   .  8D4D F8            lea     ecx, dword ptr [ebp-8]


    004749E7   .  33D2               xor     edx, edx


    004749E9   .  B8 704D4700        mov     eax, [PYG]Cra.00474D70          ;  TV%B^&()_+#$%


    004749EE   .  E8 D10CFEFF        call    [PYG]Cra.004556C4               ;  解密后:ON<\A:5;L;222


    004749F3   .  E8 C00DFEFF        call    [PYG]Cra.004557B8               ;  (最初的 CPU 选择)


    004749F8   .  8D4D F8            lea     ecx, dword ptr [ebp-8]


    004749FB   .  33D2               xor     edx, edx


    004749FD   .  B8 884D4700        mov     eax, [PYG]Cra.00474D88          ;  2-atr^%hGIj-%


    00474A02   .  E8 BD0CFEFF        call    [PYG]Cra.004556C4               ;  解密后:)5xjmB8zTY{;2


    00474A07   .  E8 AC0DFEFF        call    [PYG]Cra.004557B8


    00474A0C   .  EB 01              jmp     short [PYG]Cra.00474A0F


    00474A0E      0F                 db      0F


    00474A0F   >  31F0               xor     eax, esi


    00474A11   .  EB 0C              jmp     short [PYG]Cra.00474A1F


    00474A13   >  33C8               xor     ecx, eax


    00474A15   .  EB 03              jmp     short [PYG]Cra.00474A1A


    00474A17   >  EB 09              jmp     short [PYG]Cra.00474A22


    00474A19      0F                 db      0F


    00474A1A   >  59                 pop     ecx


    00474A1B   .  74 05              je      short [PYG]Cra.00474A22


    00474A1D   .^ 75 F8              jnz     short [PYG]Cra.00474A17


    00474A1F   >  51                 push    ecx


    00474A20   .^ EB F1              jmp     short [PYG]Cra.00474A13


    00474A22   >  8D4D F8            lea     ecx, dword ptr [ebp-8]


    00474A25   .  BA 01000000        mov     edx, 1


    00474A2A   .  B8 A04D4700        mov     eax, [PYG]Cra.00474DA0          ;  KA^A-,-%=tpb-


    00474A2F   .  E8 900CFEFF        call    [PYG]Cra.004556C4               ;  解密后:PYG_2007.dat:


    00474A34   .  E8 7F0DFEFF        call    [PYG]Cra.004557B8


    00474A39   .  8D95 00FEFFFF      lea     edx, dword ptr [ebp-200]


    00474A3F   .  33C0               xor     eax, eax


    00474A41   .  E8 DEDFF8FF        call    [PYG]Cra.00402A24


    00474A46   .  8B85 00FEFFFF      mov     eax, dword ptr [ebp-200]


    00474A4C   .  8D95 04FEFFFF      lea     edx, dword ptr [ebp-1FC]


    00474A52   .  E8 9142F9FF        call    [PYG]Cra.00408CE8


    00474A57   .  8D85 04FEFFFF      lea     eax, dword ptr [ebp-1FC]


    00474A5D   .  8B55 F8            mov     edx, dword ptr [ebp-8]          ;  KEy文件名称 -》 edx


    00474A60   .  E8 2FFDF8FF        call    [PYG]Cra.00404794


    00474A65   .  8B85 04FEFFFF      mov     eax, dword ptr [ebp-1FC]


    00474A6B   .  E8 B40BFEFF        call    [PYG]Cra.00455624


    00474A70   .  8BD8               mov     ebx, eax


    00474A72   .  E8 410DFEFF        call    [PYG]Cra.004557B8


    00474A77   .  83FB FF            cmp     ebx, -1


    00474A7A   .  0F84 A2010000      je      [PYG]Cra.00474C22               ;  如为空,则跳走


    00474A80   .  83FB 20            cmp     ebx, 20                         ;  长度是否为: 32


    00474A83   .  0F85 99010000      jnz     [PYG]Cra.00474C22               ;  不相等,也跳走


    00474A89   .  8D95 F8FDFFFF      lea     edx, dword ptr [ebp-208]


    00474A8F   .  33C0               xor     eax, eax


    00474A91   .  E8 8EDFF8FF        call    [PYG]Cra.00402A24


    00474A96   .  8B85 F8FDFFFF      mov     eax, dword ptr [ebp-208]


    00474A9C   .  8D95 FCFDFFFF      lea     edx, dword ptr [ebp-204]


    00474AA2   .  E8 4142F9FF        call    [PYG]Cra.00408CE8


    00474AA7   .  8D85 FCFDFFFF      lea     eax, dword ptr [ebp-204]


    00474AAD   .  8B55 F8            mov     edx, dword ptr [ebp-8]


    00474AB0   .  E8 DFFCF8FF        call    [PYG]Cra.00404794


    00474AB5   .  8B95 FCFDFFFF      mov     edx, dword ptr [ebp-204]


    00474ABB   .  8D85 1CFEFFFF      lea     eax, dword ptr [ebp-1E4]


    00474AC1   .  E8 DEE2F8FF        call    [PYG]Cra.00402DA4


    00474AC6   .  8D85 1CFEFFFF      lea     eax, dword ptr [ebp-1E4]


    00474ACC   .  E8 6FE0F8FF        call    [PYG]Cra.00402B40


    00474AD1   .  E8 8EDDF8FF        call    [PYG]Cra.00402864


    00474AD6   .  8D55 F0            lea     edx, dword ptr [ebp-10]


    00474AD9   .  8D85 1CFEFFFF      lea     eax, dword ptr [ebp-1E4]


    00474ADF   .  E8 38E6F8FF        call    [PYG]Cra.0040311C


    00474AE4   .  8D85 1CFEFFFF      lea     eax, dword ptr [ebp-1E4]


    00474AEA   .  E8 99E6F8FF        call    [PYG]Cra.00403188


    00474AEF   .  E8 70DDF8FF        call    [PYG]Cra.00402864


    00474AF4   .  8D85 1CFEFFFF      lea     eax, dword ptr [ebp-1E4]


    00474AFA   .  E8 61E3F8FF        call    [PYG]Cra.00402E60


    00474AFF   .  E8 60DDF8FF        call    [PYG]Cra.00402864


    00474B04   .  8D4D E8            lea     ecx, dword ptr [ebp-18]


    00474B07   .  BA 10000000        mov     edx, 10


    00474B0C   .  8B45 F0            mov     eax, dword ptr [ebp-10]


    00474B0F   .  E8 3453FBFF        call    [PYG]Cra.00429E48


    00474B14   .  33DB               xor     ebx, ebx


    00474B16   .  B8 01000000        mov     eax, 1                          ;  循环初时计算KEY文件中的前16位


    00474B1B   >  8B55 F0            mov     edx, dword ptr [ebp-10]


    00474B1E   .  0FB65402 FF        movzx   edx, byte ptr [edx+eax-1]


    00474B23   .  83EA 0F            sub     edx, 0F                         ;  减去F


    00474B26   .  83F2 20            xor     edx, 20                         ;  xor 20


    00474B29   .  03DA               add     ebx, edx                        ;  ebx := ebx + edx;


    00474B2B   .  40                 inc     eax


    00474B2C   .  83F8 11            cmp     eax, 11                         ;  十进制:17


    00474B2F   .^ 75 EA              jnz     short [PYG]Cra.00474B1B         ;  小于17


    00474B31   .  66:9C              pushfw


    00474B33   .  6A 0A              push    0A


    00474B35   >  E8 02000000        call    [PYG]Cra.00474B3C


    00474B3A   .^ 73 F9              jnb     short [PYG]Cra.00474B35


    00474B3C   $  83C4 04            add     esp, 4


    00474B3F   .  FF0C24             dec     dword ptr [esp]


    00474B42   .^ 79 F1              jns     short [PYG]Cra.00474B35


    00474B44   .  83C4 04            add     esp, 4


    00474B47   .  66:9D              popfw


    00474B49   .  69C3 697A0000      imul    eax, ebx, 7A69                  ;  整数乘法 x $7A69


    00474B4F   .  8BD8               mov     ebx, eax


    00474B51   .  8D85 F4FDFFFF      lea     eax, dword ptr [ebp-20C]


    00474B57   .  50                 push    eax                             ; /Arg1


    00474B58   .  899D ECFDFFFF      mov     dword ptr [ebp-214], ebx        ; |


    00474B5E   .  C685 F0FDFFFF 00   mov     byte ptr [ebp-210], 0           ; |


    00474B65   .  8D95 ECFDFFFF      lea     edx, dword ptr [ebp-214]        ; |


    00474B6B   .  33C9               xor     ecx, ecx                        ; |


    00474B6D   .  B8 B84D4700        mov     eax, [PYG]Cra.00474DB8          ; |%0x


    00474B72   .  E8 B149F9FF        call    [PYG]Cra.00409528               ; \[将上面的结果转换成字符串


    00474B77   .  8B85 F4FDFFFF      mov     eax, dword ptr [ebp-20C]        ;  字符串 -> eax 中


    00474B7D   .  8D55 EC            lea     edx, dword ptr [ebp-14]


    00474B80   .  E8 CB37F9FF        call    [PYG]Cra.00408350


    00474B85   .  66:9C              pushfw


    00474B87   .  6A 0A              push    0A


    00474B89   >  E8 02000000        call    [PYG]Cra.00474B90


    00474B8E   .^ 73 F9              jnb     short [PYG]Cra.00474B89


    00474B90   $  83C4 04            add     esp, 4


    00474B93   .  FF0C24             dec     dword ptr [esp]


    00474B96   .^ 79 F1              jns     short [PYG]Cra.00474B89


    00474B98   .  83C4 04            add     esp, 4


    00474B9B   .  66:9D              popfw


    00474B9D   .  8D95 E8FDFFFF      lea     edx, dword ptr [ebp-218]


    00474BA3   .  8B45 E8            mov     eax, dword ptr [ebp-18]         ;  取后面的16个字符串


    00474BA6   .  E8 F539F9FF        call    [PYG]Cra.004085A0               ;  返回一个删除了空制字符和空格的结果字符串


    00474BAB   .  8B85 E8FDFFFF      mov     eax, dword ptr [ebp-218]        ;  -》 eax


    00474BB1   .  8B55 EC            mov     edx, dword ptr [ebp-14]         ;  前16位数的运算结果


    00474BB4   .  E8 1FFDF8FF        call    [PYG]Cra.004048D8               ;  比较两字符串 是否 相等?


    00474BB9   .  0F85 D3000000      jnz     [PYG]Cra.00474C92               ;  不相等,便跳走!


    00474BBF   .  8B45 FC            mov     eax, dword ptr [ebp-4]


    》》》》》》


   


   


    通过对上面的的分析,知道了机器码为:得到C:盘的卷标序列号,然后乘以12345,再加上188968999的结果的无符号数;


   


    而KEY文件的名称为:PYG_2007.dat,其长度必须是32字节,前16位保存注册名,后16位保存注册码,其算法表述为:


   


    var


      pos, ebx, edx : integer;


      ResultName : string;


      handle : Thandle;


    const


      name : array[1..16] of byte =


             ($00,$00,$00,$00,$00,$00,$00,$00,


              $00,$00,$00,$00,$00,$00,$00,$00);


      code : array[1..16] of char =            //默认为16个空格符号


             (' ',' ',' ',' ',' ',' ',' ',' ',


              ' ',' ',' ',' ',' ',' ',' ',' ');


    begin


      for pos := 1 to length(Form1.EditName.Text) do


        name[pos] := ord(Form1.EditName.Text[pos]);


   


      EBX := 0;


      for pos := 1 to length(name) do


        begin


          EDX := ord(name[pos]) - $0F;


          EDX := EDX xor $20;


          EBX := EBX + EDX;


        end;


      EBX := EBX * $7A69;


      ResultName := int2hex(EBX,0);


   


      for pos := 1 to length(ResultName) do


        code[pos] := ResultName[pos];


    end;


   


   


    然后,将name和code的缓冲区中的数据写入到PYG_2007.dat文件中,即可!


   


   


    前面的条件符合之后,再看Timer2.Timer事件中的代码,如下:


   


    》》》》》》


    0047672E   .  64:FF30            push    dword ptr fs:[eax]              ;  Timer2.Timer事件:


    00476731   .  64:8920            mov     dword ptr fs:[eax], esp


    00476734   .  E8 C3F1FDFF        call    [PYG]Cra.004558FC


    00476739   .  8D95 1CFEFFFF      lea     edx, dword ptr [ebp-1E4]


    0047673F   .  A1 0C934700        mov     eax, dword ptr [47930C]


    00476744   .  8B00               mov     eax, dword ptr [eax]


    00476746   .  E8 81DEFDFF        call    [PYG]Cra.004545CC               ;  得到程序名称


    0047674B   .  8B85 1CFEFFFF      mov     eax, dword ptr [ebp-1E4]


    00476751   .  E8 CEEEFDFF        call    [PYG]Cra.00455624


    00476756   .  3D C0450400        cmp     eax, 445C0                      ;  十进制:280000


    0047675B      0F8E CA000000      jle     [PYG]Cra.0047682B               ;  小于,便跳!(表示:加了壳)


    00476761   .  8B45 FC            mov     eax, dword ptr [ebp-4]


    (省略)


    0047682B   >  E8 78F0FDFF        call    [PYG]Cra.004558A8               ;  CreateFileA


    00476830   .  E8 83EFFDFF        call    [PYG]Cra.004557B8


    00476835   .  33C0               xor     eax, eax


    00476837   .  55                 push    ebp


    00476838   .  68 85684700        push    [PYG]Cra.00476885


    0047683D   .  64:FF30            push    dword ptr fs:[eax]              ;  ***** TRY


    00476840   .  64:8920            mov     dword ptr fs:[eax], esp


    00476843   .  B8 886B4700        mov     eax, [PYG]Cra.00476B88          ;  c:\


    00476848   .  E8 4FEDFDFF        call    [PYG]Cra.0045559C               ;  得到C:\的序列号


    0047684D   .  69C0 39300000      imul    eax, eax, 3039


    00476853   .  05 2770430B        add     eax, 0B437027                   ;  eax 的10进制结果为机器码


    00476858   .  33D2               xor     edx, edx


    0047685A   .  52                 push    edx                             ; /Arg2 => 00000000


    0047685B   .  50                 push    eax                             ; |Arg1


    0047685C   .  8D85 14FEFFFF      lea     eax, dword ptr [ebp-1EC]        ; |


    00476862   .  E8 251FF9FF        call    [PYG]Cra.0040878C               ; \[PYG]Cra.0040878C


    00476867   .  8B95 14FEFFFF      mov     edx, dword ptr [ebp-1EC]        ;  //机器码,上面结果的无符号数字


    0047686D   .  8B45 FC            mov     eax, dword ptr [ebp-4]


    (省略)


    0047694E   .  8B85 10FEFFFF      mov     eax, dword ptr [ebp-1F0]


    00476954   .  E8 CBECFDFF        call    [PYG]Cra.00455624


    00476959   .  8BD8               mov     ebx, eax


    0047695B   .  E8 58EEFDFF        call    [PYG]Cra.004557B8


    00476960   .  83FB FF            cmp     ebx, -1                         ;  为空


    00476963   .  0F84 72010000      je      [PYG]Cra.00476ADB               ;  不能跳!


    00476969   .  83FB 20            cmp     ebx, 20                         ;  十进制:32


    0047696C   .  0F85 69010000      jnz     [PYG]Cra.00476ADB               ;  不能跳!


    00476972   .  8D95 04FEFFFF      lea     edx, dword ptr [ebp-1FC]


    (省略)


    004769FD   .  33DB               xor     ebx, ebx


    004769FF   .  B8 01000000        mov     eax, 1


    00476A04   >  8B55 F4            mov     edx, dword ptr [ebp-C]          ;  取前16位数字


    00476A07   .  0FB65402 FF        movzx   edx, byte ptr [edx+eax-1]


    00476A0C   .  83EA 0F            sub     edx, 0F


    00476A0F   .  83F2 20            xor     edx, 20


    00476A12   .  03DA               add     ebx, edx


    00476A14   .  40                 inc     eax


    00476A15   .  83F8 11            cmp     eax, 11                         ;  十进制:17


    00476A18   .^ 75 EA              jnz     short [PYG]Cra.00476A04         ;  小于17


    00476A1A   .  69C3 697A0000      imul    eax, ebx, 7A69                  ;  整乘法


    00476A20   .  8BD8               mov     ebx, eax


    00476A22   .  8D85 00FEFFFF      lea     eax, dword ptr [ebp-200]


    00476A28   .  50                 push    eax                             ; /Arg1


    00476A29   .  899D F8FDFFFF      mov     dword ptr [ebp-208], ebx        ; |


    00476A2F   .  C685 FCFDFFFF 00   mov     byte ptr [ebp-204], 0           ; |


    00476A36   .  8D95 F8FDFFFF      lea     edx, dword ptr [ebp-208]        ; |


    00476A3C   .  33C9               xor     ecx, ecx                        ; |


    00476A3E   .  B8 386C4700        mov     eax, [PYG]Cra.00476C38          ; |%0x


    00476A43   .  E8 E02AF9FF        call    [PYG]Cra.00409528               ; \[PYG]Cra.00409528


    00476A48   .  8B85 00FEFFFF      mov     eax, dword ptr [ebp-200]        ;  //结果


    00476A4E   .  8D55 F0            lea     edx, dword ptr [ebp-10]


    00476A51   .  E8 FA18F9FF        call    [PYG]Cra.00408350               ;  SysUtils.UpperCase(AnsiString):AnsiString;


    00476A56   .  8D95 F4FDFFFF      lea     edx, dword ptr [ebp-20C]


    00476A5C   .  8B45 EC            mov     eax, dword ptr [ebp-14]         ;  取后16位数字


    00476A5F   .  E8 3C1BF9FF        call    [PYG]Cra.004085A0             ;SysUtils.Trim(AnsiString):AnsiString;overload;


    00476A64   .  8B85 F4FDFFFF      mov     eax, dword ptr [ebp-20C]


    00476A6A   .  8B55 F0            mov     edx, dword ptr [ebp-10]


    00476A6D   .  E8 66DEF8FF        call    [PYG]Cra.004048D8               ;  System.@LStrCmp;


    00476A72   .  0F85 C3000000      jnz     [PYG]Cra.00476B3B               ;  不能跳!要相等


    00476A78   .  8B45 FC            mov     eax, dword ptr [ebp-4]


    (省略)


    》》》》》》


   


   


    通过对上面的分析,发现其检测的代码和窗口创建时候的几乎雷同,故跳过,不用分析了;


    但是必须注意:


    要将 0047675B     /0F8E CA000000      jle     [PYG]Cra.0047682B 这行改为jmp强制跳转哟!


    不然到不了Button1按钮中的代码,呵呵;谁让我不是带壳调试呐 ;)


   


   


    将上面修改之后,这时点击『注册』按钮,便来到了Button1按钮点击后的事件中(不是Button1_a按钮哟),其代码如下:



[注意]看雪招聘,专注安全领域的专业人才平台!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (13)
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
兄弟抢闸成功,恭喜
2007-12-29 15:14
0
雪    币: 452
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
什么是抢闸呀,不懂。。。
2007-12-29 15:19
0
雪    币: 256
活跃值: (303)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
4
呵呵大数运算库的应用
2007-12-29 15:44
0
雪    币: 721
活跃值: (350)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
5
不错,支持滴说...
2007-12-29 19:15
0
雪    币: 29812
活跃值: (8319)
能力值: ( LV15,RANK:3306 )
在线值:
发帖
回帖
粉丝
6
楼主N年前就搞定了,呵呵~
2007-12-29 22:12
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
大家误会了,不是我说楼主搞定这个CM

抢闸的意思是:                      在很多人准备发这个破文前,被 ACA 抢先了  
2007-12-29 22:33
0
雪    币: 29812
活跃值: (8319)
能力值: ( LV15,RANK:3306 )
在线值:
发帖
回帖
粉丝
8
哈哈。。。。
2007-12-29 22:42
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
9
好东西要顶起来
2007-12-30 09:24
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
楼主压缩包有密码?
2007-12-31 09:32
0
雪    币: 452
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
11
没有呀,可以解压的
2008-1-8 12:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
学习!厉害呀!
2008-1-11 21:00
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
学习!厉害呀!
2008-4-7 19:31
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
厉害,仔细学习
2008-4-19 10:02
0
游客
登录 | 注册 方可回帖
返回