攻防世界-reverse-BabyXor

首先查壳,发现无法识别

程序可能被加密或压缩过,所以需要脱壳。
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

原文地址:https://www.cnblogs.com/pluie/p/13161074.html