结构
我们都知道frp分为服务端frps和客户端frpc,一般情况下在目标机运行frpc。
今天主要分析一下frpc。
先看一下frp的源码结构
先从frpc主文件开始
客户端的一些功能
我们常用的socks5代理,是以插件形式存在
静态文件免杀
这个其实挺简单的,把文件重新编译一下,就跟原来的不一样了。常见杀软可能是匹配hash值进行查杀。
在Linux或者MaC运行如下命令,即可编译所有版本。
./package.sh
动态免杀
目前还没发现动态查杀情况。不过,他们可能会把文件放到沙箱分析。由于运行后,会有日志产生,很容易识别是FRP,所以把frpc的打印的日志去掉。
直接去这三个地方,把打印去掉就行。
隐藏配置文件
略
流量层特征去除
去除流量特征之前,先来分析一下使用过程中有那些特征。这里拿常用的socks5协议来分析。
先正常建立一个连接,然后抓取流量。
可以看到,有很明显的明文。
通过代码跟踪,找到这些明文信息在如下位置进行网络发送。在发送之前,进行加密。然后在接收的时候再进行解密即可。还有其他类似数据类型,也是通过明文进行发送。可以考虑直接在msg类中进行统一加解密。
建立的socks5代理,使用过程中,也是全程明文。很明显,这样直接被安全设备识别。
当然,应用自带的参数有加密和压缩参数,下面看一下使用了这两个功能后,代理的流量是什么样。
具体的通信数据被加密了,不过,还是有部分信息通过明文进行传输。红色部分是服务端向客户端发送的消息,也就是说需要从服务端找到这些明文信息,然后对其加密。
最终,在serverproxyproxy.go中找到。客户端和服务端是通过msg进行通讯,所以直接在写入之前对其进行加密即可。(后续找个会go的大佬来写)
通过代码跟踪,应用加密是通过aes加密,密钥为token,默认为空。所以使用加密的时候,最好设置一下token
原文始发于微信公众号(云智信安云窟实验室):FRP二开分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论