遊戲外掛編程如何系統學習?

我是零基礎,我有大把的時間,可以全身心的撲在上面。我要從什麼語言開始,然後再循序漸進的到其他語言。謝謝各位先。


我也來簡單回答一下題主。
首先, 外掛是一門很大很注重實踐的一門技術大類。
在這個技術大類之下還分很多小類。
一般來說分逆向,編寫邏輯 這2方面
所謂逆向,也就是分析遊戲的客戶端,尋找相關功能的函數
而編寫邏輯,如掉線重登,自動打怪,自動吃藥 之類等等等。
但是實際上, 寫一個掛,遠遠不止上述的2方面
比如說還要過遊戲的保護,這個需要運用Window內核的知識。
以前的大神寫掛都是單獨一人完成的,這個需要懂的內容非常非常多。
我列舉一下成為一個全能大神所需的知識:
首先,彙編的基礎知識必須過硬,有良好的逆向經驗。了解常用的數據結構(因為遊戲的背包或者怪物之類的多用二叉樹或者數組, 連基本的數據結構都不懂……那玩個蛋)
了解API,R3(Native API),R0(內核),Socket。熟悉一門編程語言(只會彙編也可以)
如果你能把上述的學精,就有成為大神(外掛類)的潛質。
-------------------------寫著寫著突然不想寫了,以後再補充吧--------------------------------------
竟然有人評論……那我繼續寫了。

如果是對編譯原理比較了解的基友,應該就知道。
一個靜態函數是一個固定的CALL,一個struct的結構內容都是用偏移可以算出來所有成員的。
所以逆向遊戲客戶端,分析出遊戲中的某些功能函數的地址,再加以分析出所傳遞的參數,模擬調用。這樣一個簡單的功能就完成了。
當然,這中間還牽扯到其他不少的東西, 比如說必須熟悉結構,
舉個栗子:
當你看到一個參數他的內存形式如下:
0x12345678:11111110
0x1234567C:11111110
0x12345680:11111114

這樣的玩意,就很快可以聯想到這是一個數組,還是一個vector。
這些除了要有逆向的功底以外,還需要有「逆向遊戲的經驗」, 因為遊戲的參數都那德行,萬變不離其宗。
除此之外, 遊戲現在都有防多開的干涉。
在不談驅動保護的前提下, 你需要熟悉Window的工作機制,特別是互斥的工作原理,當然,現在遊戲保護不止是互斥判斷多開,比如說進程路徑重複,類名,窗口名,互斥,內存映射,判斷文件是否存在等等之類的……所以你至少要把那本Window核心編程給看熟。
這方面的書籍, 我也沒有太多的介紹, 現在有不少人是熟悉逆向,而不會過多的編程的「外掛作者」。 他們都並非靠對編譯原理的理解去逆向遊戲數據,而且靠「經驗」去逆向遊戲數據。
總的來說,我看他們都是在網上找教程看下,再加以練習,就能達到這個水準了。

那麼接下來再講講編程這塊。
因為需要穩定不需要過多的人工量去看的掛機,所以你需要寫得非常「智能」,簡化操作流程,還要把角色的傷害跟玩家相提並論, 此過程聽起來很簡單, 操作起來非常麻煩。
首先多線程你要懂吧? 比如說你必須無時無刻都在判斷人物Hp低於某個程度就得啃葯了吧?總不能每寫一句代碼就寫if判斷一次血量吧?
還有某些全局數組或者vector之類的多線程操作,比較基礎的互斥啊,臨界區之類的你要用吧?
總而言之,多線程這塊就是麻煩!這類書籍我也就不班門弄斧了,想必各種大神的推薦應該更有力。
接下去還需要懂Native API。 就是俗稱的R3. 亦是巨硬沒公開的API, 需要用這層去隱藏自己的DLL,防止遊戲的檢測。 還有多開之類的,一般都在這層完成的。
你需要懂一點PE文件格式,把大部分的Native API的運行方法,調用方式給弄懂。
還需要懂Socket網路編程.
因為 你需要怎麼「驗證」自己,達到給工作室收費的目的,
還有你需要怎麼「驗證」自己,達到防止被別人破解的目的
當然,牽扯到socket了,我是看了,會socket的,大部分都會資料庫操作的。
要嘛是MSSQL,要嘛是MySQL。 這個方便查詢和管理。(這個資料庫對寫掛木有硬性要求)
socket無非就是粘包之類的,超時之類的判斷。 趕腳不需要學到很深。
當然,如果你還要弄離線掛,底層的TCP協議是必須會的。
還有加密和解密演算法得杠杠的,逆向功底也要杠杠的。

我想下,編程這塊應該就剩下個腳本了吧? 會一門腳本語言這個應該很easy。
還有應該懂一點演算法, 比如說A*, dijkstra,之類的。

剩下就是Window內核了,就是俗稱的R0,驅動層。
……
就先寫到這裡了……以後想多了再補充。

------------------8.24號更新--------------------------------
有兄台問: 為何要精通彙編……
這……難道還有遊戲的源碼供你調試?
在木有遊戲的源碼下,只能看彙編……

有兄台問:現在外掛的行情如何:
我只能說, 沒幾年前那麼好賺了, 幾年前在DNF大火的時候,養了一大批中國的外掛作者和工作室。 但是現在的遊戲,防得越來越嚴了。
新人最難的就是入門, 而真正賺錢的東西,都被各家的前輩捂得嚴嚴實實的。
哪怕你是一個編程高手,逆向高手。 當你真正寫出一個掛的時候,會發現,瑪德被封號了。 為何不穩定? 5分鐘掉一次線? 為何總是跟不上工作室的需求, 不知道弄什麼功能出來才是工作室所需的,而工作室本身就不是很懂技術,說的東西總是含糊其詞的…… 恨不得直接可以刷軟妹幣到他們的口袋。

