1. 程式人生 > >轉游戲中找CALL的萬能方法

轉游戲中找CALL的萬能方法

呵呵 這個說的是方法,就不拿哪個遊戲來舉例了,懂得原理,操作自己靈活變動。 首先說的,網路遊戲是有客戶端 伺服器的,這樣就得需要一個通訊,基本上的功能都會通過伺服器來驗證的,要是本地驗證的話那就能很快做出BT功能了。所以為了防止BT功能,就會用伺服器來控制。 那麼,現在知道了一個關鍵的地方了,也就是通訊,就是聯網,就是發包了。那麼發包就得send【或者WSASend】了。至於哪個是不重要的。因為他們的原理是一樣的,而我下面將要說的是原理上的尋找,不是告訴你說具體找哪個的,因為在我看來,找哪個都是一樣的。 要是你想懂得以下我說的意思,可能需要了解的有:OD的基本使用方法;《Wingdows核心程式設計》;還得懂得彙編;還要掌握一種程式語言及在此程式語言裡面嵌入彙編【要是你把彙編轉換成你的程式語言來寫且實現跟彙編一樣的功能的話也不反對】等。 一: 開一個遊戲,進入後,開OD【有的遊戲可能會檢測OD,也許需要你先開OD,然後通過一些外掛來實現隱藏或者過掉遊戲檢測】,附加遊戲程序,這個是必須的,雖然基本上人會搞遊戲的都懂這個。 二: 然後按OD上面的那個字母按鈕 “E” ,選擇遊戲程序,進入到遊戲領空,然後在遊戲領空裡面你看到的第一個call,進到這個call裡面,再看這裡面的第一個call,進去,按照這樣的方法一直到 kernel32.dll 或者 ntdll.dll 裡面的第一個call ,下斷【可以雙擊此行的Hex dump 的值或者再選中此行的時候按F2】,然後回到遊戲裡面,隨便使用一個你認為能讓遊戲發包的功能。 【或者你直接找OD裡面的函式。可通過Ctrl + N 來顯示此時遊戲的函式,這個時候應該能看到Send 或者 WSASend ,要是看不到你就按照上面的步驟來操作吧,不過這個找到的發包函式不一定對,但是按照上面操作找的話肯定對】 三: 如果上面的操作你都搞定了,那應該此時OD裡面就斷下來一個地方,你就翻上幾層就可看到遊戲的發包函數了。 四: 找到發包函式之後,你如果直接斷這個發包call的話,應該會一直斷的,或者斷的很快。會一直這樣。然後你看OD的暫存器的值,主要是看這個發包的包長【要是不懂的話,就看暫存器哪個值是有固定的幾個來回出現的就行】,然後選中你斷的那行,按 Shift + F2 【或者你找OD的除錯(中文版),Debug(英文版)的條件斷點】,在彈出的框框裡面填入你看的那個暫存器的值,比如:eax != 0x2 && eax != 0xc && eax != 0x6【這個條件視實際情況而定】。然後就可以通過這個發包call來這你想要的功能call了【不過這個只能找到那些發包的功能call,要是不發包的話,可以看下我的相關帖子,應該可以看到相關的方法】。 五: 在找到了發包call之後,可能你想找到明文發包call,那樣的話,也是通過這個call來向上找的,就看你想要什麼call了,基本上99%都可以找到。 綜上所述,應該就可以實現一個比較萬能的方法了,要是由於本人的表達能力有限,導致各位讀者看不懂的話,還請見諒。 最後再次重申,由於本人才疏學淺,表達能力有限,以上發的爛文各位看不懂的話還請飄過,或者有什麼疑問可以回帖發問,混沌儘量都能回覆。