最小跨平台网络逆向工程框架
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)
挂钩- 附加到目标进程
- 拦截呼叫 `connect()<;http://man7.org/linux/man-pages/man2/connect.2.html>;`\uu
- 将目标IP地址替换为127.0.0.1,并将端口替换为 选择一个
- 使用本地IP执行connect()函数
- 在返回之前,发送HTTP CONNECT method 使用原始IP和端口
fritm.spawn_and_hook(process, port)启动进程并确保 它从一开始就被钩住了。
带fritm.start_proxy_server(callback, port)
的MITM- 启动本地服务器,侦听给定端口上的连接
- 从挂接的客户机接收到新连接后,读取IP 以及来自http connect头的服务器端口
- 打开服务器的新套接字
- 呼叫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的应用程序 测试地址)。