C語言/C+遊戲編程學習之簡單 DLL 劫持,就是這麽任性
兩者有本質的區別,其實是完全不同的兩種語言,只不過C++兼容C語言而已。
其中C++則一般看作是對C語言的擴展。因為C語言沒有面向對象的語法結構,而當時業界又迫切需要面向對象的編程特性,所以貝爾實驗室的開發者就為C語言添加了面向對象的結構。現在C++已經不只是C語言的擴展了,它已經完全可以被看作一種新的編程語言。雖然C語言的特性以及庫函數仍然被C++支持,不過C++擁有自己的獨立的類庫體系,功能相當強大。
C/C++的優點在於與底層比較接近,可以控制的粒度更加精細,是開發系統級應用的最佳選擇。關於跨平臺,C/C++也是很好的語言,因為所有平臺都支持,不同的是,不同平臺支持的實現不同,類庫不同,要編寫跨平臺的程序,需要選擇跨平臺的類庫,如標準類庫,如果標準類庫的支持不夠也只需要附加編寫一個跨平臺的支持類庫。
通過C語言編寫一個遊戲要加載的系統DLL文件(lpk.dll),其中假DLL包含劫持功能和作弊功能且擁有相同的導出函數,將該假DLL放入遊戲相同目錄下,遊戲打開時會自動加載該假DLL,使遊戲直接包含作弊功能。
設計思路分析
對象分析
要用的函數介紹
編寫測試效果
總體評價
設計思路分析
構造一個與系統目錄下LPK.DLL一樣的導出表
加載系統目錄下的LPK.DLL
將導出函數轉發到系統目錄下的LPK.DLL上
在初始化函數中加入我們要執行的代碼
對象分析
註:本次遊戲對象為Super Mario XP
沒有更新所以可用任意版本 ,
試玩發現人物血量最大為10,心最大為99,命最大為99。
要用的函數介紹
__asm{ }
執行括號內的匯編代碼
JMP EAX
將EIP跳轉到EAX執行,劫持DLL後要獲取真正的原函數地址,使用時要進行跳轉
編寫測試效果
將生成的mylpk和作弊模塊放入遊戲目錄,並改mylpk名為lpk
打開遊戲
直接打開遊戲即可,發現此時遊戲已具備作弊效果(鎖定血量)
工具查看加載模塊
發現cheatDLL模塊已加載入遊戲,說明lpk劫持成功
WIN7下劫持
在WIN7下要劫持只需稍修改註冊表即可
總體評價
DLL劫持可以在不用手動加載外掛,在運行遊戲時自動加載作弊功能。
最後我來說一說了解C的必要性:
1. 對內存和硬件的操作,是目前絕大部分高級語言所隱藏的,只有堅實C背景的同學,才可以考慮的更多,如果你想對原理有更多的了解,那麽C其實是不可繞過的一個環節。
2. 想要締造一個新的系統和語言,沒有C是不行滴(或許C++勉強)。
3. 不管是OC的消息系統,Java的自動回收,Ruby的動態類擴充,這些花哨且時髦的東西,其實都可以用C來實現,而且很多都是用C來實現的,如果你想自己實施,看C吧。
4. 破解和分析程序,C可以起到很大的作用。C是可以人為創建Bug來破壞一個系統滴。
最後我引用我的一個大牛朋友的話:“請不要忽視C語言,它上可九天摘月,下可五洋捉鱉”。
我有一個微信公眾號,經常會分享一些C語言/C++技術相關的幹貨;如果你喜歡我的分享,可以用微信搜索“C語言學習部落”關註
歡迎大家加入千人交流答疑裙:627+012+464
C語言/C+遊戲編程學習之簡單 DLL 劫持,就是這麽任性