CTF-攻防世界-Reverse-(simple-check-100)

目录

 

simple-check-100

分析文件

使用IDA静态分析

Windows下使用IDA进行动态调试

linux gdb 动态调试


simple-check-100

分析文件

下载附件解压之后发现有三个文件夹前面两个是elf文件(linux),还有一个exe文件(windows)

CTF-攻防世界-Reverse-(simple-check-100)

 

CTF-攻防世界-Reverse-(simple-check-100)

 

CTF-攻防世界-Reverse-(simple-check-100)

不太明白 为什么要给两个,先不管了 先来在windows下分析一下.exe文件

使用IDA静态分析

定位到主函数 main

CTF-攻防世界-Reverse-(simple-check-100)

 

大概流程是这样的将用户输入的key值,使用check_key()函数检查之后如果为真就执行下面的函数

CTF-攻防世界-Reverse-(simple-check-100)

猜测这个函数应该就是输出flag的

很显然 我们只需要在程序执行完check_key函数,返回时

CTF-攻防世界-Reverse-(simple-check-100)

也就是在这个位置 修改eax的值 使其校验为真 直接执行后面的函数

Windows下使用IDA进行动态调试

设置断点 两个

第一个 004015A4 (这个位置修改eax寄存器值)

第二个 004015B3 (让程序停下来)

CTF-攻防世界-Reverse-(simple-check-100)

继续执行

CTF-攻防世界-Reverse-(simple-check-100)

得到 乱码 没法解决

只能去linux上跑elf文件了

linux gdb 动态调试

安装gdb-peda

git clone https://github.com/longld/peda.git ~/peda

echo "source ~/peda/peda.py" >> ~/.gdbinit

选择64位的文件

开始

gdb task9_x86_64_46d01fe312d35ecf69c4ff8ab8ace75d080891dc

设置断点在main函数入口处

b main

开始运行

r

CTF-攻防世界-Reverse-(simple-check-100)

到这里继续单步执行

n

接下来一直单步执行 到达输入key的地方 输入key值 继续

CTF-攻防世界-Reverse-(simple-check-100)

接下来继续单步执行 直到test eax,eax处

查看eax寄存器值

i r eax

修改eax寄存器值

set $eax=1

CTF-攻防世界-Reverse-(simple-check-100)

直接运行至程序结束

c

得到flag 

CTF-攻防世界-Reverse-(simple-check-100)

 

flag:

flag_is_you_know_cracking!!!