這個行業很講經驗, 對付封號的經驗,跟工作室配合的經驗,熟悉遊戲的經驗, 怎麼才能用最短的時間,寫出工作室最需要的功能。

順便一提, 就是這些經驗,都是需要時間的日積月累。 然而新人入門都倒在了這個門檻上,很少有人能夠堅持個幾年去不斷摸索學習。
當然現在也有很多寫掛的教程視頻,請允許我對這種視頻說一句:然並卵!

真正賺到錢的作者,根本不會去在乎那點小錢,也不會拿這種共享的心態去分享這些經驗,這些經驗對於他們來說就是收入,他們公開了這些經驗,很多人知道,就意味著很多遊戲公司的反外掛部門也知道, 那就是打破自己的飯碗。

知乎很多大神,有很多反外掛的大神,也有很多寫掛的大神都混在這裡(所以我才匿名,免得被認出來)

很多人進這行1年都能賺百萬,有人5年都賺不到10萬。 總是有高有低,有起有落的。

就如同在國家嚴打黑客前,當年的刷鑽盜號,入侵教程如春筍般在各種網站上公開叫賣, 肆意揮霍的年代, 很多大神就是從那個(相對於現在這個年代的環境已經是超級好了)年代成長起來,以前是年代也是「相對」比較單純,現在學滲透,不如以前的學習環境好, 但是長江後浪推前浪,後浪死在沙灘上,依然有人在這種國家要嚴打的環境下 還是成長到媲美 上一代大神的境界。

最後給各位讀者一句衷心的勸言:
沒有一顆沉得住寂寞的心,不要輕易進這個行業
沒有一顆2年都賺不到錢的覺悟,不要輕易進這個行業
沒有一顆堅強的心(偷摸拐騙在這個行業處處可見),不要輕易進這個行業

我也比較認同樓下的說法, :
技術的成長路線 全看個人,雖然這條路很偏,這門技術在「正統」的領域中,很少有用得上的。

最後總結一下這門技術, 是非常注重「實踐」和「調試」,
如果想增強一下對語言底層的理解,邏輯思維的增強,調試功底, 可以稍微淺入這個領域去學習一下。

特別是調試功底~!
在木有源碼,無法調試的情況下,甚至在不知道,出錯是你的鍋,還是遊戲的鍋。不知道為何運行一段時間崩潰後,瘋狂查日誌的寂寞。

這個行業 也確實是比較「浮躁」的一個行業,功利心很強, 大家都是向著利益看齊。因為利益而解散的寫掛團隊我也見過太多了。 可以這麼說,寫掛團隊解散有60%是賺不到錢,35%是利益紛爭,5%是其他原因。

---------先寫到這裡,雖然木有大神在行業混了8年的經驗,也曾呆過這個行業一段時間,比較了解。 也很樂意分享各種見聞(經驗分享我就不說了:畢竟這是灰色產業,明目張胆的說,會坑爹的。)---------------------------------

-----------2016.8.24-----------------------------------------------------
嘿嘿, 好長時間沒來更新了, 發現挺多贊的。 那就再更一發。
老夫來說一下, 如果要完成一個「完整的工作室內存外掛」, 需要什麼功能, 需要哪些技術。

首先:老夫只拿我自己做過的例子來舉例, 不代表其他人的做法也是一樣
第一步: 寫一個控制台。 我是用C#來寫(MFC太爛了, 又長又臭。), 方便工作室操作, 一般是存放帳號,還有操作一些配置文件(比如說設置低於%? 就吃藥, 設置了收貨【郵件或者交易】角色名之類等等諸如此類)。 為了防止別人認出來, 就不丟圖了。 老夫找一張類似的圖片

基本就做這個玩意。 大部分都是讀取配置文件, 做一些界面交互的功能。 寫好List。 和一些界面操作之類的。
基本就是dataGridview操作, StreamReader, StreamWriter, 各種拖拉控制項。 完事。

第二步:
然後老夫會用cpp寫一個DLL。 用來跟C#的界面交互。 利用內存共享來和遊戲的DLL交互信息.
基本這個就用到內存共享, CreateFileMapping, MapViewOfFile, OpenProcess, 諸如此類。 然後基本就是各種判斷, 比如說掉線吶, 超時吶, 狀態吶。 還有對在線帳號做各種判斷操作, 比如說刷完 的角色要保存日誌, 該刪的刪, 該留的留。 還要做登錄初始化處理之類的。

第三步:
寫注入(基本都有現成的, 為了流程規範! 還是單獨列出來好了。 OOP思想已經禍害了老夫了)
一般常用的注入很多, 比如說APC注入,輸入法注入, DLL劫持。 OEP改入口。 遠線程注入。 無模塊注入(一般是申請一塊內存, 然後把整個DLL複製過去。 修復導入表,重定位後,載入dllmain), 還有驅動級的一大堆就不一一細說了。 注入方法五花八門,不管是哪種方法, 只要有效, 能防止遊戲檢測到,又可以用。 那就是一個成功的注入。

