• 标 题:试试这个软件(内有下在地址及说明) (81字)
  • 作 者:copyyour
  • 时 间:2000-6-12 0:16:17
    阅读次数:98
    详细信息:
    <<MP3音乐管理大师>>


    http://go.163.com/~xiongjingcheng/soft/mp3gl_setup.exe

    标 题:搞定 (3千字)

  • 作 者:郭大志
  • 时 间:2000-6-16 15:11:49
  • 链 接:http://bbs.pediy.com

用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", &RegCode);
   
    printf("你的注册号是: ");
    printf("H%lXP\n", RegCode);
}