首页
社区
课程
招聘
[旧帖] [原创]1st Security Agent V7.1算法分析 0.00雪花
发表于: 2007-5-21 12:55 4202

[旧帖] [原创]1st Security Agent V7.1算法分析 0.00雪花

2007-5-21 12:55
4202
标 题: 【原创】1st Security Agent V7.1算法分析
作 者: foresee
时 间: 2007-05-21,11:48
链 接:

【文章标题】: 1st Security Agent V7.1算法分析
【文章作者】: foresee
【作者邮箱】: vangjian@hotmail.com
【作者主页】: ******
【作者QQ号】: ******
【软件名称】: 1st Security Agent V7.1
【下载地址】: 34aK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4G2k6Y4c8Z5k6h3q4H3i4K6u0W2j5$3!0E0i4K6u0r3L8X3g2%4j5h3c8E0K9h3&6Q4x3X3g2Z5N6r3#2D9
【加壳方式】: 无
【保护方式】: 序列号
【编写语言】: Borland Delphi 6.0 - 7.0
【使用工具】: OD
【软件介绍】: protect and secure Windows PC
【作者声明】: 只是感兴趣,没有其他目的。
--------------------------------------------------------------------------------
【详细过程】
  
  先运行程序,提示输入序列号,随便输入,显示“This Registration Colde Is Invalid”,关闭程序,用OD载入
004D5008 >/$  55            push    ebp
004D5009  |.  8BEC          mov     ebp, esp
004D500B  |.  83C4 EC       add     esp, -14
004D500E  |.  33C0          xor     eax, eax
004D5010  |.  8945 EC       mov     dword ptr [ebp-14], eax
004D5013  |.  B8 404C4D00   mov     eax, 004D4C40
004D5018  |.  E8 8319F3FF   call    004069A0
004D501D  |.  33C0          xor     eax, eax
004D501F  |.  55            push    ebp
004D5020  |.  68 81514D00   push    004D5181
004D5025  |.  64:FF30       push    dword ptr fs:[eax]
004D5028  |.  64:8920       mov     dword ptr fs:[eax], esp
004D502B  |.  A1 08814D00   mov     eax, dword ptr [4D8108]
004D5030  |.  8B00          mov     eax, dword ptr [eax]
004D5032  |.  E8 F564FBFF   call    0048B52C
004D5037  |.  68 90514D00   push    004D5190                         ; /MsgName = "XX0MZZIARRSS04121972"
004D503C  |.  E8 2B26F3FF   call    <jmp.&user32.RegisterWindowMessa>; \RegisterWindowMessageA
004D5041  |.  8B15 84804D00 mov     edx, dword ptr [4D8084]          ;  newadmin.004D9DA4
004D5047  |.  8902          mov     dword ptr [edx], eax
004D5049  |.  E8 9AFAFFFF   call    004D4AE8
004D504E  |.  3C 06         cmp     al, 6
004D5050  |.  75 0A         jnz     short 004D505C
004D5052  |.  E8 C5E8FFFF   call    004D391C
004D5057  |.  E9 0F010000   jmp     004D516B
004D505C  |>  E8 87FAFFFF   call    004D4AE8
004D5061  |.  3C 03         cmp     al, 3
004D5063  |.  75 17         jnz     short 004D507C

