文章目录
前言
使用ida+kali里面的edb进行分析,然后编写python脚本生成flag。
一、查看文件类型
使用exeinfo查看文件类型,得知是elf文件-64位。需要在linux环境下动态调试。
二、使用ida的f5反编译
发现这个程序运行时会读写文件,于是就在kali虚拟机里tmp文件夹下,新建一个文件flag.txt。
分析这个代码的逻辑:
1首先生成一个参数t,生成过程如下:
t的值通过使用edb调试得到值为:
t = "SharifCTF{b70c59275fcfa8aebf2d5911223c6589}"
2 .将参数u写入到flag.txt文件中
u的值是44个“*”组成的字符串。使用fprintf函数将u写入flag.txt文件中。
3.循环操作文件,将t中的值按照一定顺序来替换文件中的“*” 。
注意第25行和16行是在将t中的值按照一定顺序来替换文件中的“” 。 但是第27行和第28行是使用u重新覆盖文件。所以按照这个代码的逻辑,改完之后就拿“”覆盖这个文件,所以动态调试将永远得不到flag。我们可以写一个python脚本复现第25行和第26行的过程,从而得到flag。
4.准备数据
首先需要得到p的值,使用ida-python输出p的值。
from ida_bytes import get_dword as dd
addr = here()