本文仅供学习交流,只提供关键思路不会给出完整代码,严禁用于非法用途,谢绝转载,若有侵权请联系我删除!
本文案例 app:5Lqs5LicYXBwMTEuMy4y
一、引言:
Frida是非常优秀的一款 Hook框架,人红是非多,市面上很多app都有相应的检测方案。本人在分析某东app时,android端启动frida-server后,打开app直接卡在首页。
尝试hook: 执行 frida -U -l Hook.js -f com.jingdong.app.mall
报 Process terminated退出
二、常见检测:
1、检测文件名
2、检测端口
3、双进程保护
4、检测D-Bus
5、检测/proc/pid/maps映射文件
6、检测/proc/pid/task/tip/status
7、检测/data/local/tmp目录
三、绕过
针对以上的检测方式,我们可以尝试改文件名,改端口,spawn启动,隐藏frida特征等方式来绕过检测。
1、使用Frida的魔改版本 Hluda来隐藏Frida特征,其介绍:跟随 FRIDA 上游自动修补程序,并为 Android 构建反检测版本的 frida-server。使用方式跟官方Frida没有区别。
github地址:https://github.com/hzzheyang/strongR-frida-android/
2、修改端口
本人使用的是模拟器,官方Frida默认端口是27042,现在我们来修改启动端口,android端使用命令启动hluda:
./hlu-server_x8664 -l 0.0.0.0:8080
本地映射端口:
adb forward tcp:8080 tcp:8080
启动 js hook脚本指定端口:
frida -H 127.0.0.1:8080 -f com.jingdong.app.mall -l Hook.js
使用的hook脚本示例:
function hook1() {
var URL = Java.use('java.net.URL');
console.log("进入hook1")
URL.$init.overload('java.lang.String').implementation = function (a) {
console.log('加密前:' + a)
showStacks()
this.$init(a)
}
}
function showStacks() {
Java.perform(function () { console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Exception").$new()));
});
}
成功打印出堆栈信息,app也是正常启动,说明我们已经成功绕过检测,收工!