LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

软件逆向破解反汇编技术零基础入门实战12

admin
2025年12月25日 9:27 本文热度 1090
继续学习软件逆向破解反汇编技术零基础入门实战12篇!

      这次学习的这个CRACKME同样是反汇编逆它的注册码或写出注册机算法代码。
      软件要求输入正确的用户名和密码完成注册,错误的注册码直接报错
打开Ollydbg将软件拖入,直接F9运行。
这是Delphi开发的软件,最直接找按钮事件可以用反编译软件DeDeDark就能快速找到关键位置了。
       估计我系统原因,无法打开这软件。就用最低效率的方法了。直接查找有没关键的字符串找位置,实在不行就翻代码,在每个功能代码前下个断点,看它在哪里断下。盲找!
     点击反汇编窗口,右键选 中文字符搜索,把强制模式打开,再选智能搜索 。
搜索到的字符串
没发现什么有用的字符, 提示错误或正确的字符都没有。估计是重编码了字符,无法搜索到了。只有个红色箭头的,双击进去看看。看到反汇编代码后下断点,但是点击程序后,断点未断下,说明这里不是关键位置,向上翻找找其它函数段头下断点(F2)
继续按注册,发现软件断下来了。
00421DF2  |.  E8 89FAFEFF   call 12.0041188000421DF7  |.  8D55 FC       lea edx,[local.1]00421DFA  |.  8B86 AC010000 mov eax,dword ptr ds:[esi+0x1AC]00421E00  |.  E8 7BFAFEFF   call 12.0041188000421E05  |.  8B45 FC       mov eax,[local.1]00421E08  |.  E8 5715FEFF   call 12.0040336400421E0D  |.  83F8 04       cmp eax,0x4
这里取了用户名与长度,和4比较,应该是对用户名长度有限制,最低4位。
00421E2A  |.  40            inc eax00421E2B  |.  33D2          xor edx,edx00421E2D  |>  8B4D FC       /mov ecx,[local.1]00421E30  |.  0FB64C11 FF   |movzx ecx,byte ptr ds:[ecx+edx-0x1]00421E35  |.  C1E1 09       |shl ecx,0x900421E38  |.  03D9          |add ebx,ecx00421E3A  |.  42            |inc edx00421E3B  |.  48            |dec eax00421E3C  |.^ 75 EF         \jnz short 12.00421E2D
这里在取用户名做运算,是算法吗?运算完后的值 在EBX=0X00035637
00421E48  |.  8B45 F4       mov eax,[local.3]00421E4B  |.  8B55 F8       mov edx,[local.2]00421E4E  |.  E8 2116FEFF   call 12.0040347400421E53  |.  75 0C         jnz short 12.00421E61
大概率是注册码,这里在做真假注册码比较。
刚才双击EBX看到218679就是0X35637的十进制数。
上面对比值 不对,所以JNZ跳转,直接注册码错误。我们直接NOP掉。看看什么提示
NOP掉后F9运行
果然注册成功了!
经过上面分析,软件的注册思路也非常明了了。218679就是注册码!
具体算法思路:
00421E2D  |> /8B4D FC       /mov ecx,[local.1]00421E30  |. |0FB64C11 FF   |movzx ecx,byte ptr ds:[ecx+edx-0x1]00421E35  |. |C1E1 09       |shl ecx,0x900421E38  |. |03D9          |add ebx,ecx00421E3A  |. |42            |inc edx00421E3B  |. |48            |dec eax00421E3C  |.^\75 EF         \jnz short 12.00421E2D
取用户名字节码左移9位后累加。初始值为0X37
具体注册机C语言源代码:
#include <stdio.h>#include <string.h>
int main() {    char input[100];    printf("请输入字符串: it0365");    fgets(input, sizeof(input), stdin);    input[strcspn(input, "\n")] = '\0'// 去掉换行符
    int length = strlen(input);    int sum = 0x37;    for (int i = 0; i < length; i++) {        unsigned char byte = (unsigned char)input[i];        int shifted = (byte << 9) ; // 左移9位        sum += shifted;    }
    printf("注册码: %d\n", sum);    return 0;}


阅读原文:https://mp.weixin.qq.com/s/a02V5dSg4wExBr0sXACxsw


该文章在 2025/12/25 9:27:30 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved