文章标题】: Access Manager for Windows 8.0简单分析
【文章作者】: qifeon
【软件名称】: Access Manager for Windows 8.0
【下载地址】: http://www.onlinedown.net/soft/7192.htm
【软件介绍】: Access Manager 是一个非常不错的系统安全工具!
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  一、PEID查壳,无壳,编程语言为Borland Delphi 6.0 - 7.0。
  
  二、运行软件,出现注册对话框。输入试炼码“123456”,点“Register”按钮,出现错误提示“This 

registeration is invalid”。
  
  三、od 载入,利用字符串查找插件。里面字符很少,估计关键字符串做了加密。这招不灵了,一般常

用的API函数对Delphi程序又无效。
  
       我们使用对Delphi程序最常用的寻找“按钮事件代码”的方法。
  
  1、用PEexplore(其它资源处理软件如exescope等都可以)打开主程序,查看rcdata资源。找到Register”

按钮。

  
  2、用Winhex 打开主程序,搜索“registerbtnclick”,字节"10"指出了“registerbtnclick按钮的长度,前面

是事件调用地址 4c0964,然后就可以用此地址设置断点了

  
  3、当然同样可以利用DeDe 反编译得到按钮事件的地址。

  
  四、od载入,在地址 4c0964 处下断,F9运行软件,出现异常,SHIFT +F9 ,出现注册对话框,输入

试炼码“123456”,点“Register”按钮,程序断下
  
  

******************************************************************************

*******************************************************************
  
  004C0964  /.  55            push    ebp                             按钮事件地址
  004C0965  |.  8BEC          mov     ebp, esp
  004C0967  |.  83C4 F8       add     esp, -8
  004C096A  |.  8955 F8       mov     dword ptr [ebp-8], edx
  004C096D  |.  8945 FC       mov     dword ptr [ebp-4], eax
  004C0970  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
  004C0973  |.  E8 78F3FFFF   call    004BFCF0                         ;  关键CALL
  004C0978  |.  84C0          test    al, al
  004C097A  |.  74 0F         je      short 004C098B                   ;  关键跳转
  004C097C  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
  004C097F  |.  C780 94020000>mov     dword ptr [eax+294], 1
  004C0989  |.  EB 11         jmp     short 004C099C
  004C098B  |>  8B45 FC       mov     eax, dword ptr [ebp-4]
  004C098E  |.  8B80 B0030000 mov     eax, dword ptr [eax+3B0]
  004C0994  |.  8B10          mov     edx, dword ptr [eax]
  004C0996  |.  FF92 D4000000 call    dword ptr [edx+D4]
  004C099C  |>  59            pop     ecx
  004C099D  |.  59            pop     ecx
  004C099E  |.  5D            pop     ebp
  004C099F  \.  C3            retn
  
  

******************************************************************************

***************************************************************************
  
  进入 call    004BFCF0
  
  

******************************************************************************

