日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PC微信逆向:使用HOOK拦截二维码

發布時間:2025/3/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PC微信逆向:使用HOOK拦截二维码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 微信版本
    • 尋找微信二維碼基址
      • PNG文件格式
      • 使用CE過濾基址
      • 使用OD確定二維碼基址
      • 驗證二維碼基址
    • 尋找微信二維碼內容的基址
      • 微信二維碼的存儲內容
      • 使用CE尋找二維碼內容的基址
      • 驗證基址
      • 定制微信登錄二維碼的可能性
    • 使用hook截取二維碼
      • 最終效果

微信版本

尋找微信二維碼基址

PNG文件格式

微信二維碼在內存中存放形式是png格式的二進制數據,所以我們需要眼熟一下png的文件格式,如圖

前32個字節是固定的,分別是btPngSignature和struct PNG_CHUNK chunk結構,其中保存有png圖片的標識。

其中NG和IHDR是每個PNG文件都會有的標識,眼熟一下就好。微信的二維碼圖片就是通過這種格式在內存中存放

使用CE過濾基址

首先在微信未登錄狀態下附加微信,此時二維碼還未加載

然后選擇未知的數值,點擊首次掃描

出現三百萬個結果

此時我們再次點擊切換賬號,出現二維碼,讓保存二維碼的地址被賦值

然后選擇變動的數值 再次掃描

此時還剩下七萬個結果

然后用手機掃描二維碼 不要點擊登錄,再次掃描變動的數值,此時還剩三萬多個結果

接著隨意移動微信框,點擊未變動的數值,還剩一萬多個結果。返回二維碼登錄重復以上操作,直到地址欄還剩下兩個綠色的基址,這兩個綠色的基址就是我們要的。

因為隨機基址的存在,這個地址在各位的電腦上是不一樣的。但是低四位是一致的,這兩個地址應該是xxxx9194和xxxx919C。

使用OD確定二維碼基址

然后重啟一次微信,再用CE附加,回到這個狀態

用OD附加微信,在找到的第一個地址xxxx9194下內存寫入斷點

點擊切換賬號,在二維碼未加載時程序會斷下。注意,這個地方會斷下來兩次,第二次才是我們要的結果。

因為二維碼是存放在微信的核心模塊WeChatWin中的,所以我們在堆棧中找到所有的WeChatWin中的函數

像這種API的調用就可以直接排除掉,然后在每一個疑似函數上下斷點。找的時候堆棧盡量往下拉,這個函數會比較靠后。

因為我已經找過一遍了,所以直接告訴你們是這一個。特征是有一個ecx傳參。

接著在這個函數上下斷點,刪除內存訪問斷點,F9運行

然后掃一下二維碼,點擊返回二維碼登錄,程序斷下

此時觀察ecx指針的內容,明顯是一個結構體,結構體的第一個是地址,第二個好像是大小。然后在這個地址上數據窗口跟隨

里面是PNG文件的二進制數據,這個就是我們要找的微信二維碼的基址

驗證二維碼基址

打開PCHunter,選擇微信進程,查看->查看進程內存,輸入地址和大小,然后將內存dump下來

打開圖片


現在已經確定就是我們需要的二維碼。然后我們將這個call的地址減去模塊基址,記錄下偏移。待會需要HOOK這個call

尋找微信二維碼內容的基址

微信二維碼的存儲內容

二維碼其實是一種開放性的信息存儲器,它將固定的信息存儲在自己的黑白小方塊之間。大部分的二維碼都有一個特點,就是里面存放的其實是一段文本。我們可以利用這個文本來尋找突破口

將微信的二維碼截圖保存,然后用在線的二維碼解碼器解析微信的二維碼

可以看到解碼之后的結果是一段網址

使用CE尋找二維碼內容的基址

如果直接搜索這段網址是找不到任何結果的,原因是因為微信在保存這段位置的時候,實際上是將它分為了兩部分存儲

第一部分:http://weixin.qq.com/x 第二部分:/I-yOUnFpRaZOwZyVPC0H

