今日公司有需求印屁,需要破解某知名網(wǎng)站android apk登錄原理。進(jìn)過多天的艱難前行稼锅,終于搞定了『鹁撸現(xiàn)將技術(shù)方法記錄如下。
原料:
1.需要破解的apk(盡量找之前的低版本破解缰贝,混淆程度低馍悟,未加殼)
dex2jar-2.0
jd-gui
android studio
android 逆向助手
apktool
開始破解
- 將apk后綴改成zip,然后解壓
- 將其中的所有dex 用 dex2jar-2.0工具轉(zhuǎn)換成為jar包剩晴,方便查看锣咒。轉(zhuǎn)換命令為:
d2j-dex2jar.bat classes.dex
- 將轉(zhuǎn)換后的jar包拖到 jd-gui中,定位需要修改的地方赞弥。找到該文件的包名及源碼
- 在android studio中新建工程毅整,按照上述文件簡(jiǎn)歷完整包名,并在包下創(chuàng)建同名類绽左,然后將代碼全部拷貝到該類中悼嫉。
- 添加log代碼
- gradle build
- 在intermediates/class/.... 中找到編譯好的.class文件
此時(shí),就生成了class文件拼窥。需要將該class文件覆蓋到源代碼中戏蔑。具體方法如下:
- 將之前生成的jar包,用zip工具打開鲁纠,比如我用的3456好壓打開总棵,打開文件所在目錄,可以直接粘貼覆蓋改含。
- 然后將jar包用dex2jar-2.0工具重新編譯生成dex文件情龄,命令如下:
d2j-jar2dex.bat classes-dex2jar.jar
- 這時(shí)需要將apk重新簽名打包。如果直接簽名打包的話捍壤,會(huì)安裝失敗骤视,因?yàn)镸ETE-INF文件夾中是用來對(duì)apk文件進(jìn)行加密校驗(yàn)用的。我采用的方法是直接刪除該文件夾鹃觉,然后對(duì)剩余的文件全部打包成壓縮文件zip专酗。再將zip改成apk,最后用android逆向助手進(jìn)行簽名盗扇。就完成了對(duì)原有代碼的邏輯注入笼裳。
遇到的缺點(diǎn):
第六步中唯卖,gradle build的過程中,會(huì)遇到?jīng)]有包依賴的情況躬柬。這個(gè)情況感覺是無解的拜轨,即使用javac編譯也無法正確編譯為.class文件。
方法二:
采用更改smail文件的方法允青。大家都知道橄碾,smail文件是生成.class文件的前一步,通過反編譯我們可以得到所有文件的smail文件颠锉。方法是:
apktool.bat d xxx.apk
這時(shí)就可以拿到整個(gè)apk的smail文件法牲。我們需要對(duì)smail語法做一個(gè)簡(jiǎn)單初步的了解。
.local n 表示需要的最少寄存器個(gè)數(shù)琼掠。
Dalvik VM與JVM的最大的區(qū)別之一就是Dalvik VM是基于寄存器的拒垃。
基于寄存器是什么意思呢?也就是說瓷蛙,在smali里的所有操作都必須經(jīng)過寄存器來進(jìn)行:
本地寄存器用v開頭數(shù)字結(jié)尾的符號(hào)來表示悼瓮,如v0、v1艰猬、v2横堡、...(本地寄存器沒有限制,理論上是可以任意使用的)
參數(shù)寄存器則使用p開頭數(shù)字結(jié)尾的符號(hào)來表示冠桃,如p0命贴、p1、p2食听、...
特別注意的是胸蛛,p0不一定是函數(shù)中的第一個(gè)參數(shù),在非static函數(shù)中樱报,p0代指“this”胚泌,p1表示函數(shù)的第一個(gè)參數(shù),p2代表函數(shù)中的第二個(gè)參數(shù)…
而在static函數(shù)中p0才對(duì)應(yīng)第一個(gè)參數(shù)(因?yàn)镴ava的static方法中沒有this方法)肃弟。
這次我只需要打一個(gè)log查看一下原apk的某個(gè)參數(shù),因此只需要打一個(gè)log即可零蓉。其他smail語法請(qǐng)自行百度笤受。
log方法在android中需要兩個(gè)參數(shù):
Log.e("ivan paramString = ", paramString);
但第二個(gè)參數(shù)是原程序的,也就是只有第一個(gè)參數(shù)是新增參數(shù)敌蜂,因此需要增加一個(gè)寄存器箩兽。修改方法最上面的local變量
.local n+1 表示需要的最少寄存器個(gè)數(shù)。
然后添加log方法的smail語法:
const-string v1, "ivan paramString ="
invoke-static {v1,p0}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I
這樣就修改好了smail代碼章喉。接下來進(jìn)行打包編譯
apktool b xxx -o temp.apk
這樣打包出來的temp.apk是沒有簽名的汗贫,安裝是失敗的身坐。因此還需要借助android 逆向助手進(jìn)行簽名后,即可安裝運(yùn)行落包,查看到log部蛇。
有問題可+qq 807736118討論。