在做题之前我们先了解一些知识点,首先是汇编中的知识点,汇编中,数据和代码可以说是一回事,数据和代码可以无条件相互转换,换句话说,数据就是代码,代码就是数据
接下来开始做题,简单的查个壳64bit就不说了,直接丢进ida64中进行反编译,进入main函数分析如上分析,此处我们就需要猜测到judge一定是个函数,而且由上面的知识点可知,judge一开始又是一个数组,经过了异或处理之后,又变了样,这边我们直接进行远程Linux调试(主页有教程),断点打在第十二行,直接动态调试后,再次进入数组judge,里面是处理过后的数据,这是我们选中这些数据,按c,将数据转换为汇编代码,选force强制执行,再点击yes强制转化为汇编代码,然后再选中这些代码(可以看左侧红色的部分,就是新产生的汇编代码),按p键,转换为函数,再按tap,就变成c代码的界面了,如下,进行分析就ok了很简单的代码分析,这边直接上脚本了
#include<iostream>
using namespace std;
int main()
{char str[] = "fmcd\x7Fk7d;V`;np"; //\x7F由127转字符转来for (int i = 0; i <= 13; i++){str[i] ^= i;cout << str[i];}return 0;
}
在ida中选中v4[4]=127中的127,按r转换为字符形式,然后将字符串都连接起来,得到flag{n1c3_j0b}