BUU[WUSTCTF2020]level4
BUU[WUSTCTF2020]level4分析首先查壳,发现没有壳为64位,然后放入IDA分析
然后看英文提示数据结构和遍历,然后分别点进去第8行和第10行的函数看在干嘛
这里分许出来为左根右(中序)
这里分析出来为左右跟为(后序)
然后去看看对应的序号的内容
已知了中序和后序很容易知道这里要求的是前序,开始写脚本
脚本#include<iostream> using namespace std; char mid[] = "2f0t02T{hcsiI_SwA__r7Ee}"; char post[] = "20f0Th{2tsIS_icArE}e7__w"; void pre(int root, int start, int end) { if(start > end) return ; int i = start; while(i < end && mid[i] != post[root ...
美团CTF2021 高校安全挑战赛 Random
美团CTF2021 高校安全挑战赛 Random分析首先查壳,发现没有壳32位exe,然后放入IDA中分析
首先看到congratulation这里,就知道条件是要v7为42,然后发现v7是在上面的if( a == 43 )这个判断语句中,分析一下。得出b这个函数不断与 byte_502138这个函数去比较,每一位,也就是说能知道这个b函数是为42个成员在里面
然后也可以知道这个b函数就是找到flag的关键,看到最开头的部分
要有scanf的输出也就能知道a的初始值为0,再结合这个if的条件和它对应的else语句知道这里是不断的与随机数去异或能得到flag,然后我直接去动态调试去找第一个随机数的种子
然后开始写脚本
脚本#include<stdio.h>#include<string.h>#include<stdlib.h>int main(){ int b[]={ 0x3E, 0xCD, 0xAA, 0x8E, 0x96, 0x1F, 0x89, 0xCD, 0xDB, 0xF1, 0x70, 0xF2, 0xA ...
BUU[Zer0pts2020]easy strcmp
BUU[Zer0pts2020]easy strcmp分析首先将它查壳,发现为64位无壳,然后放入IDA分析,首先shift+F12去找找有什么关键的地方
然后交叉引用去找它
发现只要a2等于后面一串字符就可以了,于是去试flag发现错误,肯定没这么简单。于是我想起了之前做的题,可能藏在initr里,于是进去看看
然后去看看funcs_889的交叉引用
果然是这里有东西被藏起来了,这里进去,发现并没有其他函数,而是一些代码,于是直接跟进funcs_889
看到sub_795是之前没有见过的,于是点进去看看
看到 off_201028 = sub_6EA,说明off_201028这个函数被赋了新的函数在里面,于是点进去看看
这里也就是说off_201028是直接用了strcmp这个函数的地址,而off_201028又被sub_6EA重新赋新的东西,所以说sub_6EA表示是strcmp的意思,于是点进sub_6EA去看看
于是开始写脚本
脚本#include<stdio.h>#include<string.h>#include<stdint.h ...
BUU[ACTF新生赛2020]Oruga
BUU[ACTF新生赛2020]Oruga分析首先查壳,发现无壳是64位的文件,放入对应的IDA中
看到这里,很容易知道解题关键在sub_78A函数里头,于是点进去看看
也就是说这是不能碰壁的游戏,于是开始找到对应的map,也就是unk_201020,很容易知道这是个16*16的map然后去看看winhex下的样子
解题方法那么走的思路是这样的
得到flag{MEWEMEWJMEWJM}
总结这是一种我做过的新的游戏题,类似于普通的迷宫,但是又有区别,还是要注意标题,才能便于分析!
BUU[FlareOn6]Overlong
BUU[FlareOn6]Overlong分析查壳,发现32位,然后去IDA去看看在干嘛
MessageBoxA看见之后就想到了OD,之前做creakeme的消息盒
然后去看一下unk_402008这个函数
然后去看看sub_401160函数
这里可以看到unk_402008这个数组的成员远远不止28位
但是这里再累加,就会发现这里会溢出来,于是就去OD看看
方法一这个地方是设定2008这个数组的大小的,我们将它改成对应的位置,
(AF对应10进制数为175)
然后保存后去运行一下
得到了flag
方法二去看看sub_401000函数
然后发现,好像不缺什么只要把这个Text输出就OK了于是就写脚本
#include <stdio.h>#include <string.h>#include<stdint.h>unsigned char dword_402008[]={0xE0,0x81,0x89,0xC0,0xA0,0xC1,0xAE,0xE0,0x81,0xA5,0xC1,0xB6,0xF0,0x80,0x81,0xA5,0x ...