第四步:
逆向遊戲功能(其實這個才是第二步,注入是第一步)
這裡也分2種, 一種是先找遍歷, 一種是先找發包
//
找遊戲的明文發包, 這個可以大概說一下, 因為一般來說, 建立tcp連接, 都是需要connect, 然後send 或者 recv之類的。
但是一般來說, 基本都是send都是經過單次或者多次加密後的密文封包, 所以並沒有太大意思, 有些甚至是搞了多線程, 一個線程檢查一個全局隊列之類的然後send, 另一個線程負責push。 比如說基三就是這樣乾的!
當然往上回溯之類的現在已經不怎麼好用了。 這裡面的篇幅太長太長了, 就不一一細說了, 因為裡面還有很多小技巧的東西, 很多關於經驗, 感覺之類的事。
//
遍歷一般是指, 周圍怪物, Npc, 技能, 背包, UI之類的。 從林林種種的數據結構中, 找到自己想要的數據。
比如說怪物是用樹狀結構保存的, 但是每一個CMonster 都是一個超級大的結構。 他裡面還包含了很多類,結構, 也可能繼承了N個類, 也有N個指針,N個虛函數。
很多我們都是不需要的, 所以需要一一細分, 比如說, 只要怪物HP,MP, 角度, 坐標,之類的。 像怪物的形狀, 外形, 顏色之類的,我們根本不care!
//
然後就可以和明文發包結合了。
舉個栗子, 使用技能函數
無法就是
static UseSkill(dwSkillId, dwTargetId)
{
send(............)
}
所以你找到你明文發包的CALL。 那麼你只需要在CALL頭部下一個斷點即可。
基本內容就是只要SkillId和TargetId,
比如說
賣, 也一般就只有NpcId, ItemId, Count之類的。 遊戲不一樣, 可能做法不一樣。

從這一步, 可以實現相當多的功能, 比如說自身的HP&可以實現自動打怪,撿物, 做任務之類的………………
這一步其實需要的功能很複雜, 但是技術含量我認為並不高。 時間做久了, 就是寫業務邏輯的事。

第五步:
就應該來到腳本這塊了。 如果是用lua寫腳本的話。 那基本就是封裝幾個函數的事。 比如說交任務, 接任務, Move, Npc對話之類的。 反正大部分遊戲不都那個尿性嘛?整天跑來跑去, 跟幾個Npc對對話, 虐虐小怪, 跟Npc美女談笑風生。
這塊就是體力活了。

第六步:
把控制台, 控制台DLL, 遊戲DLL結合起來。 比如說血量控制吶, 超時判斷吶, 怪物過濾表之類的要與控制台交互起來。

第七步:
socket, 要給工作室寫收費系統。 這一步工作量也不少。 前面幾步是跟遊戲鬥智鬥力, 這一步是跟破解者鬥智鬥力, 比如說有很多陰險的檢測. 什麼刪系統, 格式化之類的。

第八步:
基本這一步就可以到封號的步驟了, 以前遊戲封號五花八門, 也有很多規則可循的。
比如說某個區域就檢測加速, 某個時間段就檢測一次。 檢測到就晾個幾天再把你封號。 還有CRC校驗代碼段, 上傳DLL, 按鍵檢測, API檢測………………
我說幾個例子, 某遊戲, 就在檢測你模擬滑鼠, 比如說正常人的滑鼠, 是有軌跡的移動過去的。 他就給你檢測你的滑鼠是否「瞬移」出現在某處, 還有鍵盤的按下和彈起時間, 太快了要遭殃!(這種都有權值的, 大意就是分數。 超過及格線, 基本就晾個幾天就必封了!)
比如說還有堆棧回溯, 查看調用CALL是否在本模塊中………………
據說TX跟暴雪 學了一個新招, 做一個Loader載入器。 然後隨機從伺服器下載一段shellcode。 然後運行這段代碼, 把結果返回給伺服器。 本地毫無痕迹! 而且下載回來的代碼全部是vm混淆過的。
咳咳, 裡面還有各種奇招, 就不一一闡述了!

回頭一想, 也發現漏了很多步驟, 比如說TX的就有TP保護。 盛大網易的有HS和NP保護。 所以還需要驅動層說。 比如說TP是DebugPort清0之類的。 NP老版本可以解密配置文件剝離。 還有重載內核, 用VT, 自己重寫異常處理之類的一大堆手段可以過保護。

也有遊戲多開沒說, 還有隱藏自身這塊也沒說……
發現寫了N多了。 就先說到這裡了。 有空下次再更新!
贊多了再更!

----------2016.4.18--------------------------------------------------------
長夜漫漫, 無心睡眠。 那就來更一發吧!
這次直接上教程和代碼(用TX的某遊戲來演示, 只進行技術研究, 禁止用於非法用途! )

祭出CE! 開始從人物HP下手

開始找小怪攻擊自己來掉血

找到了!

索引第0,1,3個是當前HP 2,4是MAXHP

接下來打開OD! (怎麼附加進程這裡略過……這個又可以說一個一本書那麼厚的文章的如何對抗TP反調試)

0x2E70=11888(因為已經回滿血了)

下一個硬體訪問斷點!

004705E1 8B87 C0000000 MOV EAX,DWORD PTR DS:[EDI+C0]

從這句代碼可以看出, 這個角色當前HP 是 EDI + 0xC0.

那麼你可以猜EDI就是當前人物角色指針.

那麼我們繼續回溯這個指針是怎麼來的!

00470588 8BB8 80000000 MOV EDI,DWORD PTR DS:[EAX+80]

