首页
社区
课程
招聘
[原创]看雪.TSRC 2017CTF秋季赛第五题writeup
发表于: 2017-11-2 12:46 3749

[原创]看雪.TSRC 2017CTF秋季赛第五题writeup

2017-11-2 12:46
3749

本人水平比较菜,做题只能靠玄学。做出来的时候也感觉有点点小不可思议。因为并没有对所有的流程都分析的很清楚。

在这一个位置有一个 int 2d 中断来验证

上网查了一下 int 2d的特性 是无调试的时候异常,有调试的时候正常运行。所以之后这个位置的

Vm0wd2QyUXlVWGw== 就是不会比对的,会直接跳到except处,因此程序会跳到40717d开始执行

关键就是在于 sub_4084A3 这个函数的分析,直接上伪代码把

sub_4080DF位置 核心的操作就是 对 一个刚开始为 0至0x2f递增排列的数组按位置进行一个处理。

第一次是通过 KanXueCrackMe2017字符串 加密后的值 对0至0x2f递增排列的数组 按照一定规则进行打乱。

而 加密后的输入字符串 需要对这个数组进行还原回 0至0x2f递增排列的数组。

然后就所有人应该都卡在这里了,包括我。

对于sub_40829C的分析

在其中某个子函数中有中文,除法算法出错、模错误。。。等等中文,,推测可能是网上扒来的代码,应该不是自己写的一个很复杂加密。
尝试上网查过这个算法,但是失败了。

这一段最后是靠前后数据推理出来的。

刚开始测试输入的数据很大,然后没有思路,后来测试了一下小数

推理了一下就发现这个其实就是一个 18进制转为62进制的数

至于62进制,,由于输入的值是在0-9a-zA-Z 10+26+26=62 然后就是62进制,

使用python实现了一下还原脚本

然后后面的就是 sub_4080DF

可以发现v4 = v5[i];

这个v4的范围是在A-H(0-17)

因为这个变换就是表的变换,而且只有18次 然后不嫌麻烦的我直接手动扣了一下数组。

后面有一个地方是

要求输入的字符串为12字符的 所以我们需要缩短输入的长度。

可以算出来 "0123456789ABCDEFGH" 逆推值为 "210543876BA9EDCHGF"

所以 EDAHE450C741GH441E11BH84 的逆推值为 46F911C144FG147E234CFADC (ps:EDAHE450C741GH441E11BH84是 sub_4080DF位置KanXueCrackMe2017字符串加密所得)

其中44和11因为相当于没加密可以去除,得到 46F9C1FG147E234CFADC

然后还是太长

再搜索能不能2字符有没有能用1字符替代的

因此46F9C1FG147E234CFADC 缩减为 46F9C1H147E25CFAE


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看不懂的人路过
2018-5-25 14:03
0
游客
登录 | 注册 方可回帖
返回
//