BUU-刮开有奖
刮开有奖
查壳发现是一个32位无壳
进入WINMain主函数
关键点在于DialogFunc函数里面,进去查看
看一遍下来通过代码GetDlgItemTextA(hDlg, 1000, &String, 0xFFFF);知道了String是我们输入的flag。通过代码**if ( strlen(&String) == 8 )**,我们知道flag的长度应该是8。再从上往下慢慢分析,先给V7-V17赋值,进入函数sub_4010F0
12345678910111213141516171819202122232425262728293031323334353637383940414243444546int __cdecl sub_4010F0(int a1, int a2, int a3){ int result; // eax int i; // esi int v5; // ecx int v6; // edx result = a3; for ( i = a2; i <= a3; a2 = i ) { v5 = 4 * ...
2021 DASCTF X BUUOJ 五月大联动
PaperPlease先查壳,发现没有,用IDA打开,比较简单,直接看main函数
先比较了一下前面几位输入的是不是和DASCTF{ }一样,然后调用了一下这个巨长的函数,打开看一下
可以看出是和一段数据进行了异或操作,off_4010点进去看看
可以看到一串数据,思路清晰了,直接解
123456789r = "5c715207e3abed7dfb7c8ea9c82d0e29"t = [0x56,0x5,0x53,0x52,0x4,0x3,0x53,0x54,0x4,0x0B,0x53,0x51,0x6,0x6,0x0F,0x55,0x5,0x5B,0x3,0x56,0x0E,0x7,0x57,0x0E,0x1,0x0D,0x56,0x0,0x4,0x6,0x0A,0x5D]flag=""for i in range(len(r)): flag += chr(ord(r[i])^t[i])print(flag)
最后在加上DASCTF{ }就可以了
end该程序逻辑其实也十分清晰,就是一道迷宫题,如下图所示,2代表前进七步,8代 ...
ESP定理
ESP定律一.准备知识在我们开始讨论ESP定律之前,我先给你讲解一下一些简单的汇编知识。1.call这个命令是访问子程序的一个汇编基本指令。也许你说,这个我早就知道了!别急请继续看完。call真正的意义是什么呢?我们可以这样来理解:
向堆栈中压入下一行程序的地址;JMP到call的子程序地址处。例如:00401029.E8 DA240A00 call 004A35080040102E.5A pop edx在执行了00401029以后,程序会将0040102E压入堆栈,然后JMP到004A3508地址处!
2.RETN与call对应的就是RETN了。对于RETN我们可以这样来理解:将当前的ESP中指向的地址出栈;JMP到这个地址。这个就完成了一次调用子程序的过程。在这里关键的地方是:如果我们要返回父程序,则当我们在堆栈中进行堆栈的操作的时候,一定要保证在RETN这条指令之前,ESP指向的是我们压入栈中的地址。这也就是著名的“堆栈平衡”原理!
3.狭义ESP定律ESP定律的原理就是“堆栈平衡”原理。让我们来到程序的入口处看看吧!1.这个是加了ASPACK壳的入口时各 ...
BUU新年快乐
新年快乐打开IDA一看怎么就两个函数,有问题
查一下壳,有一个UPX壳
可以用工具直接脱壳,这里用一下OD手动脱壳,采用ESP定律的方法找OEP
打开往上找直接看到了POPAX
直接在jmp新年快乐处下断点,F9运行到这里,F8就跳转到OEP
直接右键用OD自带的脱壳
得到一个新的程序
打开直接查看main函数
是一个简单的比较
flag就是:flag{HappyNewYear!}
ISCC2021-RE2
Analysis题目提示分析,直接打开IDA分析
shift+F12查看字符串,找到flag的句子
找到主函数
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354int __cdecl main(int argc, const char **argv, const char **envp){ char Str[3]; // [esp+11h] [ebp-97h] BYREF _BYTE v5[57]; // [esp+14h] [ebp-94h] BYREF int v6; // [esp+4Dh] [ebp-5Bh] char v7[64]; // [esp+51h] [ebp-57h] BYREF char v8[7]; // [esp+91h] [ebp-17h] BYREF int v9; // [esp+98h] [ebp-10h] int i; // [esp+9Ch] [ebp-Ch] __main ...