Android中帶你開(kāi)發(fā)一款自動(dòng)爆破簽名校驗(yàn)工具kstools

一、技術(shù)回顧

為了安全起見(jiàn),一些應(yīng)用會(huì)利用自身的簽名信息對(duì)應(yīng)用做一層防護(hù),為了防止應(yīng)用被二次打包操作,在之前已經(jīng)介紹了很多關(guān)于應(yīng)用簽名校驗(yàn)爆破的方法,一條基本原則不能忘:全局搜索”signature”字符串,這里可以在Jadx打開(kāi)apk搜索,也可以在IDA中打開(kāi)so搜索都可以。找到這信息之后可以手動(dòng)的修改校驗(yàn)邏輯,但是這個(gè)法則有個(gè)問(wèn)題,就是如果一個(gè)應(yīng)用在代碼中很多地方都做了簽名校驗(yàn),比如以前介紹的一篇爆破游戲文章:Android中爆破應(yīng)用簽名信息案例分析,那時(shí)候就會(huì)發(fā)現(xiàn),應(yīng)用在很多地方都做了簽名校驗(yàn),當(dāng)時(shí)的解決辦法是一個(gè)一個(gè)地方修改,這樣會(huì)感覺(jué)操作非常繁瑣,所以本人就發(fā)明了一個(gè)比較好的辦法,就是直接hook應(yīng)用的pms服務(wù),攔截其獲取簽名的方法,然后替換正確的簽名信息即可。這個(gè)技術(shù)得益于之前介紹的技術(shù):Android中免root進(jìn)行hook應(yīng)用自身的系統(tǒng)服務(wù),這個(gè)技術(shù)原理非常簡(jiǎn)單,就是借助于動(dòng)態(tài)代理技術(shù)+反射機(jī)制即可。而這個(gè)技術(shù)正好可以用于這次自動(dòng)爆破功能,我們只需要在程序的入口處添加這段hook代碼即可。關(guān)于這個(gè)技術(shù),在上一篇的文章中已經(jīng)實(shí)踐過(guò)了:Android中爆破應(yīng)用簽名校驗(yàn)的新姿勢(shì)。在那篇文章中我結(jié)尾說(shuō)到了,這樣的操作步驟可以完全自動(dòng)化,所以這篇文章就把這個(gè)操作步驟變成自動(dòng)化,開(kāi)發(fā)一款一鍵化操作工具,我將其命名為:kill_signed_tools(簡(jiǎn)稱:kstools);

二、工具流程開(kāi)發(fā)

在介紹這個(gè)工具開(kāi)發(fā)之前,我們還必須了解一個(gè)知識(shí)點(diǎn),就是我在之前開(kāi)發(fā)的一個(gè)自動(dòng)注入代碼工具icodetools的原理,不了解的同學(xué)可以去查看這篇文章:Android中自動(dòng)注入代碼工具icodetools原理解析,主要利用asm技術(shù)和dex2jar工具進(jìn)行操作的。因?yàn)楸疚奈覀冃枰趹?yīng)用的入口插入hook代碼,所以也需要這樣類似操作。原理和準(zhǔn)備工作已經(jīng)介紹完了,下面開(kāi)始正式的開(kāi)發(fā)流程:

第一步:獲取應(yīng)用正確簽名信息

因?yàn)槲覀冊(cè)诤竺鎕ook代碼之后攔截簽名方法,得返回應(yīng)用本身正確的簽名信息,所以得在第一步中就要獲取應(yīng)用簽名信息,這個(gè)網(wǎng)上有很多代碼可以直接獲取apk文件的簽名信息,這里不多說(shuō)了。

第二步:獲取應(yīng)用入口信息

這個(gè)需要借助AXMLPrinter.jar工具來(lái)進(jìn)行解析apk文件中的AndroidManifest.xml文件信息,然后獲取程序入口,這里采用PullXML解析方式,需要注意的是:應(yīng)用的入口一般有兩處,一個(gè)是自定義的Application,一個(gè)是啟動(dòng)Activity。所以這里解析的時(shí)候,優(yōu)先判斷有沒(méi)有自定義的Application入口,如果沒(méi)有,就獲取啟動(dòng)的Activity即可。找到入口之后一定要獲取入口類的完整名稱即:包名+類名。

第三步:插入hook功能代碼

借助于icodetools工具,以及第二步中獲取到的程序入口類信息,開(kāi)始動(dòng)態(tài)插入hook代碼,這里需要注意的是:最好是在attachBaseContext方法中進(jìn)行添加即可,如果入口類沒(méi)有實(shí)現(xiàn)這個(gè)方法,可以在onCreate方法中添加,但是一定要在方法的第一行代碼處添加。插入的asm代碼也很簡(jiǎn)單,可以利用Bytecode插件進(jìn)行查看即可:

我們只需要將這段asm代碼添加到入口處即可:

而這里的ServiceManagerWraper類后面會(huì)給出下載地址。

第四步:二次打包簽名

這個(gè)中間還有很多步驟,比如講jar轉(zhuǎn)化成dex,再把dex替換到apk中,這個(gè)過(guò)程在icodetools中已經(jīng)有了,完全一樣,這里就沒(méi)必要在介紹了,最后一步都是二次打包簽名操作。

