Revers篇:攻防世界reverse进阶re2-cpp-is-awesome
作者:互联网
攻防世界reverse进阶re2-cpp-is-awesome
IDA分析
很简单的一个程序
程序流程分析
- 首先检查参数,参数少于2就退出,并提示:Usage: ./re2-cpp-is-awesome flag,也就是要给main传参。
- 然后获取到参数,在堆申请了一段空间,大小为参数长度+1,并把参数放进去。
- 把begin赋值给v11,把end赋值给v14
- 进入while循环,第一个if判断是否到字符串结尾,到了就break退出。
- 第二个 if 判断,v9是否等于data段指定的字符,不等就退出。这里是以单字节判断,没办法去内存找数据,一个不相等就退出了。
- 好在知道v9是原始flag,又知道data段中的数据,直接用数据运算即可。
获取flag
#include <iostream>
int main()
{
char flag_list[] = "L3t_ME_T3ll_Y0u_S0m3th1ng_1mp0rtant_A_{FL4G}_W0nt_b3_3X4ctly_th4t_345y_t0_c4ptur3_H0wev3r_1T_w1ll_b3_C00l_1F_Y0u_g0t_1t";
int dword_ptr[] = { 0x24,0x00,0x05,0x36,0x65,0x07,0x27,0x26,0x2D,0x01,0x03,0x00,0x0D,0x56,0x01,0x03,0x65,0x03,0x2D,0x16,0x02,0x15,0x03,0x65,0x00,0x29,0x44,0x44,0x01,0x44,0x2B };
char v9 = 0;
int v5 = 0;
while (v5<(sizeof(dword_ptr)/4))
{
v9 = flag_list[dword_ptr[v5]];
++v5;
printf("%c", v9);
}
return 0;
}
运行结果
结果为:ALEXCTF{W3_L0v3_C_W1th_CL45535}
标签:reverse,re2,awesome,0x03,flag,0x44,v5,v9 来源: https://blog.csdn.net/weixin_44644249/article/details/113690530