0.前言
昨天去公司加班,寫業務程式碼寫的我是心煩意亂,今天本打算再繼續寫的,但是就像肉吃多了也膩一樣,想搞點新花樣試試,最近對寫外掛和破解app很有興趣,想到最近某漫畫app裡的某部漫畫需要用vip許可權才能看,那今天我就想破解這個app,免費獲取vip許可權。
注意:只是用來學習交流,尊重正版尊重創作者,不要用於非法用途
1.準備工具
1.1 apktool
現在好像比較流行用android killer,但是沒有mac版,就用這個了,用來解壓apk和重新打包apk。
1.2 dex2jar
用來將dex檔案轉換成jar包
1.3 jdgui
反編譯jar包,得到java程式碼
1.4sublime
用來檢視程式碼 本文不涉及這些工具的使用方法,只是描寫一下思路,具體使用方法請google。
2.過程
2.1解壓apk
apk就是zip打包的,將apk字尾修改為zip,所以直接用zip解壓就行,如果apk用v2簽名的話,解壓的時候會報錯,這個時候不要擔心,硬解,用命令列unzip **.apk。

2.2用dex2jar得到jar包

2.3用jdgui反編譯jar包

2.4分析
用jdgui檢視java程式碼,你會發現程式碼是經過混淆的,這很正常,壓根也沒期望它不會混淆,混淆不要緊,無非就是變數方法換換名字嘛,耐心分析就好。我們們先正向的想一下,我們們來做一個app,vip許可權一般都是在你登入的時候伺服器返回給你的一個欄位,用來標註你是vip,然後你儲存在本地,寫一個方法可以判斷你是不是vip,開啟需要vip的章節的時候先判斷你是不是vip,如果是的話就可以開啟該鎖定章節了。我們們要做的就是修改這個方法,判斷vip的時候始終返回true。 既然大致思路有了,那麼最主要的問題就是如何確定這是哪個方法在哪個類裡。我們先看一下apk的賬戶頁面

2.5操作
apktool解壓apk 得到的檔案如下圖所示





public void setLoginState(com.netease.cartoonreader.i.b paramb)
{
boolean bool1 = q.a().c();
...
bool2 = q.a().c();
if (!bool1) {
break label452;
}
....
label452:
this.g.setText(2131625239);
...
}
複製程式碼
我省略了大部分程式碼,你會發現如果bool1為false就會跳到label452,呼叫textview設定text,2131625239有沒有很熟悉?這就是那個string的id的十進位制表示。所以我推斷這個q.a().c()方法就是用來判斷vip的,開啟com/netease/cartoonreader/e/q這個smail檔案 找到這個c方法,修改如下
.method public c()Z
.locals 5
.prologue
const/4 v4, 0x1
return v4
.end method
複製程式碼
關於smail其實我也不是很精通,只是知道一些基本的語法,大家自己去看看就好,不難 使用apktool重新打包,簽名安裝。最終效果

3總結
整體看難度不大,大家學習參考就好。
