魔改frida特征和编译(绕过frida检测)

admin 2024年10月7日18:52:58评论161 views字数 7498阅读24分59秒阅读模式

0x0.前言(为什么会有这篇文章)

本篇文章主旨只是报以学术研究为目的,并不是要干翻所有的frida检测,本文的方法也只是一个参考,并不能过所有的frida检测
由于如标题说的超详细过程,所以整篇文章篇幅过长,有些环节如果您已经会的操作直接跳过即可。
目前2023年8月,相信各位移动安全工作者已经深有体会,现在无论大小app都有各种检测,加固,反抓包,反frida,反xposed成了家常便饭。
那么frida又是安全工作者必不可少的一个安全逆向调试工具,但是它用不了啊,直接阻碍我们的分析工作,所以我们需要作反frida对抗。所以这篇文章的意义就有了。
但是目前为止,好像有不少大佬都写过相关的文章了,其实直接看别人发的不就好了吗,这个确实是的,不过还有个,技术总是在革新,虽然我也不保证我能比之前的大佬写的有多新的技术,只能说顺便记录编译的全过程,然后这篇文章后续应该持续更新,新的技术都会加入进来(只呈现技术,编译好的成品暂不公开)

0x1.必备环境

*nux环境,你可以是macos,也可以是ubuntu,centos
vmware 虚拟机软件安卓手机,这个就随意了。

0x2.linux环境准备

💡 这里我选用ubuntu。毕竟大佬们都选用的ubuntu,别人已经踩过的坑,咱们直接借鉴就行了,别骚包的想走非主流路线了。

1.下载镜像

这里我选用的20.04版,还是那句,别骚包的去整最新版,到时候环境依赖不支持,有些依赖库并没有及时兼容最新版,到时候你整到中途遇到各种报错就哭吧。

也不要去整很老的版本,比如如果你用18.04,可能会遇到如下安装依赖的报错:

魔改frida特征和编译(绕过frida检测)

所以,别瞎创新,最好按照步骤一点点来,推荐就20.04

下载链接:https://releases.ubuntu.com/

当然,相信有的老baby的网肯定去官网下载肯定是不行的,所以也可以选用国内的镜像源

中科大源http://mirrors.ustc.edu.cn/ubuntu-releases/20.04/南京大学http://mirrors.nju.edu.cn/ubuntu-releases/20.04/上海交通大学http://ftp.sjtu.edu.cn/ubuntu-releases/20.04/清华大学https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/20.04/阿里云开源镜像站http://mirrors.aliyun.com/ubuntu-releases/20.04/浙江大学http://mirrors.zju.edu.cn/ubuntu-releases/20.04/各个版本下载网址:http://mirrors.melbourne.co.uk/ubuntu-releases/

我这里就选用这个了,看清楚大小,记得下desktop版,有图形界面,操作好点,不然全是命令行,配置个网络都整半天,浪费时间

魔改frida特征和编译(绕过frida检测)

2.vmware安装系统并运行

vmware的基本操作这里就不说了,大部分操作网上的文章一大堆,相信老baby们都可以找到。

这里就直接快进到系统安装好,进入界面的状态

魔改frida特征和编译(绕过frida检测)

魔改frida特征和编译(绕过frida检测)

提一下,这些最好让他装完,别点skip,万一后面环境依赖缺失搞起来麻烦

魔改frida特征和编译(绕过frida检测)

魔改frida特征和编译(绕过frida检测)

这时候先别直接操作,把内存调大一点,不然后面卡死,先关机,调整之后,再启动

魔改frida特征和编译(绕过frida检测)

魔改frida特征和编译(绕过frida检测)

3.网络状态检测

魔改frida特征和编译(绕过frida检测)

ok,正常的

4.更新或安装必要的依赖

4.1.修改apt源

魔改frida特征和编译(绕过frida检测)

魔改frida特征和编译(绕过frida检测)

魔改frida特征和编译(绕过frida检测)

然后这里面很多,你可以自行选择一个国内的包源

找到china的:

魔改frida特征和编译(绕过frida检测)

魔改frida特征和编译(绕过frida检测)

或者你也可以点下这个,他自动测试哪个源更快:

魔改frida特征和编译(绕过frida检测)

ok,他自动给我选了腾讯云的

魔改frida特征和编译(绕过frida检测)

点了之后如下,开始更新缓存

魔改frida特征和编译(绕过frida检测)

当然,你也可以选清华的源,相对稳一点,选了点close

魔改frida特征和编译(绕过frida检测)

4.2.更新现有环境

魔改frida特征和编译(绕过frida检测)

这个步骤就稍等片刻了,这时候你可以去厕所拉个大

4.3.安装第三方库

sudo apt-get install build-essential curlgit lib32stdc++-9-dev libc6-dev-i386 nodejs npm python3-dev python3-pipsudo apt-get install flex bison

如果出现如下问题,大概率你用的是ubuntu18.04,赶紧换20.04吧,听人劝,吃饱饭

魔改frida特征和编译(绕过frida检测)

如果还是这个问题,没事,不急,可能源没这个库,切换源试试

魔改frida特征和编译(绕过frida检测)

魔改frida特征和编译(绕过frida检测)

到此处,建议虚拟机建一个还原点,再接着后面操作

4.4.安装proxychains

后续的操作会涉及到外网下载,所以最好还是配置上这个,可以代理到真机的科学上,然后加速下载外网文件

sudo apt-get install proxychains

魔改frida特征和编译(绕过frida检测)

4.5.配置proxychains

先看看安装到哪里了:

whereis proxychainsfind / -name proxychains

ok,就在这,就是需要配置这个conf了

魔改frida特征和编译(绕过frida检测)

先打开真机的科学工具

魔改frida特征和编译(绕过frida检测)

记得把这个打开

魔改frida特征和编译(绕过frida检测)

确认真机可以打开外网站点

魔改frida特征和编译(绕过frida检测)

记下真机的局域网IP

魔改frida特征和编译(绕过frida检测)

ping下看能不能通:

魔改frida特征和编译(绕过frida检测)

回到虚拟机里,sudo  vi /etc/proxychains.conf

默认配置如下:

魔改frida特征和编译(绕过frida检测)

修改为:这个IP 和端口就是刚才的真机的局域网ip和科学的局域网端口

魔改frida特征和编译(绕过frida检测)

4.6.测试科学

访问httpbin就知道,但是用proxychains之后发现无法解析

魔改frida特征和编译(绕过frida检测)

这个应该是dns的问题,配置下就好了

4.7.配置dns

魔改frida特征和编译(绕过frida检测)

ok,现在好了。

魔改frida特征和编译(绕过frida检测)

4.8. pip 安装lief库

这个就没啥可说的,安装不了就换源重试

魔改frida特征和编译(绕过frida检测)

5.配置编译环境

       根据frida官方的简单的概述:

https://frida.re/docs/building/

魔改frida特征和编译(绕过frida检测)

依赖我们已经装过了,pull 下frida源码

5.1.拉取指定版本的frida源

git操作这里就不展开说了。

-b 就是指定分支的拉取,默认是拉取master主分支的代码

这里我选用15.1.28,这个版本习惯了,我电脑的环境都是这个版本

git clone -b 15.1.28 --recurse-submodules https://github.com/frida/frida

这里会很慢:

魔改frida特征和编译(绕过frida检测)

所以可以用proxychains,速度不行就切换节点

魔改frida特征和编译(绕过frida检测)

我换了一个很快的节点:

魔改frida特征和编译(绕过frida检测)

分分钟拉取完

5.2.编译toolchain

proxychains  make -f Makefile.toolchain.mk

魔改frida特征和编译(绕过frida检测)

等待片刻,完了:

魔改frida特征和编译(绕过frida检测)

接着根据官方文档:

魔改frida特征和编译(绕过frida检测)

5.3.编译这个x86_64的

make -f Makefile.sdk.mk FRIDA_HOST=linux-x86_64

魔改frida特征和编译(绕过frida检测)

然后就卡这里了

魔改frida特征和编译(绕过frida检测)

再重试就报错了:

魔改frida特征和编译(绕过frida检测)

怎么办?

5.4.手动下载需要的文件

先看看对应的版本号:

魔改frida特征和编译(绕过frida检测)

https://build.frida.re/deps/20220701/toolchain-linux-x86_64.tar.bz2  # toolchains 工具https://build.frida.re/deps/20220701/sdk-linux-x86_64.tar.bz2  # sdk 工具# 这些是需要编译的对应架构的文件,也都一并下载了https://build.frida.re/deps/20220701/sdk-android-x86.tar.bz2https://build.frida.re/deps/20220701/sdk-android-x86_64.tar.bz2https://build.frida.re/deps/20220701/sdk-android-arm.tar.bz2https://build.frida.re/deps/20220701/sdk-android-arm64.tar.bz2

魔改frida特征和编译(绕过frida检测)

5.5.配置真机与虚拟机sftp互通

上面的文件要怎么传入虚拟机呢?如果你安装了vm-tools的,可以直接拖进去,但是我发现拖进去的操作,经常有很多错误,而且很多时候拖进去的文件还不完整,就 很奇葩

所以这里准备配置sftp互通,直接上传过去。

虚拟机的ip:

魔改frida特征和编译(绕过frida检测)

ping可以ping通的

魔改frida特征和编译(绕过frida检测)

这里我选用termiux工具,直接连接的时候发现,报错了:

魔改frida特征和编译(绕过frida检测)

很尴尬了,是哪里的问题呢,防火墙是关闭的,而且也开了22端口的

魔改frida特征和编译(绕过frida检测)

排查是发现,就没有ssh-server

魔改frida特征和编译(绕过frida检测)

安装ssh-server:

sudo apt-get install openssh-server -y

魔改frida特征和编译(绕过frida检测)

再来:

魔改frida特征和编译(绕过frida检测)

现在真机再连接,现在不保存,这个是第一次连接的时候会有的:

魔改frida特征和编译(绕过frida检测)

魔改frida特征和编译(绕过frida检测)

退出,用sftp连接:

魔改frida特征和编译(绕过frida检测)

魔改frida特征和编译(绕过frida检测)

现在直接拖进去,这个拖的操作不会出现bug,文件也很完整的

魔改frida特征和编译(绕过frida检测)

5.6.执行releng/setup-env.sh

魔改frida特征和编译(绕过frida检测)

5.7.配置ndk

先看releng/setup-env.sh里的ndk版本,由于我用得是frida15.1.28的,网上的很多是用的ndk22,别盲目照着网上的文章跟着操作,到时候对不上,你又费时间排查问题

cat releng/setup-env.sh |grep ndk

魔改frida特征和编译(绕过frida检测)

去这里下载:

https://developer.android.com/ndk/downloads

https://github.com/android/ndk/wiki/Unsupported-Downloads

魔改frida特征和编译(绕过frida检测)

下载里面的24 linux版

魔改frida特征和编译(绕过frida检测)

解压,这个位置随意,只要能直接调用即可,等会儿要配置到环境变量上

魔改frida特征和编译(绕过frida检测)

记下ndk的路径

魔改frida特征和编译(绕过frida检测)

vim ~/.bashrc

添加如下代码,保存退出
export ANDROID_NDK_ROOT=/home/geek/Desktop/android-ndk-r24export PATH=$ANDROID_NDK_ROOT:$PATH

魔改frida特征和编译(绕过frida检测)

让环境生效:

source~/.bashrc

ndk-build -v,如果出现如下说明配置好了

魔改frida特征和编译(绕过frida检测)

0x3.编译

1.官方编译

先来看看官方编译,看这一套,咱们配置对不对,后续再来搞去特征的编译

这里也不用修改releng/frida-deps.vcxproj和releng/frida.mk文件里的master改为main,你按照我上面走下来的,这两个文件里的已经是main了,不用改。

接下来,官方版本的frida,开始如下编译了:

make core-android-arm64

魔改frida特征和编译(绕过frida检测)

报错了,仔细看,意思是我们没有设置哪个ndk变量,但是刚设置了呀,

魔改frida特征和编译(绕过frida检测)

再看,这个终端窗口里,ndk还不生效,尴尬,关了重开一个终端,ok,在编译了

魔改frida特征和编译(绕过frida检测)

魔改frida特征和编译(绕过frida检测)

魔改frida特征和编译(绕过frida检测)

擦,报错了,仔细看报错信息,说node.js没有安装,那装下node先

apt install nodejs npm -y

这里,我建议你,虚拟机建一个还原点,等会儿可能会用到

之后继续make:

魔改frida特征和编译(绕过frida检测)

又是漫长的等待

魔改frida特征和编译(绕过frida检测)

建议,可以打一把王者再来看结果

ok,编译好了,现在没有报错

魔改frida特征和编译(绕过frida检测)

看看它输出,找找输出路径

魔改frida特征和编译(绕过frida检测)

进去看看:

魔改frida特征和编译(绕过frida检测)

ok,把这个整到安卓手机上,也可以整到真机,然后真机adb push过去,也可以直接手机连接虚拟机操作

魔改frida特征和编译(绕过frida检测)

魔改frida特征和编译(绕过frida检测)

魔改frida特征和编译(绕过frida检测)

现在真机这边用frida启动一下安卓的设置看看能不能调起来,

魔改frida特征和编译(绕过frida检测)

ok,非常nice。

是,到这里,并不是本篇文章的重点,还是文章开头那句话,现在各路app,都会对frida有检测,启动frida就报错退出的,很多,检测手段也不少,所以,我们需要,进行去特征

2.魔改编译hluda参照一波

    看你选择,看虚拟机是否要回到我刚才提到的还原点,也可以不还原回去,修改了特征了之后重新编译,它后续会覆盖之前的。

首先,魔改frida比较出名的,肯定还是葫芦娃的hluda,那么先跟着操作下,别人都改了啥

https://github.com/AAAA-Project/Patchs/tree/master/strongR-frida/frida-core

https://github.com/hzzheyang/strongR-frida-android这里也有成品,另外一个大佬维护的

魔改frida特征和编译(绕过frida检测)

2.1. 一键自动修改操作

cd frida/frida-coregit clone https://github.com/hluwa/Patchs.gitgit config --global user.email 'test@gmail.com'git config --global user.name 'geekbyte'git am Patchs/strongR-frida/frida-core/*.patch

以下是借助git工具解决冲突自动更改文件的操作

魔改frida特征和编译(绕过frida检测)

2.2.手动修改

    当然,你如果不放心,也可以手动修改

2.2.1.去掉frida_rpc特征

回到虚拟机的frida目录里,找frida_rpc位置,然后对照着修改:

魔改frida特征和编译(绕过frida检测)

如果你不知道是哪个文件,你可以按照如下操作,grep过滤出来

vim ./frida-core/lib/base/rpc.vala

魔改frida特征和编译(绕过frida检测)

照着改就行了:

魔改frida特征和编译(绕过frida检测)

保存退出

2.2.2.去除frida-server特征

vim ./frida-core/server/server.vala

魔改frida特征和编译(绕过frida检测)

改的时候,发现,15.1.28多了个这个,要不要改呢?万一改了出问题咋办,没事,这里是字符串,那就是字符串拼接吧:

魔改frida特征和编译(绕过frida检测)

魔改frida特征和编译(绕过frida检测)

魔改frida特征和编译(绕过frida检测)

这里也有,都改了

魔改frida特征和编译(绕过frida检测)

2.2.3 frida-pipe_linjector

魔改frida特征和编译(绕过frida检测)

2.2.4.io_frida_agent_so

魔改frida特征和编译(绕过frida检测)

2.2.5.symbol_frida_agent_main

魔改frida特征和编译(绕过frida检测)

新建anti-anti-frida.py文件

import liefimport sysimport randomimport osif __name__ == "__main__":input_file = sys.argv[1]print(f"[*] Patch frida-agent: {input_file}")random_name = "".join(random.sample("ABCDEFGHIJKLMNO", 5))print(f"[*] Patch `frida` to `{random_name}``")binary = lief.parse(input_file)if not binary:exit()for symbol in binary.symbols:if symbol.name == "frida_agent_main":symbol.name = "main"if "frida" in symbol.name:symbol.name = symbol.name.replace("frida", random_name)if "FRIDA" in symbol.name:symbol.name = symbol.name.replace("FRIDA", random_name)binary.write(input_file)

后续的跟着改,然后test-agent.vala里的frida相关字符串有很多,也用base64解码一下

魔改frida特征和编译(绕过frida检测)

魔改frida特征和编译(绕过frida检测)

这里就不一一展示了

anti-anti-frida.py 文件根据上面的,添加信息

魔改frida特征和编译(绕过frida检测)

魔改frida特征和编译(绕过frida检测)

2.2.6.frida-protocol_unexpected_command

魔改frida特征和编译(绕过frida检测)

ok,以上都改完了,虚拟机建一个还原点

2.3.重新编译

      上面修改完了之后,把tmp-android-arm64的文件里的全删了

看你要不要先make clean一下,clean的时候 ,记得事先备份frida-core文件夹,不然会被删除,clean完再移动过来,再来编译

make core-android-arm64

我擦,这里报错了,进去看看

魔改frida特征和编译(绕过frida检测)

进去看看这个报错位置,复制的时候,把【+】 复制进去了。

魔改frida特征和编译(绕过frida检测)

删掉,重新编译

魔改frida特征和编译(绕过frida检测)

又有新的报错,看看

魔改frida特征和编译(绕过frida检测)

看起来,好像是要一个空格,加上继续编译:

魔改frida特征和编译(绕过frida检测)

还是不行,这有点尴尬了。

魔改frida特征和编译(绕过frida检测)

结果发现是这里的问题,ok,改完继续

魔改frida特征和编译(绕过frida检测)

ok,没有报任何错

把他搞出来,整到手机上

魔改frida特征和编译(绕过frida检测)

魔改frida特征和编译(绕过frida检测)

用fridacheck看看效果:

魔改frida特征和编译(绕过frida检测)

有点东西,即使魔改过了,还是能检测这么多。

⚠️注: 这里由于我是用的15版的frida,网上的教程有的是14版,新版的frida,有些特征和旧版不一样,所以如果还用hluda那一套修改的话,有些特征并没有被修改到

所以这时候就需要深度魔改了,这里面的被检测项,每一个都可以点击:

魔改frida特征和编译(绕过frida检测)

魔改frida特征和编译(绕过frida检测)

魔改frida特征和编译(绕过frida检测)

魔改frida特征和编译(绕过frida检测)

魔改frida特征和编译(绕过frida检测)

然后你就可以拿着上面的词汇去网上搜索相关技术文章,看看怎么用来检测的,然后针对性处理

3.进一步魔改

上面的截图,可以看出,已经其实如果是根据hluda来修改的话,还是有很多特征的,说更直接点,现在各路检测,hluda已经不够用了,所以还得进一步魔改

3.1. uuid检测对抗

魔改frida特征和编译(绕过frida检测)

这里这个uuid就是被检测的一个特征,frida每次启动都会生成一个uuid的文件夹,然后里面有一堆的文件,这个就别拿来检测特征了,我尝试过用(string) GLib.Base64.encode(GLib.Uuid.string_random()).replace('-','').replace('/d+/','test')+"fr"还是不行,会被检测到,文章是公开的,为了不被安全人员收集,我就不公开了,自行修改了

3.2.frida-helper

frida-helper也会被拿来检测,你把这个文件改个名字或者啥,都行

3.3./data/local/tmp

这个目录也会被拿来检测,所以,怎么操作就看你自己了

3.3.还有其他的特征

这个就你自己去发现了,还是那句,文章是公开的,为了不被安全人员收集,我就不公开了,自行修改了

3.4.重新编译

魔改frida特征和编译(绕过frida检测)

说明下,这个线程检测,由于frida它偶尔有,偶尔没有,所以问题不大的,

如果要针对这个pool_frida修改的话,这个就涉及到内核层面了,把kernel/sys.c添加如下红框框住的地方接口

魔改frida特征和编译(绕过frida检测)

这种细节操作就涉及魔改rom了,考虑放到后面的文章讲解

或者frida 注入时,延时10s左右启动即可,实在不行再配合一个antifrida的js脚本就可以了

魔改frida特征和编译(绕过frida检测)

然后仅仅是这个app检测的话,其实还不够严格,像一线加固厂的企业壳的检测,比这个还要狠,所以这里只是一个参考,更多的细节,就各位看官自己去摸索了。

4.frida检测对抗尝试

说来就来,无名侠大佬刚好看到我在说编译了这个,立马给了我一个检测frida的,试试,g,被检测到了

魔改frida特征和编译(绕过frida检测)

再来看珍惜佬的hunter,没打开前,我已经有心里预期了,果然

魔改frida特征和编译(绕过frida检测)

所以啊,革命尚未成功,还得练

当然目前这个也并不是一无是处,除了头部厂的app或者有针对性检测的,常规的检测还是可以用的。

参考资料

http://blog.wen2go.site/2022/07/29/20220729/http://blog.wen2go.site/2022/07/29/20220729/https://blog.seeflower.dev/archives/16/https://github.com/TUGOhost/anti_Android

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月7日18:52:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   魔改frida特征和编译(绕过frida检测)https://cn-sec.com/archives/1989675.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息