002 通过send断点分析功能call
文章目錄
- 游戲發(fā)包流程
- 分析吃藥call
- 分析換裝備call
- 總結(jié)
游戲發(fā)包流程
對(duì)于網(wǎng)絡(luò)游戲來(lái)說(shuō),發(fā)送數(shù)據(jù)包是必不可少的一個(gè)環(huán)節(jié),無(wú)論是走路還是喊話或者是其他功能都需要通過(guò)發(fā)包函數(shù)向服務(wù)器發(fā)送數(shù)據(jù)包。
以技能call為例,整個(gè)流程大致如下:
技能call會(huì)有很多個(gè),越往外層,功能越完整,但限制越多,越往里層限制越少,功能越強(qiáng)大。
例如在最外層的技能call1會(huì)檢測(cè)是否到達(dá)冷卻時(shí)間,當(dāng)前人物狀態(tài)等等,內(nèi)層的技能call2直接釋放技能,那么如果直接調(diào)用call2就可以達(dá)到無(wú)CD的效果。
所謂的變態(tài)功能只不過(guò)就是繞過(guò)游戲的一些限制,然后調(diào)用外層call達(dá)到目的。如果能找到最里層的call,或者直接發(fā)送封包,就可以直接繞過(guò)所有的限制。
借助這個(gè)特性我們可以在發(fā)包的函數(shù)下API斷點(diǎn),逆向分析出這個(gè)游戲的大部分功能。
當(dāng)然也不排除底層對(duì)抗比較強(qiáng)的一些游戲,會(huì)重寫三環(huán)的所有API,這個(gè)時(shí)候API斷點(diǎn)就無(wú)效了。這種情況想要找到游戲的發(fā)包函數(shù)其實(shí)也很簡(jiǎn)單,我們下次再討論
發(fā)包函數(shù)一共有下面的三個(gè)
send sendto WSASend分析吃藥call
這里以吃藥為例,用OD附加游戲,并且下sendAPI斷點(diǎn)
隨便吃一個(gè)藥品,這里需要記住以下藥品的位置是在第22格
程序斷下,打開調(diào)用堆棧,這里需要一個(gè)一個(gè)排除。最后可以確定吃藥call是491C50,右鍵,顯示調(diào)用
在這個(gè)地方下個(gè)斷點(diǎn) 讓程序斷下,這個(gè)call很明顯需要調(diào)用兩個(gè)call。接下來(lái)分析代碼,先進(jìn)去上面的那個(gè)call看看
這個(gè)函數(shù)之前我們追血量基址的時(shí)候已經(jīng)分析過(guò)了,那么大概可以猜到這個(gè)call就是獲取當(dāng)前人物的血量
然后再看edx的值是0x15,也就是十進(jìn)制的21。藥品的位置在第22格,如果從0開始計(jì)數(shù)的話,那么這個(gè)參數(shù)大概就是藥品的位置了。
這個(gè)call的參數(shù)相對(duì)來(lái)說(shuō)調(diào)用起來(lái)沒有那么方便,如果有多個(gè)吃藥call的可能性,那么在外層一定還有一個(gè)call,是可以通過(guò)藥品的名稱或者其他東西作為參數(shù)來(lái)調(diào)用的
分析完成以后可以通過(guò)代碼注入器來(lái)測(cè)試call是否有效
分析換裝備call
同樣的方法在send下斷,然后更換裝備讓斷點(diǎn)斷下
點(diǎn)擊調(diào)用堆棧,挨個(gè)排除,最后確定為67D4E0
接下來(lái)分析參數(shù),ecx來(lái)自[edx+0x20]而edx=[0xD0DF1C],這個(gè)數(shù)據(jù)不難跟
而esi的值是一個(gè)地址,指向的值多次測(cè)試有下面幾種情況
02030011 03100011 000C0011后面四位的0011是固定的。前面兩位02 03 00指的是需要更換的部位,例如:上衣=02,鞋子=03,頭盔01,武器=00
第三四位的含義是物品欄裝備的位置,依舊是從0開始計(jì)數(shù)。代碼就不寫了,各位自行測(cè)試
總結(jié)
網(wǎng)絡(luò)游戲的逆向分析的一個(gè)大的切入點(diǎn)就是發(fā)包函數(shù),通過(guò)整個(gè)發(fā)包流程,可以逆向出絕大部分功能,這里只舉了兩個(gè)例子。
這個(gè)方法只適用一些簡(jiǎn)單的游戲功能,如果功能比較復(fù)雜,則會(huì)頻繁向服務(wù)器發(fā)送數(shù)據(jù)包,通過(guò)這種簡(jiǎn)單的調(diào)用關(guān)系就不一定能找到關(guān)鍵call。
相關(guān)工具:
https://github.com/TonyChen56/GameReverseNote
總結(jié)
以上是生活随笔為你收集整理的002 通过send断点分析功能call的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 001 从人物血量学习数据查找
- 下一篇: 003 通过内存关系找万能按键call