下断Bpx  MESSAGEBOXA,F9运行,输入序列号123456789,点OK以后,断在以下处
0048B83A  |.  E8 D5BDF7FF   call    <jmp.&user32.MessageBoxA>        ; \MessageBoxA  断在此处,F8单步步过,弹出注册错误的窗口
0048B83F  |.  8945 F8       mov     dword ptr [ebp-8], eax           ;
0048B842  |.  33C0          xor     eax, eax                         ;
0048B844  |.  5A            pop     edx                              ;  
0048B845  |.  59            pop     ecx
0048B846  |.  59            pop     ecx
0048B847  |.  64:8910       mov     dword ptr fs:[eax], edx
0048B84A  |.  68 B0B84800   push    0048B8B0
0048B84F  |>  8B45 EC       mov     eax, dword ptr [ebp-14]
0048B852  |.  3B45 E8       cmp     eax, dword ptr [ebp-18]
0048B855  |.  74 38         je      short 0048B88F
0048B857  |.  6A 1D         push    1D
0048B859  |.  6A 00         push    0
0048B85B  |.  6A 00         push    0
0048B85D  |.  8B4D B8       mov     ecx, dword ptr [ebp-48]
0048B860  |.  8B55 B0       mov     edx, dword ptr [ebp-50]
0048B863  |.  2BCA          sub     ecx, edx
0048B865  |.  D1F9          sar     ecx, 1
0048B867  |.  79 03         jns     short 0048B86C
0048B869  |.  83D1 00       adc     ecx, 0
0048B86C  |>  03CA          add     ecx, edx
0048B86E  |.  51            push    ecx
0048B86F  |.  8B55 B4       mov     edx, dword ptr [ebp-4C]
0048B872  |.  8B45 AC       mov     eax, dword ptr [ebp-54]
0048B875  |.  2BD0          sub     edx, eax
0048B877  |.  D1FA          sar     edx, 1
0048B879  |.  79 03         jns     short 0048B87E
0048B87B  |.  83D2 00       adc     edx, 0
0048B87E  |>  03D0          add     edx, eax                         ; |
0048B880  |.  52            push    edx                              ; |X
0048B881  |.  6A 00         push    0                                ; |InsertAfter = HWND_TOP
0048B883  |.  8B45 FC       mov     eax, dword ptr [ebp-4]           ; |
0048B886  |.  8B40 30       mov     eax, dword ptr [eax+30]          ; |
0048B889  |.  50            push    eax                              ; |hWnd
0048B88A  |.  E8 ADBEF7FF   call    <jmp.&user32.SetWindowPos>       ; \SetWindowPos
0048B88F  |>  8B45 F0       mov     eax, dword ptr [ebp-10]
0048B892  |.  E8 256BFFFF   call    004823BC
0048B897  |.  8B45 F4       mov     eax, dword ptr [ebp-C]
0048B89A  |.  50            push    eax                              ; /hWnd
0048B89B  |.  E8 0CBEF7FF   call    <jmp.&user32.SetActiveWindow>    ; \SetActiveWindow
0048B8A0  |.  8B45 E4       mov     eax, dword ptr [ebp-1C]
0048B8A3  |.  E8 8469FFFF   call    0048222C
0048B8A8  \.  C3            retn

  序列号已经算过了,往下走走,找到retn跳出段程序,来到这段
0049AAA4  /$  55            push    ebp
0049AAA5  |.  8BEC          mov     ebp, esp
0049AAA7  |.  83C4 F8       add     esp, -8
0049AAAA  |.  33D2          xor     edx, edx
0049AAAC  |.  8955 F8       mov     dword ptr [ebp-8], edx
0049AAAF  |.  8945 FC       mov     dword ptr [ebp-4], eax
0049AAB2  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
0049AAB5  |.  E8 0EA2F6FF   call    00404CC8
0049AABA  |.  33C0          xor     eax, eax
0049AABC  |.  55            push    ebp
0049AABD  |.  68 12AB4900   push    0049AB12
0049AAC2  |.  64:FF30       push    dword ptr fs:[eax]
0049AAC5  |.  64:8920       mov     dword ptr fs:[eax], esp
0049AAC8  |.  6A 10         push    10
0049AACA  |.  8D55 F8       lea     edx, dword ptr [ebp-8]
0049AACD  |.  B8 28AB4900   mov     eax, 0049AB28                    ;  ASCII "L_ERROR"
0049AAD2  |.  E8 DDF0FFFF   call    00499BB4
0049AAD7  |.  8B45 F8       mov     eax, dword ptr [ebp-8]
0049AADA  |.  E8 F9A1F6FF   call    00404CD8
0049AADF  |.  50            push    eax
0049AAE0  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
0049AAE3  |.  E8 F0A1F6FF   call    00404CD8
0049AAE8  |.  8BD0          mov     edx, eax
0049AAEA  |.  A1 08814D00   mov     eax, dword ptr [4D8108]
0049AAEF  |.  8B00          mov     eax, dword ptr [eax]
0049AAF1  |.  59            pop     ecx
0049AAF2  |.  E8 5D0CFFFF   call    0048B754                         ;这个Call就是CAll我们注册错误的那段代码
0049AAF7  |.  33C0          xor     eax, eax
0049AAF9  |.  5A            pop     edx
0049AAFA  |.  59            pop     ecx
0049AAFB  |.  59            pop     ecx
0049AAFC  |.  64:8910       mov     dword ptr fs:[eax], edx
0049AAFF  |.  68 19AB4900   push    0049AB19
0049AB04  |>  8D45 F8       lea     eax, dword ptr [ebp-8]
0049AB07  |.  BA 02000000   mov     edx, 2
0049AB0C  |.  E8 2B9DF6FF   call    0040483C
0049AB11  \.  C3            retn

