Android逆向編程

一、加固

APP應用加固 | 幾維安全

聯(lián)系我們--安天 智者安天下

你不知道的Android SDK安全測試 - CSDN博客

二、逆向編程

國內最權威的逆向論壇

逆向專家

https://github.com/android-hacker
https://blog.csdn.net/qq_21051503

逆向工具介紹

百度了很多資料,發(fā)現(xiàn)集成的逆向工具有很多,如APKKiller、APKIDE等,但是發(fā)現(xiàn)不是很好用,兼容性太差,沒有一個可以重新編譯打包成功的。這些集成的工具,其實就是寫了些腳本,復用了一下Google官方的APKTool的一系列工具而已。

[原創(chuàng)]記某app內購破解 – 安卓逆向菜鳥的初體驗
https://bbs.pediy.com/thread-226040.htm

Android Killer:是一款可以對APK進行反編譯的工具,它能夠對反編譯后的Smali文件進行修改,并將修改后的文件進行打包http://www.itdecent.cn/p/61a93a6c0c1b,雖然它對360脫殼沒有啥作用,但是它的Android相關的一些功能還是比較實用的,比如目錄瀏覽等 。

下面我介紹一下用原生的工具如何進行反編譯與重新打包的。

一、ApkTool

下載

可以參照這個博客:
https://blog.csdn.net/dreamer2020/article/details/52761606
http://www.itdecent.cn/p/47a5511e17bf

但是apktool.bat與apktool.jar我建議去官方下載最新的
首頁:https://ibotpeaches.github.io/Apktool/
怎么安裝:https://ibotpeaches.github.io/Apktool/install/

image.png

文檔說的很清楚,其實中國APKtool的博客鼻祖,就是照著這個翻譯的。

使用

apktool.bat,注意win10在命令行運行時要加上.\,否則會報錯如下:


image.png

其實最后的提示已經告訴我我們答案。

  • 反編譯
       .\apktool.bat d  -f   E:\ApkNiXiang\MyTool\source\in\cn.wangxiao.zhuntiku_4.0_43.apk  -o E:\ApkNiXiang\MyTool\source\out
    

參數說明:
d:表示執(zhí)行反編譯指令
-f:輸出目錄存在,也會強制覆蓋,不會提示。
E:\ApkNiXiang\MyTool\source\in\cn.wangxiao.zhuntiku_4.0_43.apk:要反編譯的APK
-o:指定輸出目錄
E:\ApkNiXiang\MyTool\source\out:反編譯后的文件的輸出根目錄

  • 重新編譯打包(回編譯)
    .\apktool.bat b -o E:\ApkNiXiang\MyTool\source\rebuild E:\ApkNiXiang\MyTool\source\out
    

