首页
社区
课程
招聘
[原创] KCTF 2021 Win. 第二题 排排坐
发表于: 2021-11-17 23:23 21170

[原创] KCTF 2021 Win. 第二题 排排坐

HHHso 活跃值
22
2021-11-17 23:23
21170

【摘要】

    正向检验算法还算直观,其唯一解的数学原理未知,但不妨碍我们直接爆破。


    我们直接关注图1-1中代码,通过GetDlgItemTextA交叉索引得到。

    通过基本分析,我们得到:

(1)Hi_this_obuf_icode_len__hex2bytes 将输入的32字节长lv_code通过16进制转换胃16字节,应该注意lv_code与转换后的Hi_codeLH的差异性,如

(2)转换后的16字节Hi_codeLH ,我们分为codeL,codeH高低(各8字节)两部分,其中抵8字节codeL填充了codeLSalt数组;

(3)Hi_last_check函数是核心检验函数。


图1-1 着手代码片段

    如Hi_last_check的伪码和图1-2,代码框架分割为四部分。

(1)第一部分,检测codeLSalt的有效性,codeLSalt大小为0x100字节,如上所述,前8字节来自输入的codeL。

(2)第二部分,对codeLSalt进行变换;

(3)第三部分,利用codeLSalt和codeH对bsuk进行变换,bsuk初始值为codeLsalt前8字节;

(4)第四部分,变换后的bsuk是否为“GoodJob~”。


图1-2 Hi_last_check主要业务逻辑

    针对核心算法操作的四个部分(忽略最后的strncmp,实际是三部分)进行爆破。

    如图1-3,对codeLSalt的有效性检测,实际也分为四各小步骤,基本算法描述为:

图1-3 codeLSalt有效性

    如图1-4,我们直到codeLSalt的大小为0x100,且初始末端的0x100-8字节都已经固定,通过观察,我们可以判定,其为0x00-0xFF的非重复排列,作为基准映射表使用。

    由此出发,我们可以确定codeLSalt前8字节的取值集合,执行下述idapython

即codeL为[30, 40, 75, 109, 140, 163, 210, 251]的排列,有多少排列?

即codeL有40320种情形,我们以此为爆破入口,遍历所有情形,找到有效排列,通过下述pythn代码,我们将所有可能排列,顺序存放到pbs.bin文件中备用。


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

上传的附件:
收藏
免费 4
支持
分享
最新回复 (1)
雪    币: 2280
活跃值: (3823)
能力值: ( LV6,RANK:81 )
在线值:
发帖
回帖
粉丝
2
膜拜大佬
2021-11-18 18:33
0
游客
登录 | 注册 方可回帖
返回
//