这是题目资源链接
0-ctf
查看文件是否加壳,这个文件是加壳的,可以在linux上进行脱壳, 如图,chmod +x rel
进行脱壳:
然后在IDA 64上打开并分析文件,按F5
进行反汇编,可得到如下函数:
分析可知,flag{7ujm8ikhy6}
即为答案.
1 helloworld
首先通过OllyDbg打开文件
然后点击运行,并得到结果:
之后在菜单栏debug->restart
重新启动项目:
在汇编框内右键->使用中文搜索引擎->智能搜索
在搜索框内输入想要搜索的文本,
选定后跳转到指令模块,选择Follow in Dump->immediate constant
可以获取到位置并进行修改
之后保存:
02_CTFRe(1)
对于这道题,我们先用IDA 来寻找关键字:
1. 反汇编:
打开IDA,待IDA加载完成后,按F5
进行反汇编,得到主函数,点击进到主函数:
2.分析
其中sub_45A7BE
表示输入的n
失败时的场景,那么sub_457AB4
应该表示成功时调用的函数.点击进入:
可以看到调用成功后会有done!! the flag is
的关键字,那么我们接下来就在OllyDbg
中动态分析.
3.ollydbg中分析:
首先在OllyDbg中打开,并点击运行:
在汇编指令栏右键点击,选择中文搜索引擎->智能搜索
:
然后,右键寻找字符串done!! the flag is
:
找到后点击跳转到相应的指令中,:
通过分析,我们可以向上回溯找到将这个语句压入的指令push ebp
, 点击,然后我们,开始向上查询函数:
继续向上查找:
我们找到了这个函数:
接着向上查询看指令如何跳转:
很明显,失败的话直接跳转到sorry....
上面.所以我们直接把这个跳转指令改为跳转到成功的call
函数上,在这里我的成功的call函数的地址是008BF66C
,所以我们将这个语句改为jmp 008BF66C
:
然后我们进行测试:
可以看到,成功!!
03_Crackme(1)
首先打开文件easy_crackme.exe
,输入账号密码,获取执行结果:
然后用IDA打开文件:
点击call函数:
进入以后,使用alt+T
组合键搜索文本sorry
, 找到与其有关的函数:
点击Good job
进入命令界面后,再按F5
进行反汇编,得到如下函数:
经过简单判断,可知,成功后会返回Good job dude...
,然后我们就可以愉快的使用Ollydbg
来调试了.
找到与Good ...
有关的文本的
点击跳转,分析后发现jnz short easy_.....
会跳转到失败的命令行
所以需要将其改为直接跳转jmp 0042FB05
或者 nop
:
然后,我们再测试一下:
之后保存更改的可执行文件:
完成!!
04_CTF_Re(2)
首先用exeinfoPE查看是否加壳:
然后我们需要脱壳,kali系统没有upx的话可以使用sudo apt install upx
下载
然后使用IDA打开,按F5进行反汇编
:
可以看到,函数要与flag
进行比较,我们点进去flag,查看flag内容:
测试:
成功!!