Android中dll文件的修改

Android中dll文件的修改,最近下載瞭一款非常不錯的益智類遊戲,一打開,頂部還有廣告,最討厭遊戲中還帶廣告的,點又點不掉,又怕誤點,真的看瞭都煩。。。作為程序員,就有種想要把它幹掉的想法,作為玩遊戲沒耐心的人,玩到一半過不瞭關總想看到最後一關是什麼樣。不知道你們有沒有這種感覺。。。

這個遊戲很適合給小學生做數學題(好像小學生以上的都很適合,哈哈),遊戲中所要做的就是將下面標註著數字的水球切開或是粘合起來,以符合在框框裡標註的數字。如果用手指將水球像兩個方向拉伸,水球就變成瞭大小相同的兩個小水球,而上面寫著的數字就變成瞭原來的一半。而讓兩個小水球合並到一起,上面的數字就會加在一起。在畫面中有的區域會出現小框裡面也會標註相應的數字,讓水球和這些框框裡的數字相吻合,緊緊地嵌入框框就可以過關。

好瞭,下面直接進入正題吧,當前要解決的問題就是:1.去除廣告 2.解鎖關卡

需要的工具:

一:Android Killer

二:Reflector

拿到apk包後使用Android Killer反編譯得到如下:

很明顯這個遊戲是使用Unity3D引擎開發的,那麼,一般它的遊戲邏輯都會寫在assets\bin\Data\Managed\Assembly-CSharp.dll這個文件裡(也有一些會寫在其他文件裡)。

1.去除廣告:

打開它的目錄結構如下:

之前看過一篇去除廣告的文章,一般它加載廣告在smali中都會有invoke-virtual………->loadAd……..;(有些會在so文件裡加載廣告,這種方式更高級,這裡就不說在so文件裡是如何加載廣告的,其實我也不懂在so文件裡面是怎麼加載廣告的,哈哈哈。。。)那麼我們直接就搜“->loadAd”看看,結果如下:

看到有3處調用瞭“loadAd”的地方,那我們就直接把它註釋掉吧,不讓它調用,

隻需要在被調用的地方加個“#”號就行,這樣就註釋掉瞭。簡單吧,哪裡不要就“#”哪裡,媽媽再也不用擔心話費亂扣瞭。。。

註釋掉之後,重新打包,運行如下:

這就對瞭嘛,真幹凈,看瞭就很爽。

去除廣告成功,媽媽還會擔心每個月幾百塊的話費哪裡去嗎,哈哈哈。。。

2.解鎖關卡:

從上面我們知道使用Unity3D引擎開發的,那麼我們直接把它拖入Reflector工具裡查看,看到如下:

一般解鎖關卡,無非就是unlock什麼的,這裡我們就直接在此工具下按鍵盤上的“F3”搜搜看:

看到瞭吧,裡面有很多有關於關卡的解鎖邏輯,

嘗試過把UnlockAchievements()方法內的this.Level >=XX都改為

this.Level >=1(後面給出怎麼修改的方式),但是這樣修改,運行之後是沒有看到有解鎖關卡或別的什麼。那肯定是我們沒改對地方,導致解鎖失敗。

在裡面我們還看到有LoadLevel(),LoadNextLevel(),這兩個方法,

在遊戲中我們可以看到界面中 上下關卡隻有圖中兩個按鈕。

再看看LoadLevel()這個方法裡面好像也沒有看到什麼“+1”之類的邏輯,

再看看LoadNextLevel()這個方法,

到這裡我們就基本鎖定上下關卡就是在這裡做的操作,但是一旦調用這個方法,進來立馬就保存當前關卡,到下面就判斷是否要載入上下關卡,那我們就讓它一調用這個方法就先給Level加1,也就是this.Level++; 相反的在圖中的 this.Level++ 和 this.Level– ,就要變成

this.Level+=0; this.Level-=2; 因為上面已經加1瞭,所以這裡else if 裡面的判斷就不能再加1瞭,而else裡面的判斷就要多減1,具體的看圖:

這裡補充一點:

要修改dll文件需要在你的Reflector/Addins目錄下有這個兩個文件

然後再配置這兩個文件,如下圖

配置完之後在Tools下就會多出Reflexil v1.6這個選項

終於要開始改瞭。。。。。。。

繼續上面說的,點擊Reflexil v1.6這個選項,看到如下:

那我們怎麼添加呢,這裡其實我也不懂,我也是參照它裡面的語句

找到對應的語句就好辦瞭,我們再這樣操作,如下圖:

添加:ldarg.0

添加:dup

添加ldfld System.Int32 StageController::Level ,

這裡分成兩步,第一步是OpCode,和Operand type

第二步:

在Operand中:

添加ldc.i4.1

添加add

添加stfld System.Int32 StageController::Level

這個跟上面添加ldfld System.Int32 StageController::Level 是一樣的,這裡就不貼圖瞭,

最後添加成功後是這樣,如下圖:

註意:如果上面添加標簽的時候不小心點到 ”Append”,會跑到最後去,記得刪掉。否則也會報錯。

到這裡還沒完,記得上面說的this.Level++ 和 this.Level– ,要改為

this.Level+=0; this.Level-=2 ,這裡就隻貼加法的修改步驟,減法的自行修改

到這裡就全部修改完成瞭,那接下來就是保存瞭

保存完成之後可以按鍵盤“F5”刷新一下,看有沒有修改成功

最後就是重新打包這個apk文件,運行。。。

進入遊戲後發現還是下一關卡按鈕還是灰色的,說明沒改對地方,這就尷尬瞭。。。

辛苦大半天還是一樣。。。難道this.Level++不是在這改的嗎,(這不是廢話嗎,如果改對瞭,還會有下文嗎,哈哈哈。。。)

沒辦法瞭,回去看看哪裡還有使用Level變量的。

直接鼠標左擊”this.Level++”中的Level會跳到Level的出處,再右鍵點擊Level,選擇Analyze

一個是我們剛剛的LoadNextLevel(),還有另一個,那很有可能是在另一個地方被調用瞭,

很明顯,這個兩個方法都在同一個類下,右鍵圖中對應的方法選擇Go To Member

進入這個方法後看到如下:

改的方法跟上面是一樣的,因為是在同一個類下,所以都一樣,但是這裡需要註意一下,因為它本來已經有this.Level=stageData.Level,直接修改就行,或者把這句對應的語句刪掉再重新添加也行,修改後樣子如下:

然後修改後,記得我們剛剛在LoadNextLevel()方法裡添加的this.Level++記得要刪除,

否則進入下一關卡的時候level就相當於加瞭兩次。

好瞭,經過剛才添加,刪除之後我們再保存這個文件(修改完之後最好F5刷新一下,看有沒有修改成功),重新打包apk。

成功,嘿嘿

最後放一張gif動圖,不知道發佈出去,有沒有動畫效果。

總結:

1.移除XXX廣告的方法,正在調用的時候就是一句話,所以隻要註釋掉關鍵點就行。

2.對dll文件的修改,利用一些關鍵詞去修改,這隻是我的一些思路,如果你有搞怪的方法,還請留言一起探討下,我一開始也是蒙逼的,刪除還好,但是增加就有點困難,特別是要用它裡面的方法,一開始都不知道那是啥,哈哈,不過現在總算有點瞭解瞭。

You May Also Like