天天看點

AliCrackme_2題的分析

作者:Fly2015

AliCrackme_2.apk運作起來的注冊界面,如圖。

AliCrackme_2題的分析

首先使用Android反編譯利器Jeb對AliCrackme_2.apk的Java層代碼進行分析。

AliCrackme_2題的分析

很幸運,就找到了該apk程式的使用者注冊碼的函數securityCheck并且這個函數是在Native層實作的。下面就到該程式的so庫中去查找該函數的Native實作。

AliCrackme_2題的分析

Native層securityCheck函數的注冊并不是使用在JNI_OnLoad函數中進行注冊的方式注冊的,是以非常走運的找到securityCheck函數的實作,分析如下圖:

AliCrackme_2題的分析

通過對Native代碼的靜态的分析發現, _lpSaveBuffer = off_628C中儲存的就是正确的注冊碼字元串,是以,要擷取該apk的注冊碼,必須對其進行動态的調試,擷取到_lpSaveBuffer 中儲存的字元串的内容就能實作該apk的破解。

對該Android應用程式進行動态的調試。說一句,Android應用程式一般會在JNI_OnLoad函數中進行程式的反調試操作,以防止别人對其App進行動态調試。經過幾輪動态調試的實驗,發現該Android應用程式會調用函數pthread_create建立線程進行反調試。是以,直接在函數Java_com_yaotong_crackme_MainActivity_securityCheck處下斷點實作破解的方法不能直接達到。

AliCrackme_2題的分析

是以,為了阻止該App程式的反調試,将程式的代碼進行了修改。如圖,定位位址A8CE 9C58處的ARM彙編指令BLX R7在記憶體中的位置,然後将彙編指令BLX R7改為彙編指令MOV R0, RO即NOP掉BLX R7指令。

AliCrackme_2題的分析

至于ARM彙編指令與機器碼的轉換,使用下面這個工具,但是請注意,在使用這個工具的時候,必須将這個工具放在桌面上才能正常的使用。

AliCrackme_2題的分析

順利跨過反調試的障礙,下面就在函數Java_com_yaotong_crackme_MainActivity_securityCheck上下斷點,直奔主題。

AliCrackme_2題的分析

在程式輸入密碼的界面上,随便輸入一個字元串密碼,函數Java_com_yaotong_crackme_MainActivity_securityCheck就會被調用。

AliCrackme_2題的分析

程式就會斷在函數Java_com_yaotong_crackme_MainActivity_securityCheck上,然後在該函數裡找到_lpSaveBuffer = off_628C對應的彙編代碼LDR R2, [R1, R7]。在彙編代碼LDR R2, [R1, R7]的下一條指令上下斷點即可得到R2儲存的密碼字元串指針的位址為A8CEC450,然後在程式資料記憶體中同步R2的值定位到位址A8CEC450處的字元串aiyou,bucuoo,很顯然aiyou,bucuoo就是要擷取的密碼。

AliCrackme_2題的分析