1. 程式人生 > >C語言/C+遊戲編程學習之簡單 DLL 劫持,就是這麽任性

C語言/C+遊戲編程學習之簡單 DLL 劫持,就是這麽任性

C語言 C++ C/C++ 遊戲編程

C語言面向過程編程的語言;C++面向對象編程的語言。

兩者有本質的區別,其實是完全不同的兩種語言,只不過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 劫持,就是這麽任性