后面的题目也越来越难了,比较难比较复杂的题目会单拉出来写,这里就记录一些比较简单的题目。
easy_Maze
看名字就知道是个迷宫题,IDA打开看看
1 | int __cdecl main(int argc, const char **argv, const char **envp) |
首先新建了三个地图,初始化了其中一个,然后利用下面两步分别初始化另外两个图
1 | Step_0((int (*)[7])v9, 7, (int (*)[7])v7); |
具体的操作在Step_2((int (*)[7])v5, 7)
里,可以看到只用了最后的一个图,可以直接动态调试dump
出地图来,然后看一下具体操作
1 | __int64 __fastcall Step_2(int (*a1)[7]) |
难度不是很大,经典的wasd
,只能经过1的位置,走到最后就可以了,整个路径的操作就是flag,格式为UNCTF{}
dump
出的地图为
1 | 1 0 0 1 1 1 1 |
走出来就可以了
1 | ssddwdwdddssaasasaaassddddwdds |
验证一下
1 | root@rycbar17th:~# ./easy_Maze |
得到flag
1 | UNCTF{ssddwdwdddssaasasaaassddddwdds} |
ReverseMe-120
将输入的字符串进行base64加密然后异或,和明文字符串进行对比
1 | if ( v18 && *v19 >= v13 ) |
有很多的无用代码,这里是关键代码,可以看到每四个字节进行了拼接,输出为三个字节,很显然是base64。
Replace
湖湘杯2018的题目,当时还参加过,那时候连这道题都毫无头绪(真的菜
这就是个简单的换表题,先upx脱个壳
1 | int __cdecl main(int argc, const char **argv, const char **envp) |
处理了半天,高四位低四位的处理来处理去,最后还要合在一起……
1 | target = [ |
输出flag
1 | flag{Th1s_1s_Simple_Rep1ac3_Enc0d3} |
babyRE
又是一道SMC,不知道为什么最近遇到的还是挺多的
没有任何加密,IDA打开
1 | int __cdecl main(int argc, const char **argv, const char **envp) |
经典的输入然后验证,不过judge
函数是打不开的,看前面的操作,典型的SMC,写个IDC脚本跑一下
1 | #include <idc.idc> |
然后改一下judge
函数的结束位置,F5
分析,逻辑很好懂
1 | signed __int64 __fastcall judge(__int64 a1) |
这里其实有三个变量,&v2-1
的位置是一个整型,实际上是索引值,&v2-5
是我们输入的字符串,&v2-19
是最终的目标,只有一个异或操作,很简单就可以跑出来结果
1 | target = [0x66, 0x6D, 0x63, 0x64, 0x7F, 0x6B, 0x37, 0x64, 0x3B, 0x56, 0x60, 0x3B, 0x6E, 0x70] |
输出flag
1 | flag{n1c3_j0b} |
What-does-this-button-do
不知道为什么这题放在了这个位置,简单得不能再简单的一个mobile
jadx打开,很快就可以找到关键代码
1 | public void onCreate(Bundle savedInstanceState) { |
然后直接输出把flag输出就可以了
不过这题要去掉外面的flag{}
提交
1 | w4nn4_j4r_my_d3x |
76号
单字检测,pintools爆破,得到flag
直接滚轮子
1 | flag{09vdf7wefijbk} |
easy_go
这题根据名字也知道是go逆向,IDA打开是乱七八糟的函数,也没有任何的symbol,用go重命名的插件给函数重命名,发现一个base64的解码函数和奇怪的字符串,字母表不是很清楚,动态调试一下
1 | [-------------------------------------code-------------------------------------] |
找到字母表和密文,解密得到flag
1 | flag{92094daf-33c9-431e-a85a-8bfbd5df98ad} |
easyCpp
这题有很多c++标准库的调用,整体来说不是很难,可以通过调试发现每一部分的作用,也不是很难
re5-packed-movement
极其无聊的一道题,硬生生用mov
实现了所有操作,要求输入flag
对比一下,直接objdump
就能再汇编代码里找到逐字符将flag移入到某个地址,或者因为是逐字符验证,直接pintools
爆破也可以
the_maya_society
大致意思就是对当前时间进行一个md5
加密,然后和一个字符串连接成目标网址,如果这个目标是对的后面的通信就会得到正确的flag……
时间应该是2012-12-21
2ex1
mips
,并且strip
过,什么信息都没有,打开输出发现很像base64
,但应该换过表,ghidra
打开找找可疑字符串,发现奇怪的字符串
1 | @,.1fgvw#`/2ehux$~"3dity%_;4cjsz^+{5bkrA&=}6alqB*-[70mpC()]89noD |
试一试就得到了flag
1 | flag{change53233} |
对这个字符串表进行交叉引用查询到话也可以找到进行base64
编码的函数
Comments