赞
踩
作者:37手游安卓团队
这篇文章比较干,比较偏实战,看之前建议先喝足水,慎入。
在学脱壳之前,我们先来复习一下,什么时候是加固?
学完了加固,那么什么是脱壳呢?
以下使用 360 加壳过的 apk,拖到 jadx 打开是这样子的,这个就是壳的源码。
简单理解 frida 就是一个跨平台的 hook 框架,那什么是 hook 框架呢?顾名思义,hook 是钩子的意思,在代码中,代表用钩子勾住代码,那么勾住代码有什么用呢?在实际开发中,我们常常在需要代码前后插入一段代码,比较常见的情况是计算方法的耗时,那么这个时候在方法前后各插入代码,常规的写法是直接在某个类的某个方法中写代码,这种做法的好处是代码看起来比较直观,但是一旦需要写的地方比较多的时候,前期开发和后续维护的工作量会呈几何增长,而 hook 框架可以解决这一问题,它可以帮你动态植入这些代码,不需要在每个方法写一遍重复代码,使用了面向切面的思想,类似 AOP,但它又不是 AOP,AOP 和它的区别在于,AOP 是在编译的过程中就会帮你植入代码,而 hook 框架是在运行的过程中植入代码。
这里为了照顾小白朋友,所以说得有点啰嗦了,但是我的文章风格就是这样,高大上不是我的追求,我的追求是每一个看过文章的朋友都能看懂,降低大家的学习成本,如果不能的话,还不如直接看官方文档。
我们这里用的是 macOs 系统进行演示,windows 步骤也差不多
第一步:输入以下命令安装 frida
pip install frida
Installing collected packages: frida
Successfully installed frida-16.0.2
pip install frida-tools
Successfully installed colorama-0.4.6 frida-tools-12.0.1 prompt-toolkit-3.0.32 pygments-2.13.0 wcwidth-0.2.5
WARNING: The script pygmentize is installed in '/Users/xxx/Library/Python/3.8/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
WARNING: The scripts frida, frida-apk, frida-compile, frida-create, frida-discover, frida-join, frida-kill, frida-ls, frida-ls-devices, frida-ps, frida-pull, frida-push, frida-rm and frida-trace are installed in '/Users/xxx/Library/Python/3.8/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
export PATH="/Users/xxx/Library/Python/3.8/bin":"$PATH"
frida --v
frida --version
16.0.2
pip install frida==12.8.0
pip install frida-tools==5.3.0
前提条件:需要准备一台已经 root 的手机
第一步:输入 adb 命令来获取手机 CPU 处理器架构
adb shell getprop ro.product.cpu.abi
arm64-v8a
第二步:到 Github 发布的 releases assets中下载对应 CPU 处理架构的 frida-server,然后进行解压,这里下载的是 frida-server-16.0.2-android-arm64.xz,注意 frida-server 需要和之前电脑安装版本一致才可以
第三步:将下载好的 so 库通过 adb 命令复制到手机 /data/local/tmp
目录上面
adb push /Users/xxx/Downloads/frida-server-16.0.2-android-arm64 /data/local/tmp
adb push /Users/xxx/Downloads/frida-server-16.0.2-android-arm64 /data/local/tmp/frida-server-16.0.2`
/data/local/tmp
目录下
su
cd data/local/tmp
frida-server
加执行权限(默认只有读写权限)// 表示可读可写可执行
chmod 777 frida-server-16.0.2
/data/local/tmp
目录下adb shell
su
cd data/local/tmp
./frida-server-16.0.2
frida-ps -U
Failed to enumerate processes: unable to handle 64-bit processes due to build configuration
Unable to start: Could not listen on address 127.0.0.1, port 27042: Error binding to address 127.0.0.1:27042: Address already in use
PID Name
----- -----------------------------
3374 Google
12041 Magisk
10795 QQ
12776 企业微信
3720 当前界面
8697 微信
9401 相册
............
adb forward tcp:27042 tcp:27042
cd /Users/xxx/Desktop/FridaProject/App\ 脱壳/Frida-Apk-Unpack
// xxx.xxx.xxx 是应用的包名
// dexDump.js 是工程目录下的文件
frida -U -f xxx.xxx.xxx -l dexDump.js --no-pause
usage: frida [options] target
frida: error: unrecognized arguments: --no-pause
`frida -U -f xxx.xxx.xxx -l dexDump.js
frida -U -f xxx.xxx.xxx -l dexDump.js
Magisk 管理器 -> 设置 -> Magisk 选项 -> MagiskHide(关闭即可)
adb shell "su -c magiskhide disable"
adb shell "su -c magiskhide enable"
[PH 1::xxx.xxx.xx ]-> [16:54:09:927] magic : dex 035 [16:54:09:927] dex_size :1107632 [16:54:09:933] dump dex success, saved path: /data/data/xxx.xxx.xxx/1107632.dex [16:54:10:167] magic : dex 035 [16:54:10:167] dex_size :3568668 [16:54:10:177] dump dex success, saved path: /data/data/xxx.xxx.xxx/3568668.dex [16:54:10:181] magic : dex 035 [16:54:10:181] dex_size :284 [16:54:10:181] dump dex success, saved path: /data/data/xxx.xxx.xxx/284.dex [16:54:10:278] magic : dex 035 [16:54:10:278] dex_size :284 [16:54:10:278] dump dex success, saved path: /data/data/xxx.xxx.xxx/284.dex
/data/data/xxx.xxx.xxx/1107632.dex
、/data/data/xxx.xxx.xxx/3568668.dex
、/data/data/xxx.xxx.xxx/284.dex
这几个就是脱壳之后得到真实的 dex 文件存放路径了,我们再使用 jadx 随机打开一个 dex 看看像Smali指令、加壳和脱壳、Xposed框架、Frida、抓包、加密与解密算法等等,这些都是Android逆向安全开发工程师必须掌握的知识点。
至于学习笔记也是有的,我根据上述中所提到的知识点进行整理了,这样大家学习起来也比较方便,大家可以综合起来一起学习。参考方式:https://qr18.cn/CQ5TcL
Android 逆向模拟器环境搭建(详解)
Smali指令详解
加壳和脱壳入门
NDK与逆向
Xposed框架
Frida-逆向开发的屠龙刀
安卓逆向之常用加密算法
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。