欧美激情网,国产欧美亚洲高清,欧美屁股xxxxx,欧美群妇大交群,欧美人与物ⅴideos另类,区二区三区在线 | 欧洲

知識(shí)學(xué)堂
  • ·聯(lián)系電話:+86.023-75585550
  • ·聯(lián)系傳真:+86.023-75585550
  • ·24小時(shí)手機(jī):13896886023
  • ·QQ 咨 詢:361652718 513960520
當(dāng)前位置 > 首頁 > 知識(shí)學(xué)堂 > 常見技術(shù)問題
利用微軟Detours開發(fā)包截獲星空極速賬號(hào)和密碼
更新時(shí)間:2012-06-10 | 發(fā)布人:本站 | 點(diǎn)擊率:545
有些地區(qū)的中國電信(如湖北)對(duì)用星空極速撥號(hào)的賬號(hào)或者密碼進(jìn)行了加密處理,一旦用戶使用過一次星空極速進(jìn)行撥號(hào),那么他的賬號(hào)或者密碼將被加密,這樣就導(dǎo)致路由器直接用原來的初始撥號(hào)賬號(hào)和密碼無法撥號(hào),本文將利用微軟的detours開發(fā)包工具截獲加密后的賬號(hào)和密碼,用此賬號(hào)密碼路由器即可成功撥號(hào)。

        網(wǎng)絡(luò)上已經(jīng)有一些星空極速賬號(hào)密碼算法研究的文章,但是都不是很徹底,也不是一勞永逸的方法,因?yàn)橐坏┧惴ǜ淖兡敲捶椒ㄒ簿褪В枰匦路治鏊惴。本文介紹的方法則可以一勞永逸的解決上面的問題
本人經(jīng)過分析星空極速撥號(hào)軟件,它在底層調(diào)用了windows PPPoE撥號(hào)API(rasapi32.dll),關(guān)鍵的函數(shù)就是如下圖中的RasDialA 函數(shù),此函數(shù)需要傳遞一個(gè)結(jié)構(gòu)體,而此結(jié)構(gòu)體中就存在我們需要的敏感數(shù)據(jù):ADSL賬號(hào)和密碼


RasDialA函數(shù)參數(shù)中的一個(gè)結(jié)構(gòu)體如下RASDIALPARAMSA,其中szUserName和szPassword為ADSL賬號(hào)和密碼,也是我們需要截獲的數(shù)據(jù),一旦我們有方法截獲這兩個(gè)參數(shù)的值那么不管中國電信以后的算法如何升級(jí),只要他不全部重寫PPPoE協(xié)議棧,都可以通過此方法截獲,達(dá)到一勞永逸
RASDIALPARAMSA
{
     DWORD dwSize;
     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 >= 0x401)
     DWORD dwSubEntry;
     DWORD dwCallbackId;
#endif
};
___________________________________________________________________________________________________________
下面介紹一下使用detours進(jìn)行RasDialA函數(shù)截獲的方法。新建一個(gè)MFC dll工程,可以選擇靜態(tài)鏈接MFC庫,在theApp所在文件頭部加入包含文件
#include "detours.h" //微軟detours頭文件
#include   "ras.h"   //windows PPPoE 函數(shù)頭文件
#pragma comment(lib,"detours.lib") //微軟detours靜態(tài)lib
#pragma comment(lib,"rasapi32.lib") // windows PPPoE 函數(shù)lib
___________________________________________________________________________________________________________

增加如下幾個(gè)函數(shù)體
//截獲RasDialA函數(shù)體,用戶自己實(shí)現(xiàn),在調(diào)用系統(tǒng)RasDialA函數(shù)之前系統(tǒng)會(huì)先調(diào)用此函數(shù),而參數(shù)入口信息完全一致,這樣我們就可以從中提取相應(yīng)的參數(shù)信息,提取完成后再繼續(xù)調(diào)用系統(tǒng)原來的RasDialA函數(shù),達(dá)到Hook API的目的
DWORD WINAPI MyRasDialA(
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
);
___________________________________________________________________________________________________________
④//經(jīng)過替換修飾后的RasDialA函數(shù),用戶可以在MyRasDialA函數(shù)中繼續(xù)調(diào)用系統(tǒng)原來的RasDialA函數(shù)功能,在MyRasDialA函數(shù)中如果要調(diào)用系統(tǒng)原來的RasDialA函數(shù)必須調(diào)用經(jīng)過修飾后的oldRasDialA函數(shù),否則將造成無窮嵌套調(diào)用造成堆棧崩潰

DETOUR_TRAMPOLINE(DWORD WINAPI oldRasDialA(
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*/ ),RasDialA
);
___________________________________________________________________________________________________________
⑤//截獲RasDialA函數(shù)體,用戶自己實(shí)現(xiàn),比如在對(duì)話框中彈出ADSL賬號(hào)和密碼,然后繼續(xù)調(diào)用系統(tǒng)的撥號(hào)函數(shù)RasDialA完成撥號(hào),這樣用戶一旦使用星空極速撥號(hào)軟件進(jìn)行撥號(hào)將首先調(diào)用MyRasDialA函數(shù),彈出加密后的賬號(hào)和密碼

DWORD WINAPI MyRasDialA(
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
)
{
   //MessageBox(NULL,lpRasDialParams->szUserName,lpRasDialParams->szPassword,MB_OK);

   CNameAndPassDlg dlg(lpRasDialParams->szUserName,lpRasDialParams->szPassword,NULL);

   dlg.DoModal();

   return oldRasDialA(lpRasDialExtensions,lpszPhonebook,lpRasDialParams,dwNotifierType,lpvNotifier,lphRasConn);
}
___________________________________________________________________________________________________________
進(jìn)行一些初始化工作和清理工作,在dll的初始化函數(shù)中加入:
XXXX:: InitInstance()
{
   // TOD Add your specialized code here and/or call the base class

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

   return CWinApp::InitInstance();

}
___________________________________________________________________________________________________________
在dll的卸載函數(shù)中加入:
XXXX::ExitInstance()
{
   // TOD Add your specialized code here and/or call the base class

   DetourRemove((PBYTE)oldRasDialA, (PBYTE)MyRasDialA);
    
   return CWinApp::ExitInstance();

}

編譯XXXX.dll完成后,拷貝一份系統(tǒng)system32目錄下面的rasapi32.dll,利用detours工具setdll.exe對(duì)rasapi32.dll進(jìn)行修正,加入對(duì)剛才編譯好的XXXX.dll的依賴關(guān)系
___________________________________________________________________________________________________________

批處理文件如下:
@echo off
if not exist rasapi32.dll (
echo 請(qǐng)將文件解壓到星空極速的安裝目錄, 然后執(zhí)行補(bǔ)丁程序
) else (
setdll /d:XXXX.dll rasapi32.dll
)
pause
    運(yùn)行完成后,rasapi32.dll將會(huì)被改寫,并依賴XXXX.dll文件,如下圖:


   將本生成的XXXX.dll,修改后的rasapi32.dll拷貝到星空極速的主程序目錄,如湖北電信是*\ChinaNetSn\bin下),運(yùn)行星空極速撥號(hào)軟件進(jìn)行撥號(hào),會(huì)彈出對(duì)話框顯示ADSL賬號(hào)和密碼,將此密碼和用戶名設(shè)置為路由器的撥號(hào)賬號(hào)和密碼即可,使用完畢后可以自由刪除相關(guān)XXXX.dll,rasapi32.dll文件即可



如需要此工具請(qǐng)下載:http://www.xdowns.com/soft/1/72/2010/Soft_60606.html