清除以前断点,在0049AAA4下断,运行以后断在此处,F8跟踪,结果序列号也是算好了,不在此段代码中,从retn中出来,来到此处
004A97CF  |> \33C0          xor     eax, eax
004A97D1  |.  5A            pop     edx
004A97D2  |.  59            pop     ecx
004A97D3  |.  59            pop     ecx
004A97D4  |.  64:8910       mov     dword ptr fs:[eax], edx
004A97D7  |.  68 06984A00   push    004A9806
004A97DC  |>  8D45 CC       lea     eax, dword ptr [ebp-34]
004A97DF  |.  BA 0A000000   mov     edx, 0A
004A97E4  |.  E8 53B0F5FF   call    0040483C
004A97E9  |.  8D45 F4       lea     eax, dword ptr [ebp-C]
004A97EC  |.  E8 27B0F5FF   call    00404818
004A97F1  |.  8D45 F8       lea     eax, dword ptr [ebp-8]
004A97F4  |.  BA 02000000   mov     edx, 2
004A97F9  |.  E8 3EB0F5FF   call    0040483C

在此处往上看看,以下是此段代码

004A9696  |.  55            push    ebp
004A9697  |.  68 FF974A00   push    004A97FF
004A969C  |.  64:FF30       push    dword ptr fs:[eax]
004A969F  |.  64:8920       mov     dword ptr fs:[eax], esp
004A96A2  |.  8D55 F4       lea     edx, dword ptr [ebp-C]
004A96A5  |.  8B86 48030000 mov     eax, dword ptr [esi+348]
004A96AB  |.  E8 740BFCFF   call    0046A224
004A96B0  |.  8B45 F4       mov     eax, dword ptr [ebp-C]
004A96B3  |.  8D55 F8       lea     edx, dword ptr [ebp-8]
004A96B6  |.  E8 E135FEFF   call    0048CC9C
004A96BB  |.  8B55 F8       mov     edx, dword ptr [ebp-8]           ;  用户输入的伪序列号
004A96BE  |.  B8 4C9D4D00   mov     eax, 004D9D4C
004A96C3  |.  E8 A4B1F5FF   call    0040486C
004A96C8  |.  E8 FBFDFFFF   call    004A94C8                         ;此处为关键call,跟进
004A96CD  |.  8BD8          mov     ebx, eax
004A96CF  |.  84DB          test    bl, bl                           
004A96D1  |.  0F84 D9000000 je      004A97B0
004A96D7  |.  C686 70030000>mov     byte ptr [esi+370], 1
004A96DE  |.  8D45 FC       lea     eax, dword ptr [ebp-4]
004A96E1  |.  50            push    eax
004A96E2  |.  8D55 F0       lea     edx, dword ptr [ebp-10]
004A96E5  |.  B8 18984A00   mov     eax, 004A9818                    ;  ASCII "BF8A83B980"
004A96EA  |.  E8 394AFEFF   call    0048E128
004A96EF  |.  8B45 F0       mov     eax, dword ptr [ebp-10]
004A96F2  |.  50            push    eax
004A96F3  |.  8D55 EC       lea     edx, dword ptr [ebp-14]
004A96F6  |.  B8 2C984A00   mov     eax, 004A982C                    ;  ASCII "BE828B999A8C9F88B1A0848E9F829E828B99B1A9BFA0BFBEB5"
004A96FB  |.  E8 284AFEFF   call    0048E128
004A9700  |.  8B55 EC       mov     edx, dword ptr [ebp-14]          ;注册表项Software\Microsoft\DRMRSX"