****************************************************************************
  
  004BFCF0  /$  55            push    ebp
  004BFCF1  |.  8BEC          mov     ebp, esp
  004BFCF3  |.  B9 07000000   mov     ecx, 7
  004BFCF8  |>  6A 00         /push    0
  004BFCFA  |.  6A 00         |push    0
  004BFCFC  |.  49            |dec     ecx
  004BFCFD  |.^ 75 F9         \jnz     short 004BFCF8
  004BFCFF  |.  51            push    ecx
  004BFD00  |.  8945 FC       mov     dword ptr [ebp-4], eax
  004BFD03  |.  33C0          xor     eax, eax
  004BFD05  |.  55            push    ebp
  004BFD06  |.  68 73FE4B00   push    004BFE73
  004BFD0B  |.  64:FF30       push    dword ptr fs:[eax]
  004BFD0E  |.  64:8920       mov     dword ptr fs:[eax], esp
  004BFD11  |.  8D55 EC       lea     edx, dword ptr [ebp-14]
  004BFD14  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
  004BFD17  |.  8B80 B0030000 mov     eax, dword ptr [eax+3B0]
  004BFD1D  |.  E8 02B5F9FF   call    0045B224
  004BFD22  |.  8B45 EC       mov     eax, dword ptr [ebp-14]          ;  试炼码
  004BFD25  |.  8D55 F0       lea     edx, dword ptr [ebp-10]
  004BFD28  |.  E8 C7F1FBFF   call    0047EEF4
  004BFD2D  |.  8B55 F0       mov     edx, dword ptr [ebp-10]          ;  试炼码
  004BFD30  |.  B8 582E5100   mov     eax, 00512E58
  004BFD35  |.  E8 8655F4FF   call    004052C0
  004BFD3A  |.  E8 09FDFFFF   call    004BFA48                         ;  关键call
  004BFD3F  |.  8845 FB       mov     byte ptr [ebp-5], al             ;  标志位al值传递
  004BFD42  |.  807D FB 00    cmp     byte ptr [ebp-5], 0
  004BFD46  |.  0F84 D8000000 je      004BFE24                         ;  关键跳转
  004BFD4C  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
  004BFD4F  |.  C680 D8030000>mov     byte ptr [eax+3D8], 1
  004BFD56  |.  8D45 F4       lea     eax, dword ptr [ebp-C]
  004BFD59  |.  50            push    eax
  004BFD5A  |.  8D55 E8       lea     edx, dword ptr [ebp-18]
  004BFD5D  |.  B8 8CFE4B00   mov     eax, 004BFE8C                    ;  ASCII "BF8A83B980"
  004BFD62  |.  E8 150AFCFF   call    0048077C
  004BFD67  |.  8B45 E8       mov     eax, dword ptr [ebp-18]
  004BFD6A  |.  50            push    eax
  004BFD6B  |.  8D55 E4       lea     edx, dword ptr [ebp-1C]
  004BFD6E  |.  B8 A0FE4B00   mov     eax, 004BFEA0                    ;  ASCII 

"BE828B999A8C9F88B1C8BDBFA2AAA3ACA0A8C8"
  004BFD73  |.  E8 14FEFFFF   call    004BFB8C
  004BFD78  |.  8B55 E4       mov     edx, dword ptr [ebp-1C]
  004BFD7B  |.  A1 602E5100   mov     eax, dword ptr [512E60]
  004BFD80  |.  59            pop     ecx
  004BFD81  |.  E8 8A45FCFF   call    00484310
  004BFD86  |.  8D55 E0       lea     edx, dword ptr [ebp-20]
  004BFD89  |.  A1 582E5100   mov     eax, dword ptr [512E58]
  004BFD8E  |.  E8 3109FCFF   call    004806C4
  004BFD93  |.  8B45 E0       mov     eax, dword ptr [ebp-20]
  004BFD96  |.  50            push    eax
  004BFD97  |.  8D55 DC       lea     edx, dword ptr [ebp-24]
  004BFD9A  |.  B8 D0FE4B00   mov     eax, 004BFED0                    ;  ASCII "BF9D9FAE999E"
  004BFD9F  |.  E8 D809FCFF   call    0048077C
  004BFDA4  |.  8B45 DC       mov     eax, dword ptr [ebp-24]
  004BFDA7  |.  50            push    eax
  004BFDA8  |.  8D55 D8       lea     edx, dword ptr [ebp-28]
  004BFDAB  |.  B8 A0FE4B00   mov     eax, 004BFEA0                    ;  ASCII 

