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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

逆向分析-连连看

發布時間:2023/12/18 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 逆向分析-连连看 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
系統環境:win10 64位、win7 32 位

工具:吾愛專用OD、CE、代碼注入器、火絨劍、VS2019

1.找到原程序exe去廣告。
2.以兩種方式實現輔助工具:MFC輔助、MFC靜態鏈接庫輔助。
3.功能:增加炸彈道具、無限道具、無限時間、單次消除、一鍵秒殺。
2.具體分析過程
?2.1 去廣告
打開qqllk.exe會連續彈兩個窗然后才進入游戲
打開火絨劍觀察,重新打開qqllk.exe發現會創建進的進程qqllk.ock
然后再創建kyodai.exe
那么kyodai.exe才是游戲的本體文件。直接把qqllk.ock拖進OD
在CreateProcess函數API下斷點,發現這個進程創建的參數是掛起的

而且直接打開kyodai.exe是會報錯的
而用qqllk.ock打開就會成功,那么我猜測肯定是修改了kyodai.exe什么數據才能讓他成功打開。
所以再去下API斷點WriteProcessMemory
果然斷下了

那么觀察到是在0x43817a基址下寫入了一個字節的0x0
那么我們去OD把kyodai.exe里面改掉,再保存新的文件
去廣告完畢!
2.2 指南針道具無限、無限時間
用CE找指南針的基址

發現指南針是兩字節的 基址:0x0012AC5E
嘗試修改,確實修改了,重開發現這個地址還可以用,那說明就是基址
CE右鍵->找出是什么改寫了這個地址
找到如下代碼:

把dec這行代碼給nop掉,再運行,指南針數量就不減少了,其他道具也不減少了。
更改時間同理找到時間基址:0x0012A748
CE右鍵->找出是什么改寫了這個地址

把這行代碼nop掉。
搞定!

2.3 增加道具
先找到內存0x0012AC5E

觀察使用道具、獲得道具后內存的變化。
發現這樣修改就有炸彈道具

2.4 單次消除
方法2:增加炸彈道具+無限道具+鼠標點擊事件
代碼如下:

1. HWND hWnd = ::FindWindow(NULL, L"QQ連連看"); 2. if (hWnd == NULL) 3. { 4. MessageBox(L"沒找到進程", 0, 0); 5. return; 6. } 7. WORD x = 704; 8. WORD y = 204; 9. DWORD dwPos = MAKELONG(x, y); 10. 11. //通過窗口句柄得到進程ID 12. DWORD pid = 0; 13. 這個函數很神奇,傳入指針可以得到進程ID,返回值同事又是線程ID 14. DWORD dwThreadPid = GetWindowThreadProcessId(hWnd, &pid); 15. //通過進程ID得到進程句柄 16. HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid); 17. //創建一個4字節的nop 18. BYTE* nopCode = new BYTE[4]; 19. for (size_t i = 0; i < 4; i++) 20. { 21. nopCode[i] = 0x90; 22. } 23. //修改道具基址 24. DWORD dwProp = 0x0042AA9C; 25. WriteProcessMemory(hProcess, (LPVOID)dwProp, nopCode, 4, 0); 26. 27. WORD nopBOOMCode = 0xF4; 28. WORD nopCountCode = 220; 29. 30. //增加炸彈道具基址 31. DWORD dwBOOM = 0x0012AC8D; 32. //炸彈道具數量基址 33. DWORD dwBOOMCount = 0x0012AC8E; 34. WriteProcessMemory(hProcess, (LPVOID)dwBOOM, &nopBOOMCode, sizeof(WORD), 0); 35. WriteProcessMemory(hProcess, (LPVOID)dwBOOMCount, &nopCountCode, sizeof(WORD), 0); 36. //發送鼠標點擊消息 37. ::PostMessage(hWnd, WM_LBUTTONDOWN, 0, dwPos); 38. ::PostMessage(hWnd, WM_LBUTTONUP, 0, dwPos);

方法2:找到道具CALL
我的方法是先找到連連看數組,因為我覺得道具CALL會訪問這個數組
方塊是隨機的,我下個rand斷點
在這里斷下

這個函數很短,出去看看

外層是這個函數,發現參數沒有找到有用的
看到下面有個memcpy,看看它的參數,

第一個參數,數據窗口跟隨,是很有規律的數組,多跑幾次發現就是我們想要的

選中內存,右鍵內存訪問斷點

然后ALT+K發現這里有很多CALL把這些CALL的地方都下斷點,然后觀察參數
感覺這個CALL是的話就寫個匯編代碼注入試試

最終找到這個

寫了下面代碼:

1. lea ecx,[0x0012A688] 2. push 0xF4 3. push 0 4. push 0 5. call 0x0041E691

注入成功!開始寫代碼
寫mfc的dll直接注入匯編代碼(會失敗),所以我用注入之后改寫窗口回調函數,注入之后再回到原來的窗口回調函數,這樣是可行的。
關鍵代碼如下:

1. //炸彈 2. if (Msg == WM_DATA3) 3. { 4. _asm 5. { 6. MOV ECX, 0X12A688; //this指針 7. PUSH 0XF4; //參數3 8. PUSH 0; //參數2 9. PUSH 0; //參數1 10. MOV EAX, 0X0041E691; 11. CALL EAX;//指南針函數 12. } 13. return CallWindowProc(g_OdlProc, hWnd, Msg, wParam, lParam); 14. }

2.4 一鍵秒殺
無論是鼠標點擊,還是注入匯編代碼,一個循環執行就行了唄。
定義 i = / 2;
然后循環

3.總結
我寫了兩種輔助工具的方法,MFC和MFC靜態鏈接庫,都是可行的

總結

以上是生活随笔為你收集整理的逆向分析-连连看的全部內容,希望文章能夠幫你解決所遇到的問題。

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