Doraemon
小叮当你在哪#
小叮当藏起来了,你能找到他吗?
出题人:@ShowMaker
文件{:download="Dora.zip"}
第一层#
解压之后有仨文件,
- Doraemon1
- Doraemon2
- Doraemon4
一个一个扔进DIE,发现 Doraemon4
是 Windows x64 可执行文件
执行一次,提示 No Such File
,扔进 IDA 静态+动态分析,发现是把 Doraemon3
RC4 加密到 Doraemon1
考虑到 RC4 是对称加密,只要再跑一次程序就可以解密出 Doraemon3
但是本程序在 RC4 的过程中,还会随机插入垃圾数据
srand(keystream[v8 % 512]);
v9 = rand() % 4;
for ( i = 0; i < v9; ++i )
{
v5 = rand();
fputc(v5 % 256, v7);
}
但是这里的随机种子是根据密钥流定的,也就是固定的,所以只要把 fputc(v5 % 256, v7)
改成 fgetc(Stream)
即可
即
mov rdx, [rbp+230h+var_208] ; Stream
mov ecx, eax ; Character
call cs:fputc
改成
mov rcx, [rbp+230h+Stream] ; Stream
nop ; Stream
nop
call cs:fgetc
然后重命名 Doraemon1
为 Doraemon3
,运行一次程序,即可解密出 Doraemon3
第二层#
扔进 DIE,发现又是个可执行文件,运行一下
你是来找谁的呀
<输入字符串+回车>
小叮当就在在 .\Here,去找到他吧~
IDA静态分析了一下,是对 Doraemon2
加/解密之后放进 Here
,以输入的字符串作为密钥
我是来找 Doraemon
的,输入 Doraemon
,把输出的 Here
扔进 DIE, 是个 GIF 图片
![[DoraIsHere.gif]]