软件逆向破解反汇编技术零基础入门实战12
|
admin
2025年12月25日 9:27
本文热度 1090
|
继续学习软件逆向破解反汇编技术零基础入门实战12篇! 这次学习的这个CRACKME同样是反汇编逆它的注册码或写出注册机算法代码。 软件要求输入正确的用户名和密码完成注册,错误的注册码直接报错这是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=0X0003563700421E48 |. 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掉。看看什么提示经过上面分析,软件的注册思路也非常明了了。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
#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) ; sum += shifted; }
printf("注册码: %d\n", sum); return 0;}
阅读原文:https://mp.weixin.qq.com/s/a02V5dSg4wExBr0sXACxsw
该文章在 2025/12/25 9:27:30 编辑过