Android中破解應用籤名校驗的後續問題處理方案(閃退,重啟現象,無效問題)

2021-02-14 編碼美麗

之前已經寫了一個爆破籤名校驗的工具,很多同學也在使用,但是也反饋了不少問題,之前一篇文章也介紹了,關於爆破之後第三方登錄問題修復,這篇我們在綜合說明一下一些後遺症問題,關於kstools工具說明以及工具的原理,可以看這篇文章說明:Android中自動爆破籤名工具kstools說明。

下面開始進入正題吧,關於有些同學反饋,使用該kstools爆破某app之後,出現無限制重啟問題,關於這個問題,我沒見過,很好奇就是嘗試了這個樣本案例:


看到了,的確是這樣的,無限制重啟。我們使用Jadx打開使用kstools處理過的樣本看看hook是否成功:


這裡可以看到,我們hook是成功的,所以應該不是hook的問題導致的,所以這裡就需要藉助開發經驗了:記住如果在破解過程中發現應用重啟或者閃退的時候,要第一時間想起來是否程序內部做了異常捕獲,然後自己做了一些操作導致這樣的結果。

本文案例就是這個原因導致的,所以我們得先把應用自己捕獲全局異常功能給關閉,這樣會出現系統崩潰異常信息,這樣定位問題就簡單了,對於Android中全局捕獲異常有一個特徵就是這行代碼:

Thread.setDefaultUncaughtExceptionHandler(this);

所以我們在Jadx中全局所有字符串即可:


這裡看到了,他的確有這些代碼,然後直接在反編譯之後的smali代碼中找到這些地方,注釋這行代碼即可,然後在回編譯安裝運行,果然崩潰了,看崩潰日誌信息:


是這個app內部用到了ormlite框架來操作資料庫的,具體信息就是Class類型不能轉化成String類型,我們通過這個堆棧信息跟蹤最後找到了出錯的地方:


這是個註解,看到這裡doClass是Class類型,但是默認值卻是String類型,所以報錯了,但是為什麼會這樣呢?我們用原始樣本看看:


這個才是正確的,所以我們猜想這個可能和kstools工具操作有關,因為kstools工具的操作步驟是:

解壓apk=>獲取dex=>轉化成jar(插入hook代碼)=>轉化成dex=>塞入apk=>籤名apk

而這個過程中,特別是在dex轉化成jar,然後在轉化成dex,應該是這個過程導致這個問題。所以這裡為了解決這個問題,我們還得按照這個工具的原始手動操作一下,不了解的同學可以看這篇文章:Android中爆破籤名校驗新姿勢,這樣操作時候,會發現這個註解不會有問題了,而且籤名也爆破成功了,運行正常了。

到這裡,本文內容就介紹完了,其實就是想說明一個問題也是破解過程中的一個經驗值:在應用二次籤名跑的時候發現閃退或者重啟,也沒有什麼錯誤信息的時候,要想到可能是應用本身做了捕獲全局異常的功能導致,所以只需要把這塊功能注釋即可看到詳細的錯誤信息,然後在定位解決問題即可。

當然通過這個樣本我們也發現了kstools這個工具的弊端,這個也有同學說了就是操作過於複雜,其實沒必要將dex轉化成jar然後在轉成dex的,耗時而且最大的問題在於可能在轉化過程中出錯,操作多的同學會發現有時候在dex轉化成jar或者是jar轉化成dex會出現一些錯誤信息。導致後面無法進行了。這個是工具的最大弊端。所以繼續優化這個工具,已經更新到github上了,直接將dex轉化成smali,然後進行操作即可,這樣的好處是原始的在Android基礎上進行操作了,不會帶來一些爆破後遺症了,比如本文案例用這種方式肯定就不會有問題了。

在很多同學使用這個工具或者用這種思想去爆破,提出這個問題就是如果將籤名驗證放到程序最開始入口,然後放到native層,這樣就會爆破失敗了,這裡我再說明一下,就是這個爆破的思想是hook程序的pms服務,然後攔截獲取籤名信息的方法,而加入hook的代碼已經是最開始的入口了,一般是attachBaseContext方法了,那麼及時你在native層最開始入口,比如是JNI_ONLoad函數中也是無效的。有的同學又說了?那可以把加載so放到程序的入口Application的靜態代碼塊中,這樣時機是最早的了,其實想一想這樣的確是最早,但是能在這裡校驗籤名嗎?要知道校驗籤名可能得用應用的context變量獲取信息,你在靜態代碼塊中是無法拿到這個變量的,及時你在native層也是一樣,所以在靜態代碼塊中提前load本地代碼是不行的。比如這個樣本案例,校驗就在JNI_OnLoad函數中:


這裡就是先獲取全局的context變量,然後再去進行籤名校驗功能,這裡有一個AppRuntime日誌tag,我們可以列印我們爆破成功的日誌:


看到這信息,說明已經騙過籤名校驗功能了,而這樣做是不是非常的方便了,沒必要再去分析代碼找到籤名校驗的地方了,所以這個工具還是很有用的,準確的說是這個爆破思想非常有用。

最後還想在說明兩點:

