一、 APK 查壳
Android APK 查壳工具:
通过网盘分享的文件:Android APK 查壳工具
链接: https://pan.baidu.com/s/1bzdRMqxJdUb5shtHbervQA?pwd=src6 提取码: src6
--来自百度网盘超级会员v5的分享
需要有java环境,使用Java运行jar包,启动工具
使用方法,只需要把apk文件拖入便会自动识壳。

null
二、APK静态反编译
在渗透测试过程中,我们总会遇到需要反编译进行分析的情况,反编译顾名思义就是将apk反编译成静态资源以及源码
而静态反编译,则apk文件其实就是一个压缩包文件,我们可以直接将apk后缀名修改为zip解压得到其静态资源

null
之后我们就会发现以下文件内容:
-
assets文件夹:
-
英文单词为资产、资源的意思,里面放的是一些源文件,并且里面存放的是不进行编译加工的原生文件,即该文件夹里的文件不会像xm1、java、文件被预编译,可以存放一些图片、html、、js、css等文件。
-
res:
-
规定的指定文件,图标,图片资源等,且res下文件都会生成对应的资源id,但是assets下是不会的。
-
lib:
-
so文件,底层c/c++实现的依赖库。
-
META-INF:
-
包括应用程序所用到的签名文件,sdk版本信息等。
-
AndroidManifest.xml:
-
系统清单文件,包含四大组件,应用信息,包名,版本等。
-
class.dex:
-
应用的可执行文件,方法数超过65535后会进行分包处理。没有的话就只有一个dex文件。
-
resource.arsc:
-
资源索引表,用来描述具有id属性的资源配置信息。
在此之前我们将apk修改为zip,我们得到apk的静态资源之后,文件夹里存在一个classes.dex文件。

null
那么我们就可以使用 dex2jar工具 来进行反编译。
# classes.dex 文件转换成 jar 文件
$ cd dex-tools-2.1
$ sh d2j-dex2jar.sh classes.dex
# 默认会生成 classes-dex2jar.jar 文件
执行完命令成功后,就会生成一个叫classes-dex2jar.jar的文件,这个就是我们后面需要查看的文件了。

null
jadx-gui工具:
使用 jadx-gui,它支持很多方便快捷的交互式操作(例如可以直接把一个 apk 文件拖到 jadx-gui 后,它会直接打开这个文件,之后高亮显示反编译后的代码),以及代码搜索、定位等。
像上面使用dex2jar工具进行反编译后,就可以把jar反编译后的文件拖入里面即可。

null
三、安卓静态脱壳BlackDex.apk
BlackDex是一个运行在Android手机上的脱壳工具,支持5.0~12,无需依赖任何环境任何手机都可以使用,包括模拟器。只需几秒,即可对已安装包括未安装的APK进行脱壳。

null

null
我们需要将BlackDex.apk文件导入到模拟器当中,打开文件,之后选择我们需要脱壳的apk文件即可。

null
脱壳成功之后,它会告诉你dex文件在哪个位置,我们只需要使用adb pull把文件拉出来就好了,之后在通过上面的方法将dex文件进行转换为jar处理。
四、动态脱壳frida
1、frida客户端/服务端安装
这里推荐师傅们跟我一样安装这个版本,因为frida版本过高,就会导致后面一些之前大佬写的hook脚本使用不了,我这里也是踩过坑的,所以这里可以安装我给的命令版本来安装。
# 安装frida
pip install --user -i https://pypi.tuna.tsinghua.edu.cn/simple frida==16.1.0
# 安装frida-tools
pip install --user -i https://pypi.tuna.tsinghua.edu.cn/simple frida-tools==12.1.3
# 安装hexdump
pip install --user -i https://pypi.tuna.tsinghua.edu.cn/simple hexdump
# 查看pip安装哪些工具
pip list

null
首先可以使用下面的命令看自己的手机是什么框架的。
getprop ro.product.cpu.abi

null
根据frida版本和手机CPU版本下载对应的frida-server。
GitHub下载地址:https://github.com/frida/frida/releases/。

null
下载完后,直接解压,然后修改名称为frida-server。

null
2、frida启动服务端
这里我拿模拟器给师傅们演示,然后师傅们也可以跟着一起实操,MUMU模拟器端口显示:

null
运用 mumu模拟器,自带的 abd 工具,进入 shell模式
此时就是连接成功了,在输入shell即可加入shell操作。
~ adb devices
List of devices attached
~ adb tcpip 5555
restarting in TCP mode port: 5555
~ adb connect 127.0.0.1:5555
connected to 127.0.0.1:5555
~ adb devices
List of devices attached
127.0.0.1:5555 device
~ adb -s 127.0.0.1:5555 shell
Welcome! If you need help getting started, check out our developer FAQ page at:
Thanks for using our emulator, happy coding!
SM-S7310:/ #
如果adb出现卡顿,连接不上:
# 停止 adb 服务
adb kill-server
# 启动 adb 服务(会自动重新监听端口)
adb start-server
把frida服务端文件上传到模拟器 /data/local/tmp目录下
~ adb push /xxx/xxxx/frida-server /data/local/tmp/
进入shell 进到下载的那个frida目录,并给予权限,在执行frida。
SM-S7310:/ # cd /data/local/tmp
SM-S7310:/data/local/tmp # ls
cert fridasever
SM-S7310:/data/local/tmp # chmod 777 frida-server
SM-S7310:/data/local/tmp # ./frida-server
3、frida-dexdump脱壳
执行frida,然后回到shell页面使用ps命令 找到我们要反编译的apk文件其对应的进程。
frida-ps -Ua //查看当前运行 app 包名

null
注意!!:shell里的frida server 要启动并保持连接 才能使用 frida-dexdump进行动态脱壳。
frida-dexdump -U -f com.xxxxxx.xxxx.android

null
还可以使用下面的命令脱壳,pid为5718
~ frida-ps -Ua | grep com.xxxx.xxxx.android
5718 app名称 com.xxxx.xxxx.android
~ frida-dexdump -U -p 5718

null

null
成功后目录下会有 我们拖的进程文件的dex文件,然后在通过 dex2jar 进行静态编译成jar文件,在用jadx-gui工具查看源码即可。