"BE828B999A8C9F88B1C8BDBFA2AAA3ACA0A8C8"
  004BFDB0  |.  E8 D7FDFFFF   call    004BFB8C
  004BFDB5  |.  8B55 D8       mov     edx, dword ptr [ebp-28]
  004BFDB8  |.  A1 602E5100   mov     eax, dword ptr [512E60]
  004BFDBD  |.  59            pop     ecx
  004BFDBE  |.  E8 C946FCFF   call    0048448C
  004BFDC3  |.  837D F4 00    cmp     dword ptr [ebp-C], 0
  004BFDC7  |.  75 44         jnz     short 004BFE0D
  004BFDC9  |.  E8 56BDF4FF   call    0040BB24
  004BFDCE  |.  83C4 F8       add     esp, -8
  004BFDD1  |.  DD1C24        fstp    qword ptr [esp]
  004BFDD4  |.  9B            wait
  004BFDD5  |.  8D45 D4       lea     eax, dword ptr [ebp-2C]
  004BFDD8  |.  E8 130CFCFF   call    004809F0
  004BFDDD  |.  8B45 D4       mov     eax, dword ptr [ebp-2C]
  004BFDE0  |.  50            push    eax
  004BFDE1  |.  8D55 D0       lea     edx, dword ptr [ebp-30]
  004BFDE4  |.  B8 8CFE4B00   mov     eax, 004BFE8C                    ;  ASCII "BF8A83B980"
  004BFDE9  |.  E8 8E09FCFF   call    0048077C
  004BFDEE  |.  8B45 D0       mov     eax, dword ptr [ebp-30]
  004BFDF1  |.  50            push    eax
  004BFDF2  |.  8D55 CC       lea     edx, dword ptr [ebp-34]
  004BFDF5  |.  B8 A0FE4B00   mov     eax, 004BFEA0                    ;  ASCII 

"BE828B999A8C9F88B1C8BDBFA2AAA3ACA0A8C8"
  004BFDFA  |.  E8 8DFDFFFF   call    004BFB8C
  004BFDFF  |.  8B55 CC       mov     edx, dword ptr [ebp-34]
  004BFE02  |.  A1 602E5100   mov     eax, dword ptr [512E60]
  004BFE07  |.  59            pop     ecx
  004BFE08  |.  E8 7F46FCFF   call    0048448C
  004BFE0D  |>  8D55 C8       lea     edx, dword ptr [ebp-38]
  004BFE10  |.  B8 E8FE4B00   mov     eax, 004BFEE8                    ;  ASCII "M_THANKS"
  004BFE15  |.  E8 CEECFEFF   call    004AEAE8
  004BFE1A  |.  8B45 C8       mov     eax, dword ptr [ebp-38]
  004BFE1D  |.  E8 0AFDFEFF   call    004AFB2C
  004BFE22  |.  EB 1F         jmp     short 004BFE43
  004BFE24  |>  B8 582E5100   mov     eax, 00512E58
  004BFE29  |.  E8 3E54F4FF   call    0040526C
  004BFE2E  |.  8D55 C4       lea     edx, dword ptr [ebp-3C]
  004BFE31  |.  B8 FCFE4B00   mov     eax, 004BFEFC                    ;  ASCII "M_BADCODE"
  004BFE36  |.  E8 ADECFEFF   call    004AEAE8
  
  

******************************************************************************

****************************************************************
  
  进入算法 call    004BFA48
  
  

******************************************************************************