繼續往上翻。 就可以得出人物血量= [[[11B0A9C]+34]+80]+0C0

這裡11B0A9C 是一個全局靜態類

如果對C++這塊稍微有點了解的就知道了。 這種情況不過是類裡面有類/結構 變數/指針

比如說

class CBns2
{
...........
}

struct strcut1
{
........
}
class CBns1
{
.......
.......
CBns2 CBns2_;
strcut1 strcut1_;
CBns2* pCBns2_;
strcut1* pstrcut1_;
}

當然也不一定是這樣的。 推測罷了。

// 注意, 這裡的11B0A9C 是靜態指針, 一般來說是不會變的。 如果會變的。 他有可能是屬於DLL的全局指針, 因為win7有地址隨機。 所以不能這樣直接寫。暫時先說這個情況

// 把DLL注入到遊戲的情況下, 否則只能用OpenProcess + ReadProcMemory的方式讀取

然後就可以寫代碼來實時獲取人物血量了!

DWORD ReadDWORD(_In_ DWORD dwAddr)
{
DWORD dwValue = 0;
if (!IsBadCodePtr(FARPROC(dwAddr)))
dwValue = *(DWORD*)dwAddr;

return dwValue;
}
DWORD WINAPI _WorkThread(LPVOID lpParm)
{
while (true)
{
DWORD dwHp = ReadDWORD(ReadDWORD(ReadDWORD(ReadDWORD(0x11B0A9C) + 0x34) + 0x80) + 0xC0);
::Sleep(100);
}
return 0;
}

這裡就可以獲取到人物HP了! MAXHP略過, 方法同上!
接下去就可以繼續逆向遊戲功能
比如說要做一個吃藥的功能。 當HP &< %50的時候, 就自動吃藥. 偽代碼如下
while(true)
{
::Sleep(100);
if(GetPercentHp() &< 50 ExistItem(回血道具) GetItemCD(回血道具) == 0)
UseItem(回血道具)
}

……不知不覺已經凌晨2點了。 下次有機會再把上面的逆向和代碼寫完。
記得點贊!

////////2016.6.14///////////////////////////////////////////////////////////////////////////////

繼續更!

接下來做找明文發包CALL。 一般遊戲處理是 明文打包-&>加密包-&>send

過程略……發包就在這裡

啃一瓶葯.

下斷點!

從調用堆棧可以看到調用的函數地址

然後一個一個分析參數。

首先逆向遊戲是需要先對遊戲的數據結構有一定了解才能模擬調用。

比如說這裡的

PUSH 30

CALL 00CDF02E

就是申請 0x30大小的內存大小嘛

然後從這一層可以看到代碼大概如下, 只要把0x30的參數按原來的形式填進去, 就能send

那個10002從其他地方分析(略)可以得出, 1是指背包位置, 最後一個2是指類型。 2是指背包.
所以如果背包第二個物品就是20002, 背包第三個物品就是30002.
EAX &>&> 0x10就是獲取背包位置
申請的內存是MOV ESI,EAX.
所以MOV WORD PTR DS:[ESI+10],AX
就是
*(WORD*)(ESI + 0x10) = 背包位置;

然後接下去看看別的參數

先將申請的內存清0

可以看出來這個0x30大小的數組內容是這些.
基本上就是0x10是填物品位置。
然後0x28和0x2C填0xFFFFFFFF
然後乾貨就是0x18,0x1C,0x20了

然後接下去繼續返回上一層繼續找EBX的來源會發現他其實就是[[[11F57AC]+34]+80]
所以
*(DWORD*)(ESI + 0x18) = [[[[11F57AC]+34]+80]+8]
*(DWORD*)(ESI + 0x1C) = [[[[11F57AC]+34]+80]+C]

至於0x29嘛, 剛剛準備寫的時候發現

算了。 就寫到這裡啦。

感覺下次得上歐美服或者韓服去才行。 國服真是越來越難調試了。

// by 7.29
想要我私信的自己先想好問什麼問題好嘛?
前面一大堆人我都私信過了, 結果一大堆都是連問問題都問不清的人, 剩下的一堆就是無視了我的私信。
最後還有1個想讓我教他的,我也教了差不多2個星期。 結果兩天打漁三天曬網.
勸各位一句:只要是學編程相關的, 自認不是天才的情況下, 還是老老實實每天敲8個小時代碼(看書), 不然你這樣學到30歲都不知道能不能學有所成。

// by 8.13
我挺可以分享行業見聞的, 但是不代表也可以分享我個人的隱私, 跟其他人交流過經常都問你賺了多少錢, 搞了哪些遊戲之類的……等等諸如此類的問題, 我拒絕回答敏感性的問題!

// by 8.17

論如何修改魔獸3的攻擊為混亂攻擊, 護甲是神聖護甲

改成

0x1:

在做之前要想好"切入點", 就是遊戲在哪會調用到攻擊類型這個玩意呢?

比如說可以在使用技能(包括普通攻擊)之後, 造成傷害之前是需要獲取的。

但是也不好入手, 因為使用技能的判斷太多了, 不好區分。

又或者說。 可以這樣!

把滑鼠放到攻擊上面, 他"應該"會獲取當前的攻擊類型,然後轉換成Text -&> Update 到界面
, 好, 接下去就試試這招!

………………
但是在獲取這個攻擊類型之前, 還要獲取一個東西, 就是獲取該英雄的Object.
如何在茫茫人海裡面把該英雄找出來, 因為每一個英雄都有自己的攻擊種類, 所以第一件事就是要找到自身的Object指針!

