1 Acid burn.exe

打开程序,先看一下有哪些部分。左边的Serial/Name部分和右边的Serial部分

随便输几个数,其中左边的报错信息是

Try Again!

Sorry, The serial is incorect!

img

右边的则是

Failed

Try Again!!

image-20260601202353402

知道了这些内容,就可以尝试通过字符串定位关键比较代码

左边:Serial/Name

方法1 爆破

搜索字符串如下

image-20260601203626660

转到第一个字符串对应的反汇编

image-20260601203940551

找到关键跳并设置断点

另一个也是同理,给jne指令设置断点

image-20260602101317709

F9运行起来,输入错误的Serial/Name

程序到达第一个断点,这里eax返回值是1,导致下面jge无法跳转,这里直接把jge改成jmp

image-20260602101708266

然后执行到下面的断点,我们希望这里不发生跳转,所以,直接把地址改成下一条指令

image-20260602101926458

按下F9,弹出good job,证明这部分修改成功了

image-20260602101859121

ctrl+p打开补丁,然后修改文件,保存为a.exe,这样无论怎么输入都会提示good job

image-20260602102342662

方法2 分析算法

jge上边那个call设置断点,这个函数决定了jge是否跳转。

输入8888作为name,9999作为serial,引发断点

406930 Strlen()

image-20260603222611386

eax是这个函数的参数,它保存了8888字符串的指针

image-20260603223233720

第一行保存了一下edi的值,第二行传入字符串指针,然后分别把ecx设为-1,al置0。repne scasb是逐步扫描字符串的每个字节,直到字符串结尾。可以看到ecx在这条指令执行的过程中每次减1。后面FFFFFFFE与ecx作差得到字符串长度。可以得出,这是一个strlen函数,最后比较结果小于4就会弹错误提示框。

Name[0] * 0x29 * 2

返回后继续往下跟

image-20260603225712143

可以看到中间call下面三条指令,取出字符串第一个字符,然后把它乘以0x29,保存到了431750这个地址,后面add指令又给这个值乘以2。

这一部分逻辑是 Name[0] * 0x29 * 2。

下一部分则把这个值从16进制转换为十进制形式

image-20260603230148656

字符串拼接

紧接着,执行完4039AC这个函数后就得到了一个关键字符串,其规律是 CW-(Name[0] * 0x29 * 2)-CRACKED

image-20260603230331663

后边就是比对的过程了。

右边:Serial

方法1 爆破

xdbg加载上边的a.exe

这个需要关注Failed字符串,因为它只在右边出现,便于查找

找到后进入反汇编视图

image-20260602102909945

找到上方关键跳,同理,把地址改成下边push指令并设置断点

输入错误的Serial,使程序断在断点处

image-20260602103144934

然后F9提示Good Job

image-20260602103227247

同样的方法,保存一下,这样无论那边都会提示Good Job。以上,爆破部分就结束了

方法2 分析算法

给jne跳转上边的call下断点,然后输入错误的序列号触发断点

image-20260604100416188

可以看到函数参数中出现了硬编码序列号,猜测Hello Dude!为真正的序列号,重新启动程序试一下

image-20260604100616041

与猜想一致

注册机编写

print("请选择(1/2):\n1 Serial/Name\n2 Serial")
c = int(input())
if c==1:
    print("请输入Name(len >= 4)")
    name = str(input())
    if  len(name) < 4:
        print("请重新输入")
    else:
        Serial = 'CW-' + str(ord(name[0]) * int(0x29) * 2) + '-CRACKED'
        print(f"Your Serial: {Serial}")
elif c==2:
    print("Your Serial: Hello Dude!")
else:
    print("请重新输入")
posted on 2026-06-04 10:37  %HuTao%  阅读(4)  评论(0)    收藏  举报