做题笔记:
草,不要怀疑自己。
下载 查壳。
64ida打开。
先运行一下程序:
先解决第一个问题 ——是不是输入的长度为32。
tips:这题加载了混淆函数等 ida 反正我跳不过去,pwndbg我用的不是很熟悉。
不过没关系 直接跑一下就知道了。
提示变了 说明思路没错。
接下来解决第二个问题 ——是不是v2 v4 都是对于input的加密(v2一定)
还是先看v2,因为在ida中 我们已经确定了v2肯定是加密input的。
再看v4
所以,v4也是对于input的加密。
还是不确信?那就直接跟踪它,找到第一次引用的地方。
清晰可见,而且此后的[rbp+var_28],都是作为值传给其他指令,没有作为接收。
疑问:你怎么确定,此前看到的那段数字+字母的组合就是密文?
那就跟踪它呗。
在跟踪这整个函数:
在跟进这个判断:
熟悉不咯?
脚本:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
unsigned char key[32] = {
0x33, 0x32, 0x37, 0x61, 0x36, 0x63, 0x34, 0x33,
0x30, 0x34, 0x61, 0x64, 0x35, 0x39, 0x33, 0x38,
0x65, 0x61, 0x66, 0x30, 0x65, 0x66, 0x62, 0x36,
0x63, 0x63, 0x33, 0x65, 0x35, 0x33, 0x64, 0x63
};
char decode4[50] = " ";
for (int i = 0; i <32; i++)
{
decode4[i] = (key[i] - 11) ^ 0x13;
}
char decode2[50] = " ";
for (size_t i = 0; i <32; i++)
{
decode2[i] = (decode4[i] - 23) ^ 0x50;
}
printf("flag{%s}", decode2);
printf("\n");
system("pause");
return 0;
}
flag{tMx~qdstOs~crvtwb~aOba}qddtbrtcd}
= . =
题外话: 最开始我Tmi 以为我思路错了。 - - 稀奇古怪!!
不亏是 “我的”世界 想怎么搞就怎么搞
## 最近在学渗透测试,每天只做一道题。。。
国庆节快乐!~