02 2025 档案
摘要:这道题又是新的题型,研究了以下,要好好记录下来。 首先是看程序开启了哪些保护: 发现没开启栈溢出保护,我们继续往下看程序的逻辑: 一个简洁的页面,到此为止我们并不能看出可以利用哪些攻击方式,我们跟踪一下函数encrypt和begin发现begin只是一个简单的显示程序,而重点在于encrypt函数,
阅读全文
摘要:太难了太难了,这道题是花指令+迷宫逆向,本来以为学了汇编就学会了花指令,没想到nop哪里才是关键 首先查壳,外面一个"UPX"壳,直接去掉,检查里面的函数逻辑,发现不能正常反编译 然后下面还有一大堆数据不知道啥情况,这就是花指令导致的,中间的call和jnz均指向了一个无法成功跳转的地址(没有意义的
阅读全文
摘要:又他妈的是新生赛,我都不是新生了还天天被折磨。 首先查壳分析,然后反编译程序,可以看到程序逻辑还是比较简单的 我们进行一下整理和重命名,可以得到完整的程序逻辑: int __cdecl main(int argc, const char **argv, const char **envp) { in
阅读全文
摘要:这道题很难,但是并不难在他的解题要用到的方法和技巧上,而是难在它的题目设计。做的过程中真的有一种闯关的感觉,非常有趣 首先我们通过对字符的定位我们可以来到sub_4009C6函数 __int64 sub_4009C6() { __int64 result; // rax int i; // [rsp
阅读全文
摘要:这道题很有难度,有些地方还是一知半解,看了很多别人的题解,在这里留下记录 首先我们对程序进行逆向分析,我们可以很容易的得到逆向逻辑 int __cdecl main_0(int argc, const char **argv, const char **envp) { DWORD v3; // ea
阅读全文
摘要:没想到我会被这种题目难到,这是为什么呢?我认为是因为我对凯撒移位的不够了解,以及对取模运算的认识不够,因此作此记录 程序的加密逻辑很简单,分别对输入的字符进行区分大小写的移位操作 而重点便在于这里,以下面的程序为例: new_char = (original_char - 51) % 26 + 65
阅读全文
摘要:这道题对我来说有点新奇,它利用了程序中自带的system程序,和字符/bin/bash构造了一个后门函数让我们看看是怎么做的吧 首先和程序进行交互: 发现是一个读取输入相关的程序,我们对其进行分析,首先用checksec检测到了NX保护,但是没关系。我们再用IDA进行程序的分析: 我们看到了这里的r
阅读全文
摘要:这道题挺简单的,但是为什么我没做出来呢?我从里面学到了什么?在此记录一下 首先,开头先进行查壳,发现UPX壳,用工具脱壳即可 然后我们进入程序的程序逻辑 我们可以明显看到上方的变量是连续的,这里我一开始是这么将就着用的,所以导致了我后续的思路混乱。按照其他大佬的意见,我使用"Y"重新把数据定义了一遍
阅读全文
摘要:学到一个新的做法,在每次分析前,先使用checksec来检查程序是否有特定的保护 这里我们可以看到程序开启了NX和Canary保护: NX保护,实际上就是将数据段,设为仅对代码段可见,操作者无法对数据段中的内容进行修改,也不能被执行 Canary保护,会在栈帧中(一般是返回地址之前)插入一个检查值,
阅读全文
摘要:这道题目比较有趣,首先我们分析它是一个不套壳的程序,然后直接用IDA打开 他的加密逻辑也很直观: flag一定十个长度为14的字符串 judge在这里是一个函数指针,指向judge数组的第一位 可是当我们点击judge却无法查看它的程序逻辑。 我们注意到在上面有这样一段程序 for ( i = 0;
阅读全文
摘要:我们将文件拖入虚拟机中运行看到这样的效果 其中上方的数字是不停变化的,下面的次数也在不断的增长。我们猜测这两者是有关联的。 接下来我们进行反编译程序的分析。最上面的字符输出肯定是与printf函数有关,所以我们检索printf在main函数中的调用 time(&timer); v13 = 1; v2
阅读全文