美文网首页工具Android反编译
Android逆向——反编译APK改代码

Android逆向——反编译APK改代码

作者: 淮左明都 | 来源:发表于2019-07-21 16:44 被阅读95次

    如果你想反编译一个简单的APK文件,修改里面的代码,那么你不妨尝试看一下,还是不难的。

    为什么说是简单的APK文件呢?因为复杂一点的,比如大企业的app,是不可能让你如你所愿的,他们一般会通过复杂的分包和混淆,让你无法获取代码的可读性,读都读不了,更何况是动手改代码了~

    系统:Windows

    一、apktool

    apktool工具的作用:

    1. 我们可以通过apktool去查看apk的AndroidManifest、XML文件和图片资源文件。
    2. 可以修改apk中的代码,不过并非源码,而是smail文件,这个后面会讲。

    首先要下载apktool工具,我们需要去到apktool官网去下,链接是:https://ibotpeaches.github.io/Apktool/install/


    翻译过来是这样子:

    我这边是在E盘新建一个“apktool反编译工具”的文件夹,并将两个文件(apktool.jar)&(apktool.bat)放在里边,然后配置系统环境变量Path:

    然后调出cmd命令行窗口,就可以自由使用apktool命令了~
    相关命令:
    //apk解析
    apktool d -f E:\gongju\apktool反编译工具\app.apk -o E:\gongju\apktool反编译工具\test
    

    解析后的目录结构是这样的:


    这里我们可以查看:
    assets:资源文件
    lib:jni相关的so包
    original:原始的AndroidManifest.xml文件和签名文
    res:xml和图片资源
    smail:反编译出来的代码,smail文件夹中目录结构和源代码的包一样
    AndroidManifest:就AndroidManifest.xml
    //打包成apk
    apktool b -f E:\gongju\apktool反编译工具\test -o E:\gongju\apktool反编译工具\packed.apk
    

    此外,可以修改smail文件后用apktool工具来重新打包,这样子避免了开发过程中一些小改动导致重新修改、编译以及打包的情况。
    那么问题来了,smail文件是什么?
    Dalvik虚拟机和Jvm一样,也有自己的一套指令集,类似汇编语言,但是比汇编简单许多,只要你会java,了解android的相关知识,就可以轻松的看懂,如果得到这些汇编文件呢,利用apktool或者dex2jar工具包(网上很多),反编译classes.dex文件,就可以得到以smali为后缀的文件,这些smali文件就是Dalvik的寄存器语言。
    以上是摘抄的,打开来看看是这样子的,怎么样?我反正看不怎么懂。


    .smail文件

    怎么改代码呢?是不是还要学会这种汇编语言的语法呢?其实大可不必,只要会看一点就可以。
    首先我们需要定位要改的代码所在的位置,这里用到的工具有:

    • dex2jar:将dex文件转换成jar文件的工具
    • jd-gui:查看jar文件的反编译工具

    二、dex2jar

    下载地址:https://sourceforge.net/projects/dex2jar/postdownload
    使用步骤:

    1. 把app(应用名称).apk的后缀改成zip或者rar,即改成app.zip或app.rar,右键“解压”出来,目录结构如下:


      拿到dex文件
    2. 把classes.dex文件拷贝到的dex2jar文件夹下,执行命令:
      d2j-dex2jar classes.dex
      至此dex文件就转化为jar文件了。
      image.png

    三、jd-gui

    下载地址:http://java-decompiler.github.io/


    使用步骤:
    1. 打开工具,查看jar包信息,可以定位到需要修改的地方,假设我要改一个请求的url地址,马上就可以定位到:


    2. 根据路径可以确认smail文件的位置,如图上所示。然后去到对应的smail文件夹(这里是com\game\sdk\util\Constans.smail),改了它就可以了。
      这只是一个简单的修改,同样你如果有这个项目中依赖的包的源码,你就可以改这个包源码。通过编译成jar文件,再通过转化为dex(通过dx.bat),再转化为smail(baksmali.jar),最终替换调此项目中的相关smail即可。

    四、dx.bat

    1.这个是Android自带的(如何你安装了Android Studio)工具,你可以在以下目录中找到它:


    2.通过cmd命令行进入到当前目录:
    cd C:\Users\Administrator\AppData\Local\Android\Sdk\build-tools\28.0.3
    输入此命令:
    dx.bat --dex --no-strict --no-warning --output=E:\work\out\dex\classes.dex(此处替换你想输入dex文件的位置) E:\Project\jhsdk\build\intermediates\bundles\default\classes.jar(此处替换你的jar文件所在的位置)
    拿到

    五、baksmali.jar

    下载链接:
    https://bitbucket.org/JesusFreke/smali/downloads/
    命令:
    java -jar baksmali.jar(此处为baksmail.jar文件的路径) -o E:\work\out\smali(输出smail文件的位置) E:\work\out\dex\classes.dex(dex文件的位置)

    六、补充

    上述这些都是代码层面的修改,如果我们想改资源就更简单了,直接在res文件中修改,不过要注意不能随意更改,资源大都被引用了,删除了会导致我们在build构建apk时直接报错,亦或者安装apk失败。
    另外,如果我们要改apk的包名和版本呢?包名简单,只需要在AndroidManifest中修改就可以,sdk版本在哪修改呢?在这儿:


    apktool.yml

    相关文章

      网友评论

        本文标题:Android逆向——反编译APK改代码

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