在本文的前5个任务中,我们将学习反汇编的基础知识,解决初始反向级别的问题以及反编译dotNet应用程序。
组织信息特别是对于那些想要学习新知识并在信息和计算机安全性的任何领域中发展的人们,我将撰写和讨论以下类别:
- PWN;
- 密码学(加密);
- 网络技术(网络);
- 反向(反向工程);
- 隐写术(Stegano);
- 搜索和利用Web漏洞。
除此之外,我将分享我在计算机取证,恶意软件和固件分析,对无线网络和局域网的攻击,进行笔测试和编写漏洞利用程序方面的经验。
为了使您可以查找有关新文章,软件和其他信息的信息,我
在Telegram中创建了一个
频道,并创建了一个
小组来讨论 ICD领域中的
所有问题 。 另外,我会亲自考虑您的个人要求,问题,建议和建议,
并会回答所有人 。
提供所有信息仅出于教育目的。 对于由于使用本文档而获得的知识和方法对某人造成的任何损害,本文档的作者不承担任何责任。
C,GCC32
考虑最简单的情况。 这是第一个反向任务。

在这种类型的任务中,将密码存储为字符串时,无需使用任何特殊工具就可以找到它。 让我们运行该程序,看看它显示什么。

太好了 我们收到邀请和有关错误密码的消息。 我们查看程序文件中的行,并在其中找到邀请和有关错误密码的消息。 附近应该有一个密码。

因此,在彼此相邻的行中,有一个看起来像密码的行。 让我们尝试一下。

任务完成。 我们给密码,我们得到5分。

ELFx86,基本
我们被要求找到一个密码。

我们将该程序加载到IDA Pro调试器(我使用7.0版)中,然后按F5键反编译该程序。

因此,将输入的名称与字符串john进行比较,并将密码与开膛手进行比较。

因此,我们正确地解决了任务并获得了密码。 我们租用它并获得5分。

PEx86,0保护
这次我们得到一个exe-shnik。

在IDA Pro中下载。

该程序不会保存调试信息,因此我们看不到像main这样的常用函数名。 让我们看一下程序中的行,这是按+ F12键的。

我们会看到有关输入正确和错误密码的消息。 现在,我们可以在代码中找到带有此行的块,并查看其前面的条件。 双击该行。

我们位于rdata部分。 让我们找到该地址的代码中的所有链接。 为此,请按X。

因此,在程序代码中只有一个对我们这一行的调用。 我们双击并转到代码。

我们在主程序代码中。 我们正在反编译。

在此,检查数字a2和a1行。 让我们将数字转换为字符。

为此,请按数字上的R。我们的代码已更改。

现在我们知道这行,剩下的就是找出数字a2。 让我们看一下该函数的所有链接。

它仅被调用一次。

如您所见,字符串的长度作为第二个参数传递。 检查找到的密码。

我们屈服并获得5分。

ELF-C ++,0保护
我们提供解决C ++程序的方法。

我们在IDA Pro中打开,并使用正确的密码将消息传递到呼叫的地方。 让我们将其涂成绿色。

让我们缩小图表。

因此,我们需要经历两个条件。 让我们对其进行分析。 在第一种情况下,将参数数量与1进行比较。也就是说,程序必须具有多个参数(第一个是程序名称)。

我们分析第二个条件。

将我们输入的字符串与作为参数传递给plouf函数的字符串进行比较。 我们反编译它。

解析代码。 实际上a2-是一个字符串。 因此,循环从i = 0开始,直到行a2的第i个元素为0(即直到到达行尾)为止。
V3 = a2 [i]
V5 =长度(a3)
V6 = a3 [i%v5]
即,地址a1处的线将等于两条代理线a2和a3。 让我们回到主要功能并找到这些行。

因此,我们需要定义var_C和var_10参数。 我们会发现它们高一点。 它们分别是字符串unk_8048BC4和unk_8048DCC。

查找字符串的值。

好吧,我们将编写代码来代理它们。

我们得到密码。

PE-DotNet,0保护
在此作业中,我们提供了反向.NET应用程序的服务。

您可以使用文件实用程序来确定它。

C#是一种反编译语言,因此我们可以获取原始项目。 这可以使用
dnSpy完成 。

让我们打开CrackMe项目并查找函数和方法。

Button1_Click方法在单击按钮时验证密码。

在源代码中,我们找到了密码。 看看吧。

我们交出。

现在就这些了。 待续...您可以加入
Telegram 。 在这里,您可以提出自己的主题,并为以下文章的主题选择投票。