做题笔记。
前言: 会更reverse和web的,都会做。不过,web毕竟纯新手。思路写的会比reverse还烂。。
下载 查壳。
32ida打开。
main函数没有什么,就调用了函数和清零操作 我们跟进函数看看。
得,C++写的。 - - (脑壳痛。)
下个断点运行:
得,会闪退,用WSL看看。
看看,字符串呗。
所以,我们得先有这个文件,否则会退出,打印。(目录截图不给~)
创建好之后,尝试着运行:
跟踪Block的值:
得 - - 错了(已老实)
接下来两种方法:
方法一:
看看此处的汇编代码:
要敏感函数的调用,给 call sub_CE20C0 下断点瞅瞅。
可以看见,此时v9的值。 因为我们试了赋值之后的去提交错了,,,
试一试提交,赋值前的值。
idg_cni~bjbfi|gsxb
方法二:大佬的做法大致如下:
溯源:
因为,v6的值来源于Block
而v6又作为sub_4020C0的参数传入。
我们反跟踪Block,看看哪儿引用了它。
v29哪儿来的? 看汇编:
可知,先进行异或 然后再次进行了一个循环+9的操作。
脚本:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char Block[] = "themidathemidathemida";
char v37[] = ">----++++....<<<<.";
char flag[50] = " ";
for (int i = 0; i < 18; i++)
{
flag[i] = ((Block[i] ^ v37[i]) + 22);
}
for (int i = 0; i < 18; i++)
{
flag[i] = (flag[i]+9);
printf("%c", flag[i]);
}
printf("\n");
system("pause");
return 0;
}