TA的每日心情  | 开心 2018-12-18 12:34 | 
|---|
 
  签到天数: 4 天 [LV.2]偶尔看看I  
 | 
 
【文章标题】: 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位是“2”,第4位是“1”,第5位是“9”,第8位是“0”,第9位是“5”,第11位是“3”。 
   
  其它为任意数字或字符,提供一组可用注册码:2@21956052367a 
 
[ 本帖最后由 qifeon 于 2008-8-27 15:43 编辑 ] |   
 
评分
- 
查看全部评分
 
 
 
 
 
 |