利用detours开发包截获星空极速账号和密码

本文介绍了一种利用detours开发包工具截获并解析中国电信星空极速拨号软件加密后的ADSL账号和密码的方法,该方法适用于某些地区(如湖北)加密了拨号账号密码的情况,确保路由器能成功拨号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有些地区中国电信(如湖北)对用星空极速拨号的账号或者密码进行了加密处理,一旦用户使用过一次星空极速进行拨号,那么他的账号或者密码将被加密,这样就导致路由器直接用原来的初始拨号账号和密码无法拨号,本文将利用微软detours开发工具截获加密后的账号和密码,用此账号密码路由器即可成功号。

网络上已经有一些星空极速账号密码算法研究文章,但是都不是很彻底,也不是一劳永逸的方法,因为一旦算法改变那么方法也就失效,需要重新分析算法。本文介绍的方法则可以一劳永逸的解决上面的问题


本人经过分析星空极速拨号软件,它在底层调用了windows PPPoE拨号APIrasapi32.dll,关键的函数就是如下图中的RasDialA函数,此函数需要传递一个结构体,而此结构体中就存在我们需要的敏感数据ADSL账号和密码

RasDialA 函数参数中的一个结构体如下RASDIALPARAMSA,其中szUserNameszPasswordADSL账号和密码,也是我们需要截获的数据,一旦我们有方法截获这两个参数的值那么不管中国电信以后的算法如何升级,只要他不全部重写PPPoE协议栈,都可以通过此方法截获,达到一劳永逸

RASDIALPARAMSA

{

DWORDdwSize;

CHAR  szEntryName[ RAS_MaxEntryName + 1 ];

CHAR   szPhoneNumber[RAS_MaxPhoneNumber + 1 ];

CHAR  szCallbackNumber[ RAS_MaxCallbackNumber + 1 ];

CHAR  szUserName[ UNLEN + 1 ];

CHAR  szPassword[ PWLEN + 1 ];

CHAR   szDomain[DNLEN + 1 ];

#if (WINVER>= 0×401)

DWORDdwSubEntry;

DWORDdwCallbackId;

#endif

};

___________________________________________________________________________________________________________

下面介绍一下使用detours进行RasDialA函数截获的方法。新建一个MFC dll工程,可以选择静态链接MFC,theApp所在文件头部加入包含文件

#include“detours.h” //微软detours头文件

#include  “ras.h”   //windows PPPoE 函数头文件

#pragma comment(lib,”detours.lib”)//微软detours静态lib

#pragmacomment(lib,”rasapi32.lib”) // windows PPPoE 函数lib

___________________________________________________________________________________________________________

增加如下几个函数体

//截获RasDialA函数体,用户自己实现,在调用系统RasDialA函数之前系统会先调用此函数,而参数入口信息完全一致,这样我们就可以从中提取相应的参数信息,提取完成后再继续调用系统原来的RasDialA函数,达到Hook API的目的

DWORDWINAPI MyRasDialA(

LPRASDIALEXTENSIONSlpRasDialExtensions, // pointer to function extensions data

LPCTSTRlpszPhonebook,    // pointer to full path and file name ofphone-book file

LPRASDIALPARAMSlpRasDialParams, // pointer to calling parameters data

DWORDdwNotifierType,    // specifies type of RasDial event handler

LPVOIDlpvNotifier,      // specifies a handler for RasDialevents

LPHRASCONNlphRasConn    // pointer to variable to receive connectionhandle

);

___________________________________________________________________________________________________________

//过替换修饰后的RasDialA函数,用户可以在MyRasDialA函数中继续调用系统原来的RasDialA函数功能,在MyRasDialA函数中如果要调用系统原来的RasDialA函数必须调用经过修饰后的oldRasDialA函数,否则将造成无穷嵌套调用造成堆栈崩溃

DETOUR_TRAMPOLINE(DWORDWINAPI oldRasDialA(

LPRASDIALEXTENSIONSlpRasDialExtensions, // pointer to function extensions data

LPCTSTRlpszPhonebook,    // pointer to full path and file name ofphone-book file

LPRASDIALPARAMSlpRasDialParams, // pointer to calling parameters data

DWORDdwNotifierType,    // specifies type of RasDial event handler

LPVOIDlpvNotifier,      // specifies a handler for RasDialevents

LPHRASCONNlphRasConn    /* pointer to variable to receive connectionhandle*/ ),RasDialA

);

___________________________________________________________________________________________________________

//截获RasDialA函数体,用户自己实现,比如在对话框中弹出ADSL账号和密码,然后继续调用系统的拨号函数RasDialA完成拨号,这样用户一旦使用星空极速拨号软件进行拨号将首先调用MyRasDialA函数,弹出加密后的账号和密码

DWORDWINAPI MyRasDialA(

LPRASDIALEXTENSIONSlpRasDialExtensions, // pointer to function extensions data

LPCTSTRlpszPhonebook,    // pointer to full path and file name ofphone-book file

LPRASDIALPARAMSlpRasDialParams, // pointer to calling parameters data

DWORDdwNotifierType,    // specifies type of RasDial event handler

LPVOIDlpvNotifier,      // specifies a handler for RasDialevents

LPHRASCONNlphRasConn    // pointer to variable to receive connectionhandle

)

{

//MessageBox(NULL,lpRasDialParams->szUserName,lpRasDialParams->szPassword,MB_OK);

CNameAndPassDlgdlg(lpRasDialParams->szUserName,lpRasDialParams->szPassword,NULL);

dlg.DoModal();

returnoldRasDialA(lpRasDialExtensions,lpszPhonebook,lpRasDialParams,dwNotifierType,lpvNotifier,lphRasConn);

}

___________________________________________________________________________________________________________

进行一些初始化工作和清理工作,在dll的初始化函数中加入:

XXXX::InitInstance()

{

//TOD Add your specialized code here and/or call the base class

DetourFunctionWithTrampoline((PBYTE)oldRasDialA,(PBYTE)MyRasDialA);

returnCWinApp::InitInstance();

}

___________________________________________________________________________________________________________

dll的卸载函数中加入:

XXXX::ExitInstance()

{

//TOD Add your specialized code here and/or call the base class

DetourRemove((PBYTE)oldRasDialA,(PBYTE)MyRasDialA);

returnCWinApp::ExitInstance();

}

编译XXXX.dll完成后,拷贝一份系统system32目录下面的rasapi32.dll,利用detours工具setdll.exerasapi32.dll进行修正,加入对刚才编译好的XXXX.dll的依赖关系

___________________________________________________________________________________________________________

批处理文件如下:

@echo off

if not exist rasapi32.dll (

echo 请将文件解压到星空极速的安装目录,然后执行补丁程序

) else (

setdll /d:XXXX.dll rasapi32.dll

)

pause

   运行完成后,rasapi32.dll将会被改写,并依赖XXXX.dll文件

   本生成的XXXX.dll,修改后的rasapi32.dll拷贝到星空极速的主程序目录,如湖北电信是*\ChinaNetSn\bin),运行星空极速拨号软件进行拨号,会弹出对话框显示ADSL账号和密码,将此密码和用户名设置为路由器的拨号账号和密码即可,使用完毕后可以自由删除相关XXXX.dll,rasapi32.dll文件即可

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值