当前位置: 代码网 > 服务器>网络安全>加密解密 > 破解MP3音乐管理大师

破解MP3音乐管理大师

2008年10月08日 加密解密 我要评论
破解MP3音乐管理大师 用SoftICE和SmartCheck结合将这个VB6程序搞定。 注册号是很好找的,用rtcMsgBox或MultiByteToWideChar设断点, 看见如下的判断: 0167:004C546D 50 ... 08-10-08
用softice和smartcheck结合将这个vb6程序搞定。
注册号是很好找的,用rtcmsgbox或multibytetowidechar设断点,
看见如下的判断:
0167:004c546d 50 push eax
0167:004c546e ff1568104000 call [00401068]
0167:004c5474 8b45e4 mov eax,[ebp-1c]
0167:004c5477 50 push eax
0167:004c5478 ff1550104000 call [00401050]
0167:004c547e 8b3db4114000 mov edi,[004011b4]
0167:004c5484 8bd0 mov edx,eax
0167:004c5486 8d4de8 lea ecx,[ebp-18]
0167:004c5489 ffd7 call edi
0167:004c548b 8d4de4 lea ecx,[ebp-1c]
0167:004c548e ff15fc114000 call [004011fc]
0167:004c5494 8d4dd8 lea ecx,[ebp-28]
0167:004c5497 ff15f8114000 call [004011f8]
0167:004c549d e85ef5ffff call 004c4a00
0167:004c54a2 8b4de8 mov ecx,[ebp-18]
0167:004c54a5 8b1528704c00 mov edx,[004c7028]
0167:004c54ab 51 push ecx //错误的注册码
0167:004c54ac 52 push edx //正确的注册码
0167:004c54ad ff15d4104000 call [004010d4] //比较注册码
0167:004c54b3 85c0 test eax,eax
0167:004c54b5 0f85c5010000 jnz 004c5680

这个软件必须写注册机,先用softice跟一下,经过漫长的跟踪后发现它在下面的地方将你的软件编号的第k个字符乘以(k 1)。

0167:004c4b29 db856cffffff fild dword ptr [ebp-0094]
0167:004c4b2f c745a805000000 mov dword ptr [ebp-58],00000005
0167:004c4b36 dd9d64ffffff fstp real8 ptr [ebp-009c]
0167:004c4b3c dc8d64ffffff fmul real8 ptr [ebp-009c] //相乘
0167:004c4b42 dd5db0 fstp real8 ptr [ebp-50]
0167:004c4b45 dfe0 fstsw ax
0167:004c4b47 a80d test al,0d
0167:004c4b49 0f85a0020000 jnz 004c4def

比如我的软件编号为174078570,它在前面添个0,变成0174078570,然后就有:
0 乘以 1 =0
1 乘以 2 =2
7 乘以 3 =21
4 乘以 4 =16
0 乘以 5 =0
7 乘以 6 =42
8 乘以 7 =56
5 乘以 8 =40
7 乘以 9 =63
0 乘以 10 =0

之后用softice就跟丢了。改用smartcheck,发现它把上面的乘积串成一个字符串“0221160425640630”,
然后取该串的前9个字符“022116042”,然后将该串转换成相应的十进制数22116042,该数对应的十六进制表示为15176ca,再在十六进制表示的前面和后面各加上软件作者的姓名的声母h、p,就得到了注册号h15176cap。

注册机:

#include <stdio.h>
#include <string.h>

void main(void)
{

char buf[128] = "0";
char serialstr[128], codestr[128];
int k;
long regcode;

printf("请输入你的软件编号: ");
gets(serialstr);

strcat(buf, serialstr);
codestr[0] = ’\0’;
for (k = 0; k < strlen(buf); k )
{
sprintf(serialstr, "%d", ((buf[k] - ’0’) * (k 1)) & 0xff);
strcat(codestr, serialstr);
}

codestr[9] = ’\0’;
sscanf(codestr, "%lu", ®code);

printf("你的注册号是: ");
printf("h%lxp\n", regcode);
}
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com