第一、有的同學說,這個工具對於加殼的app沒用,就意義不大了,首先說明並非所有的應用都會加固,特別是大型應用,因為加固有分享,他們未必採用加固,其次是,現在有很多應用不僅加固了,還做了籤名校驗,所以如果你脫殼成功還可以藉助這個工具進行操作了。

第二、通過最近同學給我反饋的使用意見和問題,這裡就總結一下使用流程:

1、首先你的樣本案例如果是加固的,那麼請你先脫殼,脫殼之後在使用kstools工具,具體用法有說明。

2、如果對於一些非加固的應用在使用的過程中可能會出現爆破失敗,比如kstools工具使用報錯,籤名校驗爆破失效,程序閃退重啟等問題,那麼可能和kstools工具有關,所以這時候可能要手動的去添加hook代碼了。

這個我在前面的文章中也提到了操作流程了。最後如果還是不行,那麼可以把樣本發給我,我幫忙查看。

關於手動添加hook代碼步驟的大致流程:

首先去github/fourbrother下載最新工程hook代碼,自己編譯一個apk之後,反編譯得到對應的smali代碼,然後將其拷貝到需要破解的apk反編譯源碼目錄下,然後在爆破app入口類添加hook代碼調用。

調用方法可以參見HookPmsSignature項目中的MyApplication/MyActivity類中的調用方式。注意hookPMS方法中的籤名和包名需要改成你想要破解app的對應信息。

關於應用入口可以在XML清單文件中查看,如果有Application類,直接在代碼類中的方法attachBaseContext或者onCreate方法添加,如果沒有就找到入口的Activity類,在其onCreate方法中添加即可。

kstools工具下載地址:

https://github.com/fourbrother/kstools

關於籤名爆破就講這麼多了,而這個工具也希望大家多多使用提意見,特別是在處理失敗的時候記得將失敗樣本發給我,本文也提到了一個破解的經驗就是出現閃退或者重啟問題記得想起全局捕獲異常功能代碼。把這部分代碼注釋就可以看到錯誤信息,然後在詳細跟蹤解決問題即可,看完文章,記得多多點讚分享哈!

手機查看文章不方便,可以網頁看

http://www.wjdiankong.cn

交流和諮詢可以進入小密圈:點擊這裡

更多技術乾貨長按二維碼快速關注公眾號

