-
-
[原创]kctf2021 第七题 千里寻根
-
发表于: 2021-5-27 10:22 9659
-
程序运行时,程序代码和栈会在100MB内存空间随机转移,代码带着自解密。动态分析与静态分析均难以实现,写了个x64dbg script,找出栈地址的数据变化
根据栈数据变化,调试程序,具体方法为在栈上数据下硬件断点,运行2次,此时RDI为栈迁移后的地址,取消之前的断点并在迁移后的栈上下断点,跟踪程序,找到关键的汇编指令。
第1部分程序对2组16字节进行变化组合,进行相同的加密。正向程序如下
第2部分由于之前得到一串可见字符,按照程序内的码表发现00-3f的index均是ascii字符,可能是base64,经调试发现是base64码表加上组合变换解码。
第3部分将前8字节按照4字节1组,每组里按照顺序xor下一个字节,最后xor固定值 0x8267F5D9B0EA143C,此时结果应为输入的前半。
最后部分将16字节进行变化组合,进行第1部分的加密。
要得到的目标串是{0x4b,0x43,0x54,0x46,0x00,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10}
计算出可能的字符串
在程序解密出2组16字节时,将结果替换为自己的字符串,观察结果
发现输入bmIYSkxs9lWvlRBIXxh9WpMbOjODgFnv时,解出来字符串为49 43 56 46 00 1A 19 18 17 16 15 14 13 12 11 10,2个字节差0x2,修改算法
a[4]=p[1]^t[11]^2;
a[5]=p[0]^t[11]^2;
修改s='65C5B4667E647CC69D461DECD2E9CD6C'
得出正确字符串bmIYSkxs9lWvlRBIXxh9WpMbNjODgFmv
修改main函数
同理需要修改部分代码得到正确结果
a[4]=p[1]^t[11]^0X2000;
a[5]=p[0]^t[11]^0X2000;
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
- [原创]kctf2021 第八题 众叛亲离 5546
- [原创]kctf2021 第七题 千里寻根 9660
- [原创]kctf2021 第六题 寻回宝剑 9234
- [原创]kctf2021 第四题 英雄救美 8839
- [原创]kctf2021 第二题 南冥神功 9048