從人物HP入手, 買點裝備丟裝備來達到人物HP不斷變化的目的. 最終找到了

一個是HP一個是MAXHP
隨便掉點血就知道第一個是HP, 第二個是MAXHP.
附加OD, 在HP下訪問斷點

看上一層,

023C8C1B |. 8BBE 48020000 mov edi, dword ptr [esi+248] ; HP

ESI就是人物指針. 往上回溯, 看下ESI是怎麼傳遞的

一直翻啊翻, 翻到函數頭了

ESI=ECX. 一般ECX或者ESI傳遞的, 都是this指針, 就是類指針.

比如說 Class::AAA() 裡面默認有一個參數傳遞this指針. 彙編自動生成, 但是代碼省略.

同理, 順便做個記號, 因為你總不可能記0x????? 老夫記憶力不行.

繼續回溯!

函數頭

繼續回溯

發現了這樣! 很明顯就是一個遞歸嘛!

先不管這個遞歸, 直接先找到上一層, 因為如果你一直卡在這個遞歸裡面, 萬一你上一層也是N個遞歸或者說是一條死路呢? 所以你得先尋找到根源, 再做詳細分析!

繼續函數頭部下斷點, 那麼你會發現

他的[ESP]=266E02B

也就是這裡. 所以要過濾這個!使用條件斷點!

[ESP]!=266E02B

總算找到Base了.

那麼我們再來分析這個遞歸

好了。然後就可以動手了寫代碼了.

首先因為這個RootBase是在DLL裡面的, 因為DLL的載入地址不同, 所以解析出的Base也不同, 這個需要知道PE文件的如何計算偏移的。

我就直接粗暴一點, 暴力搜索內存

MFC做個注入DLL…… 不要問我為嘛用MFC,因為它是VS自帶的,方便立馬用。反正關了燈都一樣.

隨便寫一個。 不要太講究了。

編譯! 注入! 測試! 結果如下:

好啦。然後發現了辣么多個Base, 然後找名字!

從名字入手. 這個英雄叫"虛入夢". 順便這個遊戲是UTF-8編碼(略過如何求證的).

所以這個英雄名稱對應的編碼是=E8999AE585A5E6A2A6

打開CE, 搜一下

務必要記住把 掃"只讀"內存勾上

然後直接一個一個修改這個Text, 看下哪個是對應的名稱. 比如說

手動修改一個

運氣好, 第一個就是。
如果沒變化, 那就一個一個往下改。 記得如果不是的話, 要改回去. 再改下一個。
也可以用二分"修改"(查找)法, 直接一次性改一半. 如果不存在的話, 那肯定在另一半。時間複雜度O()=O(logn) 必須學以致用!!!

接下來就是開啟OD, 附加遊戲.

下一個訪問斷點.

斷下來了, 就是一個字元串循環複製, 返回到上一層CALL

eax就是人物對象指針. edi就是一個緩衝區, 把人物指針的Name複製到緩衝區.

繼續回溯

這個CALL就可以用了。

PUSH 0x200
PUSH Buffer
MOV ECX, pObjectPointer
CALL 235F640

然而我在觀察地址的時候, 就觀察出來

因為他們2個地址是一毛一樣的!

ECX=[ESI+238]
0DDF3CC4=[14C90088+238]

其實往上跟也有可能可以關聯起來, 但是我懶得繼續回溯了……

所以……

發現了有些地址可能是其他分類的吧?

分類判斷懶得寫了。 乾脆

結果就是

好啦。 至少有一個是對的.
因為剛才遊戲不小心被我弄崩了。我就順便重開而且換了個遊戲.
暫時目的達到了. 獲取到當前角色. (遍歷所有英雄小兵之類的暫時沒這個需求,不做)

下一步就是修改攻擊種類:

按照剛才的步驟, 搜索顯示的Text

2分搜索大法好, 3次即可到達。

下訪問斷點

慣例的字元串複製操作, 返回到上一個函數!

EAX就是Text,

上面的MOV EAX, [ESP+14]. 就是從上一個函數傳遞過來的參數. 返回去看好一下.

上一層CALL看參數

第一個參數

第二個參數

就是上上張圖, 就懶得複製了

第三個參數

就是這個玩意。 那麼我們要找的是種類。 也就是第二個參數=[ESP+0BC]
然後往上分析……過程略, 多斷點幾次的事, 我就不廢話了。

然後往上慢慢下斷看參數, 直到……

mov edx, dword ptr [esp+10]
mov ecx, dword ptr [edx+2ADD3B0]

接下去就找[ESP+34]

既然這樣, 那麼我們試試.

首先

所以 [0F923CC4] + 1E8 = EDI

EAX = 攻擊種類 = [EDI + 0 * 4 + 0xF4]. (已經探明EBX=0)

所以……

我們換一個有混亂攻擊的號就知道。 混亂攻擊的時候。 這個值是=5的。

所以我們改成5試試。

嘿嘿!

然後是不是有效。 最上面的那2張圖有數值測試!

順便…… 肯定是聯網無效的, 因為有數值校驗的。可以單機爽一下!

而且……哪怕你用各種作弊圖, 暫時老夫還沒發現哪個可以改攻擊類型!

神聖護甲同理, 我就多此一舉了。

還有幾張圖順便貼了

這篇文章到這裡就結束了。 以後在這篇文章也不會更新技術類的話題了。
順便!
不知哪位英語比較好? 最近學英語陷入死循環, 各種不爽背單詞, 但是不背也不行。 有沒有能拯救我……必有酬謝!

