IDA下得到反汇编代码

显然,对于judge这个常量先与或处理,而后读取字符串s,判断s长度是否为14;
接下来这个judge(s)让我看不懂了,judge不是个数组吗,怎么可以这么使用?
<关键点>看了其他大佬的WP才知道,原来还有将data转为code执行的骚操作,所以这里其实是将judge数组的内容当成一个函数来执行,可以使用热键C将data转化为code,也可以用U恢复。
调试程序,先让其运行完字符串的初始处理,在if处下断点,观察judge函数的汇编代码
1.
push rbp 和mov rbp,rsp是栈指针操作
鼠标移动到rdi上,可以知道rdi存储着我们输入的字符串s的内容,mov [rbp-28h],rdi 则是将其拷贝到[rbp-28h]上;接下来将一堆字符入栈,数了一下,刚好14个,对应flag的长度,接下来必有用处; 然后给[rbp-4]赋值0,跳转到loc_600B71。
loc_600B71的汇编代码如下

比较[rbp-4]与14的大小 ,小于等于则进入loc_600B49,显然是个14次的循环,[rbp-4]即为i。
其大意如下:
rdx=eax=i ;rax=&s[i

本文详细介绍了在攻防世界Reverse进阶区的一个挑战中,通过IDA分析反汇编代码理解程序逻辑的过程。文章揭示了如何将数据转化为代码执行,并在调试过程中发现了关键的异或操作和循环,最终找到了解密flag的步骤,解密后的flag为{n1c3_j0b}。
最低0.47元/天 解锁文章
755

被折叠的 条评论
为什么被折叠?