第一部分的固定不變的,第二部分被當作一個參數傳入,客戶端從服務器獲取的只是第二部分的內容。所以我們去搜索第二部分。

另外,微信的二維碼會定時刷新,刷新的時候會改變第二部分的內容。如果你搜不到的話可能是因為之前的文本已經失效了。從解析文本到搜索文本最好在一分鐘之內完成

此時 我們直接搜索第二部分的文本

搜索完成之后,等待二維碼自動刷新,然后找到那個變化之后的地址,用截圖上傳的方式確保找到的是正確的地址

然后用OD附加微信,在找到的地址上下內存寫入斷點

等待二維碼自動刷新,二維碼刷新時會往原來存放二維碼的地址寫入新的二維碼數據,程序就會斷下

此時eax指向二維碼的文本內容,我們找到堆棧中的第一個地址,在數據窗口顯示,此時就能找到存放微信二維碼數據的基址了

然后我們在CE中添加WeChatWin.dll模塊,找到模塊基址,算出偏移(用0x104CF618-0xF250000=127F618)。然后將這個地址換成模塊基址+偏移的方式添加到CE地址欄。

驗證基址

重新打開微信,用CE載入

保留當前列表,然后將二維碼內容指針的值添加到列表

點擊確定。此時二維碼的內容和解析出來的內容一致,說明基址有效

定制微信登錄二維碼的可能性

那么我們拿到這個二維碼的內容有什么作用呢?我們可以將這個獲取到的二維碼內容調用二維碼生成器的API接口進行再次編碼,然后生成一個更加漂亮好看專屬二維碼,效果如圖:

使用hook截取二維碼

接著我們編寫一個dll,將這個dll注入到微信進程中,利用IAT Hook截取微信的二維碼。部分關鍵代碼如下:

開啟HOOK

