Android其他4-逆向工程

本文详细介绍了Android应用的逆向工程过程,包括反编译apk、修改smali代码、重新打包、签名验证及防止逆向的措施。此外,还探讨了dex文件的获取和转换为源代码的多种方法,并推荐了一系列工具,如dex2jar、jd-gui、jadx等。同时,分享了用于查看so文件和反编译so的工具,如objdump和IDA Pro。
摘要由CSDN通过智能技术生成

Android其他4-逆向工程

1.Android反编译重新打包

假设你有个简单的apk名字叫ListViewDemoMy.apk。MainActivity里面就:

setContentView(R.layout.activity_listview);
        Log.d("djh", "test");

我们通过反编译,然后修改这个log。

1.1.对apk反编译

下载apk_tool:到官网google下载下。然后配置环境变量通过以下指令反编译apk

apktool d ListViewDemoMy.apk -o ListViewDemoMy

1.2.在反编译的smali添加代码

ListViewDemoMy/smali/com/example/listviewdemo/MainActivity.smali
用文本编辑打开
里面是这样的

# virtual methods
.method protected onCreate(Landroid/os/Bundle;)V
    .locals 2
    .param p1, "savedInstanceState"    # Landroid/os/Bundle;
    .prologue
    .line 35
    invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
    .line 51
    const/high16 v0, 0x7f030000
    invoke-virtual {p0, v0}, Lcom/example/listviewdemo/MainActivity;->setContentView(I)V
    .line 52
    const-string v0, "djh"
    const-string v1, "test"
    invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
    .line 79
    return-void
.end method

我们添加个log打印

# virtual methods
.method protected onCreate(Landroid/os/Bundle;)V
    .locals 2
    .param p1, "savedInstanceState"    # Landroid/os/Bundle;
    .prologue
    .line 35
    invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
    .line 51
    const/high16 v0, 0x7f030000
    invoke-virtual {p0, v0}, Lcom/example/listviewdemo/MainActivity;->setContentView(I)V
    .line 52
    const-string v0, "djh"
    const-string v1, "test"b
    invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
    const-string v0, "djh"
    const-string v1, "smali"
    invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
    .line 79
    return-void
.end method

1.3.重新打包

apktool b ListViewDemoMy new.apk

打包好的apk在工程目录的dist文件夹中。

1.4.重新签名

使用Auto-sign签名工具 签名

1.5.验证

04-11 17:45:31.715: D/djh(18428): test
04-11 17:45:31.716: D/djh(18428): smali

1.6.如何防止

1、签名验证

在Application的onCreate中 使用PM获取签名 代码如下

2、将签名上传到服务器验证

3、native 签名认证 写个jni 生成.so

4、不适用原来系统的签名 自己写个方法进行认证

2.Android逆向

2.1.dex的获取

  • 反混淆

混淆的关键就是mapping.txt 文件。如果有就方便的很多。但是一般获取不到。
然后用一些反混淆工具去破解。如:
JEB或着Jadx

  • 去壳脱壳

这部分请大家具体去尝试,我尝试的不多,大概的获取dex的方法也是在root机器里提取出来。

  • 获取dex文件

如果没有混淆和加壳获取dex时比较方便的,直接讲apk文件解压出来,获得dex文件。

在这里插入图片描述

如上图一样,获得dex文件后我们对dex转成java或者smali都好。但是往往没有那么容易。我常用的获取dex的方法也是比较牢靠的方法。就是找一台root的小米手机。然后安装Xposed框架。
然后下载FDex.apk.那这个其实是Xposed的一个moudle。它可提取dex文件。具体的步骤后面我们有时间再另外写,如果没时间的话还请大家自己研究
在这里插入图片描述

2.2.获取更好看的源文件

通过上面的方法,我们获得了应用的dex文件,然后我们可以通过dex转化出自己需要的源文件。
方法一、dex转jar,jar转java

这里我们采用dex2jar工具。
下载dex2jar工具包,解压用如下命令
d2j-dex2jar.sh -f …/Net/classes2.dex

在这里插入图片描述
转成jar后,还可以用其他工具转成jar,我们这里用一个可视化的工具jd-gui。这个工具可以直接查看jar的源文件。这个工具的使用我们后面会稍微介绍一下。
在这里插入图片描述
方法二、apk转smali smali 转java
apk转smali我们这边使用apktool,
apktool d ListViewDemoMy.apk -o ListViewDemoMy
这个命令也可以换成如下的命令,
java -jar apktool.jar d -f XXXX.apk

为什么这么更换,因为有些java环境的问题,使得工具包的命令有时候会有些异常。
apk转smali
但是有些apk做了加密,不一定成功。看运气了。
smali转java
使用 Smali2Java把它转换成java。

这个是种基本方法,接下来我们介绍一下支持这两种方法的工具。
工具一、jadx
比如第一种方法,在dex->java的过程中有时候可以使用jadx这个工具直接一步转换。

jadx class.dex -d outputdir

工具二、dex2jar
这个我们前面已经介绍了
工具三、procyon
从jar转到java我们之前用的是jd-gui,当然还有其他工具比如Procyon,CFR等等。看个人习惯了。

java -jar /procyon-decompiler-0.5.36.jar -jar class.jar -o outputdir

工具四、jd-gui
下载安装包后,我们习惯使用java的命令行启动,因为直接二进制命令启动会有依赖问题。

java -jar jd-gui-osx-1.6.6/JD-GUI.app/Contents/Resources/Java/jd-gui-1.6.6-min.jar

工具五、安卓逆向助手
这个我目前找到了两个版本,一个是win版本的,AndroidCrackTool,另外一个是Android逆向助手.exe这两个工具的界面和原理都是一样的,就是集合了我们上面的几种工具,可以一键的导入apk,然后它会调用dex2jar,jar2java的工具包给你一站式解决。
在这里插入图片描述

工具六、so查看
arm-linux-objdump -d libxxx.so > libxxx.S

工具七、IDA工具
这个工具反编译so是比较好的,因为个人电脑没有安装所以没有办法掩饰。
https://blog.csdn.net/xiangshangbashaonian/article/details/82748850
可以参照这个文章。

3.相关工具放到网盘共享

链接: https://pan.baidu.com/s/1EDATByimzyqCKEIucGa39g 密码: 1cqn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沈万三djh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值