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


本文插图

尽管我们的Quasar客户端代码是去混淆后的 , 但符号已经消失了 , 不用担心 , 因为我们拥有完整的源代码 , 所以接下来让我们开始调试 。 我只想验证我的流程图是否正确 , 所以让我们单击开始调试 , 然后在入口点设置一个断点(我强烈建议根据源代码重命名这些函数和类名 , 但是由于调试了许多次 , 我对此已经非常熟悉了) 。 请确保Quasar服务端正在运行中 。 我们将在Class0.smethod_3()遇到第一个问题 , 这是第二个初始化方法:
|如何创建自己的Tracker
本文插图

它不会返回True , 从而导致客户端无法正确执行和退出 。 但是为什么会这样?让我们看一下源码:
|如何创建自己的Tracker
本文插图

上图中标红的if语句 , 会在初始化后通过返回true来安装并将客户端连接到服务器 , 但由于此时客户端正在运行的current path不等于install path , 所以它不会执行 。 要理解上述说明 , 需要回到Builder:
|如何创建自己的Tracker
本文插图

因此 , 此代码块会检查客户端当前是否正在AppdataRomaing目录下运行(于本文的情况下) , 如果没有 , 它将执行以下代码:
|如何创建自己的Tracker
本文插图

此代码会处理两个问题:其一是客户端检测到另一个Quasar实例正在运行 , 通过检测互斥体;其二是客户端已安装到受害主机中 , 但实现了持久化 , 此时会终止进程并删除该文件 , 然后将其移至我们指定的install文件夹后重新启动 。 您可以查看Install方法自行研究 , 因为源码已经给出 。 它使得研究人员可以真正了解如何开发恶意软件 。 下面让我们做两件事:

  1. 更新我们的流程图
  2. 将客户端移动到指定的安装目录并启动

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

让我们从预设的安装目录中调试客户端 , 看看会发生什么 , 请确保Quasar服务端正在运行 。 此外 , 我启动了Wireshark来监视流量(下图是我自己的设置 , IP地址及端口在您的计算机上将会有所不同):
|如何创建自己的Tracker
本文插图

我将从AppdataRoaming目录重新启动客户端 , 然后直接跳到Client.Connect函数:
|如何创建自己的Tracker
本文插图

这次我们恰好到达了想要的位置(专家提示:您可以右键单击dnspy对象并更改其名称)。
|如何创建自己的Tracker
本文插图

这里有三处重点 , 首先是RemoteCertificationValidationCallBack——它将验证从服务器接收到的证书 , 数据流读取函数和OnClientState函数 。
|如何创建自己的Tracker
本文插图

所以socket.Connect函数应该将客户端成功连接到服务器并进行第一次TCP握手:
|如何创建自己的Tracker
本文插图

接下来 , 我想研究执行到第287行时发生了什么:
|如何创建自己的Tracker
本文插图

这是一个SSL握手 , 但是发生的是服务器将X509证书传给了客户端 , 并且客户端认证了该证书 , 并且这是在RemoteCertificationValidationCallBack内部发生的 。 让我们查看一下它的源码:


推荐阅读