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 编辑 ] /:good 学习用Winhex找事件按钮的方法~~~~~
页:
[1]