2022:Frida入门安装配置及介绍
Posted 呆小猴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的地方,找到后一切都会迎刃而解的。
Windows环境下安装配置Mosquitto服务及入门操作介绍
#### 原创:DisSun ##########
#### 时间:2019.03.10 #######
关于Mosquitto配置的资料网上还是有几篇的,但是看来看去,基本上都是基于Linux。基于Window的凤毛麟角,看上去貌似配置的东西相差不大,实操过程中真的烦透了,配置就是不成功,这次把自己实践过程中的东西记录一下,分享出来。
一、概念梳理
1、Mosquitto是一款实现了消息推送协议MQTT 3.1的开源消息代理软件,提供轻量级的、支持可订阅/可发布的消息推送模式,是设备与设备之间的短消息通信变得简单,广泛应用于低功耗传感器、手机(app消息推送是场景之一)、嵌入式电脑、微型控制器等移动设备。
2、那什么是MQTT,他的英文全称Message Queuing Telemetry Transport,翻译过来就是“消息队列遥测传输”,是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。
目前支持MQTT的服务器中间件有EMQTT、Mosquitto、Apollo。本章讲的就是Mosquitto。
3、MQTT的协议内容有很多,其中一个一定要知道,就是“消息发布服务质量”,只有三个值分别是:
QoS 0:“至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
QoS 1:“至少一次”,确保消息到达,但消息重复可能会发生。
QoS 2:“只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
二、下载与安装
1、Mosquitto存在很多版本,如果想体验比较新版本可以上github,但是比较麻烦的是需要自己去编译成windows文件,编译需要用到cmake软件,我之前操作过没问题,可以参照其他博主的文章:[https://blog.csdn.net/vwadev/article/details/50148265]。
官方后面提供了比较稳定的window安装版本,安装完成后可以直接使用,并且自动添加成 windows服务,非常方便,下载路径:https://mosquitto.org/download
2、安装完成。如果需要使用,直接启动服务即可。
3、Mosquitto服务默认占用 1883端口,所以可不在配置文件中显式设置。
三、关于配置文件的一些重要说明
1、配置文件在安装目录下的mosquitto.conf,默认情况下不做任何修改,就可以启动mosquitto。
2、配置说明中出现的地址例如:“/var/run/mosquitto”,“/var/log/messages”,都是相对路径,相对于系统盘根目录。这个地方很重要,他可不是相对于安装目录的根目录。例如“/var/run/mosquitto”表示的是“c:var
unmosquitto”,我有一段时间一直没搞定,就是这个目录原因,很多人没有反馈这个问题,因为都是在linux用所以没啥问题。
3、安装目录的完整路径中,不能出现空格,否则在命令行就无法通过。Mosquitto默认安装路径是在“C:Program Filesmosquitto”,这里面的“Program Files”就存在空格,导致很多问题,这个也要特别注意。所以后来我改为安装在“C:MosquittoTest”
四、配置登录账号和密码
1、如果想方便测试可以下载安装MQTT客户端(http://www.eclipse.org/paho/components/tool/),我自己是用这个,不过下面我们还是用原生的命令行操作:
2、在配置文件mosquitto.conf中,任意位置加入下面文本,保存退出(我说的全新安装的情况下,如果是维护已经使用很久的系统,可在配置文件中找到对应的属性进行更改)
#设置不允许匿名登录
allow_anonymous false
#设置账户密码文件位置为C:MosquittoTestpwfile.example
password_file /MosquittoTest/pwfile.example
3、重启mosquitto服务配置文件的修改才能生效。为了方便调试和操作,我们后面的操作全部通过命令行模式进行。
4、插入新用户名及密码,输入密码时界面是不会显示的,直接输入后回车就可以,需要连续输入两次。保证pwfile.example的路径和上面的配置一致。下面打开CMD并进入mosquitto根目录输入:
mosquitto_passwd -c /MosquittoTest/pwfile.example FirstUserName (使用-c 参数会导致清空密码文件,重新插入用户)
mosquitto_passwd /MosquittoTest/pwfile.example SecondUserName (不使用-c 表示追加用户,不影响旧用户)
5、创建成功后pwfile.example会出现刚刚添加的用户信息。
6、启动mosquitto 进行测试。
首先启动第一个cmd窗口启动服务:mosquitto.exe -c mosquitto.conf
然后启动第二个cmd窗口订阅‘dissun/topic‘主题(其中dissun是账号,111111是密码):mosquitto_sub -u dissun -P 111111 -t ‘dissun/topic‘ -v
最后启动第三个cmd窗口发布订阅‘腰疼不加班‘信息:mosquitto_pub -u dissun -P 111111 -t ‘dissun/topic‘ -m ‘腰疼不加班‘
五、配置日期信息
1、配置日期前请先查看第三大点(关于配置文件的一些重要说明)
2、在mosquitto.conf文件中插入:
#把日志信息输入到指定文件
log_dest file /MosquittoTest/DisSunLog_1.log
#在控制台输出信息,运行win服务无效
log_dest stdout
#不记录
#log_type none
#########下面的debug、error、warning.....等等可以组合使用。
#记录网络通信包,通信包大小(含心跳包),但不显示内容
log_type debug
#错误信息(没见过)
log_type error
#警告信息(没见过)
log_type warning
#设备的订阅信息、发布信息及下线信息(端口、设备名、用户、不包发布内容)
log_type notice
#服务启动关闭信息、版本号、端口号、配置文件信息
log_type information
#所有设备订阅主题提醒
log_type subscribe
#这个没有试出来干啥用的(没见过)
#log_type unsubscribe
#websockets链接信息(没见过)
#log_type websockets
#websockets_log_level 0
3、然后重启服务,我们发一条信息来看看记录了什么。(参照第四节第6点进行发送信息操作得到下面运行界面)
4、按Ctrl+C 停止主服务,如果不停止服务,日志文件会被独占锁住无法打开。找到这个日志
5、日志解析
##########:以下是information信息
1552112775: mosquitto version 1.5.8 starting
1552112775: Config loaded from mosquitto.conf.
1552112775: Opening ipv6 listen socket on port 1883.
1552112775: Opening ipv4 listen socket on port 1883.
##########:以下是subscribe信息(伪造)
1552113940: mosqsub|11332-DisSunPad 0 ‘dissun/topic‘
20-DisSunPad (c1, k60, u‘dissun‘).
##########:以下是notice信息,订阅客户端上线11332
1552112782: New connection from ::1 on port 1883.
1552112782: New client connected from ::1 as mosqsub|11332-DisSunPad (c1, k60, u‘dissun‘).
##########:以下是debug信息,订阅客户端上线11332
1552112782: No will message specified.
1552112782: Sending CONNACK to mosqsub|11332-DisSunPad (0, 0)
1552112782: Received SUBSCRIBE from mosqsub|11332-DisSunPad
1552112782: ‘dissun/topic‘ (QoS 0)
1552112782: mosqsub|11332-DisSunPad 0 ‘dissun/topic‘
1552112782: Sending SUBACK to mosqsub|11332-DisSunPad
##########:以下是notice信息,发布客户端上线12284
1552112832: New connection from ::1 on port 1883.
1552112832: New client connected from ::1 as mosqpub|12284-DisSunPad (c1, k60, u‘dissun‘).
##########:以下是debug信息,发布客户端上线12284,并发布12字节的信息,然后离线。
1552112832: No will message specified.
1552112832: Sending CONNACK to mosqpub|12284-DisSunPad (0, 0)
1552112832: Received PUBLISH from mosqpub|12284-DisSunPad (d0, q0, r0, m0, ‘‘dissun/topic‘‘, ... (12 bytes))
1552112832: Sending PUBLISH to mosqsub|11332-DisSunPad (d0, q0, r0, m0, ‘‘dissun/topic‘‘, ... (12 bytes))
1552112832: Received DISCONNECT from mosqpub|12284-DisSunPad
##########:以下是notice信息,发布客户端离线12284
1552112832: Client mosqpub|12284-DisSunPad disconnected.
##########:以下是debug信息,订阅客户端保持跟mosquitto的联系。PINGREQ请求心跳包,PINGRESP回应心跳包
1552112842: Received PINGREQ from mosqsub|11332-DisSunPad
1552112842: Sending PINGRESP to mosqsub|11332-DisSunPad
1552112902: Received PINGREQ from mosqsub|11332-DisSunPad
1552112902: Sending PINGRESP to mosqsub|11332-DisSunPad
1552112962: Received PINGREQ from mosqsub|11332-DisSunPad
##########:以下是information信息 主服务中断
1552113191: mosquitto version 1.5.8 terminating
六、如果要开启webSockets,它是支持的。但是要显式的加入mqtt协议及端口
#MQTT协议
port 1883
protocol mqtt
#websockets协议
listener 8000
protocol websockets
#如果需要查看websockets日志还可以加入以下面,上面有提过。
log_type websockets
websockets_log_level 0
七、用户访问控制acl_file,看遍了所有的文章,操作都不生效。加了访问控制后所有的的用户,都无法正常的收发信息,所以等下次研究透了再追加。感觉这玩意从Linux移至过来,不是完全通用。
不过还是按照说明把操作写下来,有看出问题的童鞋可以跟我反馈下。(注:下面的内容操作没有通过,请读者自行试验)
1、在mosquitto.cong中间中加入
#加入访问控制列表文件Acls
acl_file /MosquittoTest/aclfile.example
2、修改aclfile.example内容,加入用户的权限
# This affects access control for clients with no username.
topic read $SYS/#
# This only affects clients with username "roger".
#user roger
#topic foo/bar
user dissun
topic dissun/topic
# This affects all clients.
pattern write $SYS/broker/connection/%c/state
3、CMD启动mosquitto。
4、按道理说设置就是这么多,没那么复杂,但是此时dissun用户订阅是成功的,但是dissun用户发布失败,服务debug日志显示“denied”。我怀疑是acl文件加载失败,所以换了绝对路径,但是依然没有效果,搞了一下午不成功放弃,以后再搞。
以上是关于2022:Frida入门安装配置及介绍的主要内容,如果未能解决你的问题,请参考以下文章
Android Spider App逆向 Frida - 夜神模拟器安装配置 基本使用