參數說明:
d:表示執(zhí)行編譯指令,將反編譯后的文件重新打包。
-o:指定輸出目錄
E:\ApkNiXiang\MyTool\source\rebuild:指定打包后的apk的生成目錄
E:\ApkNiXiang\MyTool\source\out:反編譯后的文件的輸出根目錄
執(zhí)行重新編譯打包的過程,不同的APK,不同的開發(fā)人員可能會有各種錯誤導致不成功,建議首先將apktool文件更新到最新,然后再看提示。下面說說我遇到的坑(所有的坑都是以破解“準題庫"app為例的)。
坑1: 提示 “error: Resource entry chapter_home_page_gravity already has bag item android:textColor.”

image.png

這個錯誤提示著十分明顯了,哪個文件,哪一行,什么問題。我就找到那個文件:
image.png

發(fā)現(xiàn)果然屬性定義有重復,那么刪除一行重新編譯。
這種問題,就屬于開發(fā)人員代碼不規(guī)范的問題了。
坑2: style繼承
image.png

找到問題文件:
image.png

"Base.V7.Theme.AppCompat.Light"繼承了“style/Platform.AppCompat.Light”對某個屬性重新賦值就會出現(xiàn)這個問題。
我嘗試著把 "Base.V7.Theme.AppCompat.Light"的所有重新賦值的item注釋掉,發(fā)現(xiàn)新的其它的有繼承關系的布局又出現(xiàn)問題了,根本改不完,改完了也不知道會有啥問題。
坑3: 真正致命的問題
其實坑1,坑2還只是W級別的警告,真正致命的是下面的錯誤:
image.png

針對這個問題及坑2的問題,網上找到一個緩兵之計:
https://blog.csdn.net/m0_37750720/article/details/82832915
就是執(zhí)行反編譯(解包)指令的時候,加一個-r參數,這樣就不會解資源文件,回編譯的時候也就不會出現(xiàn)問題。但是由于沒有解資源文件,所以所有的資源文件都是亂碼的。
關于亂碼的問題其實官方文檔早就作了說明https://ibotpeaches.github.io/Apktool/documentation/,apk直接解壓出來資源文件就是亂碼的(不光光是中文亂碼,英文也有亂碼。),apktool扮演的就是解碼的角色。
坑4: Exception in thread "main" org.jf.util.ExceptionWithContext: Encountered small uint that is out of range at offset 0x38
反編譯一款叫做“伊對”的相親app,然后就會遇到下面問題。
image.png

然后百度了些相關資料 :
https://blog.csdn.net/changcsw/article/details/51581051
將apktool升級到最新的2.14.1,還是報錯,換了個提示:
image.png

注意到assets目錄下有一個A3AEECD8.dex,應該是這個dex文件格式不對。我把這個文件從apk中移除,然后重新反編譯能通過,重新簽名后也能安裝成功,但是打不開。我想著這個應該是哪家加密工具給加密了,反正不是某數字公司的加固方式。

另外,反編譯“全民K歌”也是出現(xiàn)這個錯誤。

2019-10-22 14:17:06.203 2684-3389/? W/ziparchive: Unable to open '/data/app/cn.wangxiao.zhuntiku-WoI77OMcp7yg9WMUFO_bEQ==/base.apk': No such file or directory
2019-10-22 14:17:06.203 2684-3389/? E/ResourcesManager: failed to add asset path /data/app/cn.wangxiao.zhuntiku-WoI77OMcp7yg9WMUFO_bEQ==/base.apk
2019-10-22 14:17:06.203 2684-3389/? W/PackageManager: Failure retrieving resources for cn.wangxiao.zhuntiku
2019-10-22 14:17:06.210 19612-19612/? D/AndroidRuntime: Shutting down VM
    
    
    --------- beginning of crash
2019-10-22 14:17:06.210 19612-19612/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: cn.wangxiao.zhuntiku, PID: 19612
    java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in "/data/data/cn.wangxiao.zhuntiku/.jiagu/libjiagu.so"
        at java.lang.Runtime.load0(Runtime.java:928)
        at java.lang.System.load(System.java:1633)
        at com.stub.StubApp.attachBaseContext(SourceFile:233)
        at android.app.Application.attach(Application.java:231)
        at android.app.Instrumentation.newApplication(Instrumentation.java:1125)
        at android.app.LoadedApk.makeApplication(LoadedApk.java:1080)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6181)
        at android.app.ActivityThread.access$1200(ActivityThread.java:232)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1839)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:224)
        at android.app.ActivityThread.main(ActivityThread.java:7076)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:878)
2019-10-22 14:17:06.213 1707-3764/? W/ActivityManager:   Force finishing activity cn.wangxiao.zhuntiku/app.wangxiao.cn.page_module.SplashActivity

上面報資源文件的錯誤,下面報.so的錯誤(好像是用什么加固工具了)。
我自己寫了個apk,然后簽名,不用第3方加固工具加固。重復以上步驟。發(fā)現(xiàn)可以正常運行,也沒有報錯。(所以不要一上手就揚言要破譯哪個APK,先自己搞個APK試試,畢竟自己有源碼,可以對比學習。)

所以,不混淆,不使用加固工具加固的APP沒有安全性可言!

  • 修改反編譯出來的源碼
    其實這個就是我研究逆向編程的初衷:有一個考試軟件,一些課程需要收費,我想著是不是能找到它的漏洞,繞過支付的流程,直接觀看它的課程。
    那么,常見的修改會有2種情況:
  • 1)修改資源文件
    像前面的使用-r參數才回編譯成功,所以想要修改資源文件,必須解決上面所說到的問題。
    但是為了演示,自己測試用,用自己的APK,可以先不加-r改改布局然后回編譯,看看是否生效。
    我嘗試著改了一下app_name,但是又出現(xiàn)了坑3的問題,不改就不會出現(xiàn)。各種猜想各種試,最后重啟電腦問題才解決,所以緩存絕對是apktool的一個巨坑。

apk反編譯出dex文件

apktool.bat -s d crackme02.apk

二、Jadx

這個工具主要是用來分析源碼

下載

https://www.softpedia.com/get/Programming/Other-Programming-Files/Jadx.shtml

使用教程

http://www.itdecent.cn/p/e5b021df2170

三、逆向實踐

http://www.itdecent.cn/p/683720bdfa58
https://bbs.pediy.com/user-592070.htm (脫殼專家)

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容