三、hook代碼分析

到這里我們就把操作步驟流程介紹完了,下面在來(lái)介紹關(guān)于hook代碼邏輯,hook代碼比較簡(jiǎn)單,就兩個(gè)類,一個(gè)是反射類,一個(gè)是動(dòng)態(tài)代理類,下載地址后面會(huì)給出:

這里的代碼非常簡(jiǎn)單,通過(guò)傳入的Context變量,利用反射機(jī)制替換服務(wù)的Binder對(duì)象,然后就是動(dòng)態(tài)代理對(duì)象:

攔截獲取簽名信息的方法,替換正確的簽名信息即可。然后將這兩個(gè)類編譯得到對(duì)應(yīng)的class文件,放到工具目錄下:

所以最終的工具目錄是這樣的結(jié)構(gòu),只要將操作的apk文件拷貝到這里,改名為src.apk,然后運(yùn)行kstools.bat即可:

這個(gè)運(yùn)行操作和icodetools操作一模一樣,運(yùn)行完成之后,會(huì)生成一個(gè)signed.apk簽過(guò)名的,還有一個(gè)沒(méi)有簽名的unsigned.apk文件,如果想自己簽名,可以利用這個(gè)文件即可。

這時(shí)候我們可以用Jadx工具查看signed.apk文件:

添加成功了。

四、工具使用說(shuō)明

從github上弄下來(lái)的工具目錄如下:

因?yàn)楝F(xiàn)在很多app做了加固操作,所以這里需要注意這么幾個(gè)問(wèn)題:

第一個(gè)問(wèn)題:如果發(fā)現(xiàn)app加固了,第一步你得先脫殼,再次說(shuō)明,本工具不適合加固app,需要自己手動(dòng)脫殼修復(fù)apk才能繼續(xù)操作。加固app操作,先把加固app放到當(dāng)前目錄下,直接拖動(dòng)apk文件到apksign.bat上運(yùn)行,獲取正確的簽名信息,會(huì)保存到apksign.txt文件中,然后再去脫殼修復(fù)apk,在放到當(dāng)前目錄下命名為src.apk,然后在此運(yùn)行kstools.bat文件即可。操作過(guò)程不可錯(cuò)亂,不然會(huì)出錯(cuò)。

第二個(gè)問(wèn)題:如果發(fā)現(xiàn)app沒(méi)有加固,那么就直接將apk命名為src.apk放到當(dāng)前目錄下,直接運(yùn)行kstools.bat即可,這里又要注意啦,如果直接運(yùn)行kstools工具的話,當(dāng)前目錄可能存在你上次操作加固的app存留的apksign.txt文件,這時(shí)候需要手動(dòng)刪除,切記,不然也是操作失敗的。

第三個(gè)問(wèn)題:不要問(wèn)怎么區(qū)分是加固的還是沒(méi)有加固的,這個(gè)技能小學(xué)生都會(huì)了,這里不介紹了。

第四個(gè)問(wèn)題:在獲取app簽名信息失敗的時(shí)候,怎么辦?我們需要手動(dòng)的去獲取,這里方法很多,可以用Android中的這段代碼即可:

這樣就可以得到簽名信息了,然后再把簽名信息拷貝到目錄的apksign.txt文件中即可。

說(shuō)明:工具第一次發(fā)布,肯定有一些問(wèn)題,請(qǐng)敬請(qǐng)的使用,提問(wèn)題,如果在操作的工程中遇到任何問(wèn)題請(qǐng)?jiān)谛∶苋α粞蕴峁╁e(cuò)誤樣本,我好進(jìn)行研究爆破!

五、工具開(kāi)發(fā)流程

這樣就可以得到簽名信息了,然后再把簽名信息拷貝到目錄的apksign.txt文件中即可。

說(shuō)明:工具第一次發(fā)布,肯定有一些問(wèn)題,請(qǐng)敬請(qǐng)的使用,提問(wèn)題,如果在操作的工程中遇到任何問(wèn)題請(qǐng)?jiān)谛∶苋α粞蕴峁╁e(cuò)誤樣本,我好進(jìn)行研究爆破!

下面在來(lái)說(shuō)一下這個(gè)工具的缺點(diǎn),其實(shí)就一點(diǎn),對(duì)于一些加固的應(yīng)用是沒(méi)有效果的,本人嘗試了一些加固app,最終都是失敗的,不過(guò)這不代表就沒(méi)有任何用了,因?yàn)椴皇撬械膽?yīng)用都會(huì)采取加固方式,只要不加固,那么這個(gè)工具就有效果,并且不管簽名校驗(yàn)在哪都可以進(jìn)行成功爆破。

Hook PMS代碼下載地址:https://github.com/fourbrother/HookPmsSignature

kstools工具下載地址:https://github.com/fourbrother/kstools

六、總結(jié)

本文主要介紹了一個(gè)通過(guò)hook需要爆破應(yīng)用的pms服務(wù),攔截獲取簽名信息的方法,來(lái)做到全局爆破簽名校驗(yàn)功能邏輯,這個(gè)工具可以解決以往需要手動(dòng)的反編譯app來(lái)進(jìn)行破解,有了這個(gè)工具,完全可以一鍵化操作功能,無(wú)需在進(jìn)行反編譯破解操作了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容