qifeon 发表于 2008-8-27 15:41:33

Access Manager for Windows 8.0简单分析

【文章标题】: 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 , edx
004C096D|.8945 FC       mov   dword ptr , eax
004C0970|.8B45 FC       mov   eax, dword ptr
004C0973|.E8 78F3FFFF   call    004BFCF0                         ;关键CALL
004C0978|.84C0          test    al, al
004C097A|.74 0F         je      short 004C098B                   ;关键跳转
004C097C|.8B45 FC       mov   eax, dword ptr
004C097F|.C780 94020000>mov   dword ptr , 1
004C0989|.EB 11         jmp   short 004C099C
004C098B|>8B45 FC       mov   eax, dword ptr
004C098E|.8B80 B0030000 mov   eax, dword ptr
004C0994|.8B10          mov   edx, dword ptr
004C0996|.FF92 D4000000 call    dword ptr
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 , eax
004BFD03|.33C0          xor   eax, eax
004BFD05|.55            push    ebp
004BFD06|.68 73FE4B00   push    004BFE73
004BFD0B|.64:FF30       push    dword ptr fs:
004BFD0E|.64:8920       mov   dword ptr fs:, esp
004BFD11|.8D55 EC       lea   edx, dword ptr
004BFD14|.8B45 FC       mov   eax, dword ptr
004BFD17|.8B80 B0030000 mov   eax, dword ptr
004BFD1D|.E8 02B5F9FF   call    0045B224
004BFD22|.8B45 EC       mov   eax, dword ptr           ;试炼码
004BFD25|.8D55 F0       lea   edx, dword ptr
004BFD28|.E8 C7F1FBFF   call    0047EEF4
004BFD2D|.8B55 F0       mov   edx, dword ptr           ;试炼码
004BFD30|.B8 582E5100   mov   eax, 00512E58
004BFD35|.E8 8655F4FF   call    004052C0
004BFD3A|.E8 09FDFFFF   call    004BFA48                         ;关键call
004BFD3F|.8845 FB       mov   byte ptr , al             ;标志位al值传递
004BFD42|.807D FB 00    cmp   byte ptr , 0
004BFD46|.0F84 D8000000 je      004BFE24                         ;关键跳转
004BFD4C|.8B45 FC       mov   eax, dword ptr
004BFD4F|.C680 D8030000>mov   byte ptr , 1
004BFD56|.8D45 F4       lea   eax, dword ptr
004BFD59|.50            push    eax
004BFD5A|.8D55 E8       lea   edx, dword ptr
004BFD5D|.B8 8CFE4B00   mov   eax, 004BFE8C                  ;ASCII "BF8A83B980"
004BFD62|.E8 150AFCFF   call    0048077C
004BFD67|.8B45 E8       mov   eax, dword ptr
004BFD6A|.50            push    eax
004BFD6B|.8D55 E4       lea   edx, dword ptr
004BFD6E|.B8 A0FE4B00   mov   eax, 004BFEA0                  ;ASCII "BE828B999A8C9F88B1C8BDBFA2AAA3ACA0A8C8"
004BFD73|.E8 14FEFFFF   call    004BFB8C
004BFD78|.8B55 E4       mov   edx, dword ptr
004BFD7B|.A1 602E5100   mov   eax, dword ptr
004BFD80|.59            pop   ecx
004BFD81|.E8 8A45FCFF   call    00484310
004BFD86|.8D55 E0       lea   edx, dword ptr
004BFD89|.A1 582E5100   mov   eax, dword ptr
004BFD8E|.E8 3109FCFF   call    004806C4
004BFD93|.8B45 E0       mov   eax, dword ptr
004BFD96|.50            push    eax
004BFD97|.8D55 DC       lea   edx, dword ptr
004BFD9A|.B8 D0FE4B00   mov   eax, 004BFED0                  ;ASCII "BF9D9FAE999E"
004BFD9F|.E8 D809FCFF   call    0048077C
004BFDA4|.8B45 DC       mov   eax, dword ptr
004BFDA7|.50            push    eax
004BFDA8|.8D55 D8       lea   edx, dword ptr
004BFDAB|.B8 A0FE4B00   mov   eax, 004BFEA0                  ;ASCII "BE828B999A8C9F88B1C8BDBFA2AAA3ACA0A8C8"
004BFDB0|.E8 D7FDFFFF   call    004BFB8C
004BFDB5|.8B55 D8       mov   edx, dword ptr
004BFDB8|.A1 602E5100   mov   eax, dword ptr
004BFDBD|.59            pop   ecx
004BFDBE|.E8 C946FCFF   call    0048448C
004BFDC3|.837D F4 00    cmp   dword ptr , 0
004BFDC7|.75 44         jnz   short 004BFE0D
004BFDC9|.E8 56BDF4FF   call    0040BB24
004BFDCE|.83C4 F8       add   esp, -8
004BFDD1|.DD1C24      fstp    qword ptr
004BFDD4|.9B            wait
004BFDD5|.8D45 D4       lea   eax, dword ptr
004BFDD8|.E8 130CFCFF   call    004809F0
004BFDDD|.8B45 D4       mov   eax, dword ptr
004BFDE0|.50            push    eax
004BFDE1|.8D55 D0       lea   edx, dword ptr
004BFDE4|.B8 8CFE4B00   mov   eax, 004BFE8C                  ;ASCII "BF8A83B980"
004BFDE9|.E8 8E09FCFF   call    0048077C
004BFDEE|.8B45 D0       mov   eax, dword ptr
004BFDF1|.50            push    eax
004BFDF2|.8D55 CC       lea   edx, dword ptr
004BFDF5|.B8 A0FE4B00   mov   eax, 004BFEA0                  ;ASCII "BE828B999A8C9F88B1C8BDBFA2AAA3ACA0A8C8"
004BFDFA|.E8 8DFDFFFF   call    004BFB8C
004BFDFF|.8B55 CC       mov   edx, dword ptr
004BFE02|.A1 602E5100   mov   eax, dword ptr
004BFE07|.59            pop   ecx
004BFE08|.E8 7F46FCFF   call    0048448C
004BFE0D|>8D55 C8       lea   edx, dword ptr
004BFE10|.B8 E8FE4B00   mov   eax, 004BFEE8                  ;ASCII "M_THANKS"
004BFE15|.E8 CEECFEFF   call    004AEAE8
004BFE1A|.8B45 C8       mov   eax, dword ptr
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
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 , eax
004BFA53|.C645 FF 00    mov   byte ptr , 0
004BFA57|.A1 582E5100   mov   eax, dword ptr
004BFA5C|.8945 F4       mov   dword ptr , eax
004BFA5F|.8B45 F4       mov   eax, dword ptr
004BFA62|.8945 F0       mov   dword ptr , eax
004BFA65|.837D F0 00    cmp   dword ptr , 0            ;试炼码是否为空?
004BFA69|.74 0B         je      short 004BFA76
004BFA6B|.8B45 F0       mov   eax, dword ptr
004BFA6E|.83E8 04       sub   eax, 4
004BFA71|.8B00          mov   eax, dword ptr              ;试炼码长度
004BFA73|.8945 F0       mov   dword ptr , eax
004BFA76|>837D F0 0E    cmp   dword ptr , 0E         ;试炼码长度是否为14位?
004BFA7A|.0F85 85000000 jnz   004BFB05                         ;不等则跳向赋值al=0
004BFA80|.A1 582E5100   mov   eax, dword ptr           ;试炼码
004BFA85|.8038 32       cmp   byte ptr , 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 , eax         ;=+eax
004BFA91|.A1 582E5100   mov   eax, dword ptr
004BFA96|.8078 02 32    cmp   byte ptr , 32             ;试炼码第3位是否为2?
004BFA9A|.0F94C0      sete    al
004BFA9D|.83E0 7F       and   eax, 7F
004BFAA0|.0145 F8       add   dword ptr , eax
004BFAA3|.A1 582E5100   mov   eax, dword ptr
004BFAA8|.8078 03 31    cmp   byte ptr , 31             ;试炼码第4位是否为1?
004BFAAC|.0F94C0      sete    al
004BFAAF|.83E0 7F       and   eax, 7F
004BFAB2|.0145 F8       add   dword ptr , eax
004BFAB5|.A1 582E5100   mov   eax, dword ptr
004BFABA|.8078 04 39    cmp   byte ptr , 39             ;试炼码第5位是否为9?
004BFABE|.0F94C0      sete    al
004BFAC1|.83E0 7F       and   eax, 7F
004BFAC4|.0145 F8       add   dword ptr , eax
004BFAC7|.A1 582E5100   mov   eax, dword ptr
004BFACC|.8078 07 30    cmp   byte ptr , 30             ;试炼码第8位是否为0?
004BFAD0|.0F94C0      sete    al
004BFAD3|.83E0 7F       and   eax, 7F
004BFAD6|.0145 F8       add   dword ptr , eax
004BFAD9|.A1 582E5100   mov   eax, dword ptr
004BFADE|.8078 08 35    cmp   byte ptr , 35             ;试炼码第9位是否为5?
004BFAE2|.0F94C0      sete    al
004BFAE5|.83E0 7F       and   eax, 7F
004BFAE8|.0145 F8       add   dword ptr , eax
004BFAEB|.A1 582E5100   mov   eax, dword ptr
004BFAF0|.8078 0A 33    cmp   byte ptr , 33             ;试炼码第11位是否为3?
004BFAF4|.0F94C0      sete    al
004BFAF7|.83E0 7F       and   eax, 7F
004BFAFA|.0145 F8       add   dword ptr , eax
004BFAFD|.837D F8 07    cmp   dword ptr , 7             ;如果前面7位数字验证成功,则=7
004BFB01|.0F9445 FF   sete    byte ptr                ;真则置=1
004BFB05|>8A45 FF       mov   al, byte ptr              ;标志位al的值取决于的值
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           ;试炼码
004BFD25|.8D55 F0       lea   edx, dword ptr
004BFD28|.E8 C7F1FBFF   call    0047EEF4
004BFD2D|.8B55 F0       mov   edx, dword ptr           ;试炼码
004BFD30|.B8 582E5100   mov   eax, 00512E58
004BFD35|.E8 8655F4FF   call    004052C0
004BFD3A|.E8 09FDFFFF   call    004BFA48                         ;关键call
004BFD3F|.8845 FB       mov   byte ptr , al             ;标志位al值传递
004BFD42|.807D FB 00    cmp   byte ptr , 0
004BFD46|.0F84 D8000000 je      004BFE24                         ;关键跳转
************************************************* *****************
004BFD3F      mov   byte ptr , 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 , eax

代码省略

004BFAF0|.8078 0A 33    cmp   byte ptr , 33             ;试炼码第11位是否为3?
004BFAF4|.0F94C0      sete    al
004BFAF7|.83E0 7F       and   eax, 7F
004BFAFA|.0145 F8       add   dword ptr , eax
004BFAFD|.837D F8 07    cmp   dword ptr , 7             ;如果前面7位数字验证成功,则=7
004BFB01|.0F9445 FF   sete    byte ptr                ;真则置=1
004BFB05|>8A45 FF       mov   al, byte ptr              ;标志位al的值取决于的值
004BFB08|.8BE5          mov   esp, ebp
004BFB0A|.5D            pop   ebp

******************************************************************************
004BFB05       mov   al, byte ptr 修改为
            
                      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 编辑 ]

magic659117852 发表于 2008-8-27 16:46:42

/:good 学习用Winhex找事件按钮的方法~~~~~
页: [1]
查看完整版本: Access Manager for Windows 8.0简单分析