您的位置:首页 > 其它

星空极速 简单破解

2006-11-30 21:49 323 查看
我的一个同事也在装 ADSL. 电信肯定要强行安装 "星空极速" 的, 幸好网上早就有破解方法. 使用 sniffer PPP 数据包. 直接可以看到被星空急速加密后的密码. 将这个被修改过的密码填入 xp 自带的拨号程序, 或者带路由的 ADSL 猫的拨号程序. 即可拨号成功. 但使用 sniffer 还是有些麻烦. 我用过的是 sniffer pro. 由于不支持无线网卡. 让我的机器蓝屏了两回. 界面也稍显专业. 一般用户对着使用教程还是有些发怵.如果能够不用安装 sniffer 直接看到密码. 那就能方便很多了.

最近刚开始玩 windbg. 正好也练练手.



先看看 depands, 都是些平常的 dll, 除了这个 rasapi32.dll, 查了一下 MSDN. 这个 dll 就是用来拨号的. 看看它的导出函数 RasDialA. 这个函数就是用来拨号的.
DWORD RasDial(
LPRASDIALEXTENSIONS lpRasDialExtensions, // pointer to function extensions data
LPCTSTR lpszPhonebook, // pointer to full path and file name of phone-book file
LPRASDIALPARAMS lpRasDialParams, // pointer to calling parameters data
DWORD dwNotifierType, // specifies type of RasDial event handler
LPVOID lpvNotifier, // specifies a handler for RasDial events
LPHRASCONN lphRasConn // pointer to variable to receive connection handle
);

关键就在第三个参数 LPRASDIALPARAMS:
typedef struct _RASDIALPARAMS {
DWORD dwSize;
TCHAR szEntryName[RAS_MaxEntryName + 1];
TCHAR szPhoneNumber[RAS_MaxPhoneNumber + 1];
TCHAR szCallbackNumber[RAS_MaxCallbackNumber + 1];
TCHAR szUserName[UNLEN + 1];
TCHAR szPassword[PWLEN + 1];
TCHAR szDomain[DNLEN + 1] ;
#if (WINVER >= 0x401)
DWORD dwSubEntry;
ULONG_PTR dwCallbackId;
#endif
} RASDIALPARAMS;

其中的 szPassword 就是我们感兴趣的. 知道了这些就好办了. 启动 cdb.exe

D:/nico>cdb -pn dialterminal.exe

Microsoft (R) Windows Debugger Version 6.6.0007.5
Copyright (c) Microsoft Corporation. All rights reserved.

*** wait with pending attach
Symbol search path is: srv*c:/websymbols*http://msdl.microsoft.com/download/symb
ols
Executable search path is:
ModLoad: 00400000 00458000 C:/Program Files/ChinaNetSn/bin/Dialterminal.exe
ModLoad: 7c900000 7c9b0000 C:/WINDOWS/system32/ntdll.dll
ModLoad: 7c800000 7c8f4000 C:/WINDOWS/system32/kernel32.dll
...

下断点 rasapi32!RasDialA, 然后 g
0:001> bp rasapi32!RasDialA
0:001> g

在 星空急速 的登录窗口输入电信给的用户名和密码. 然后点连接.



一会儿之后就到断点了.
Breakpoint 0 hit
eax=00433a90 ebx=0012ce00 ecx=7c80be2d edx=0012c3c4 esi=0012c6d4 edi=0012c3c3
eip=76ef6a25 esp=0012c150 ebp=7c80be01 iopl=0 nv up ei ng nz na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000286
RASAPI32!RasDialA:
76ef6a25 8bff mov edi,edi
0:000>

查看一下 callstack
0:000> kb
*** WARNING: Unable to verify checksum for C:/Program Files/ChinaNetSn/bin/Dialt
erminal.exe
*** ERROR: Module load completed but symbols could not be loaded for C:/Program
Files/ChinaNetSn/bin/Dialterminal.exe
ChildEBP RetAddr Args to Child
0012c14c 00417370 00000000 00000000 0012c3c4 RASAPI32!RasDialA
WARNING: Stack unwind information not available. Following frames may be wrong.
0012c168 0012dbd4 0012ce7c 0012dbe0 0012f5f0 Dialterminal+0x17370
0012c16c 0012ce7c 0012dbe0 0012f5f0 0037c9e0 0x12dbd4
0012dbd4 0037c940 0037c760 0037c710 00001000 0x12ce7c
0012dbd8 0037c760 0037c710 00001000 00000000 0x37c940
0012dbdc 0037c710 00001000 00000000 00000000 0x37c760
0012dbe0 00000000 00000000 00000000 00000000 0x37c710
0:000>

第三个参数 0012c3c4 就是我们要找的 LPRASDIALPARAMS. szPassword 在偏移 776 的地方. 查看之.
0:000> dc 0012c3c4 + 0n776
0012c6cc 31323738 31323738 65356165 36343661 87218721ea5ea646
0012c6dc 61393430 00326436 00000000 00000000 049a6d2.........
0012c6ec 00000000 00000000 00000000 00000000 ................
0012c6fc 00000000 00000000 00000000 00000000 ................
0012c70c 00000000 00000000 00000000 00000000 ................
0012c71c 00000000 00000000 00000000 00000000 ................
0012c72c 00000000 00000000 00000000 00000000 ................
0012c73c 00000000 00000000 00000000 00000000 ................
0:000>

密码出来啦.
要获取这个密码, 最简单的方法就是做一个 API 钩子. 截获之后将参数显示出来即可.
前两天看到 detour 的介绍. 正好可以试试. 下载 detour SDK, 照着例子修改了一下. 很快就写出破解程序了.



使用很简单. 将程序解压到星空急速的安装目录得到 5 个文件. 执行 patch.cmd, 就给 dialterminal.exe 打了补丁.
再执行 dialterminal.exe, 输入用户名, 密码. 点击连接. 一会儿就会弹出一个显示密码的对话框了.

另外的文件: unpatch.cmd 用于卸载补丁. rasdial.dll 用于 api hook.
setdll.exe, detoured.dll 为 Detour 自带.

从我的 googlepages 上下载 (27K):

http://nicoster.googlepages.com/rasdial.rar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: