2022:Frida入门安装配置及介绍(一)


前言

逆向第一步,从frida开始! 用我自己的理解,说一下frida是干什么的。

首先,hook是什么?

在一些大神的文章中,经常会出现“hook它!”,“hook之~”,翻译成大白话就是“盘它!”,说明这个东西起着决定性、结束性的步骤。

要了解一个东西,首先要知道它的应用场景在哪里。

① 做爬虫的时候,有时会发现请求头有个加密值,例如x-sign值,这个值通常和我们的请求参数有关,当我们编写请求代码,如果不能破解x-sign值,我们发出的请求就会被对方发现,嘿呀原来你是伪造的,打回,那既然请求错误了,那爬取就自然扑街啦。这时我们的hook就可以登场啦~

② 在做①爬虫的时候,我们有时会发现,我们其实连抓包都抓不到,还构建什么请求,爬什么虫,这大概率是因为对方使用了SSL加密,刚开始用个代理服务器进行代理人攻击进行抓取,现在有很多应用都要对客户端的证书进行验证,那还伪造个屁啊,玩不下去了!这时我们的hook就又登场啦~

③ 还有一些其他逆向破解类的,都会用到hook。

说了这么多,那么hook到底是什么呢?

hook,中文翻译为“钩子”。我的理解是,无论是什么进程,还是函数,都能把它勾过来,然后“加工”一番,再扔出去(执行)。

还有一个问题,我们为什么可以hook呢?

现在应用一般分为B/S架构,C/S架构。

B/S架构,例如应用场景①中,一般我们需要x-sign加密函数会在某一个js文件中,浏览器都帮你解析好了,慢慢找就好了。

而C/S架构中,例如应用场景②中,一般我们需要认证的证书都在本地应用程序中,需要我们自己对应用程序进行反编译,然后慢慢找需要hook的地方。

一般对方也有反制措施,比如混淆文件代码等,实际上只是让我们需要hook的地方变得识别困难一些,但并不影响我们hook它。

什么是Frida?

终于到本篇的正题了,如果说hook是技术,那么Frida就是工具。技术是一个概念,而工具是最终具体的实现。

Frida是二进制动态插桩技术,我的理解就是把一段代码动态的插入程序中,但最终不会改变原有的程序,但我们通过动态的插入,可以快速简单的分析出我们想要的那段源代码。


步骤

1.下载、安装Python环境

提示:记得添加环境变量

提示:切记安装路径不要有中文

Python 3.10.6 win-amd64 下载地址:百度云下载

命令行输入:python -V

显示如下,即配置成功。

PS D:\> python -V
Python 3.10.6

2.下载frida、frida-tools

pip install frida -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install frida-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/

提示:若一直卡在 Running setup.py install for frida … –

则下载对应版本的egg文件,egg文件列表,可自行查找。

我电脑win11 64 python3.10对应的是frida-15.2.2-py3.10-win-amd64.egg 点击下载

将egg文件放在D:\Python\Lib\site-packages下(根据自己的Python安装目录)。

在当前目录cmd,执行easy_install frida-15.2.2-py3.10-win-amd64.egg


提示:若提示easy_install 不是内部或外部命令,也不是可执行的程序

当setuptools版本>51.3.3时,就没有带easy_install,按如下方式重新安装解决。

pip uninstall setuptools
pip install -v setuptools==51.3.3 -i https://pypi.tuna.tsinghua.edu.cn/simple/

最后再执行下载任务

pip install frida -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install frida-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/

命令行输入:frida --version

显示如下结果,即安装成功。

PS D:\> frida --version
15.2.2

3.下载adb工具

提示:该工具用于在PC端用命令行对安卓手机或模拟器进行调试。

提示:记得添加环境变量

adb工具:百度云下载

4.下载frida-server端到手机或模拟器

以下用逍遥模拟器演示Frida-server端。

打开一个模拟器,通过adb可查看该模拟器设备,查看连接,并查看模拟器设备型号。

PS D:\> adb devices
List of devices attached
127.0.0.1:21503 device

PS D:\> adb connect 127.0.0.1:21503
already connected to 127.0.0.1:21503

PS D:\> adb shell getprop ro.product.cpu.abi
x86_64

在官网找到对应frida版本、对应手机型号的frida-server下载,官网地址

本次演示对应的frida-server版本为frida-server-15.2.2-android-x86_64.xz,下载地址为百度云下载

将解压之后的文件push到设备中,指定到 /data/local/tmp 路径下重命名为 frida-server。

PS D:\> adb push C:\Users\xxx\Desktop\frida-server-15.2.2-android-x86_64 /data/local/tmp/frida-server
C:\Users\xxx\Desktop\frida-server-15.2.2-android-x86...le pushed, 0 skipped. 19.4 MB/s (99542760 bytes in 4.882s)    

命令行运行android设备中的frida-server。

PS D:\> adb shell   // 进入手机
VOG-AL00:/ # su    // 确定手机是root权限
VOG-AL00:/ # cd /data/local/tmp      // 进入到tmp目录下
VOG-AL00:/data/local/tmp # chmod 777 frida-server      // 给执行权限,可读可写可执行
VOG-AL00:/data/local/tmp # ./frida-server      //正式启动frida-server

提示:执行完毕后为运行状态。这个shell不能关闭,关闭了frida就停止了。

进行端口转发监听

PS D:\> adb forward tcp:27042 tcp:27042
27042
PS D:\> adb forward tcp:27043 tcp:27043
27043

27042端口用于frida-server通信的默认端口号,不转发的话客户端是连接不上服务端。

使用默认端口非常容易被检测,可以使用非标准端口来启动frida。启动frida-service的时候设置IP和端口,启动命令。

./frida-server  -l 127.0.0.1:9999

之后的每个端口对应每个注入的进程,例如27043端口。

检查是否成功 执行 frida-ps -U 命令成功输出进程列表,如下所示。

PS D:\> frida-ps -U
 PID  Name
----  ---------------------------------
2364  android.ext.services
2403  android.process.media
1566  audioserver
1567  cameraserver
...   ...

5.简单使用

在这里插入图片描述

test.py

import frida
rdev = frida.get_remote_device()
front_app = rdev.get_frontmost_application()
print(front_app)
PS E:\学习\python> python .\test.py
Application(identifier="com.android.chrome", name="Chrome", pid=13770, parameters={
    
    })

总结

基本的入门就是这样了,之后的实战,还需要一点Python知识(不会也没关系其实),一些JavaScript知识(比较重要)。

对于B/S架构的程序,更偏重于JavaScript代码的分析能力。

对于C/S架构的程序,更偏重于Java代码的分析能力。

个人认为Hook最主要的地方,是找出需要Hook的地方,找到后一切都会迎刃而解的。

猜你喜欢

转载自blog.csdn.net/weixin_45320254/article/details/126215490