-
-
[原创]看雪.TSRC 2017CTF秋季赛第五题writeup
-
发表于:
2017-11-2 12:46
3749
-
[原创]看雪.TSRC 2017CTF秋季赛第五题writeup
本人水平比较菜,做题只能靠玄学。做出来的时候也感觉有点点小不可思议。因为并没有对所有的流程都分析的很清楚。
在这一个位置有一个 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期)