Reverse逆向工程入门CTF刷题记录
攻防世界
666-UNCTF
解题过程
DIE查壳
发现是64位程序,无壳,直接拖进IDAx64
不是很懂这里的各个选项代表什么意思,但是一路continue后可以发现一个flag
但是试了下是错误的flag,还是继续找别的地方,F5反汇编查看伪C代码
- 首先定义了240长度的字符串数组,和240长度的字符串v5
- memset(a,b,c):将a的c长度字节赋值为0,这里相当于把s的0x1e长度都赋值给0
- 打印please input key,没啥好说的
- 获取用户输入,并赋值给v5
- 调用encode(v5,s),这个是真正需要逆的加密方法
- 比较v5和key的长度,如果不一样长直接退出
- 如果一样长的情况下对比s和enflag的值,如果一样就告诉我们正确了。
双击enflag变量可以跳转,同时知道key的长度为12,如下图所示
再观察下encode到底干了什么,双击跳转
可以看到是简单的加减操作和异或操作,都是可逆的,给出反解脚本。
1 | key = 0x12 |
执行得到flag
ps:写脚本的时候踩了个异或优先级的坑,异或的优先级小于加减运算,示例如下:
知识点
- DIE可以查壳并且查看文件格式,Linux或者mac下的file可以看格式
- IDA的F5可以反汇编,查看伪C代码
Reversing-x64Elf-100
- die查看发现无壳,且为64位程序
ida64打开,F5反汇编
跟进方法,得到伪代码
简单移位操作,直接写出解题脚本即可。(逆向求解或者爆破都可以)
1 | v3=["Dufhbmf", "pG`imos", "ewUglpt"] |
easyRE1
die查看无壳,F5直接看到了flag…
lucknum
die查看无壳,F5直接看到了flag…
程序本身逻辑是获取用户输入,如果是7就返回flag,否则返回sorry
1000Click
解法1(我的解法)
die查询无壳
搜索字符串flag{ ,得到flag
PS: 太取巧了,万一不叫flag呢?
解法2
本文作者:
yd0ng
本文链接: https://blog.yd0ng.top/2025/01/19/Reverse-CTF%E5%88%B7%E9%A2%98/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
本文链接: https://blog.yd0ng.top/2025/01/19/Reverse-CTF%E5%88%B7%E9%A2%98/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!