1. 程式人生 > >破解某普通話測試app會員 獲取某車源平臺所有賣家聯絡方式

破解某普通話測試app會員 獲取某車源平臺所有賣家聯絡方式

裝置要求

  已root的Android手機

軟體要求

反編譯工具

  jeb、APK改之理(APK IDE)

hook工具

  frida、xposed。

佈局分析工具

  Android Device Monitor

操作過程

脫殼

  該app使用了360加固,脫殼過程和前一篇【獲取某車源平臺所有賣家聯絡方式】相同。

反編譯

  因為獲取的dex檔案不完整,使用jadx反編譯會卡死,但是這不影響分析功能,所以也不去做過多的修復,可以用其他的反編譯工具,只要能看到大概的程式碼就行了。

  這裡我使用了jeb和改之理,jeb用來檢視java程式碼,改之理用來全域性搜尋。

  首先將得到的4個dex打包成zip檔案,如果直接替換apk中dex,用jeb反編譯會雖然不會卡死,但是得不到程式碼,

  

 

  然後用jeb反編譯,

  因為如果直接反編譯dex檔案,jeb每次只能反編譯一個dex,而且jeb只能開一個,要想在多個dex中查詢程式碼就要不斷的關閉當前的dex再反編譯其他的dex,

  將他們打包成一個zip檔案後,就能一次將所有dex反編譯了。

  

 

  改之理可以直接反編譯替換dex後的apk,但是反編譯出來的是smali,而自帶的jd-gui反編譯出來的java程式碼也不大友好,因此就只用來搜搜變數。

  

查詢關鍵程式碼

   首先開啟app到主頁,能夠看到現在是沒有會員的。

  

  先隨便找一個需要會員的地方,

  在第一欄的機考頁面,點選馬上測試,然後右下角有一個全真測試,這個功能是需要會員的。

  

  這裡我們知道,點選全真測試按鈕後,就會先驗證是否是會員,不是會員則彈出開通會員的對話方塊,所以定位到該按鈕的響應程式碼即可。

  首先通過分析Android Device Monitor分析該介面的佈局,找到該按鈕的id,過程如下:

  1.先用mprop修改手機的屬性,執行以下兩條命令

./mprop ro.secure 0
./mprop ro.debuggable 1

  這兩條命令可能一次不能成功,就需要多執行幾次,知道出現類似如下內容,

  

  2.開啟View Server,執行以下命令

service call window 1 i32 4939

  得到對應的輸出

  

  3.啟動App,進入需要分析的介面

  

  4.開啟Android Device Monitor,在Hierarchy Viewer視窗對佈局進行檢視,找到對應的控制元件

 

  由上圖可知,該按鈕的id為start_complex_test,所以在改之理對該字串進行全域性搜尋。

  

  由搜尋結果可知,除了xml和R檔案,中start_complex_test就只在NewPreviewTestActivity中出現過,該類是在第二個dex檔案中(如果這裡不能在程式碼中直接找到,就需要將xml中該id對應的十六進位制數字轉換成十進位制數字,然後進行全域性搜尋),

  在jeb中開啟classes2.dex,找到NewPreviewTestActivity類中設定響應程式碼的地方,

  可以看到,響應點選的類是NewPreviewTestActivity$$Lambda$5,但是直接雙擊它沒有跳轉,所以該類應該在其他dex中,直接在改之理中去搜索NewPreviewTestActivity$$Lambda$5

  

  根據搜尋結果,可知NewPreviewTestActivity$$Lambda$5在classes.dex中,在jeb中開啟classes.dex,找到NewPreviewTestActivity$$Lambda$5

  

  由onClick方法可知,處理方法為NewPreviewTestActivity的lambda$initEvent$5$NewPreviewTestActivity,所以又需要回到classes2.dex中查詢lambda$initEvent$5$NewPreviewTestActivity

  

  由程式碼可知,當PointManager.isProUser返回true則表示該使用者是會員,返回false則彈出購買會員的對話方塊。

  所以只需hook該方法,使其永遠返回true即可。

編寫hook外掛

   hook程式碼如下:

public class Main implements IXposedHookLoadPackage
{
    @Override
    public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam loadPackageParam)
    {
        if (loadPackageParam.packageName.equals("com.huahua.testing"))
        {
            XposedHelpers.findAndHookMethod(Application.class,
                    "attach",
                    Context.class,
                    new XC_MethodHook()
                    {
                        @Override
                        protected void afterHookedMethod(MethodHookParam param) throws Throwable
                        {
                            //com.huahua.utils.PointManager.isProUser
                            XposedHelpers.findAndHookMethod("com.huahua.utils.PointManager",
                                    loadPackageParam.classLoader,
                                    "isProUser",
                                    new XC_MethodHook()
                                    {
                                        @Override
                                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable
                                        {
                                            param.setResult(true);
                                        }
                                    });
                        }
                    });
        }
    }
}

  安裝重啟後,開啟該app,發現主頁購買會員的提示已經變成會員專享資料下載了,

  

 

  點選之前的全真測試,也不會彈出購買對話方塊了,而是直接進入測試