网络安全实验 反汇编 逆向实验
创始人
2025-05-28 14:01:20

文章目录

    • 要求
    • lab1
    • lab2
    • lab3
    • lab4

因为当时自己做实验的时候出现了很多疑问不会解决,在网上看到了一位大佬解决了这些问题,就把我的实验解决方法也发上来,希望有不会的同学可以通过博文理解实验内容,同时能够熟练掌握这些知识。

要求

lab1 包含 4 个题目,需要对 4 个程序进行逆向。逆向结果为一个 flag 开头的可见字符串,正则形式为: flag{[0-9a-zA-Z]+}。
其中 lab1-1 是简单的逆向入门用于熟悉软件和环境,lab1-2 和 lab1-3 涉及到数学计算,需要通过基本的数学运算性质进行逆计算得出 flag,lab1-4 需要对原有的二进制进行一些修改,之后才能进行正常的输入输出。
每个程序在输入正确的 flag 后会显示 good,如果 flag 不正确将会输出 error flag。

lab1

在编译器网站(Compiler Explorer)对简单的 C 语言进行编译后,我发现字符串的编译结果是反着的。比如某个字符串是“abc”,把编译出来的十六进制字符转字符串后,得到的结果是“cba”。
在 IDA 反汇编得到十六进制数如图所示,进行十六进制转文字,解出的是反着的正确答案。将结果倒置即可得到正确结果,为“flag{Welcome_t0_security_c0urse}”。

在这里插入图片描述

lab2

对文件进行反汇编,得到伪代码如图。大概意思为 “a[i]^i=” 预先存进程序的字符, ^是按位异或。
如果当前为第一轮,假设第一个数为 x,为八位二进制数,x 和 0000 0000 进行异或,结果是 0x66(0110 0110),可计算出 x 为 0110 0110,对每一位进行计算,即可通关。目标字符已经给出,通过计算可以得出最后结果是:“flag{xor_is_reversible}”。

for ( i = 0; i <= 22; ++i )
{if( (i^v31[i]) != *(&v8 + i) ){	puts("error flag");exit(0);}
}
puts("Good");

在这里插入图片描述

lab3

将文件放入 Ghidra,根据反汇编的伪代码,可以得出目标字符为“flag{equation}”。

在这里插入图片描述

lab4

查看反汇编的伪代码,发现 main 函数内没有内容,查看源文件,发现函数入口处应该是 55,但是文件里是 C3,在 IDA 里对文件进行修改,如图 8,得到 showflag 函数。
函数大致意思为 a[i](输入的字符)先和 i(当前的轮次)异或,得到的结果再 i 相加,最后和程序预先输入的字符比较。如果在第一轮,假设需要的第一个字符为 x,将二进制 x 和 0000 0000 进行异或,再加0000 0000 即为之前存进来的十六进制 66,即 0110 0110,因此 x 为 0110 0110,换为字符即“f”。
因为由 lab1-1 得出反汇编出的伪代码中的字符串都是倒着的,因此读的时候应该反着来,比如 local_28 的正确破解方式应该是“66 6e 65 67 83 7a 6d 7a”以此类推。最后结果为“flag{patch_your_file}”。

在这里插入图片描述
在这里插入图片描述

for ( i = 0; i <= 20; ++i )
{if(i+(i^*(_BYTE *)(i + a1)) != *((_BYTE*)&v3 + i) ){puts("error");return *MK_FP(__FS__, 40LL) ^ v6;}
}

相关内容

热门资讯

议论文写作六种结构模式 议论文写作六种结构模式  由议论文的三要素引入议论文段常用结构模式:观点+材料+评论+小结。下面是小...
像的比喻句 有关像的比喻句(精选125句)  一片片飘落的树叶,像一只只飞舞的蝴蝶,真美啊!以下是小编为大家整理...
制定新年计划英语作文(通用6... 制定新年计划英语作文 篇一My New Year's ResolutionAs the new ye...
朱自清《春》的创作背景 朱自清《春》的创作背景  《春》是现代散文家朱自清的作品。《春》是朱自清的散文名篇,最初发表于193...
近代文学家废名及其作品 近代文学家废名及其作品  废名,湖北黄梅人,原名冯文炳,中国现代作家、诗人、小说家,在文学史上被视为...