首先查壳,发现无法识别
程序可能被加密或压缩过,所以需要脱壳。
OD载入,
脱壳后再次查壳,是VC++
IDA中找到主函数,_filbuf等函数参考文末文章
其中函数sub_40108C
函数sub_401041
函数sub_4010C3
其中sprintf函数:
int sprintf(char *string, char *format [,argument,...]);
- 作用为把格式化的数据写入某个字符串缓冲区
- string --指向数组指针
- format --字符串,指定参数的格式,与printf的输出格式相同
- argument --参数
函数中没有找到输出的代码,flag应该是这三个函数中生成的字符串。
一种思路是分析代码写exp。
另一种思路,因为这三个函数的操作与我们输入的字符串没有关系,所以可以动态调试:
OD载入,分别在这三个函数中下断点,注意寄存器区域
把三个字符串连起来即为flag
参考和相关文章:
https://www.cnblogs.com/volcanol/archive/2011/06/09/2076907.html (_filbuf等函数)
https://www.runoob.com/cprogramming/c-function-sprintf.html