reverse1
reverse 1
快捷键:
shift+f12 字符串搜索窗口
x交叉搜索
f5反汇编c
r数字转ascii
解法:
进去是一个exe程序,可以用脱壳软件脱壳,
但是这个没有壳
直接ida反汇编就ok
1.查看
shift+f12 字符串搜索窗口,搜flag,找到相关内容
双击打开,再交叉引用找到文件位置并打开(找到这个字符串在什么时候被引用了),反汇编c看代码

1.1 strncmp函数
strncmp(Str1, Str2, v5)
比较前两个字符串,前v5个位置;
相等值为0;
大于值为正数;
小于值为负数;
str1是什么?
->
sub_1400111D1(“input the flag:”);猜测d1是printf;
sub_14001128F(“%20s”, Str1);
可以看到str1是我们输入的内容;
str2是什么?
->
寻找这个字符串

1.2 for循环遍历,把所有ascii为111的字符都换为48
这里光标指向后按r,可以把ascii转字符
得到:

1.3 综合
1 | if ( !strncmp(Str1, Str2, v5) ) |
那么我们输入的str1必须要和str2被转换后的值一摸一样才能得到”this is the right flag!\n”
那不就表明这时候的str1不就是flag吗?
具体原文:
1 | int __fastcall main_0(int argc, const char **argv, const char **envp) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 24kmagic!
评论