很多人都問怎麼學, 其實嘛

『求助問答』

我並非推薦你們去參加培訓, 而是這裡有課程目錄。
按照這個目錄去學就好了。
例如:遊戲安全工程師培訓介紹-WebMaster-15PB信息安全教育

老夫的git項目,無聊的時候寫的LOL刷金幣。 可以參考一下。
強調一下: 只做技術交流。 不要瞎搞!
GitHub - VideoCardGay/LOL_China

其實學習這玩意的路線,強烈建議有一定的編程基礎,如果從0開始的話, 路只能 歪著走。

舉個例子,在業內 有個稱呼叫「數據手」, 也就是只會逆向遊戲的數據, 但是對於一些編程知識一竅不通, 就說簡單的注入, 腳本交互,內存管理, 線程操作, 更別提外掛是一個很大的工程(我是指能刷錢,能做主線,能打副本,能做socket網路驗證)。

我還記得以前在貼吧開過一個科普貼,談到DNF所有的「變態功能」(指秒殺,倍攻等)都是利用了漏洞的原理,根本是伺服器和客戶端計算校驗不嚴,或者沒辦法把所有傷害運算放在Server上才讓你有機可乘, 但是就有「數據手」來跟我扯一些就基址+偏移 改一下就好了, 逆向一下改某段代碼就好了(連Hook這樣的詞都說不出來), 茴字的一種寫法都說不上來。

學習要是帶有目的性的, 要是業餘愛好學習一下,不打算深造, 這樣歪著學習法並沒有什麼不妥。 並不是說所有人都要往著專業的範疇去學習, 就好像我想學習一下攝像和後期來裝一波而已, 需要我從0開始學習PS,各種數碼基本知識,光照的各種應用等等等嗎? 你又不是想當攝影師, 搞那麼多花里胡哨的。

給各位想自學的人一點學習方向的建議。
一般分2種, 一種是為了編程而學外掛, 一種是為了學外掛而編程。
第一種就是以編程為主, 對外掛技術了解一下。 這裡就不談了, 正統道路的學習方法多得是。 我就不一一舉例了。
第二種方法, 我以0編程基礎來舉例。
1:要熟悉C/C++語法, 可以做一些像模像樣的小玩意, 比如說控制台下的XX管理系統, 讀寫文件, 什麼銀行存取金幣系統之類這樣的小玩意。 這部分後面就要應用在你的外掛控制台上
如:知乎專欄
2:學習完上面的,我個人建議開始學習socket, 功能大概就要激活CDK,校驗CDK的時間, 用長連接。 大概就是生成CDK, 把CDK保存到Server, 然後Client激活CDK要去Server校驗, 並且用心跳來保持連接。
這一步後面要應用到 防破解, 收費系統, 還有一些比如說組隊, 交易, 郵寄都可以丟到Server上完成, 比如說不同電腦下, 如何讓他們同一個大區同一個地圖下如何分配組隊和交易, 而且還能進一步鍛煉你的編程能力。 建議要用非阻塞的非同步socket。(用HTTP來做驗證的可以忽略這一步)
3: 這個時候可以做點有意思的, 比如說先學會用模擬按鍵+識圖 去做某個遊戲的登錄。就用LOL來舉例子, 可以做LOL的客戶端登錄。 用模擬按鍵+滑鼠操作, 然後用識圖來判斷當前在哪個步驟了。 圖片識別可以用OpenCv庫Template Matching,然後如果出現驗證碼, 可以用網上那種打碼系統,QQ遊戲的驗證碼挺便宜的, 最多幾分錢一次。
如:VideoCardGuy/AutoLoginByBnsChina
4: 這個時候你可以寫一個控制台(Console模式), 保存帳號, 讀取帳號, 開始登錄。 如何判斷到遊戲登錄完畢, 就登錄下一個帳號, 保存登錄失敗(如密碼錯誤)的日誌, 操作完畢的日誌。 如何再下一次啟動的時候忽略已經成功的帳號。 中間的種種操作, 自己做一遍就知道了。
如:VideoCardGuy/AutoLoginByBnsChina
5: 這個時候建議把Console模式的控制台改成UI, UI可以用C#來做,也可以用MFC/QT來做, 用哪個語言來做無所謂, 學習一下多線程的操作, 如何刷新數據到UI, 如何從Server查詢CDK返回到控制台, 比如說剩餘時間對吧.
6:這個時候就開始學習簡單的彙編指令, 學習如何使用調試器, 怎麼去逆向遊戲的人物屬性, 把基本的HP,MP,攻擊力之類的逆向出來, 然後顯示到控制台, 這裡需要比較多的API知識, 比如如何注入DLL到遊戲, 比如運用指針讀取遊戲的數據. 這一步做完你已經可以自己寫一個UI注入到遊戲裡面, 顯示出人物各種屬性,周圍怪物,Npc。 你也需要一些基本的數據結構知識,比如鏈表,二叉樹,數組,std::vector,std::string在彙編的表現形式。
7:可以逆向遊戲的功能, 找到遊戲的明文組包函數, 然後下斷後就能斷下絕大部分遊戲的功能, 然後想辦法模擬調用, 你就可以做到吃藥, 釋放技能,交接任務。 這一步我就不多說了,反正完成了幾乎是搞完了。
8: 把所有功能和UI控制台和Server端關聯起來。 就是一個完整版的掛了。 下面就是一步一步添加更多的功能了,要考慮用腳本去寫主線了,要考慮框架的問題了,要學習如何反反調試,如何多開,防檢測,過遊戲保護,做資源優化,寫導航尋路等等……當你都學完之後,那麼恭喜你,你已經成功獲得"外掛全能大神"的稱號了。


