2011年9月17日星期六

[轉載]簡單分析某個棋牌遊戲的搶位置功能


作 者: kwting 
時 間: 2011-08-25,23:22:45
鏈接: http://bbs.pediy.com/showthread.php?t=139310

最近忙著都沒逛論壇了,今天有點時間跑來看看.......順便發個帖....沒有什麼好於不好,如果對你有用就行
   最近研究了一款棋牌遊戲的搶位置功能,通過分析找到了搶位置的關鍵位置,有了call 後,有人說有了call 那參數還不容易嗎?曾經發過一個帖'讓遊戲自動送上call的參數' 有人曾經這樣回复
找到call了, 分析參數還不容易...
靜態用ida看引用
動態下斷點, 回溯棧
需要你這麼麻煩麼
其實真的有點call 的參數不是你想的那麼簡單,就比如在遊戲中撿取物品,有的通過物品id做參數,那麼你需要遍歷周圍物品,得到物品id 然而一切都不是想的那麼簡單,也許光遍歷周圍物品就花費你幾天的時間(高手除外。。).....然而像做遊戲輔助的不是想說怎麼分析遊戲才有意義之類的,有的只是想怎樣才能達到我的目的,在做這個搶位置的過程中發現遊戲的數據太難找了.......當我向上回溯了十幾個循環都沒找到完整的參數來源........ ..........分析的過程很艱難。 。後來通過內存搜索定位特徵碼從而找到了數據的來源參數.....然而搜索的過程挺艱難的..... 搜索的目的只是獲得2個參數.....一個ecx ,一個是每個位置對應的一個內存地址
*************關鍵call*********************************** ***********
83BA 98000000 00 cmp dword ptr ds:[edx+0x98],0x0 判斷這個位置是否有人,有就跳走不發送搶位置的相應call
75 15 jnz short Lobby.00444927 有人跳走不發送call
8B45 08 mov eax,[arg.1]
50 push eax 參數一
8B4D FC mov ecx,[local.1]
51 push ecx 參數二
8B4D F0 mov ecx,[local.4]
E8 9EEBFFFF call Lobby.
************************************************** ***************
最關鍵是就是那2個參數了
下面分析參數*******************************
通過分析了很久......那個參數中第一個就是代表是那個位置,比如第一張桌子的第一個就是一個參數,第二個又是另外一個參數********* ************反正進過分析想找到那個數據不是那麼簡單的.......
上面都是很久以前分析過了的,最近再次拿到分析突然想到一個辦法也許能夠讓參數的獲取變得簡單.....
cmp dword ptr ds:[edx+0x98],0x0 判斷這個位置是否有人
裡面的edx就是那個座位的參數......每次點擊一下那個位置無論有沒有人代碼都會執行一遍.......
那麼我想到如果我就在這裡hook住,當你想搶哪個位置,你點擊一下那個位置,我的軟件通過hook 那裡參數不就自動把參數取出來了嗎?那麼在軟件也不用輸入第幾桌,上桌還是下桌(因為按照常理的話你必須輸入你要搶​​的是那一桌,上面那個位置還是下面的).........每次用戶想搶哪個位置叫他點擊一下那個位置,就表明了他要搶的位置...那麼我的軟件就可以開始搶位置了....
下面我就具體寫出來我的部分代碼(delphi)
var
st:integer;///定義一個全局變量來保存位置參數
c_ecx:integer;
st_1:integer;

function hook():bool;stdcall
var
jm:integer;
begin
jm:=xxxxxxxxx;//跳回去
asm
mov i,ebx
mov c_ecx,ecx
jmp jm
end;
上面就是我的hook 由於是今天想到的思路,我還沒開始寫代碼。 。 。
你把找到的call 那裡找個合適的地方hook 了就行了、,。 。 。 。

最後只需要用戶點擊一下他想坐的位置,那麼我就能獲取到他的參數。 。於是只用發送相應的call 了


一個思路而已 如果對你有用就收下

end;

没有评论:

发表评论