破解练习-CRACKME003

查看 78|回复 9
作者:逸聆君   
003-去掉nag和注册算法分析
一、工具和调试环境
  • 动态调试工具:x64dbg
  • 系统环境:win10 1909

    二、去掉nag
    程序运行先会出现一个nag窗口,如下图所示。几秒之后才会出现真正的交互界面


    003-01.png (102.05 KB, 下载次数: 0)
    下载附件
    2023-1-13 22:54 上传



    003-02.png (14.36 KB, 下载次数: 0)
    下载附件
    2023-1-13 22:54 上传

    要去掉这个nag窗口,首先想到的是找到其创建nag窗口的位置,然后使其不执行就可以了,给创建窗口的API(CreateWindowExA 和CreateWindowExW)下断点,然后通过栈回溯找到创建nag窗口的位置,直接跳过此处创建窗口后面会报错说类不存在。


    003-03.png (59.06 KB, 下载次数: 0)
    下载附件
    2023-1-13 22:55 上传

    此时要么仔细分析是哪里导致的报错,或者继续向上回溯,找到一个跳过能正常接着运行的位置。如下图所示


    003-04.png (87.2 KB, 下载次数: 0)
    下载附件
    2023-1-13 22:55 上传

    经过反复测试验证,只要第一次不执行msvbvm50.740E6DB8函数就行,该函数有两个参数,所以需要跳过0x740E8F8D - 0x740E8F93三条指令。现在nag弹窗是没有了,可是还是要等待几秒之后才会出现交互界面。
    那么下面就是去掉等待时间,依旧是给API下断点,SetTimer下断点,然后栈回溯定位到其超时值(也就是定时器设定的触发时间)。


    003-05.png (147.26 KB, 下载次数: 0)
    下载附件
    2023-1-13 22:55 上传

    最终定位到来自于0x224A66C + 0xC0的位置,而0x224A66C是堆空间,所以需要继续跟踪,给0x224A72C下一个硬件写入断点


    003-06.png (84.99 KB, 下载次数: 0)
    下载附件
    2023-1-13 22:55 上传

    最后定位到上图的位置0x7410BFC8处edi就是超时值,可以看出edi是传进来的第三个参数,继续向上追溯,最终定位到超时值是存放在0x00406775处


    003-07.png (140.61 KB, 下载次数: 0)
    下载附件
    2023-1-13 22:55 上传



    003-08.png (33.56 KB, 下载次数: 0)
    下载附件
    2023-1-13 22:55 上传

    直接将此处修改为0x1然后打补丁即可。
    到此就搞一段落,没有达到原本想的直接打补丁跳过创建nag窗口。后面在网上搜到了C4大法,原来还可以通过修改启动顺序来跳过。C4大法就不说了,链接奉上
    逆向破解之160个CrackMe —— 003 - 自己的小白 - 博客园 (cnblogs.com)
    003-学习要学“张无忌” 装X可选“鸠摩智”(模拟初遇VB反汇编来钻研4C法) --重在逆向思维 (qq.com)
    三、分析Serial/name的算法
    这次就不能使用默认提示字符串验证了,会报错。随便输入一对name和Serial(Serial必须是数字,否则就会报错)


    003-09.png (16.66 KB, 下载次数: 0)
    下载附件
    2023-1-13 22:55 上传

    老套路,x64dbg重新加载,搜索字符串Try Again定位到关键点,然后不断回溯找到算法位置,下面是算法的部分
    第一部分,获取name长度,其结果乘以0x15B38再加上name第一个字符的ascii码值


    003-10.png (103.78 KB, 下载次数: 0)
    下载附件
    2023-1-13 22:55 上传

    第二部分,double运算,第一部分的结果 + 2.0


    003-11.png (75.52 KB, 下载次数: 0)
    下载附件
    2023-1-13 22:56 上传

    第三部分,依然是double运算,第二部分的结果乘以3.0,然后结果减去2.0


    003-12.png (113.22 KB, 下载次数: 0)
    下载附件
    2023-1-13 22:54 上传

    第四部分,依然是double运算,第三部分的结果加上15.0


    003-13.png (163.22 KB, 下载次数: 0)
    下载附件
    2023-1-13 22:54 上传

    第五部分,依然是double运算,第四部分的结果除以Serial等于1.0就成功,也就是第四部分的结果就是正确的Serial,因为会使用__vbaR8Str转换Serial,所以Serial只能输入数字,否则会导致报错。


    003-14.png (91.57 KB, 下载次数: 0)
    下载附件
    2023-1-13 22:54 上传

    最后,总结的算法就是:(strlen(name) * 0x15B38 + name[0] + 2.0) * 3.0 - 2.0 + 15.0
    四、算法核心代码模拟
    char* GetSerial3(char* szName)
    {
        static char szSerial[60] = {};
        int key = (strlen(szName) * 0x15B38 + szName[0] + 2.0) * 3.0 + 13.0;
        sprintf(szSerial, "%d", key);
        return szSerial;
    }

    下载次数, 下载附件

  • dsfive   

    大佬 三个软件能发下不,跟着练练手
    liyitong   


    dsfive 发表于 2023-1-16 14:07
    大佬 三个软件能发下不,跟着练练手

    https://www.52pojie.cn/thread-1719664-1-1.html
    链接:https://pan.baidu.com/s/16D8R-nJRfSWS_tLXVXlV0g
    提取码:a5aj
    dsfive   


    liyitong 发表于 2023-1-16 15:16
    dsfive 发表于 2023-1-16 14:07
    大佬 三个软件能发下不,跟着练练手
    https://www.52pojie.cn/thread-1719 ...

    多谢大佬,小白跟着学习学习
    逸聆君
    OP
      


    dsfive 发表于 2023-1-16 14:07
    大佬 三个软件能发下不,跟着练练手

    https://www.52pojie.cn/thread-709699-1-1.html,下载的是这个里面的
    chendaxia   

    666...刚好可以学习学习...
    jinzhu160   

    跟着大佬学逆向。
    jinzhu160   

    我看都是 x64dbg ,有没有讲 ida 算法逆向的例子呢?
    逸聆君
    OP
      


    jinzhu160 发表于 2023-1-17 09:28
    我看都是 x64dbg ,有没有讲 ida 算法逆向的例子呢?

    后面可能会用到ida
    dsfive   

    大佬,过0x740E8F8D - 0x740E8F93三条指令这个还不是系统领空, 直接在DLL改的话没用吧,这个怎么回溯到系统领空?
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部