selph
selph
发布于 2022-07-19 / 244 阅读
0
0

新160个CrackMe练习:013-Acid_burn

算法难度:⭐⭐

爆破难度:⭐

信息收集

原160个CM的第一个,以前做过一遍,老费劲了,现在再来一遍看看

暴力破解已经懒得介绍了,看得懂完整分析也肯定知道该改哪里了

运行情况:

启动的时候有Nag:

image

提供了两种注册方法:用户名+序列号,序列号

image

查壳与脱壳:

无壳:Delphi程序

image

调试分析

分析Delph GUI程序借助IDR辅助方便查看窗口事件(纯IDA分析的话,查字符串交叉引用定位也能找到这些函数

首先是启动窗口:窗口启动的时候调用FromCreate函数里,执行流MessageBox,这就是所谓的NAG,烦人弹窗

image

然后是序列号验证:

image

接下来是用户名+序列号验证:

首先对用户名4个字节进行一顿处理,然后把值保存起来,用户名必须大于等于4个字符

这里开头往[431750]赋了个初始值:0x29

image

接下来计算序列号,然后跟用户输入比对

image

去除NAG

去除Nag只需要修改该函数直接返回即可:

image

算法分析

序列号验证:硬编码验证,输入Hello Dude!即可

image

用户名+序列号验证,序列号可以写出注册机:

#include <iostream>

int main()
{
    int res = 0x29;
    char name[20] = {0};

    std::cin >> name;
    res = name[0] * res * 2;

    std::cout <<"CW"<<"-" << res << "-" <<"CRACKED";
}

image

总结

以前做半天,现在分析起来很快啊,对于特定语言的逆向,如果能有对应的工具帮助识别函数功能,那简直是帮大忙了

PS:用户名+序列号验证这里先校验了用户名长度,校验的时候计算了一堆中间值,真的一点用没有!!!


评论