NEUQCSA 2022 Reverse
TEA
看题目以为是TEA加密

查壳 :64位无壳exe程序

扔到64位IDA里面 找到main函数F5反编译出伪代码

分析一下主函数:
用户先输入一个字符串后经过加密最后与encoude_flag 进行比较
查看一下这个encode_flag字符串
在字符串列表界面看更直观一点
像flag吗 像的
试着交一下,就是flag
Maze
一看题目名字maze知道是迷宫题
那么题目描述中的wasd自然就是移动方式

老规矩查个壳
64位无壳exe程序

丢IDA反编译
主函数伪代码如下
1 | int __cdecl __noreturn main(int argc, const char **argv, const char **envp) |
简单分析一下代码
知道了由wasd控制移动且迷宫大小为16*16
查看字符串列表
看到第一串字符串如下
1 | .data:0000000000403020 00000100 C *+00000000++++++0+0+0++++0+0000+0+0+0000+0++++0+0+0+++0+00000+0+0+0+0+0+++++0+0+0+0+0000+0000+0+0+++0++++0++0+0+0+00000+0000++0+0+0+++0++++00+0+0+0+00000+00++0+0+0+++++0+0+++0+0+0+00000+00000+0+0+++++++0+++++0+0+00000000000+000+0+++++++++++++++00000000000! |
按照迷宫题的套路应该是迷宫的地图,’*’代表入口,’!’代表出口
将这个字符串变成16*16的正方形就可以得到迷宫的地图
然后将走出迷宫的每一步组成字符串进行md5加密(32位小写)即可得到flag
UPX

查壳 64位exe程序带UPX壳

去壳

IDA反编译main函数
关键函数代码如下
1 | int __cdecl main(int argc, const char **argv, const char **envp) |
简单分析一下:
用户输入字符串Str1
然后将Str1中的字符每七个和key中的字符依次进行异或赋值
判断函数将异或后的Str1字符串和encoded_flag字符串进行比较
如果两字符串相同则正确
还是先查看一下encoded_flag 字符串
还要找一下key字符串
异或是可逆运算
逆回去就可以得到flag
1 | ecode_flag : ()4687$v m4'fl{t`fngrv#xh&etc$0br5pyqderg< |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 M1nG's BLOG!