欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

注册机 (4千字)

注册机 (4千字)

原来它对名字还有些限制,昨天没仔细看,还以为是有假注册码,被它骗了。
1、它要求名字中必须有空格,即名字由First Name和Last Name构成,且以空格格开;
2、名字的第一个字母必须大写,最好把First Name和Last Name的第一个字母都大写;
3、名字的长度要大于等于4;
4、如冰毒所说的,名字的前几个字母不要和黑名单中的重合了,即如果黑名单中的名字是你的名字的子串,就begger off。
它用同一个子程序来判断注册码。
第一次调用这个子程序把INI文件中的注册码密文变成明文;
第二次调用这个子程序把INI文件中的名字的密文变成明文;
第三次则调用该子程序对注册码的明文进行变换,如果变换的结果等于你的名字,则OK,否则game over。
该段子程序如下,用SoftICE跟一下就清楚了。
0167:0047DF3B  LEA      EAX,[EBP-2C]
0167:0047DF3E  PUSH      EAX
0167:0047DF3F  MOV      ECX,00000002
0167:0047DF44  MOV      EDX,00000001
0167:0047DF49  MOV      EAX,[EBP-04]
0167:0047DF4C  CALL      00404030
0167:0047DF51  MOV      ECX,[EBP-2C]
0167:0047DF54  LEA      EAX,[EBP-28]
0167:0047DF57  MOV      EDX,0047E064
0167:0047DF5C  CALL      00403E78
0167:0047DF61  MOV      EAX,[EBP-28]
0167:0047DF64  CALL      00408D84
0167:0047DF69  MOV      EDI,EAX              //两个字符转换成一个数a
0167:0047DF6B  MOV      DWORD PTR [EBP-14],00000003
0167:0047DF72  LEA      EAX,[EBP-2C]
0167:0047DF75  PUSH      EAX
0167:0047DF76  MOV      ECX,00000002
0167:0047DF7B  MOV      EDX,[EBP-14]
0167:0047DF7E  MOV      EAX,[EBP-04]
0167:0047DF81  CALL      00404030
0167:0047DF86  MOV      ECX,[EBP-2C]
0167:0047DF89  LEA      EAX,[EBP-28]
0167:0047DF8C  MOV      EDX,0047E064
0167:0047DF91  CALL      00403E78
0167:0047DF96  MOV      EAX,[EBP-28]
0167:0047DF99  CALL      00408D84
0167:0047DF9E  MOV      EBX,EAX                //两个字符转换成一个数b
0167:0047DFA0  CMP      ESI,[EBP-0C]
0167:0047DFA3  JGE      0047DFA8
0167:0047DFA5  INC      ESI
0167:0047DFA6  JMP      0047DFAD
0167:0047DFA8  MOV      ESI,00000001
0167:0047DFAD  MOV      EAX,[EBP-08]
0167:0047DFB0  MOVZX    EAX,BYTE PTR [ESI+EAX-01]  //取出一个常数
0167:0047DFB5  XOR      EAX,EBX              //异或
0167:0047DFB7  MOV      [EBP-18],EAX
0167:0047DFBA  CMP      EDI,[EBP-18]      //根据大小做不同处理
0167:0047DFBD  JL        0047DFCE
0167:0047DFBF  MOV      EAX,[EBP-18]
0167:0047DFC2  ADD      EAX,000000FF
0167:0047DFC7  SUB      EAX,EDI
0167:0047DFC9  MOV      [EBP-18],EAX
0167:0047DFCC  JMP      0047DFD1
0167:0047DFCE  SUB      [EBP-18],EDI
0167:0047DFD1  LEA      EAX,[EBP-28]
0167:0047DFD4  MOV      EDX,[EBP-18]
0167:0047DFD7  CALL      00403D54
0167:0047DFDC  MOV      EDX,[EBP-28]
0167:0047DFDF  LEA      EAX,[EBP-10]
0167:0047DFE2  CALL      00403E34
0167:0047DFE7  MOV      EDI,EBX
0167:0047DFE9  ADD      DWORD PTR [EBP-14],02
0167:0047DFED  MOV      EAX,[EBP-04]
0167:0047DFF0  CALL      00403E2C
0167:0047DFF5  CMP      EAX,[EBP-14]
0167:0047DFF8  JG        0047DF72                    //循环
0167:0047DFFE  MOV      EAX,[EBP+08]
0167:0047E001  MOV      EDX,[EBP-10]          //变换后的串
0167:0047E004  CALL      00403C48
日期、名字、注册码在注册表中和INI文件中都记录了。
如下是注册机。一个可用的注册码:
Name:  China Cracker
Code:  832E09019806CDA317F3D468CEA9
#include <stdio.h>
#include <string.h>
#include <windows.h>
void main(void)
{
    char table[] = { 0xE8, 0x9F, 0x73, 0xF7, 0xFF, 0xEB, 0xB2,
                          0x01, 0x8B, 0x83, 0x28, 0x03, 0xE8, 0x16,
                          0x26, 0xFA};
    unsigned char name[120];
    signed long  code[128];
    int  k;
    int  len;
    signed long temp, code1, code2;
    printf("Input your name: ");
    gets(name);
   
    len = strlen(name);
    //用GetTickCount( )模拟随机数
    code[0] = GetTickCount( ) & 0x000000FFL;
   
    for (k = 0; k < len; k++)
    {
        temp = code[k] + (long)name[k];
       
        if (temp > 0xFF)
        {
            code[k+1] = (temp - 0x000000FFL) ^ ((long)table[k] & 0x000000FFL);
        }
        else
        {
            code[k+1] = temp ^ ((long)table[k] & 0x000000FFL);
        }
    }
    printf("Your code is: ");
    for ( k = 0; k < (len+1); k++)
    {
        printf("%02X", code[k] & 0xFF);
    }
    printf("\n");
}

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功