做题笔记。(可以作为例题。)
下载 查壳
64ida打开。
分析:
动态试一试。
跟进judge
很奇怪是一段.data(数据段)
报错,但是程序并没有结束:
我们对其进行处理:(动态函数处理)
因为call不能用在.data段,call一般是用于call函数的。说明其judge很大程度是一个函数,而非数据。
脚本:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>int main()
{char a1[] = { 102,109,99,100,127,107,55,100,59,86,96,59,110,112,'\0' };for (int i = 0; i < strlen(a1); i++){printf("%c", (a1[i] ^ i));}printf("\n");system("pause");return 0;
}
flag{n1c3_j0b}
总结:自我感觉考查对于数据段的识别,以及对汇编命令的理解、以及处理手段。
例如:
push xxx
push xxx
call xxx
(一般是调用了某个函数。 call基本就是用于函数调用)
【ptr+一般是参数】
【ptr-一般是常数/局部变量】