最小跨平台网络逆向工程框架

fritm的Python项目详细描述


弗里达在中间

fritm是一个极简的跨平台(在MacOS和Windows上测试) 用python编写的网络逆向工程框架。

fritm-hook允许您轻松钩住 `connect()<;http://man7.org/linux/man-pages/man2/connect.2.html>;。`_ 使用`frida<;https://www.frida.re/>;``重定向所有 来自目标应用程序的流量。

然后可以使用用python编写的内置服务器来启动 Man-in-the-middle attack

即使您不想使用python,也可以使用fritm-hook 命令将通信量重定向到应用程序并实现 简单的HTTP CONNECT头讲座。

安装

pip install fritm

用法

钩住进程:

fritm-hook PROCESS_NAME_OR_PID -p PORT # (default 8080)

或者创建一个新的:

fritm-spawn PATH_TO_COMMAND -p PORT # (default 8080)

在python中启动代理服务器:

importselectfromfritmimportstart_proxy_serverdefdumb_callback(soClient,soServer):"""Forwards all the traffic between the two sockets
    """conns=[soClient,soServer]other={soClient:soServer,soServer:soClient}active=Truetry:whileactive:rlist,wlist,xlist=select.select(conns,[],conns)ifxlistornotrlist:breakforrinrlist:data=r.recv(8192)ifnotdata:active=Falsebreakother[r].sendall(data)finally:forcinconns:c.close()httpd=start_proxy_server(dumb_callback)

现在,所有的流量都会通过你的申请。您可以修改 任何飞行中的东西。

它是如何工作的?

fritm.hook(process, port)

挂钩
  1. 附加到目标进程
  2. 拦截呼叫 `connect()<;http://man7.org/linux/man-pages/man2/connect.2.html>;`\uu
  3. 将目标IP地址替换为127.0.0.1,并将端口替换为 选择一个
  4. 使用本地IP执行connect()函数
  5. 在返回之前,发送HTTP CONNECT method 使用原始IP和端口

fritm.spawn_and_hook(process, port)启动进程并确保 它从一开始就被钩住了。

fritm.start_proxy_server(callback, port)

的MITM
  1. 启动本地服务器,侦听给定端口上的连接
  2. 从挂接的客户机接收到新连接后,读取IP 以及来自http connect头的服务器端口
  3. 打开服务器的新套接字
  4. 呼叫callback(socket_to_client, socket_to_server)

mitmproxy

的区别
  • mitmproxy不使用函数挂钩,它会拦截所有的流量 从浏览器或计算机
  • mitmproxy只适用于http流量,而fritm则适用于任何 TCP通信。

proxychains/proxychains-ng

的区别
  • fritm-spawn是简化的跨平台版本 关于proxychains。
  • fritm-hook可以附加到已在运行的进程。
  • ProxyChains不是跨平台的,很难安装,而Fritm 跨平台,安装简单。
  • proxychains使用一个配置文件,而fritm-spawn只需要两个 参数
  • fritm包括一个http代理服务器(它也可以通信 带有代理链)
  • 代理链可以处理许多不同的代理类型(socks4, socks5,https)有很多选项(例如用于身份验证)
  • Ly>脯氨酸链可以链接多个代理< /LI>
  • proxychains处理任何代理地址,而fritm-spawn 默认为localhost。但是,如果有人需要遥控器 解决问题,发布问题,我将实现它。

当前限制

  • 有些windows用户遇到了我无法重现的问题
  • fritm在ipv6地址上会失败,但应该不难修复 (我只是没有使用ipv6的应用程序 测试地址)。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java文件分块,获取长度字节   java嵌入式Tomcat不执行jsf页面   java我的数据库中有2个实体,但hibernate返回其中6个。   java如何基于逗号拆分字符串   java取消已经运行的CompletableFutures的预期模式是什么   java如何在informix中从另一个数据库复制表ddl和数据   为什么图片是黑色的?   java根据字符串数组中的单词筛选列表   Java8的集合。平行流有效吗?   Kotlin中的java静态内部类   java如何在GUI中生成一列字符串   javafx如何正确使用高对比度主题?   带空格的javascript Httpurlconnection参数   java如何设置GridBagLayout的约束   java如何在一个线程可能尚未初始化时关闭另一个线程   java将简单时间格式转换为特殊时间格式(hhmmt)   安卓/java阵列重复过滤器的问题   java在队列的链接实现下,入队和出队是如何工作的   java更新sql外键约束