***************************************************************
  
  
  004BFA48  /$  55            push    ebp
  004BFA49  |.  8BEC          mov     ebp, esp
  004BFA4B  |.  83C4 F0       add     esp, -10
  004BFA4E  |.  33C0          xor     eax, eax
  004BFA50  |.  8945 F8       mov     dword ptr [ebp-8], eax
  004BFA53  |.  C645 FF 00    mov     byte ptr [ebp-1], 0
  004BFA57  |.  A1 582E5100   mov     eax, dword ptr [512E58]
  004BFA5C  |.  8945 F4       mov     dword ptr [ebp-C], eax
  004BFA5F  |.  8B45 F4       mov     eax, dword ptr [ebp-C]
  004BFA62  |.  8945 F0       mov     dword ptr [ebp-10], eax
  004BFA65  |.  837D F0 00    cmp     dword ptr [ebp-10], 0            ;  试炼码是否为空?
  004BFA69  |.  74 0B         je      short 004BFA76
  004BFA6B  |.  8B45 F0       mov     eax, dword ptr [ebp-10]
  004BFA6E  |.  83E8 04       sub     eax, 4
  004BFA71  |.  8B00          mov     eax, dword ptr [eax]             ;  试炼码长度
  004BFA73  |.  8945 F0       mov     dword ptr [ebp-10], eax
  004BFA76  |>  837D F0 0E    cmp     dword ptr [ebp-10], 0E           ;  试炼码长度是否为14位?
  004BFA7A  |.  0F85 85000000 jnz     004BFB05                         ;  不等则跳向赋值al=0
  004BFA80  |.  A1 582E5100   mov     eax, dword ptr [512E58]          ;  试炼码
  004BFA85  |.  8038 32       cmp     byte ptr [eax], 32               ;  试炼码第1位是否为2?
  004BFA88  |.  0F94C0        sete    al                               ;  真则al=1,假则 al=0
  004BFA8B  |.  83E0 7F       and     eax, 7F                          ;  eax=eax and 0x7Fh
  004BFA8E  |.  0145 F8       add     dword ptr [ebp-8], eax           ;  [ebp-8]=[ebp-8]+eax
  004BFA91  |.  A1 582E5100   mov     eax, dword ptr [512E58]
  004BFA96  |.  8078 02 32    cmp     byte ptr [eax+2], 32             ;  试炼码第3位是否为2?
  004BFA9A  |.  0F94C0        sete    al
  004BFA9D  |.  83E0 7F       and     eax, 7F
  004BFAA0  |.  0145 F8       add     dword ptr [ebp-8], eax
  004BFAA3  |.  A1 582E5100   mov     eax, dword ptr [512E58]
  004BFAA8  |.  8078 03 31    cmp     byte ptr [eax+3], 31             ;  试炼码第4位是否为1?
  004BFAAC  |.  0F94C0        sete    al
  004BFAAF  |.  83E0 7F       and     eax, 7F
  004BFAB2  |.  0145 F8       add     dword ptr [ebp-8], eax
  004BFAB5  |.  A1 582E5100   mov     eax, dword ptr [512E58]
  004BFABA  |.  8078 04 39    cmp     byte ptr [eax+4], 39             ;  试炼码第5位是否为9?
  004BFABE  |.  0F94C0        sete    al
  004BFAC1  |.  83E0 7F       and     eax, 7F
  004BFAC4  |.  0145 F8       add     dword ptr [ebp-8], eax
  004BFAC7  |.  A1 582E5100   mov     eax, dword ptr [512E58]
  004BFACC  |.  8078 07 30    cmp     byte ptr [eax+7], 30             ;  试炼码第8位是否为0?
  004BFAD0  |.  0F94C0        sete    al
  004BFAD3  |.  83E0 7F       and     eax, 7F
  004BFAD6  |.  0145 F8       add     dword ptr [ebp-8], eax
  004BFAD9  |.  A1 582E5100   mov     eax, dword ptr [512E58]
  004BFADE  |.  8078 08 35    cmp     byte ptr [eax+8], 35             ;  试炼码第9位是否为5?
  004BFAE2  |.  0F94C0        sete    al
  004BFAE5  |.  83E0 7F       and     eax, 7F
  004BFAE8  |.  0145 F8       add     dword ptr [ebp-8], eax
  004BFAEB  |.  A1 582E5100   mov     eax, dword ptr [512E58]
  004BFAF0  |.  8078 0A 33    cmp     byte ptr [eax+A], 33             ;  试炼码第11位是否为3?
  004BFAF4  |.  0F94C0        sete    al
  004BFAF7  |.  83E0 7F       and     eax, 7F
  004BFAFA  |.  0145 F8       add     dword ptr [ebp-8], eax
  004BFAFD  |.  837D F8 07    cmp     dword ptr [ebp-8], 7             ;  如果前面7位数字验证成功,

