安卓逆向 - Frida反调试绕过

本文仅供学习交流,只提供关键思路不会给出完整代码,严禁用于非法用途,谢绝转载,若有侵权请联系我删除!

本文案例 app:5Lqs5LicYXBwMTEuMy4y

一、引言:

Frida是非常优秀的一款 Hook框架,人红是非多,市面上很多app都有相应的检测方案。本人在分析某东app时,android端启动frida-server后,打开app直接卡在首页。

尝试hook: 执行 frida -U -l Hook.js -f  com.jingdong.app.mall

安卓逆向 - Frida反调试绕过_第1张图片

报 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/

安卓逆向 - Frida反调试绕过_第2张图片

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也是正常启动,说明我们已经成功绕过检测,收工!

安卓逆向 - Frida反调试绕过_第3张图片

你可能感兴趣的:(爬虫,android,爬虫,python,javascript)