首页
社区
课程
招聘
[原创]kctf2021 第七题 千里寻根
发表于: 2021-5-27 10:22 9659

[原创]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期)

最后于 2021-5-27 10:32 被sharun编辑 ,原因:
收藏
免费 3
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//