一、技術(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)代{過(guò)}{濾}理技術(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)稱(chēng):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代碼,所以也需要這樣類(lèi)似操作。原理和準(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即可。找到入口之后一定要獲取入口類(lèi)的完整名稱(chēng)即:包名+類(lèi)名。
第三步:插入hook功能代碼借助于icodetools工具,以及第二步中獲取到的程序入口類(lèi)信息,開(kāi)始動(dòng)態(tài)插入hook代碼,這里需要注意的是:最好是在attachBaseContext方法中進(jìn)行添加即可,如果入口類(lèi)沒(méi)有實(shí)現(xiàn)這個(gè)方法,可以在onCreate方法中添加,但是一定要在方法的第一行代碼處添加。插入的asm代碼也很簡(jiǎn)單,可以利用Bytecode插件進(jìn)行查看即可:
我們只需要將這段asm代碼添加到入口處即可:
而這里的ServiceManagerWraper類(lèi)后面會(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è)類(lèi),一個(gè)是反射類(lèi),一個(gè)是動(dòng)態(tài)代{過(guò)}{濾}理類(lèi),下載地址后面會(huì)給出:
這里的代碼非常簡(jiǎn)單,通過(guò)傳入的Context變量,利用反射機(jī)制替換服務(wù)的Binder對(duì)象,然后就是動(dòng)態(tài)代{過(guò)}{濾}理對(duì)象:
攔截獲取簽名信息的方法,替換正確的簽名信息即可。然后將這兩個(gè)類(lèi)編譯得到對(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工具的話(huà),當(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ā)流程總結(jié)到這里,我們就介紹完了,自動(dòng)爆破簽名校驗(yàn)工具的原理了,下面用一張圖來(lái)總結(jié)一下:
下面在來(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)行反編譯破解操作了
|