004A9703  |.  A1 549D4D00   mov     eax, dword ptr [4D9D54]
004A9708  |.  59            pop     ecx
004A9709  |.  E8 A680FEFF   call    004917B4
004A970E  |.  8D55 E8       lea     edx, dword ptr [ebp-18]
004A9711  |.  A1 4C9D4D00   mov     eax, dword ptr [4D9D4C]
004A9716  |.  E8 7149FEFF   call    0048E08C
004A971B  |.  8B45 E8       mov     eax, dword ptr [ebp-18]
004A971E  |.  50            push    eax
004A971F  |.  8D55 E4       lea     edx, dword ptr [ebp-1C]
004A9722  |.  B8 68984A00   mov     eax, 004A9868                    ;  ASCII "BF9D9FAE999E"
004A9727  |.  E8 FC49FEFF   call    0048E128
004A972C  |.  8B45 E4       mov     eax, dword ptr [ebp-1C]
004A972F  |.  50            push    eax
004A9730  |.  8D45 E0       lea     eax, dword ptr [ebp-20]
004A9733  |.  50            push    eax
004A9734  |.  B8 2C984A00   mov     eax, 004A982C                    ;  ASCII "BE828B999A8C9F88B1A0848E9F829E828B99B1A9BFA0BFBEB5"
004A9739  |.  5A            pop     edx
004A973A  |.  E8 E949FEFF   call    0048E128
004A973F  |.  8B55 E0       mov     edx, dword ptr [ebp-20]
004A9742  |.  A1 549D4D00   mov     eax, dword ptr [4D9D54]
004A9747  |.  59            pop     ecx
004A9748  |.  E8 A781FEFF   call    004918F4
004A974D  |.  837D FC 00    cmp     dword ptr [ebp-4], 0
004A9751  |.  75 46         jnz     short 004A9799
004A9753  |.  E8 6C16F6FF   call    0040ADC4
004A9758  |.  83C4 F8       add     esp, -8
004A975B  |.  DD1C24        fstp    qword ptr [esp]
004A975E  |.  9B            wait
004A975F  |.  8D45 DC       lea     eax, dword ptr [ebp-24]
004A9762  |.  E8 014CFEFF   call    0048E368
004A9767  |.  8B45 DC       mov     eax, dword ptr [ebp-24]
004A976A  |.  50            push    eax
004A976B  |.  8D55 D8       lea     edx, dword ptr [ebp-28]
004A976E  |.  B8 18984A00   mov     eax, 004A9818                    ;  ASCII "BF8A83B980"
004A9773  |.  E8 B049FEFF   call    0048E128
004A9778  |.  8B45 D8       mov     eax, dword ptr [ebp-28]
004A977B  |.  50            push    eax
004A977C  |.  8D45 D4       lea     eax, dword ptr [ebp-2C]
004A977F  |.  50            push    eax
004A9780  |.  B8 2C984A00   mov     eax, 004A982C                    ;  ASCII "BE828B999A8C9F88B1A0848E9F829E828B99B1A9BFA0BFBEB5"
004A9785  |.  5A            pop     edx
004A9786  |.  E8 9D49FEFF   call    0048E128
004A978B  |.  8B55 D4       mov     edx, dword ptr [ebp-2C]
004A978E  |.  A1 549D4D00   mov     eax, dword ptr [4D9D54]
004A9793  |.  59            pop     ecx
004A9794  |.  E8 5B81FEFF   call    004918F4
004A9799  |>  8D55 D0       lea     edx, dword ptr [ebp-30]
004A979C  |.  B8 80984A00   mov     eax, 004A9880                    ;  ASCII "M_THANKS"
004A97A1  |.  E8 0E04FFFF   call    00499BB4
004A97A6  |.  8B45 D0       mov     eax, dword ptr [ebp-30]
004A97A9  |.  E8 8213FFFF   call    0049AB30
004A97AE  |.  EB 1F         jmp     short 004A97CF
004A97B0  |>  B8 4C9D4D00   mov     eax, 004D9D4C
004A97B5  |.  E8 5EB0F5FF   call    00404818
004A97BA  |.  8D55 CC       lea     edx, dword ptr [ebp-34]
004A97BD  |.  B8 94984A00   mov     eax, 004A9894                    ;  ASCII "M_BADCODE"
004A97C2  |.  E8 ED03FFFF   call    00499BB4
004A97C7  |.  8B45 CC       mov     eax, dword ptr [ebp-34]
004A97CA  |.  E8 D512FFFF   call    0049AAA4