外掛之路很難走,說白了寫外掛就是在操作系統和網路方面做手腳。因此必須在這兩方面下工夫。而學這兩方面的過程是很痛苦的。比如操作系統,一般外掛都是在windows下的,所以你必須熟悉windows操作系統,比如看《windows核心編程》,看這種書是很痛苦的。所以必須做好準備。
至於學習路線,我的建議是:
1 先學C和C++,對編程語言有一定的了解。
2 如果你比較浮躁,想馬上寫點東西,那麼建議你學一下易語言,現在國內很多外掛是用這個寫的。
3 彙編語言和反彙編技術。彙編語言建議看王爽的那本《彙編語言》,反彙編的技術比如使用OD等工具。
4 操作系統。比如看《windows核心編程》,理解進程,線程,內存等。
5 計算機網路。很多外掛都需要破解網路協議,然後找出漏洞。所以必須熟悉網路。
給你推薦幾個簡單的外掛教程,
Lol(英雄聯盟)自動輸入密碼
卡爾一鍵放技能--dota
Dota全圖那些事兒
程序員版--致青春(二)——11平台dota勝負預判器
當然,這些都是入門級別的。後來我覺得太艱難了,沒有走下去。


記得給我個贊哦,樓上那些回答,你目前的水平是聽不懂的,你這種零基礎的,你百度 《鬱金香教程》,那個適合沒基礎的學,然後學的過程中,缺啥,再去補啥


寫過.

如果0基礎, 推薦去學習正統的軟體開發 , 將會比開發外掛來的有前景.

想學習這種偏門技術, 其實只需要有無限的動力就可以了.

1. 學會使用CE, 對照教程, 對某個簡單的單機或網遊進行簡單的修改

2. 學會反彙編, 接著使用OD, 然後一點一點的學會怎麼調試遊戲, 學著找到遊戲的邏輯

3. 在使用CE,OD時 將會接觸 Win32 API, 慢慢的將會非常熟練, 調試遊戲怎麼都不會離了系統的API

4. 學會C語言, 一般情況下出成品什麼的都是使用C+內嵌彙編+Win32的形式寫的. 並且C語言的學習成本並不比易語言高很多.

以上熟悉之後, 基本的外掛都會寫了.

下面是寫的多了之後將會接觸的東西:

5: 系統原理 / 調試原理 / 驅動開發 / CRC / 檢測對抗 / VM處理 / PE格式

最後當然還有玄學,調試不但是個技術活,運氣也非常重要.

到這一步基本就是系統底層安全工程師了, 但是不得不說, 很枯燥.

.


做了5年外掛了到現在很多時候感覺自己都還只是皮毛 這一行水深的很 年輕可以學 20多歲就別浪費時光了 我17歲開始學 到去年21歲才開始賺點小錢 很多東西要自己研究 內存 驅動 沒人會給你解決 經常一個問題會研究N天甚至幾個月 大神都忙著賺錢 屁都不懂的就天天吹牛 這就是這一行的行情 反正windows核心技術編程 這本書基本上可以說必看的 對驅動過檢測幫助很大


不要干這個,去走正規的路。 走這條路很少有回到正路上來的,而且大部分都沒有好結果。
這圈子裡群魔亂舞,各種利益和欺詐都扭在一起,對技術提升沒有那麼大,都是些野路子,做到最後,你也只會寫外掛。而且干這個來錢太快了,一些很簡單的技術可以立刻轉化成利益,很多人會因為這點而陷進去,以為生活有了退路。殊不知,這退路一般都以牢獄生涯而終結。
---這是一個在這圈子裡混了快8年現在退出來的人給你的建議。


1、注入機制。反外掛的辦法就是調用鏈合法性判斷,可以抵制百分之九十的外掛。
2、模擬按鍵。反模擬辦法就是進程枚舉判斷已知外掛軟體名稱。外掛很容易換名或hook進程API,很難抓到該種外掛的,但該種外掛功能有限。
3、封包模擬。防治辦法就是用動態加密演算法,每次登錄用的加密演算法都是變化的,發布新版本時動態產生很多加密演算法。
4、修改客戶端。加密演算法中加有動態代碼,其中就有校驗客戶端。
5、如果以上辦法均無效,增加外掛舉報功能。
6、最牛逼的是大數據分析。外掛的行為和真實的玩家行為完全不一樣的,這個做得好外掛基本死絕。
既然外掛可以杜絕的,那為什麼還有外掛呢?話說水至清則無魚,少了外掛遊戲就少了很多玩家,外掛本來就是玩家的喜愛才有生存空間,所以官方會有時睜一隻眼閉一隻眼。


我會寫模擬腳本,也算半職業,但不會寫外掛。無法正確的回答你的問題。不過,想給你點建議。

腳本和外掛是不一樣的,外掛一般更強大,涉及到違法的區域更多,不管是否系統的學習,需要的時間都會更長。如果你對這個行業有興趣,我覺得你首先應該是學會一門能夠用來寫外掛的語言或者軟體。這個選擇很多,常見的按鍵精靈,TC,易語言,C,delphi,VB 都是可以的。前面2個常用來寫模擬類的腳本,用來寫外掛也是可以做到的。同時也可以了解下模擬的腳本怎麼寫,這個學起來比較容易,也很容易上手,只是想要做好,需要經驗的積累。像前面某位兄弟的回復一樣,每個人的經驗基本上都是敝帚自珍的,很難會去分享給別人,這都是自己謀生的底牌。

