混淆后的逆向工程应用

引言


该出版物旨在研究一些逆向工程技术。 所有材料仅供参考,不得用于任何个人利益。


研究课题


作为示例,我们将研究Atomineer Pro文档代码(以下称为APD)。 这是Visual Studio的插件,旨在自动在源代码中生成注释。 首先,安装此插件并检查其操作。 免费版具有试用期,并且在此期间有许多使用限制。 因此,在向文件添加注释时,会向用户显示一条消息,指出您在一天中只能处理10个文件

讯息1
图片

当您尝试处理整个项目时,该实用程序将显示一个对话框,警告该命令不可用。

讯息2
图片

让我们开始吧


首先,在已安装扩展的目录中查找,只有一个动态库。 我们需要它。 我们要做的第一件事是将其从JetBrains上传到dotPeek反编译器。

dotPeek
图片

正如您在屏幕上看到的那样,该库经过混淆器,变量和方法已重命名,并具有诸如a,b,c,d之类的名称……这就是我们所需要的。 我们只是在寻找。 让我们看看可以做什么。

第一部分


首先想到的是找到该行,但是由于搜索功能不在dotPeek中,因此我们采取另一种方式。 我们使用来自Microsoft SDK的标准ildasm.exe反编译该库。 输出将仅接收一个文本文件。 在其中,我们寻找“ 试用模式 ”消息的文本 请注意,您的...

文字档
图片

找到了方法
.method家庭hidebysig静态布尔e()文件管理
属于类CmdDocThisScope。 现在回到dotPeek。

扰流板方向
图片

所以我们有。 我们发现了一种显示APD试用消息并根据条件返回true或false的方法。 我们找到所有调用此方法的地方

通话搜寻
图片

仅找到2个呼叫点,这些是方法CmdDocThisFile :: c和CmdDocThisScope :: c。

发现
图片

通过类的名称和构造函数代码,很明显,这些类负责菜单项,并且“ c”方法的虚拟性表明这是用户选择相应菜单项的事件处理程序(此信息将进一步对我们有用)。 很容易猜到,如果该方法返回true,则即使该命令显示带有警告的对话框,该命令也将被执行。

在CmdDocThisScope :: e方法的开头,变量f递增。 打开“ IL View”窗口,找到命令代码:

IL视图


维基百科上有一篇描述这些说明的文章。

接下来,在APD库文件中找到此方法。 我们将使用IDA工具进行此操作。 在带有函数的窗口中,我们将找到我们的方法,并且我们将看到已经熟悉的代码。

国际开发协会


选择了ldsfld指令后,我们在Hex View窗口中找到了它的二进制表示形式。

十六进制视图


团队的说明确认我们找到了正确的地方。

维基


对该方法的代码和后续步骤的进一步分析不在本文的讨论范围之内。

第二部分


现在,作为已经经验丰富的研究人员,我们找到了一个调用对话框,消息为“ '文档中的所有文档'命令仅在完整版本中可用... ”。此方法为CmdDocThisProject :: c

CmdDocThisProject :: c


CmdDocThisProject类负责“处理项目”命令,“ c”方法是虚拟的。 它只包含一件事-它是一个带有消息的对话的调用。 没有条件,没有检查。 搜索源代码会将我们引向CmdDocThisProject :: i方法,该方法具有CmdDocThisProject :: c中的期望值。 现在,在IDA中,我们可以轻松找到必要的方法并可以学习CIL指令


结论


值得一提的是,这篇文章故意留白点供他们独立研究。

Source: https://habr.com/ru/post/zh-CN444886/


All Articles