您现在的位置是:首页 >其他 >ACG-crcme1(★★★)网站首页其他

ACG-crcme1(★★★)

-Sw0rd- 2023-07-21 00:00:03
简介ACG-crcme1(★★★)

运行程序

在这里插入图片描述

在这里插入图片描述

info
在这里插入图片描述
exit
在这里插入图片描述

查壳

没壳
在这里插入图片描述

载入OD分析

刚载入OD发现要使用 ACG.key
在这里插入图片描述

搜一下字符串看看
发现这有貌似成功相关的字符串
进去看看
在这里插入图片描述

可以找到关键跳
爆破的话直接在这就可以完成
在这里插入图片描述

上面就该是算法了

算法分析

开始先判断文件存在和文件内容大小
在这里插入图片描述

读取文件内容,发现程序在原有的字符里加了个 ‘y’,
之后逐个字符判断,每个字符都要满足要求,但是程序只判断了前12个,最后的 ‘y’ 也没有判断
在这里插入图片描述
key满足了
在这里插入图片描述
下面就要验证输入的
在这里插入图片描述

往下找,就有获取输入的内容
在第一个获取位置下个断,调试
在这里插入图片描述
Name要等于5
在这里插入图片描述
通过用户名循环判断
在这里插入图片描述

最后通过Name 和 Serial 计算
在这里插入图片描述

算法分析(注册机)

def genKeyFile():
    xor_list = [0x168, 0x160, 0x170, 0xec, 0x13c, 0x1cc, 0x1f8, 0xec, 0x164, 0x1f8, 0x1a0, 0x1bc]
    key = ''
    for i in xor_list:
        key += chr(((0 ^ i) // 4) ^ 0x1b)    
    with open("ACG.key", "w") as f:
        f.write(key)
        print(key)

def NameToSerial(name):
    sum_name = 0
    if(len(name) == 0x5):
        for i in name:
            sum_name += ord(i)
        sum_name *= 8
        sum_name ^= 0x515A5
        print(hex(sum_name))
        # 计算Name对应的Serial
        serial = (0 ^ 0x797E7) - sum_name
        serial ^= 0x87ca
        print("Name:", name)
        print("Serial:", serial)
    else:
        print("用户名长度为5")

genKeyFile()
NameToSerial('sword')

暴力破解

修改0x4012DF即可

总结

有KeyFile,还有Name和Serial 的校验
一直都是在计算等式(=0),Serial计算的步骤虽然多,但是可以通过等式,免去很多步骤。
当然,破解算法中,可以通过Serial来反推要输入的Name。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。