1、申 请 I D :苛兒
2、个人邮箱: 2583053646@qq.com
3、自我简单介绍及主要作品链接:
苛兒:男,22,信息对抗,目前从事软件开发工作,平时使用VS开发C++及C#程序,LINUX下使用C/C++,SHELL,PYTHON及PERL写程序,做过一段时间软件安全分析。
写的都是一些小程序,技术含量不怎么高。最近接手.net,研究.NET程序加密方式。
原创破文:
################################################################################################
软件名称: Access数据库密码破解器 3.45
下载地址: http://www.skycn.com/soft/23984.html
破解之后获取的注册码----------用户名:1234 注册码:2E0455703466A10F
################################################################################################
pedit 查壳 ---ASPack 2.12 -> Alexey Solodovnikov
直接脱壳机搞定--ASPack UnPacker.exe(脱壳机)
脱壳后pedit查壳: Borland Delphi 6.0 - 7.0
################################################################################################
OD载入---查找字符串“注册”
---查到-- “文本字符串=注册完成,请重新运行程序!” 双击反汇编跟踪
在反汇编窗口中可以看到reguser 及regno software\acpass
猜测应该是放入到注册表中
接下来两种思路
1.---查找字符串---reguser regno 及software\acpass
2.---注册表下断点(BP RegQueryValueExA) 重载运行--查看reguser及regno
################################################################################################
########################注册表断点法############
运行 注意堆栈的显示----直到读取regno时----执行运行到用户代码
然后单步走一段代码----最后到达下面代码--
004D3BAB |. E8 1C46F9FF call ACpass_u.004681CC
004D3BB0 |. B1 01 mov cl,0x1
004D3BB2 |. BA 403D4D00 mov edx,ACpass_u.004D3D40 ; Software\ACPass
004D3BB7 |. 8BC6 mov eax,esi
004D3BB9 |. E8 7246F9FF call ACpass_u.00468230
004D3BBE |. 8D4D F0 lea ecx,[local.4]
004D3BC1 |. BA 583D4D00 mov edx,ACpass_u.004D3D58 ; RegUser
004D3BC6 |. 8BC6 mov eax,esi
004D3BC8 |. E8 4B48F9FF call ACpass_u.00468418
004D3BCD |. 8B55 F0 mov edx,[local.4]
004D3BD0 |. B8 E4B14D00 mov eax,ACpass_u.004DB1E4
004D3BD5 |. E8 F608F3FF call ACpass_u.004044D0
004D3BDA |. 8D4D EC lea ecx,[local.5]
004D3BDD |. BA 683D4D00 mov edx,ACpass_u.004D3D68 ; RegNo
004D3BE2 |. 8BC6 mov eax,esi
004D3BE4 |. E8 2F48F9FF call ACpass_u.00468418
004D3BE9 |. 8B45 EC mov eax,[local.5]
004D3BEC |. 50 push eax
往下看----注意堆栈及寄存器信息
004D3BE9 |. 8B45 EC mov eax,[local.5]
004D3BEC |. 50 push eax
004D3BED |. 8D4D E8 lea ecx,[local.6]
004D3BF0 |. BA 783D4D00 mov edx,ACpass_u.004D3D78 ; acpassChina
004D3BF5 |. A1 E4B14D00 mov eax,dword ptr ds:[0x4DB1E4]
004D3BFA |. E8 D5E2FFFF call ACpass_u.004D1ED4
004D3BFF |. 8B55 E8 mov edx,[local.6]
004D3C02 |. 58 pop eax
004D3C03 |. E8 700CF3FF call ACpass_u.00404878 -------关键CALL--比较真假注册码
004D3C08 |. 75 07 jnz XACpass_u.004D3C11
004D3C0A |. C605 E0B14D00>mov byte ptr ds:[0x4DB1E0],0x1
004D3C11 |> 8BC6 mov eax,esi
004D3C13 |. E8 D8FAF2FF call ACpass_u.004036F0
004D3C18 |. 803D E0B14D00>cmp byte ptr ds:[0x4DB1E0],0x0
004D3C1F |. 75 27 jnz XACpass_u.004D3C48
004D3C21 |. 8D55 E4 lea edx,[local.7]
004D3C24 |. 8BB3 18030000 mov esi,dword ptr ds:[ebx+0x318]
004D3C2A |. 8BC6 mov eax,esi
004D3C2C |. E8 8714FCFF call ACpass_u.004950B8
004D3C31 |. 8D45 E4 lea eax,[local.7]
004D3C34 |. BA 8C3D4D00 mov edx,ACpass_u.004D3D8C ; - 未购买用户
004D3C39 |. E8 FE0AF3FF call ACpass_u.0040473C
跟入关键CALL 来到下面代码:
00404878 /$ 53 push ebx
00404879 |. 56 push esi
0040487A |. 57 push edi
0040487B |. 89C6 mov esi,eax
0040487D |. 89D7 mov edi,edx
0040487F |. 39D0 cmp eax,edx -------------比较真假注册码
00404881 0F84 8F000000 je ACpass_u.00404916 ---------关键跳转 直接改为jmp
00404887 |. 85F6 test esi,esi
00404889 |. 74 68 je XACpass_u.004048F3
0040488B |. 85FF test edi,edi
0040488D |. 74 6B je XACpass_u.004048FA
0040488F |. 8B46 FC mov eax,dword ptr ds:[esi-0x4]
调试的时候让关键挑的JE 跳转--(改Z标志位) 跳出关键CALL 来到
004D3BF5 |. A1 E4B14D00 mov eax,dword ptr ds:[0x4DB1E4]
004D3BFA |. E8 D5E2FFFF call ACpass_u.004D1ED4
004D3BFF |. 8B55 E8 mov edx,[local.6]
004D3C02 |. 58 pop eax
004D3C03 |. E8 700CF3FF call ACpass_u.00404878 -----关键CALL
004D3C08 |. 75 07 jnz XACpass_u.004D3C11 -----回到此处-- 发现此处不跳转 继续向下
004D3C0A |. C605 E0B14D00>mov byte ptr ds:[0x4DB1E0],0x1
004D3C11 |> 8BC6 mov eax,esi
004D3C13 |. E8 D8FAF2FF call ACpass_u.004036F0
004D3C18 |. 803D E0B14D00>cmp byte ptr ds:[0x4DB1E0],0x0
004D3C1F |. 75 27 jnz XACpass_u.004D3C48 -----到此处发现跳转-跳过了“未购买”用户
004D3C21 |. 8D55 E4 lea edx,[local.7]
004D3C24 |. 8BB3 18030000 mov esi,dword ptr ds:[ebx+0x318]
004D3C2A |. 8BC6 mov eax,esi
004D3C2C |. E8 8714FCFF call ACpass_u.004950B8
004D3C31 |. 8D45 E4 lea eax,[local.7]
004D3C34 |. BA 8C3D4D00 mov edx,ACpass_u.004D3D8C ; - 未购买用户
004D3C39 |. E8 FE0AF3FF call ACpass_u.0040473C
004D3C3E |. 8B55 E4 mov edx,[local.7]
004D3C41 |. 8BC6 mov eax,esi
F9运行 看是否解除了未注册的限制-----运行起来后查看数据库密码---可以查看正确密码
到此爆破成功。
################################################################################################
############后续:#####------追正确注册码-------
记得刚才跟入关键CALL之后--比较了真假注册码---因此可以在比较处进行下断--从寄存器EDX中获取真注册码
###############################################################################################
1.---查找字符串---reguser regno 及software\acpass 破解方法
直接查找regno 来到:
004D3BAB |. E8 1C46F9FF call ACpass_u.004681CC
004D3BB0 |. B1 01 mov cl,0x1
004D3BB2 |. BA 403D4D00 mov edx,ACpass_u.004D3D40 ; Software\ACPass
004D3BB7 |. 8BC6 mov eax,esi
004D3BB9 |. E8 7246F9FF call ACpass_u.00468230
004D3BBE |. 8D4D F0 lea ecx,[local.4]
004D3BC1 |. BA 583D4D00 mov edx,ACpass_u.004D3D58 ; RegUser
004D3BC6 |. 8BC6 mov eax,esi
004D3BC8 |. E8 4B48F9FF call ACpass_u.00468418
004D3BCD |. 8B55 F0 mov edx,[local.4]
004D3BD0 |. B8 E4B14D00 mov eax,ACpass_u.004DB1E4
004D3BD5 |. E8 F608F3FF call ACpass_u.004044D0
004D3BDA |. 8D4D EC lea ecx,[local.5]
004D3BDD |. BA 683D4D00 mov edx,ACpass_u.004D3D68 ; RegNo
004D3BE2 |. 8BC6 mov eax,esi
004D3BE4 |. E8 2F48F9FF call ACpass_u.00468418
004D3BE9 |. 8B45 EC mov eax,[local.5]
004D3BEC |. 50 push eax
004D3BED |. 8D4D E8 lea ecx,[local.6]
004D3BF0 |. BA 783D4D00 mov edx,ACpass_u.004D3D78 ; acpassChina
004D3BF5 |. A1 E4B14D00 mov eax,dword ptr ds:[0x4DB1E4]
004D3BFA |. E8 D5E2FFFF call ACpass_u.004D1ED4
004D3BFF |. 8B55 E8 mov edx,[local.6]
看到这里相信大家都知道该怎么操作了吧--
跟上面注册表的一样--只是这种方法更快的找到了重启验证的位置
废话不再多说了 大家慢慢研究吧
################################################################################################
跟随的时候多次分析一下 多跑两遍程序---就可以搞定了
################################################################################################
出现问题----OD调试器里面运行的时候(让关键跳转---可以正常使用)可是改为JMP之后保存运行就出现了问题
下面使用其他方法进行爆破--
004D3BED |. 8D4D E8 lea ecx,[local.6]
004D3BF0 |. BA 783D4D00 mov edx,ACpass_u.004D3D78 ; acpassChina
004D3BF5 |. A1 E4B14D00 mov eax,dword ptr ds:[0x4DB1E4]
004D3BFA |. E8 D5E2FFFF call ACpass_u.004D1ED4
004D3BFF |. 8B55 E8 mov edx,[local.6]
004D3C02 |. 58 pop eax
004D3C03 |. E8 700CF3FF call ACpass_u.00404878 -------关键CALL--比较真假注册码
004D3C08 |. 75 07 jnz XACpass_u.004D3C11 //爆破 改为JE
004D3C0A |. C605 E0B14D00>mov byte ptr ds:[0x4DB1E0],0x1
004D3C11 |> 8BC6 mov eax,esi
004D3C13 |. E8 D8FAF2FF call ACpass_u.004036F0
004D3C18 |. 803D E0B14D00>cmp byte ptr ds:[0x4DB1E0],0x0
004D3C1F |. 75 27 jnz XACpass_u.004D3C48 ////爆破 改为JE
004D3C21 |. 8D55 E4 lea edx,[local.7]
004D3C24 |. 8BB3 18030000 mov esi,dword ptr ds:[ebx+0x318]
004D3C2A |. 8BC6 mov eax,esi
004D3C2C |. E8 8714FCFF call ACpass_u.004950B8
004D3C31 |. 8D45 E4 lea eax,[local.7]
004D3C34 |. BA 8C3D4D00 mov edx,ACpass_u.004D3D8C ; - 未购买用户
004D3C39 |. E8 FE0AF3FF call ACpass_u.0040473C
运行--窗口标题出现未购买用户(需要去除为购买标志,这里就不跟进了 呵呵) 但是实际上可以查看数据库的密码了
最后提醒:此文只是对ACCESS密码工具进行了一个小的分析,希望读者不要用于非法用途
4、申请时间:2013年9月9日
5、备注: 听说这里可以学到很多,希望管理员能够予以通过,谢谢。
|