文章标题】: 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
--------------------------------------------------------------------------------
【
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)