使用刀具-反向基础。用r0ot-mi解决问题。第三部分

图片


在本文中,我们将使用轻型任务示例了解如何在Cutter中反编译ELF文件。过去的反向



零件介绍:第1部分:C,C ++和DotNet反编译-反向基础知识

第2部分:MIPS反向和Golang-反向基础知识



组织信息
, - , :



  • PWN;
  • (Crypto);
  • c (Network);
  • (Reverse Engineering);
  • (Stegano);
  • WEB-.


, , , .



, , Telegram . , , .



. , - , .



假指示







这是该类别中的第八项作业,并且我们会通知您虚假指令的存在。让我们从查看文件信息开始。







我在Cutter中打开该程序-带有内置Ghidra反编译器的Radar2的GUI,该Ghidra反编译器具有仿真能力和最近进行调试的能力。立刻我们得到了有趣的功能列表。







让我们继续主函数并对其进行反编译。







从一开始,金丝雀就被初始化并检查参数的数量。之后,分配0x1f字节,将指定的常量字符串复制到此处,将地址保存到iVar3变量中,然后更改该字符串的各个字节。接下来,使用字符串s1进行转换,这对我们来说不重要。 WPA函数也会被初始化,我们输入的密码将被写入auStack50地址,并与转换后的iVar3字符串一起传输到WPA函数,然后检查canary值并终止程序。



让我们继续WPA功能。







再次更改先前插入到程序中的行,然后将这两行进行比较。如果它们相等,则将调用blowfish()函数,该函数将向我们显示正确的更改密码,否则将调用RS4()函数。







由于发生了先前输入值的解密,因此我们可以调试程序并更改比较结果。我们去比较字符串并设置一个断点。







现在开始调试-F9,然后输入程序参数。







进一步单击导航栏上的按钮,直到到达断点。使用strcmp()函数比较字符串的结果将被写入EAX寄存器,然后将对其进行检查。由于字符串不相等,因此该寄存器包含值1。







让我们将其更改为0,以更改程序行为的分支并继续执行。在Cutter控制台中完成后,我们将看到正确的答案,该答案应在网站上提交。







跟踪







下载程序并进行检查。







没什么,您需要找到一个密码。但是,对于调试(ptrace)和过渡需要手动编辑的保护很少。这就是图形在IDA Pro中的显示方式。







我们还将在Cutter中执行此任务,它将自动更正所有过渡。







让我们继续反编译主函数。







正确的密码是开头指定的字符串中对应的4个字母。







ARM ELF







这是ARM体系结构的二进制,我们将其放入Cutter中并选择主要功能。从功能图中,我们可以看到正在处理的内容,并且很可能是逐个字符进行比较。







我们打开反编译器并分析程序。







首先,检查程序参数的存在及其长度,它必须等于6。







因此,变量var_14h用作索引并取值为0。然后进行了许多比较,我们将其视为条件:



str [0] == str [5]

str [0] + 1 == str [1]

str [3] +1 == str [0]

str [2] + 4 == str [5]

str [4] + 2 == str [2]

0 == str [3] ^ 0x72



让我们实现该算法并获取密码。







然后,我们获得了所需的密码。目前为止就这样了。



你可以加入我们电报在这里,您可以找到有趣的资料,泄漏的课程和软件。让我们聚集一个社区,在这个社区中,将有很多IT领域的专家,然后我们可以在任何IT和信息安全问题上互相帮助。



All Articles