终于来到核心了,在004A9696下断,分析代码如上。004A96C8处为关键call,F7跟进
004A94C8  /$  53            push    ebx
004A94C9  |.  56            push    esi
004A94CA  |.  57            push    edi
004A94CB  |.  BF 4C9D4D00   mov     edi, 004D9D4C
004A94D0  |.  33F6          xor     esi, esi
004A94D2  |.  33DB          xor     ebx, ebx
004A94D4  |.  8B07          mov     eax, dword ptr [edi]
004A94D6  |.  E8 FDB5F5FF   call    00404AD8
004A94DB  |.  83F8 0E       cmp     eax, 0E                          ;  此处关键跳,比较输入的序列号位数必须是14位
004A94DE  |.  75 67         jnz     short 004A9547                   ;  如果不等就不需要计算序列号了,直接注册失败
004A94E0  |.  8B07          mov     eax, dword ptr [edi]
004A94E2  |.  8038 31       cmp     byte ptr [eax], 31               ;第一位与1比较,如果相同为true
004A94E5  |.  0F94C0        sete    al
004A94E8  |.  83E0 7F       and     eax, 7F
004A94EB  |.  03F0          add     esi, eax
004A94ED  |.  8B07          mov     eax, dword ptr [edi]            
004A94EF  |.  8078 02 32    cmp     byte ptr [eax+2], 32             ;与上面比较过程相同,以下也一样
004A94F3  |.  0F94C0        sete    al
004A94F6  |.  83E0 7F       and     eax, 7F
004A94F9  |.  03F0          add     esi, eax
004A94FB  |.  8B07          mov     eax, dword ptr [edi]
004A94FD  |.  8078 03 31    cmp     byte ptr [eax+3], 31
004A9501  |.  0F94C0        sete    al
004A9504  |.  83E0 7F       and     eax, 7F
004A9507  |.  03F0          add     esi, eax
004A9509  |.  8B07          mov     eax, dword ptr [edi]
004A950B  |.  8078 04 39    cmp     byte ptr [eax+4], 39
004A950F  |.  0F94C0        sete    al
004A9512  |.  83E0 7F       and     eax, 7F
004A9515  |.  03F0          add     esi, eax
004A9517  |.  8B07          mov     eax, dword ptr [edi]
004A9519  |.  8078 07 30    cmp     byte ptr [eax+7], 30
004A951D  |.  0F94C0        sete    al
004A9520  |.  83E0 7F       and     eax, 7F
004A9523  |.  03F0          add     esi, eax
004A9525  |.  8B07          mov     eax, dword ptr [edi]
004A9527  |.  8078 08 35    cmp     byte ptr [eax+8], 35
004A952B  |.  0F94C0        sete    al
004A952E  |.  83E0 7F       and     eax, 7F
004A9531  |.  03F0          add     esi, eax
004A9533  |.  8B07          mov     eax, dword ptr [edi]
004A9535  |.  8078 0A 33    cmp     byte ptr [eax+A], 33
004A9539  |.  0F94C0        sete    al
004A953C  |.  83E0 7F       and     eax, 7F
004A953F  |.  03F0          add     esi, eax
004A9541  |.  83FE 07       cmp     esi, 7
004A9544  |.  0F94C3        sete    bl
004A9547  |>  8BC3          mov     eax, ebx
004A9549  |.  5F            pop     edi
004A954A  |.  5E            pop     esi
004A954B  |.  5B            pop     ebx
004A954C  \.  C3            retn

注册算法总结:
1.注册码长度为14
2.注册码格式为1X219XX05X3XXX(X代表任意数字)
3.只要上面14位数字中已经说明的数字不动,X任意填写即可注册成功。

--------------------------------------------------------------------------------
【经验总结】
  这个软件算法比较容易直观.本文是看了作者sliphades对6.4版的软件分析文章后写的此文,7.1版和6.4基本上没太大变化,希望对新手有所帮助。
  
--------------------------------------------------------------------------------
【版权声明】: 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年05月21日 AM 12:52:00

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 721
活跃值: (350)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
2
能否抢到沙发?!
2007-5-21 13:23
0
雪    币: 222
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
现在的新手起步点要求太高,我见一些新人总是提问一些高难度的问题,部分高手见了都发蹙,希望大家从基本入门,循序渐进才会其乐无穷,一点点成功会自己更大的动力。
2007-5-21 13:35
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
看到这些16进制德东西,我感觉天昏地暗,但是,好像这个势必阶段吧
2007-5-21 14:33
0
雪    币: 222
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
难了不会,会了不难,只要多用点心,再回头看看,一切都是那么easy
2007-5-21 15:04
0
游客
登录 | 注册 方可回帖
返回