外掛需要的東西很多,我也無法說清楚,如果全靠自己,沒有兩三年的學習根本不行。兩三年後,或許你需要重新學習更多的知識才能對抗遊戲的反外掛。最基本的彙編肯定要能看的懂。同時外掛也是分很多不同類型的,看你想要學哪一種,有內存的,封包的,從遊戲來說有手游,頁游,端游,不同的遊戲需要的技術也是有差別的。

端游外掛一般是內存的,偶爾也有大神寫離線。寫內存掛你就需要能過遊戲保護的驅動,所以一般要懂c語言,需要了解計算機的底層

頁游外掛一般都是封包,據我聽說現在很多頁游也是可以寫內存的,實質上和端游也差不多了。寫封包的話網路協議,加密解密肯定要懂。有一本書是專門講c#怎麼開發網頁遊戲外掛的,不過從目錄上看講的也很淺,當然了比我厲害,因為我還看不懂,只是從經驗上去了解得出這樣的結論。

手游涉及到的東西也很多,可以簡單的區分成3種吧,安卓系統上直接用的,ios系統上用的,以及電腦上配合模擬器用的。
安卓系統上用的可以寫模擬的,也可以寫內存的,還可以配合安卓系統本身的功能以及消息一類的東西,這個我不熟,可能說的不準確。不過你可以百度搜索下「微信搶紅包外掛原理」,他就是利用了系統本身的一些東西來實現的。模擬的腳本就主要還是用軟體,這個難度不大,也很好學。

ios上用的,一般都是寫模擬的,封包之類的也有的,很少很少。但是要注意有一些遊戲會檢測這些能寫腳本的軟體,導致封號或其他後果,你有可能會需要懂一些插件的製作或者應用,來保護好自己的腳本,對了,這個需要學一下lua,包括安卓系統上的模擬腳本,都需要學lua的

電腦上配合模擬器,這個一般是模擬+封包2種,

由於我自己懂的也不多,上面寫了不少字,也只能給你簡單的普及一下,或者還有不少錯誤的地方,權當是個簡單的入門介紹吧。


啊?寫外掛還有職業嗎,難道不是程序員業餘寫寫調劑心情的嗎……


彙編.
彙編.
彙編.
彙編.
彙編.
c/cpp 然後自己寫各種帶有功能性的小程序,無腦自己逆向自己的程序,然後再從外部調用功能。


雖然我沒寫過掛,還是提供下思路好了。

1 首先要獲得遊戲數據。數據的獲得需要訪問進程地址空間,找到數據段對應的數據。通常需要監控內存數據變化,再通過彙編找到調用函數,最後實現在每次進程創建時鎖定創建函數得到數據地址。

2 其次要實現遊戲功能。那就要監控遊戲行為調用哪個函數,從而在外掛中想辦法在需要的時候調用該函數。

難點在於
1 進程現在有加殼,有守護進程,禁止hook,破解難度較大。
2 數據有加密,函數有入口隱藏,難以定位
3 網路消息有加密,無法簡單模擬發包

這些都需要大量經驗積累,沒人指導很容易走彎路摸索,浪費大量時間


為什麼不去買本 《遊戲外掛攻防藝術》 先看看呢


我已經退出了,入行請慎重。


怎麼開外掛


這是一道送命題


大神 哪裡有外掛類的論壇么 比較感興趣想去看看


大神這麼多,怎麼不往證券程序化交易方面發展


你歧視漢子,哈哈,嚴肅起來。在我看來計算機編程是創業謀生成本比較低的行業了,相比其他實體行業創業成本太低了。如果足夠努力 足夠堅持 有點天賦,那麼只是時間問題,國內的環境讓人浮躁、內鬥。在這個行業如果沒有開源、開放的心,註定是走不遠的,留給自己的只是時間的消逝,年紀的增長。那個時候孤零零的一人。手上緊握的技術還能不能用上都還是個問題。好的程序從深度和廣度上來說可以比擬航天工程,大型的開源工程靠一個人是不可能實現的。曾經遇到某qq群里問問題,某裝逼者說我指導人不是無償的。我直接退群了。


為啥要學開發外掛呢?最近在研究些國產的互動模擬駕駛平台,開始在想這些廠家肯定是以前搞過外掛的,從內存中抓遊戲數據然後再輸出到硬體上控制相應的設備,模擬娛樂行業雖然沒有外掛暴利好歹是正經行業,被查水表的概率很低(也就是個破解單機遊戲的的問題).

-------------------------分隔線-------------------------------

昨晚看了有關DirectX遊戲控制器的開發資料感覺昨天說的有些不妥,應該是應用的遊戲給手柄等設備的反饋信號來控制硬體設備的


為什麼現在知乎道德水平這麼低了?根本沒有人提製作外掛是違法行為啊!!!


推薦閱讀:

A& ~(b - 1)這個表達式做了什麼?
(Python)爬蟲解析特殊驗證碼?
文科女,已在職,零基礎想學編程,求解?
自己寫的爬蟲程序運行停止,下次運行如何不重複爬取?
如何用scrapy提取不在標籤內的文字?

TAG:逆向工程 | 編程 | TCPIP | 遊戲外掛 |