Android反编译AIE学习Studio

Android反编译及调试利器(jadx+apktool+and

2018-12-21  本文已影响631人  青松0808

前言

为什么要反编译别人的代码

jadx的高级技巧

介绍

jadx是史上最好用的反编译软件,有以下优点:

这些优点都让 jadx 成为我反编译的第一选择,它可以处理大部分反编译的需求,基本上是我反编译工具的首选。

安装 官网

jadx 本身就是一个开源项目,源代码已经在 Github 上开源了。有兴趣可以直接 clone 源代码,然后本地自己编译。但是多数情况下,我们是需要一个编译好的版本。编译好的版本,在github是也可以直接下载到,下载最新版本,现在的最新版是 jadx-0.8.0 。下载好解压之后,你会获得这样的目录结构:

jadx-img.png
对于 Mac 或者 Linux,使用 jadx-gui ,Windows 下就需要使用 jadx-gui.bat 了,双击可以直接运行,如果有安全警告,忽略它就可以了。(后文主要以 Windows 环境为讲解, 其他平台下的大部分操作都是类似的)

使用

直接双击前面解压出来的jadx-gui.bat就可以直接运行。运行之后会打开一个界面,有一个文件选择弹窗,你可以选择一个 apk、dex、jar、zip、class、aar 文件,可以看到 jadx 支持的格式还是挺多的,基本上编译成 Java 虚拟机能识别的字节码,它都可以进行反编译。除了选择一个文件,还可以直接将 apk 文件,拖拽进去,这一点非常好用。下面给大家感受一下jadx的强大:


jadx_java.png
jadx_androidmanifest.png jadx_drawable.png jadx_layout.png jadx_string.png

可能出现的问题

apktool查看资源文件

利用apktool查看apk的xml文件、AndroidManifest.xml和图片等,也可以查看src目录下的smali文件。

安装 官网

使用

  1. win+R,输入cmd调出命令行窗口,切换到apktool文件夹目录下。接下来把apk拷贝到E:\Android\apktools下面,然后在cmd窗口输入命令,回车,如下图:
    apktool d yourapp.apk

    apktools_d.png
    这样就表示成功了,我们就可以在E:\Android\apktools发现一个新的文件夹yourapp(这个文件夹的文字跟你的apk名字一样),里面我们就可以看到xml文件、AndroidManifest.xml和图片等资源文件了。
    经过上面的步骤,我们可以在文件夹yourapp中发现一个文件夹smali,这里面其实就java代码,只不过不是jar形式的,关于如何查看java源码,可以通过dex2jar工具,这里不是我们关注的重点,不在这里赘述。
  2. 反编译后想验证自己的某些想法,或者代码有些地方没有看明白想添加log,可以通过修改图片等资源文件或者smali源码后再重新打包的方式。命令如下:
    apktool b test
    重新打包后新的未签名apk生成的路径在yourapp/dist/yourapp.apk。
    修改图片,或者strings.xml等资源文件,可以直接执行重新打包命令即可。如果需要修改smali源码,要对smali语法有一定的了解,再进行修改。

  3. 对打包后的apk签名,未签名的apk无法安装到Android手机里。使用你自己的签名文件进行签名,签名命令参考如下:
    apksigner.bat sign --ks yourapp\keystore.jks --ks-key-alias keystore yourapp\dist\yourapp.apk
    也可以使用其他三方的apk签名工具进行签名。

  4. 优化apk包,这一步是可选的。用来将apk包进行整理,以适应设备的读取等
    zipalign.exe -f -v 4 yourapp.apk yourapp_zip.apk
    -f 强制覆盖已有的文件
    -v 输出详细内容
    4 指定档案整理的字节数,一般为4,即32位
    yourapp.apk 是未整理的apk文件名 yourapp_zip.apk 是整理后的apk文件名
    检查apk有没有zipalign对齐:
    zipalign -c -v 4 被检查的apk文件
    对齐安装时会可能会遇到错误
    先签名再对齐,否则先对齐再签名会破坏对齐

  5. 正常安装签名后的apk即可体验。

android studio无源码动态调试apk

主要过程就是AndroidStudio动态调试Smali,是非常有效的逆向分析方法。把apk反编译成Smali然后倒入AndroidStudio中,然后通过jdwp调试相关进程。

基本技能

工具

动态调试Smali文件

然后右键工程主目录:Mark Directory as -> Sources Root


source_root.png

然后设置sdk,最好和测试手机的系统版本一致:项目目录-->右键-->Open Module Settings:


sdk_settings.png

打开后我们点击上面的+符合,然后选择Remote,添加一个远程调试如下图:


remote.png

然后配置远程调试的端口和一些其他信息,如下图:


remote_confi.png

注意,上面的Name可以随便写,因为每一个Remote配置都对应手机app上的一个进程,每一个手机app可能有多个进程,所有名字上我们做下区分。另一个需要配置的地方是Port,这个port也可以随便写,只要当前电脑上没有是用这个端口就好,如果要同时调试手机上的某个app的多个进程,这个每次配置Remote的时候,port不能一样。我们这里是用默认的5005。

代码注入

先通过jadx阅读目标app的代码,方便阅读,降低难度,然后再通过Android Studio来编辑smali代码。简单的可以直接修改某个值,复杂的可以先写好代码,然后将该段反编译出smali代码,再复制黏贴到需要注入的目标smali代码。这里需要注意smali的一些语法。
这里举个简单的例子,想获知alarmy监听了哪些广播,添加Log打印。

上一篇下一篇

猜你喜欢

热点阅读