[BUUCTF-reverse1]
1.打开IDA导入文件(其实首先要放入Exeinfo PE中查看信息)
2.shift+f12搜索关键字符串 如
3.遇到问题 摸到字符串地址的时候 不能用f5查看伪代码 并且不能转换成框图 怀疑原因是ida没有识别出这些是函数
实际上,跟进下面sub_1400118C0地址,就能找到函数所在。(已然是框图显示)

F5查看loc_140011948的伪代码(改正:其实F5已经结合整个框图)
1 int64 sub_1400118C0() 2 { 3 char *v0; // rdi 4 signed __int64 i; // rcx 5 size_t v2; // rax 6 size_t v3; // rax 7 char v5; // [rsp+0h] [rbp-20h] 8 int j; // [rsp+24h] [rbp+4h] 9 char Str1; // [rsp+48h] [rbp+28h] 10 unsigned __int64 v8; // [rsp+128h] [rbp+108h] 11 12 v0 = &v5; 13 for ( i = 82i64; i; --i ) 14 { 15 *(_DWORD *)v0 = -858993460; 16 v0 += 4; 17 } 18 for ( j = 0; ; ++j ) 19 { 20 v8 = j; 21 v2 = j_strlen(Str2); 22 if ( v8 > v2 ) 23 break; 24 if ( Str2[j] == 111 ) 25 Str2[j] = 48; 26 } 27 sub_1400111D1("input the flag:"); 28 sub_14001128F("%20s", &Str1); 29 v3 = j_strlen(Str2); 30 if ( !strncmp(&Str1, Str2, v3) ) 31 sub_1400111D1("this is the right flag!\n"); 32 else 33 sub_1400111D1("wrong flag\n"); 34 sub_14001113B(&v5, &unk_140019D00); 35 return 0i64; 36 }
根据 if ( !strncmp(&Str1, Str2, v3) ) 可以明白,这是让str1和str2比较。
跟进str2可以发现,flag就是{hello_world}

但根据上面的代码,会发现str2被处理过。

大意就是,从str2字符串第一位开始遍历到最后一位,如果是111,则变成48.
111和48是什么? 其实是ASCII码,选中后按R即可变成字母。(感谢之前瞎玩的经验,毕竟一个rz问题也会困扰我很久)

所以很明显,实际上的flag就是flag{hell0_w0rld}。
思考:有无用dbg进行动态分析的方法?能不能直接从start函数跳转进目标函数?看伪代码其实是种捷径,但我连这种方法都忘了,并且这里面还有许多不懂的。
1.什么是DATA XREF
2.这个rdata的地址命名有什么含义
这个感觉,就好像直接右键记事本打开文件,然后搜索flag一样莫名其妙。大概就是要这样不断积累经验吧。
PS:还有个致命问题,打开文件提示0xc000007b错误,无法打开,导致我不能放进dbg动态分析。想解决,为此浪费了许多时间,但都无果。


浙公网安备 33010602011771号