|如何创建自己的Tracker( 二 )


|如何创建自己的Tracker
本文插图

这使我们回到了Client类:
|如何创建自己的Tracker
本文插图

这应该是我们第一个目标的答案!若要启动连接 , 客户端首先会建立一个SSL流 , 然后可能使用ValidateServerCertificate回调函数和AuthnticateAsClient正在进行某种形式的验证 。 让我们暂时先不管这些 , 因为我们只是在探索代码的工作方式 。 接下来会发生什么?如果我们通过Client基类访问OnClientState , 这将导致我们进入事件处理程序本身 , 那么若要找到触发该事件的函数 , 我们必须转到QuasarClient.cs并通过其查看该函数的实现 。 如我们之前所见 , OnClientState函数触发了client.Send函数:
|如何创建自己的Tracker
本文插图

说实话 , 我不懂C# , 但是我在这里通过我的直觉看到唯一有价值的东西是ProcessSendBuffers , 所以让我们查看下 , 看看是否能有所收获:
|如何创建自己的Tracker
本文插图

使用与之前相同的策略 , 让我们查看下SafeSendMessage:
|如何创建自己的Tracker
本文插图

现在我们暂且不访问OnClientWrite , 因为我担心它不会带我们到我们想要的地方去 。 我们可以查看位于PayloadWriter类中的WriteMessage:
|如何创建自己的Tracker
本文插图

该函数会将序列化消息(我稍后会解释什么是序列化)写入SSL数据流!因此 , 让我们通过一张流程图来说明我们的发现:
|如何创建自己的Tracker
本文插图

上图是非常浅显且不完整的 , 随着我们进行动态分析 , 我们可以在该图上进行扩充 , 因此让我们在Visual Studio中编译Quasar项目 , 并将编译后文件移至虚拟机并开始研究它 。
0x02 分析Quasar样本
编译Quasar项目并将其移至虚拟机后 , 即可启动Quasar:
|如何创建自己的Tracker
本文插图

此时屏幕应该会弹出一消息框 , 该消息用于构建X509证书(非常重要) 。 该证书负责在客户端和服务器之间创建有效的SSL数据流 。 Quasar会生成一个X509证书并将该证书绑定到所有生成的客户端 。 可以在此处了解有关SSL的更多信息 。
生成证书后 , 就可以构建样本了 , 单击Builder然后使用builder菜单进行相关配置 , 其中最重要的部分如下所示:
|如何创建自己的Tracker
本文插图

这里有2个IP:一个是本机回送地址 , 另一个是该虚拟机IP 。 我建议将客户端绑定到当前虚拟机IP , 因为这样可以模拟从当前虚拟机与外部主机服务器的连接(主机也是VMWare本地网络中的一员) 。 您可以使用任何您喜欢的端口 , 这里我使用了27015端口 。 生成客户端后 , 您应该可以在当前目录看到它 。 我们将其在dnspy中打开(dnspy是.NET反编译器):
|如何创建自己的Tracker
本文插图

但是我们遇到了代码混淆 , 不用担心 , 我们可以使用de4dot , 它是个.NET反混淆工具 , 运行它之后 , 我们可以得到一个去混淆的Quasar客户端:
|如何创建自己的Tracker


推荐阅读