相關焦點

  • Android常見崩潰閃退問題的解決方案
    Android開發過程中,APP崩潰是一類非常常見的問題,而且APP崩潰問題很多時候對APP安全還是致命性的。APP崩潰大部分是以閃退的形式出現。下面就詳細探索分析App常見崩潰的問題和對應的解決方案。
  • Android5.1.1 - APK籤名校驗分析和修改源碼繞過籤名校驗
    PackageParser類的collectCertificates方法會對APK進行籤名校驗,在該方法會遍歷APK中的所有文件,並對每個文件進行校驗。上面代碼中調用了loadCertificates方法,這個方法返回一個二維數組,如果APK中的文件籤名校驗失敗那麼loadCertificates方法會返回一個空數組(可能是null,可能是數組長度為0),按照上面代碼的邏輯如果數組為空則會拋出異常。
  • 純乾貨:Android APP 防破解進化史
    如果說不用混淆工具我們破解一個apk需要2兩天,那麼用了這個工具,破解者可能需要4天,只是時間成本增加了。奴隸社會時期——自我校驗經過漫長的混淆時期,開發者發現他們的應用還是照常被破解。於是新的保護方式又出現了——自我校驗。簡單說,自我校驗就是在程序中加一些對自己應用的完整性校驗,可以藉助籤名、或計算自己應用dex的md5值等等來完成。
  • 阿里客戶端工程師試題簡析 — Android 應用的閃退(crash)分析
    問題描述閃退(Crash)是客戶端程序在運行時遭遇無法處理的異常或錯誤時而退出應用程式的表現,請從crash發生的原因分類與解決方法、在出現crash後如何捕捉並分析異常這兩個問題給出自己的解決方案。我們以Android平臺為例,介紹下如何捕獲Android應用的閃退信息,以幫助我們定位和解決導致閃退的問題代碼。2.
  • 騰訊QQ iOS版本閃退問題 官方回應已排查解決
    騰訊QQ iOS版本閃退問題 官方回應已排查解決 2018年11月23日 14:41作者:劉軒編輯:劉軒文章出處:泡泡網原創
  • iPhone手機點開應用就閃退,如何才能修復這個問題呢?
    而如果你當前使用的是iPhone手機的蜂窩網絡,那麼就檢查一下手機的信號是不是有問題,是不是出於無服務或者是欠費的情況。因為很多軟體都是需要進行聯網使用的,網絡狀態不好的話,是很容易出現APP閃退現象的。
  • iPhone點開軟體閃退修複方法以及蘋果手機玩遊戲閃退解決方案
    在北京的小夥伴如果iPhone出現故障的話,可以前往北京蘋果售後維修中心,北京西城區西直門外大街1號西環廣場T2座18層11室,讓工程師進行故障檢測,再確定維修方案以及維修價格。不在北京的小夥伴也別擔心,可以撥打蘋果客服電話進行諮詢,也可以幫你查找離你最近的正規蘋果售後維修中心。蘋果iPhone出現閃退怎麼辦?
  • iPhone 應用閃退解決辦法
    不少用戶在更新 iOS 13 之後,發現了各種問題,其中最讓人頭疼的就是應用閃退。為什麼會出現閃退?應該如何解決呢?
  • iOS 14軟體閃退嚴重怎麼解決?iOS14app閃退處理方法
    最近有很多用戶反饋,iOS 14 導致軟體閃退問題非常嚴重,特別是天氣非常熱,APP 閃退更頻繁了。其實,應用程式閃退一般由兩種情況導致的,一種是應用本身不穩定,另外一種則是iOS系統不穩定。而後者常見於刷機後,因為刷機很容易出現意外,導致系統不完整,但是還有一種情況,那就是系統本身就不穩定,這種情況常見於安裝了測試版系統和越獄後的系統。
  • Ubuntu下adb的使用及常見問題處理
    2、如果沒有/etc/udev/rules.d/51-android.rules 文件,需要自己創建一下。3、修改/etc/udev/rules.d/51-android.rules不需要重啟Linux機器,重新插拔一下設備就可以了。再次運行adb devices就可以看到你的設備已經連接。
  • ​《原神》卡頓黑屏閃退怎麼辦 卡頓黑屏閃退解決方法
    導 讀 原神閃退也是有一定的原因的,目前是pc版本上線了,後續還是有安卓和ios要上線的,更多的問題會遇到的
  • 手機內存不夠、黑屏、死機、閃退等問題,看了這篇文章,自己也能解決
    解決方法:1由內存問題引起長按手機的home鍵,調出最近運行的程序退出即可。及時清理後臺軟體,在「系統管家」中清理垃圾,最好下載第三方軟體監控,一鍵清理。依據手機配置下載一些合適的軟體,卸載不常用的軟體。但萬變不離其宗,無非就是減小內存,養成不使用即退出程序的好習慣。解決方法:2軟體衝突問題手機市場軟體眾多,其中就有天生衝突的軟體。
  • 破解第一個Android程序
    --破解Android程序的方法通常是:使用ApkTool反編譯APK文件,生成smali格式的反彙編代碼;通過閱讀smali文件的代碼來理解程序的運行機制,找到突破口,並對代碼進行修改;使用ApkTool重新編譯生成APK文件並對其進行籤名;運行測試——如此循環,直至程序被破解。
  • Android證書生成,籤名,驗證,雖然難,但學一次就夠了!
    引言從Android演進開始,APK籤名就已經成為Android的一部分,並且android要求所有Apks都必須先籤名,然後才能將其安裝在設備上。關於如何生成密鑰以及如何籤名的文章很多。一個Apk,但我們將從安全角度進行研究。
  • 王國kingdom遊戲閃退 破解版載入界面閃退
    但是不少下載了該遊戲的朋友卻遇到了遊戲閃退的情況,在人物騎著馬載入的界面,很容易就閃退了。那麼王國Kingdom遊戲閃退有什麼應對方法麼?這裡我們簡單說明一下。 守護王冠   本人在進入載入界面的時候,也閃退過一次,但是在那之後就沒有了出現過這樣的情況,這裡簡單分析下可能的原因:   1、英文目錄,遊戲是否在純英文路徑下運行
  • 《原神》閃退怎麼辦 閃退異常問題解決方法
    導 讀 原神許多玩家的配置也不是很低,為什麼老是出現閃退的現象呢,畢竟玩的好好的突然閃退還是讓人很是鬱悶
  • 手機APP總是閃退?解決方法都在這裡了
    正一邊啃零食一邊追劇追得正嗨,視頻APP突然閃退了;聊天正聊得開心呢,微信突然閃退了;最痛苦的莫過於玩遊戲正在團戰或準備吃雞,突然閃退了!!!手機應用軟體閃退,這個問題多數人都遇到過,是什麼原因導致的?該怎麼處理呢?一起來看看。
  • 新系統背鍋,多款谷歌 Pixel 手機更新 Android 12 後出現系統崩潰、主界面閃退等問題
    10 月 22 日消息,據外媒 PhoneArena 報導,多位用戶在為自己的 Pixel 手機更新 Android 12 系統後出現了嚴重的系統問題
  • Android應用測試速查表
    文中的翻譯儘可能保持原文格式,但一些地方為了通順和易於理解也做了一定改動,如有翻譯問題,還請各位大牛指正。本文翻譯時版本是20170911,後續如果有大更新的話同樣會跟進更新。介紹這份速查表提供了一份進行Android應用測試所需要進行的測試清單。主要根據OWASP十大移動安全問題進行敘述。1.1.
  • Android安全幾道入門題目
    本文通過幾個題目可以讓你基本了解android中簡單的但比較經典的漏洞、以及簡單的android註冊機開發的思路。閱讀本文,你可能需要了解android逆向的基本知識和常用工具、非常簡單的java語言、smali的語法知識。本文適合android入門初學者,最基本的東西。大佬請無視!