本文主要介紹某網(wǎng)站下載的修改版游戲的分析過程,對于初學者來講,參照已修改游戲進行學習是很有效的學習途徑。
本文樣本是某游戲網(wǎng)站下載的已修改的游戲,與基礎(chǔ)篇中的叢林方塊有些類似,都是修改了金幣的數(shù)量。
游戲樣本地址 鏈接:https://pan.baidu.com/s/1t7k4mg5htSrrQKeXtwkj8Q 密碼:tyxc
< 文中的apk修改僅用于研究學習,如涉及權(quán)益侵犯請隨時聯(lián)系處理。 >
我們照舊先安裝看一下這個游戲都有哪些地方處理過或者需要處理:
發(fā)現(xiàn)兩個異常點:1.打開游戲后有兩次破解版本更新提示 2.金幣被鎖定為100100100
接下來開始我們這節(jié)課的內(nèi)容:修改分析之數(shù)值搜索、代碼對比、關(guān)鍵字搜索。
0x1.數(shù)值搜索
在基礎(chǔ)課程中,我們已經(jīng)講過數(shù)值搜索了,這里我們再講一遍,不過工具我們不再是用ildasm,而是dnSpy。
1.1 確認腳本文件
‘a(chǎn)ssetsbinDataManagedAssembly-CSharp.dll’
1.2 搜索數(shù)值
打開dnSpy,將Assembly-CSharp.dll拖拽進dnSpy打開,在搜索選項中選擇“數(shù)字、字符串”搜索100100100。
1.3 修改數(shù)值
得到結(jié)果 get_coins,雙擊后可查看已修改的函數(shù),在 “return 100100100”處右鍵單擊,然后選擇“編輯IL指令”,就可以看到IL指令。
如果要再次修改,將其修改為我們所需數(shù)值的十六進制形式即可。
0x2.代碼對比
代碼對比在破解版游戲分析是非常有用,可以幫助我們學習破解版是怎樣進行修改的。
那么,既然要對比,我們就需要有一個未破解的版本用來做參照才可以實現(xiàn)對比,于是我們找來了這個樣本的原版。
原版樣本地址 鏈接:https://pan.baidu.com/s/1dy43mrper5oMvLKigkF1vg 密碼:6ylh
< 文中的apk修改僅用于研究學習,如涉及權(quán)益侵犯請隨時聯(lián)系處理。 >
接下來我們對比一下原版和破解版反編譯后的文件夾,看一下apk打開時的版本更新提示是哪些代碼實現(xiàn)的。對比工具我們采用Araxis Merge。
破解版插入了如下smali文件,并在兩處NativeActivity中對其進行了調(diào)用,也就是我們看到的兩次更新提示窗口。
調(diào)用代碼如下:
const/16 v0, 0x485a invoke-static {p0, v0}, Landroid/support/v4/os/UnityPlayerup;->c(Landroid/app/Activity;I)V
java代碼表示為(可在jd-gui中查看):
UnityPlayerup.c(this, 18522);
我們要去掉這個提示的話,刪除這個調(diào)用即可。在此不具體分析所插入版本更新窗口的代碼,有興趣的可以分析看一下。
dll腳本也可以進行對比分析,需要用ildasm將其反編譯為il代碼,然后將原版和破解版的il文件進行對比,具體不做演示,大家自己嘗試。
0x3.關(guān)鍵字搜索
這部分主要提供給大家一些可利用的搜索關(guān)鍵字,可用于金錢、屬性等各方面的搜索。
3.1 金錢類
金幣 gold、coin 鉆石 Gem、diamond
3.2 屬性類
生命 health、life、HP、Max HP 魔法 mp、sp、Power 冷卻 CD、CoolDown、CoolTime 攻擊 attack(atk)、fight、hit、damage 防御 defence(def) 速度 speed、movespeed、attackspeed
登錄 login、sendlogin、loginserver 彈窗 Dialog、ShowDialog 按鍵 Button