昨天去公司加班,寫業務代碼寫的我是心煩意亂,今天本打算再繼續寫的,可是就像肉吃多了也膩同樣,想搞點新花樣試試,最近對寫外掛和破解app頗有興趣,想到最近某漫畫app裏的某部漫畫須要用vip權限才能看,那今天我就想破解這個app,免費獲取vip權限。java
注意:只是用來學習交流,尊重正版尊重創做者,不要用於非法用途android
如今好像比較流行用android killer,可是沒有mac版,就用這個了,用來解壓apk和從新打包apk。bash
用來將dex文件轉換成jar包服務器
反編譯jar包,獲得java代碼app
用來查看代碼 本文不涉及這些工具的使用方法,只是描寫一下思路,具體使用方法請google。工具
apk就是zip打包的,將apk後綴修改成zip,因此直接用zip解壓就行,若是apk用v2簽名的話,解壓的時候會報錯,這個時候不要擔憂,硬解,用命令行unzip **.apk。學習
用jdgui查看java代碼,你會發現代碼是通過混淆的,這很正常,壓根也沒指望它不會混淆,混淆沒關係,無非就是變量方法換換名字嘛,耐心分析就好。我們先正向的想一下,我們來作一個app,vip權限通常都是在你登陸的時候服務器返回給你的一個字段,用來標註你是vip,而後你存儲在本地,寫一個方法能夠判斷你是否是vip,打開須要vip的章節的時候先判斷你是否是vip,若是是的話就能夠打開該鎖定章節了。我們要作的就是修改這個方法,判斷vip的時候始終返回true。 既然大體思路有了,那麼最主要的問題就是如何肯定這是哪一個方法在哪一個類裏。咱們先看一下apk的帳戶頁面ui
apktool解壓apk 獲得的文件以下圖所示 this
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方法,修改以下google
.method public c()Z
.locals 5
.prologue
const/4 v4, 0x1
return v4
.end method
複製代碼
關於smail其實我也不是很精通,只是知道一些基本的語法,你們本身去看看就好,不難 使用apktool從新打包,簽名安裝。最終效果
總體看難度不大,你們學習參考就好。