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的汇编代码如下