-
-
[原创]2020年kctf春季赛 - 第二题 子鼠开天
-
发表于:
2020-4-17 12:21
12592
-
[原创]2020年kctf春季赛 - 第二题 子鼠开天
先拿提供的name和sn跑一下程序。
查壳:
无壳,32位程序 直接拉ida里面分析
找到main函数直接分析
输入了name和sn 判断了一下sn的长度 要求是64位,然后关键函数就是sub_401380
大致逻辑应该是先校验了一下name和sn的长度,然后sn通过sub_401000计算出来v9,v9通过sub_4010F0计算出来v10,v10通过sub_401210计算出来v5 后面 v6 v7应该是v5的属性应为并没有看到有对其赋值,所以v5可能是一个结构体或者数组。
判断else里面是正确的 sub_401190用到了name和nameLength v4应该是个结果 所以 sub_401190可能是对name做操作的函数,在下面就是用v4的值和v8的值比较 根据上面的分析 v8应该也是v5的某个属性,
所以猜测逻辑 就是 长度校验 校验完了一堆处理
V8 = sn 3次处理之后的值
V4=name 处理之后的值
然后判断 如果成功 就通过了。。
现在就需要对sn处理的三个函数sub_401000 sub_4010F0 sub_401210 和 对name处理的sub_401190 做函数分析。
对数据的加密解密是有一些开源库的 我们先看一下 字符串特征 看看有没有见过的开源库~
字符串中有包括这种的,所以我们找一下 openssl 0.9.8的版本 做一下sig.
载入OpenSSL的sig之后 我们会发现解析了一些函数
现在就需要一个函数一个函数去分析了
第一个函数:sub_401000
可以根据经验和动态调试分析出这个函数是就是把sn字符串转换成了16进制的数组(经验是别的师傅的 动态调试是我的~
第二个函数:sub_4010F0 双击进去我们发现我们之前加载的sig识别出来一个函数
网上搜索 AES_ecb_encrypt openssl我们发现 最后一个参数a6 是用来 判断 加密还是解密的 如果是 a6=1 是加密 =0是解密
第三个函数:sub_401210
这样字符串 上网搜一搜 发现这是第三方大数库的东西 也是在openssl里面的 我们还看到了 0x10001 上面的v10应该是个Key 从此处不难推出这是一个rsa算法
4.sub_401190
这个听说是一个tea算法 但是我们不用解 直接调用这个函数 拿着数据 回推一步步加密就能拿到sn了
那么开始回推
1.先拿到最后加密出来的结果
2.rsa加密
3.aes加密
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)