Android逆向编程

作者: 修符道人 | 来源:发表于2019-10-19 08:16 被阅读0次

    一、加固

    APP应用加固 | 几维安全

    联系我们--安天 智者安天下

    你不知道的Android SDK安全测试 - CSDN博客

    二、逆向编程

    国内最权威的逆向论坛

    逆向专家

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

    逆向工具介绍

    百度了很多资料,发现集成的逆向工具有很多,如APKKiller、APKIDE等,但是发现不是很好用,兼容性太差,没有一个可以重新编译打包成功的。这些集成的工具,其实就是写了些脚本,复用了一下Google官方的APKTool的一系列工具而已。

    [原创]记某app内购破解 – 安卓逆向菜鸟的初体验
    https://bbs.pediy.com/thread-226040.htm

    Android Killer:是一款可以对APK进行反编译的工具,它能够对反编译后的Smali文件进行修改,并将修改后的文件进行打包https://www.jianshu.com/p/61a93a6c0c1b,虽然它对360脱壳没有啥作用,但是它的Android相关的一些功能还是比较实用的,比如目录浏览等 。

    下面我介绍一下用原生的工具如何进行反编译与重新打包的。

    一、ApkTool

    下载

    可以参照这个博客:
    https://blog.csdn.net/dreamer2020/article/details/52761606
    https://www.jianshu.com/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:表示执行反编译指令
    -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:表示执行编译指令,将反编译后的文件重新打包。
    -o:指定输出目录
    E:\ApkNiXiang\MyTool\source\rebuild:指定打包后的apk的生成目录
    E:\ApkNiXiang\MyTool\source\out:反编译后的文件的输出根目录
    执行重新编译打包的过程,不同的APK,不同的开发人员可能会有各种错误导致不成功,建议首先将apktool文件更新到最新,然后再看提示。下面说说我遇到的坑(所有的坑都是以破解“准题库"app为例的)。
    坑1: 提示 “error: Resource entry chapter_home_page_gravity already has bag item android:textColor.”

    image.png
    这个错误提示着十分明显了,哪个文件,哪一行,什么问题。我就找到那个文件:
    image.png
    发现果然属性定义有重复,那么删除一行重新编译。
    这种问题,就属于开发人员代码不规范的问题了。
    坑2: style继承
    image.png
    找到问题文件:
    image.png
    "Base.V7.Theme.AppCompat.Light"继承了“style/Platform.AppCompat.Light”对某个属性重新赋值就会出现这个问题。
    我尝试着把 "Base.V7.Theme.AppCompat.Light"的所有重新赋值的item注释掉,发现新的其它的有继承关系的布局又出现问题了,根本改不完,改完了也不知道会有啥问题。
    坑3: 真正致命的问题
    其实坑1,坑2还只是W级别的警告,真正致命的是下面的错误:
    image.png
    针对这个问题及坑2的问题,网上找到一个缓兵之计:
    https://blog.csdn.net/m0_37750720/article/details/82832915
    就是执行反编译(解包)指令的时候,加一个-r参数,这样就不会解资源文件,回编译的时候也就不会出现问题。但是由于没有解资源文件,所以所有的资源文件都是乱码的。
    关于乱码的问题其实官方文档早就作了说明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歌”也是出现这个错误。

    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方加固工具加固。重复以上步骤。发现可以正常运行,也没有报错。(所以不要一上手就扬言要破译哪个APK,先自己搞个APK试试,毕竟自己有源码,可以对比学习。)

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

    • 修改反编译出来的源码
      其实这个就是我研究逆向编程的初衷:有一个考试软件,一些课程需要收费,我想着是不是能找到它的漏洞,绕过支付的流程,直接观看它的课程。
      那么,常见的修改会有2种情况:
    • 1)修改资源文件
      像前面的使用-r参数才回编译成功,所以想要修改资源文件,必须解决上面所说到的问题。
      但是为了演示,自己测试用,用自己的APK,可以先不加-r改改布局然后回编译,看看是否生效。
      我尝试着改了一下app_name,但是又出现了坑3的问题,不改就不会出现。各种猜想各种试,最后重启电脑问题才解决,所以缓存绝对是apktool的一个巨坑

    apk反编译出dex文件

    apktool.bat -s d crackme02.apk

    二、Jadx

    这个工具主要是用来分析源码

    下载

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

    使用教程

    https://www.jianshu.com/p/e5b021df2170

    三、逆向实践

    https://www.jianshu.com/p/683720bdfa58
    https://bbs.pediy.com/user-592070.htm (脱壳专家)

    相关文章

      网友评论

        本文标题:Android逆向编程

        本文链接:https://www.haomeiwen.com/subject/xkjgmctx.html