void StartHook(DWORD dwHookOffset,LPVOID pFunAddr, HWND hWnd) {hDlg = hWnd;//拿到模塊基址DWORD dwWeChatWinAddr = GetWeChatWinAddr();//需要HOOK的地址DWORD dwHookAddr = dwWeChatWinAddr + dwHookOffset; //填充數據jmpCode[0] = 0xE9;//計算偏移*(DWORD*)(&jmpCode[1]) = (DWORD)pFunAddr - dwHookAddr-5;// 保存以前的屬性用于還原DWORD OldProtext = 0;// 因為要往代碼段寫入數據,又因為代碼段是不可寫的,所以需要修改屬性VirtualProtect((LPVOID)dwHookAddr, 5, PAGE_EXECUTE_READWRITE, &OldProtext);//保存原有的指令memcpy(backCode, (void*)dwHookAddr, 5);//寫入自己的代碼memcpy((void*)dwHookAddr, jmpCode, 5);// 執行完了操作之后需要進行還原VirtualProtect((LPVOID)dwHookAddr, 5, OldProtext, &OldProtext); }

卸載HOOK

void UnHook(DWORD dwHookOffset) {DWORD dwWeChatWinAddr = GetWeChatWinAddr();DWORD dwHookAddr = dwWeChatWinAddr + dwHookOffset;// 保存以前的屬性用于還原DWORD OldProtext = 0;// 因為要往代碼段寫入數據,又因為代碼段是不可寫的,所以需要修改屬性VirtualProtect((LPVOID*)dwHookAddr, 5, PAGE_EXECUTE_READWRITE, &OldProtext);// Hook 就是向其中寫入自己的代碼memcpy((LPVOID*)dwHookAddr, backCode, 5);// 執行完了操作之后需要進行還原VirtualProtect((LPVOID*)dwHookAddr, 5, OldProtext, &OldProtext); }

保存圖片

void SaveImg(DWORD qrcode) {//獲取圖片長度DWORD dwPicLen = qrcode + 0x4;size_t cpyLen = (size_t)*((LPVOID*)dwPicLen);//拷貝圖片的數據char PicData[0xFFF] = { 0 };memcpy(PicData, *((LPVOID*)qrcode), cpyLen);//將文件寫到本地HANDLE hFile = CreateFileA("E:\\qrcode.png",GENERIC_ALL,0,NULL,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL);if (hFile==NULL){MessageBox(NULL, "創建圖片文件失敗", "錯誤", 0);return;}DWORD dwRead = 0;if (WriteFile(hFile, PicData, cpyLen, &dwRead, NULL) == 0){MessageBox(NULL, "寫入圖片文件失敗", "錯誤", 0);return;}CloseHandle(hFile);//顯示圖片CImage img;CRect rect;//拿到控件的句柄HWND hPic = GetDlgItem(hDlg, IDC_QRPIC);GetClientRect(hPic, &rect);//載入圖片img.Load("E:\\qrcode.png");img.Draw(GetDC(hPic), rect);//顯示二維碼內容ShowQrCodeContent(hDlg);//完成之后卸載HOOKUnHook(QrCodeOffset); }

最終效果

最終效果如圖:

最后附上工程和成品DLL

目前微信機器人的成品已經發布,需要代碼請移步Github。還請親們幫忙點個star

https://github.com/TonyChen56/WeChatRobot

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的PC微信逆向:使用HOOK拦截二维码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产成人午夜精品无码区久久 | 久操免费视频 | 成人资源在线观看 | 51 吃瓜网 | 性猛╳xxx乱大交 | 奇米影视久久 | 强开小嫩苞一区二区三区网站 | 国产aⅴ精品 | 亚洲黄网在线 | 欧美一二三区 | 午夜天堂网| 国产粉嫩在线 | 在线国产一区二区三区 | 青青草原国产在线观看 | 欧洲一区二区在线观看 | 午夜爱爱影院 | 免费视频一区 | av在线免费网址 | 一区二区免费在线视频 | 免费看日韩av | 欧美精品国产动漫 | 中文字幕av久久爽 | 国产精品久久综合视频 | 黄瓜视频污在线观看 | 日韩三级欧美 | 别揉我奶头一区二区三区 | 国内精品久久久久久久久久 | 国产日韩专区 | 亚洲91精品| 亚洲视频在线观看 | 99热这里只有精品8 国产一卡二 | 成人午夜免费网站 | 国产精品va在线观看无码 | 老色批影视 | 色av中文字幕 | 女人av在线 | 日韩精品乱码久久久久久 | 黄色免费看视频 | 综合在线亚洲 | 日韩制服诱惑 | 少妇视频一区二区三区 | 黄色小网站在线观看 | 色中文字幕 | 少妇高潮一区二区三区99小说 | 日日操夜夜爱 | 69看片| 高h喷水荡肉少妇爽多p视频 | 国产高清不卡视频 | 狠狠操在线视频 | 毛片av网址 | 男人天堂黄色 | 精品久久影院 | 日日干天天干 | 精品人妻一区二区三区久久夜夜嗨 | 91成人在线播放 | 日韩av综合网 | 一区二区在线免费观看视频 | 中国农村一级片 | 伊人手机在线视频 | 久久密 | 天堂网av手机版 | 日韩久久一区二区三区 | 日韩精品极品视频免费观看 | 丁香六月婷婷激情 | 黄色不卡 | www.4hu95.com四虎| 久久久久久久久久久久 | 亚洲一级片免费 | 亚洲大乳| 精品久久一 | 色网站入口 | 波多野结衣一区二区在线 | 黄站在线观看 | 波多野在线播放 | 国产乡下妇女做爰视频 | 久久丁香 | 一本色道久久综合亚洲 | 日韩av电影手机在线观看 | 性做久久久久久久久久 | 欧美三级黄 | 国产拍拍拍拍拍拍拍拍拍拍拍拍拍 | 日韩免费av一区 | 日韩激情一区二区三区 | 日韩欧美自拍 | 91网站在线免费看 | 亚洲乱码在线观看 | 超碰在线最新地址 | 久久艹中文字幕 | 人操人人| 国产午夜精品福利 | 欧美日韩小说 | 爱爱一区二区三区 | 西西久久 | 亚洲色图少妇 | 精品国产一区二区三区四区 | 四虎在线视频 | 亚洲av无码成人精品国产 | xxxx日本免费 | 性欧美18—19sex性高清 |