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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值