则[ebp-8]=7
  004BFB01  |.  0F9445 FF     sete    byte ptr [ebp-1]                 ;  真则置[ebp-1]=1
  004BFB05  |>  8A45 FF       mov     al, byte ptr [ebp-1]             ;  标志位al的值取决于[ebp-1]的值
  004BFB08  |.  8BE5          mov     esp, ebp
  004BFB0A  |.  5D            pop     ebp
  004BFB0B  \.  C3            retn
  
  

******************************************************************************

***************************************************************************
 五、爆破

 典型的标志位爆破

04BFCF0  /$  55            push    ebp
  004BFCF1  |.  8BEC          mov     ebp, esp
  004BFCF3  |.  B9 07000000   mov     ecx, 7
  004BFCF8  |>  6A 00         /push    0
  004BFCFA  |.  6A 00         |push    0
  004BFCFC  |.  49            |dec     ecx

  省略部分代码

  004BFD22  |.  8B45 EC       mov     eax, dword ptr [ebp-14]          ;  试炼码
  004BFD25  |.  8D55 F0       lea     edx, dword ptr [ebp-10]
  004BFD28  |.  E8 C7F1FBFF   call    0047EEF4
  004BFD2D  |.  8B55 F0       mov     edx, dword ptr [ebp-10]          ;  试炼码
  004BFD30  |.  B8 582E5100   mov     eax, 00512E58
  004BFD35  |.  E8 8655F4FF   call    004052C0
  004BFD3A  |.  E8 09FDFFFF   call    004BFA48                         ;  关键call
  004BFD3F  |.  8845 FB       mov     byte ptr [ebp-5], al             ;  标志位al值传递
  004BFD42  |.  807D FB 00    cmp     byte ptr [ebp-5], 0
  004BFD46  |.  0F84 D8000000 je      004BFE24                         ;  关键跳转 
************************************************* ***************** 
004BFD3F      mov     byte ptr [ebp-5], al 

al=1则跳向成功,al=0则跳向失败。而al值由 call    004BFA48 决定
 
********************************************************************

004BFA48  /$  55            push    ebp
004BFA49  |.  8BEC          mov     ebp, esp
004BFA4B  |.  83C4 F0       add     esp, -10
004BFA4E  |.  33C0          xor     eax, eax
004BFA50  |.  8945 F8       mov     dword ptr [ebp-8], eax

代码省略

004BFAF0  |.  8078 0A 33    cmp     byte ptr [eax+A], 33             ;  试炼码第11位是否为3?
004BFAF4  |.  0F94C0        sete    al
004BFAF7  |.  83E0 7F       and     eax, 7F
004BFAFA  |.  0145 F8       add     dword ptr [ebp-8], eax
004BFAFD  |.  837D F8 07    cmp     dword ptr [ebp-8], 7             ;  如果前面7位数字验证成功,则

[ebp-8]=7
004BFB01  |.  0F9445 FF     sete    byte ptr [ebp-1]                 ;  真则置[ebp-1]=1
004BFB05  |>  8A45 FF       mov     al, byte ptr [ebp-1]             ;  标志位al的值取决于[ebp-1]的值
004BFB08  |.  8BE5          mov     esp, ebp
004BFB0A  |.  5D            pop     ebp

******************************************************************************
004BFB05       mov     al, byte ptr [ebp-1]  修改为
              
                      mov     al, 1 即可完美爆破。
******************************************************************************
 l六、总结

  
  此程序算法简单,捏了个软柿子,呵呵。不过方便我等菜鸟学习。总结下注册算法部分,后面程序还对

注册码进行了加密,放置在注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Access Manager
  
  不进行讨论。
  
  1、注册码必须是14位;
  
  2.注册码必须满足:
  
    第1位是”2”,第3位是“”,第4位是“1”,第5位是“9”,第8位是“0”,第9位是“5”,第11位是“3”。
  
  其它为任意数字或字符,提供一组可用注册码:2@21956052367a
  
  
--------------------------------------------------------------------------------