日韩性视频-久久久蜜桃-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拦截二维码的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 永久av在线 | 欧美xxxx在线 | 在线播放www| 亚洲人成人一区二区在线观看 | 亚洲精品久久久狠狠狠爱 | 午夜宅男网 | 操人小视频 | 欧美黑人性受xxxx精品 | 日产国产亚洲精品系列 | 欧美激情videos | 久操操 | 91在线视频免费看 | 免费看裸体视频网站 | 五月天婷婷影院 | 超碰成人免费电影 | 狠狠婷婷 | 国产成人精品久久二区二区 | 在线一区二区三区视频 | 日韩欧美国产成人 | 婷婷伊人综合中文字幕 | 国产又粗又猛又爽又黄的网站 | 成人免费视频国产免费麻豆 | 国产黄色免费观看 | 欧美91精品久久久久国产性生爱 | av影音先锋 | 国产主播av | 久久久精品视频免费 | 国产精品vip | 啪啪五月天 | 免费看美女被靠到爽的视频 | 日韩视频免费观看高清完整版在线观看 | 欧美精品久久久久久久自慰 | 在线视频自拍 | 青青草综合 | 日本成人小视频 | 精品国产一区一区二区三亚瑟 | 日韩一区二区精品视频 | 无人在线观看高清视频 | 蜜桃av中文字幕 | 97在线免费观看视频 | 国产精品久久久久久久久动漫 | 亚州中文字幕 | 打开免费观看视频在线 | 亚洲一区偷拍 | 成人xxxxx| aaaa黄色片| 人妻在线日韩免费视频 | 91网站在线播放 | 亚洲AV综合色区无码国产播放 | 夜夜爽av福利精品导航 | 精品国产三级 | 一本一道久久a久久精品综合 | 青青青免费在线视频 | 亚洲精品福利 | 午夜怡红院 | 成人亚洲在线 | 欧美成人黄色 | 国产精品卡一 | 狠狠干一区 | 视色av | 男人的天堂在线视频 | 欧美不卡视频在线观看 | 欧美成人手机在线 | 91成人免费版| 男女免费看| 免费av入口| 亚洲熟女综合色一区二区三区 | 好吊妞这里只有精品 | 北条麻妃久久精品 | 婷婷爱爱| 成人自拍视频在线 | 特级淫片裸体免费看冫 | 国产精品天堂 | 国产精品一区二区在线看 | 吻胸摸激情床激烈视频 | 久久精品波多野结衣 | 色综合区| 麻豆影片| 欧美嫩草影院 | 性欧美视频在线观看 | 国产精品69久久久久孕妇欧美 | 日韩国产综合 | 亚洲 另类 春色 国产 | 久久综合区 | 黄色片不卡 | 国产aⅴ精品一区二区果冻 台湾性生生活1 | 日本在线三级 | 亚洲码中文 | 91精品久久香蕉国产线看观看 | 精品黑人一区二区三区国语馆 | 日本综合久久 | 99热在线观看免费精品 | 91久久人澡人人添人人爽欧美 | 九九久久九九久久 | 乳孔很大能进去的av番号 | 精品三级在线 | 91高清视频| 香蕉视频99 | 五月伊人婷婷 |