• 标 题:xiaolou请看:Hyper Maker 2000 (2千字)
  • 作 者:1212 (blowfish)
  • 时 间:2000-9-26 11:31:10
  • 链 接:http://bbs.pediy.com

只是写注册机的一个提示:

001B:0052624A  CALL      00403F70
001B:0052624F  MOV      EAX,[005328F4]
001B:00526254  CMP      BYTE PTR [EAX],00
001B:00526257  JZ        00526286
001B:00526259  LEA      EDX,[EBP-18]
001B:0052625C  MOV      EAX,[EBP-0C]
001B:0052625F  CALL      00527788
001B:00526264  MOV      EAX,[EBP-18]  ;名字
001B:00526267  CALL      00403F24      ;strlen( )
001B:0052626C  CMP      EAX,03        ;不得小于3
001B:0052626F  JL        00526370
001B:00526275  MOV      EAX,[EBP-08]  ;key
001B:00526278  CALL      00403F24      ;strlen( )
001B:0052627D  CMP      EAX,0C        ;必须为12
001B:00526280  JNZ      00526370
001B:00526286  LEA      EAX,[EBP-10]
001B:00526289  CALL      00403CA8
001B:0052628E  MOV      EBX,00000001
001B:00526293  LEA      EAX,[EBP-18]
001B:00526296  MOV      EDX,[EBP-0C]
001B:00526299  MOV      DL,[EBX+EDX-01] ;Name[k]
001B:0052629D  MOV      ECX,[EBP-14]
001B:005262A0  MOV      CL,[EBX+ECX-01] ;ID[k]
001B:005262A4  XOR      DL,CL          ;异或
001B:005262A6  CALL      00403E4C
001B:005262AB  MOV      EDX,[EBP-18]
001B:005262AE  LEA      EAX,[EBP-10]
001B:005262B1  CALL      00403F2C
001B:005262B6  INC      EBX
001B:005262B7  CMP      EBX,0D          ;循环13次
001B:005262BA  JNZ      00526293
001B:005262BC  MOV      EAX,[00532600]
001B:005262C1  MOV      EDX,[EBP-08]
001B:005262C4  CALL      00403CFC
001B:005262C9  LEA      EDX,[EBP-18]
001B:005262CC  MOV      EAX,[EBP-0C]
001B:005262CF  CALL      00527788
001B:005262D4  MOV      EDX,[EBP-18]
001B:005262D7  MOV      EAX,[00532790]
001B:005262DC  CALL      00403CFC
001B:005262E1  LEA      EDX,[EBP-18]
001B:005262E4  MOV      EAX,[EBP+08]
001B:005262E7  CALL      00527788
001B:005262EC  MOV      EDX,[EBP-18]
001B:005262EF  MOV      EAX,[00532504]
001B:005262F4  CALL      00403CFC
001B:005262F9  MOV      EAX,[0053259C]
001B:005262FE  MOV      EAX,[EAX]
001B:00526300  MOV      EDX,005263FC
001B:00526305  CALL      0050BBF0
001B:0052630A  MOV      EAX,[00532510]
001B:0052630F  CMP      BYTE PTR [EAX],00  ;注册版本?
001B:00526312  JZ        00526339

  • 标 题:续 (3千字)
  • 作 者:1212
  • 时 间:2000-9-26 11:49:48

上面的那段代码是输入注册码之后进行的判断。启动时的判断在这里。基本上是在ID#后面添加“123”,再在Name后面添加一些空格,然后两者异或,最后得出注册码。

001B:005278A3  LEA      EAX,[EBP-04]
001B:005278A6  PUSH      EAX
001B:005278A7  LEA      EDX,[EBP-18]
001B:005278AA  MOV      EAX,[00532790]
001B:005278AF  MOV      EAX,[EAX]
001B:005278B1  CALL      00527788
001B:005278B6  LEA      EAX,[EBP-18]
001B:005278B9  MOV      EDX,00527A9C
001B:005278BE  CALL      00403F2C
001B:005278C3  MOV      EAX,[EBP-18]
001B:005278C6  MOV      ECX,0000000C
001B:005278CB  MOV      EDX,00000001
001B:005278D0  CALL      00404128
001B:005278D5  LEA      EAX,[EBP-18]
001B:005278D8  PUSH      EAX
001B:005278D9  MOV      EAX,[00532744]
001B:005278DE  MOV      EAX,[EAX]
001B:005278E0  MOV      ECX,00000009
001B:005278E5  MOV      EDX,00000001
001B:005278EA  CALL      00404128
001B:005278EF  MOV      EDX,[EBP-18]
001B:005278F2  LEA      EAX,[EBP-0C]
001B:005278F5  MOV      ECX,00527AB4
001B:005278FA  CALL      00403F70
001B:005278FF  MOV      EAX,[EBP-04]  ;Name
001B:00527902  CALL      00403F24      ;strlen( )
001B:00527907  CMP      EAX,03
001B:0052790A  JL        0052799D
001B:00527910  MOV      EAX,[00532600]
001B:00527915  MOV      EAX,[EAX]      ;reg key
001B:00527917  CALL      00403F24      ;strlen( )
001B:0052791C  CMP      EAX,0C
001B:0052791F  JNZ      0052799D
001B:00527921  LEA      EAX,[EBP-08]
001B:00527924  CALL      00403CA8
001B:00527929  MOV      ESI,00000001
001B:0052792E  LEA      EAX,[EBP-18]
001B:00527931  MOV      EDX,[EBP-04]
001B:00527934  MOV      DL,[ESI+EDX-01]  ;Name[k]
001B:00527938  MOV      ECX,[EBP-0C]
001B:0052793B  MOV      CL,[ESI+ECX-01]  ;ID[k]
001B:0052793F  XOR      DL,CL
001B:00527941  CALL      00403E4C
001B:00527946  MOV      EDX,[EBP-18]
001B:00527949  LEA      EAX,[EBP-08]
001B:0052794C  CALL      00403F2C
001B:00527951  INC      ESI
001B:00527952  CMP      ESI,0D          ;循环次数
001B:00527955  JNZ      0052792E
001B:00527957  LEA      EAX,[EBP-0218]
001B:0052795D  MOV      EDX,[EBP-08]
001B:00527960  MOV      ECX,000000FF
001B:00527965  CALL      00403F00
001B:0052796A  LEA      EAX,[EBP-0218]
001B:00527970  LEA      EDX,[EBP-0118]
001B:00527976  CALL      0049D564
001B:0052797B  LEA      EDX,[EBP-0118]
001B:00527981  LEA      EAX,[EBP-18]
001B:00527984  CALL      00403EC8
001B:00527989  MOV      EAX,[EBP-18]      ;正确注册码
001B:0052798C  MOV      EDX,[00532600]
001B:00527992  MOV      EDX,[EDX]        ;错误注册码
001B:00527994  CALL      00404034          ;比较注册码
001B:00527999  JNZ      0052799D
001B:0052799B  XOR      EBX,EBX
001B:0052799D  TEST      BL,BL
001B:0052799F  JZ        005279D5
001B:005279A1  MOV      EAX,[0053261C]
001B:005279A6  CMP      BYTE PTR [EAX],00
001B:005279A9  JZ        005279C5
001B:005279AB  MOV      EAX,[00532854]
001B:005279B0  CMP      BYTE PTR [EAX],00
001B:005279B3  JZ        005279C5
001B:005279B5  MOV      EAX,[005325D4]
001B:005279BA  CMP      WORD PTR [EAX],6358
001B:005279BF  JNZ      005279C5
001B:005279C1  XOR      EBX,EBX
001B:005279C3  JMP      005279C7
001B:005279C5  MOV      BL,01
001B:005279C7  MOV      EAX,EBX
001B:005279C9  XOR      AL,01
001B:005279CB  MOV      EDX,[00532510]
001B:005279D1  MOV      [EDX],AL      ;注册与否的标志位
001B:005279D3  JMP      00527A03

http://www.bersoft.com/hmhtml/hypermaker2000.exe

  • 标 题:多谢! 再问一声:程序启动时下何断点, createfilea, regqueryvalueexa? (空)
  • 作 者:小楼
  • 时 间:2000-9-26 12:10:55

  • 标 题:只要你輸入的RegCode是12個字元,它就會將你的註冊資料寫入hypermaker.ini中,所以你應該知道如何下斷點了吧!... (151字)
  • 作 者:C-pen
  • 时 间:2000-9-26 12:47:05

标题: 只要你輸入的RegCode是12個字元,它就會將你的註冊資料寫入hypermaker.ini中,所以你應該知道如何下斷點了吧!那就是bpx GetprivateProfilestringA

内容:

  • 标 题:注册机的写法 (2千字)
  • 作 者:1212
  • 时 间:2000-9-26 13:41:22

1、如果用户输入的名字少于3个字符则重新输入。
2、如果用户输入的名字少于12个字符则用空格凑齐12个字符。
3、用串"123"加在ID#的后面,凑成12个字符。
4、将第2步的12个字符和第3步的12个字符逐一异或,得到12个字节。
5、对于得到的12个字节中的每个字节,进行下面的转换。转换的结果就是注册码。
转换非常简单,就是12个字节逐一和一张表中的12个字节相加,如果和不是大写字母,就通过不断加0x19或减0x19的方法使其变成大写字母。
下面的12条MOV指令初始化该表格:

001B:0023A613  MOV      DWORD PTR [EBP-0238],00000009
001B:0023A61D  MOV      DWORD PTR [EBP-0234],0000000D
001B:0023A627  MOV      DWORD PTR [EBP-0230],00000007
001B:0023A631  MOV      DWORD PTR [EBP-022C],00000002
001B:0023A63B  MOV      DWORD PTR [EBP-0228],0000000C
001B:0023A645  MOV      DWORD PTR [EBP-0224],00000006
001B:0023A64F  MOV      DWORD PTR [EBP-0220],00000014
001B:0023A659  MOV      DWORD PTR [EBP-021C],00000005
001B:0023A663  MOV      DWORD PTR [EBP-0218],00000005
001B:0023A66D  MOV      DWORD PTR [EBP-0214],0000000B
001B:0023A677  MOV      DWORD PTR [EBP-0210],00000012
001B:0023A681  MOV      DWORD PTR [EBP-020C],0000000E

001B:0023A68B  MOV      EDI,00000001    ;循环控制变量初值
001B:0023A690  LEA      ESI,[EBP-0238]
001B:0023A696  LEA      EAX,[EBP-0340]
001B:0023A69C  PUSH      EAX
001B:0023A69D  MOV      ECX,00000001
001B:0023A6A2  MOV      EDX,EDI
001B:0023A6A4  LEA      EAX,[EBP-0107]
001B:0023A6AA  CALL      00232620
001B:0023A6AF  LEA      EDX,[EBP-0340]
001B:0023A6B5  LEA      EAX,[EBP-0240]
001B:0023A6BB  CALL      002333B4
001B:0023A6C0  MOV      EDX,[EBP-0240]
001B:0023A6C6  LEA      EAX,[EBP-07]
001B:0023A6C9  CALL      00235764
001B:0023A6CE  MOV      AL,[EBP-07]    ;异或得到的一个字节
001B:0023A6D1  XOR      EBX,EBX
001B:0023A6D3  MOV      BL,AL
001B:0023A6D5  ADD      EBX,[ESI]      ;和表格中的对应字节相加
001B:0023A6D7  CMP      EBX,5A        ;以下判断是否在‘A’-‘Z’之间
001B:0023A6DA  JLE      0023A6E4
001B:0023A6DC  SUB      EBX,19
001B:0023A6DF  CMP      EBX,5A
001B:0023A6E2  JG        0023A6DC
001B:0023A6E4  CMP      EBX,41
001B:0023A6E7  JGE      0023A6F1
001B:0023A6E9  ADD      EBX,19
001B:0023A6EC  CMP      EBX,41
001B:0023A6EF  JL        0023A6E9
001B:0023A6F1  LEA      EAX,[EBP-0344]
001B:0023A6F7  MOV      EDX,EBX
001B:0023A6F9  MOV      [EAX+01],DL        ;保存注册码的一个字符
001B:0023A6FC  MOV      BYTE PTR [EAX],01
001B:0023A6FF  LEA      EDX,[EBP-0344]
001B:0023A705  LEA      EAX,[EBP-0207]
001B:0023A70B  CALL      002326C0
001B:0023A710  INC      EDI
001B:0023A711  ADD      ESI,04
001B:0023A714  CMP      EDI,0D        ;循环12次,得到注册码的12个字符
001B:0023A717  JNZ      0023A696

  • 标 题:浪费时间 (943字)
  • 作 者:1212
  • 时 间:2000-9-26 14:38:41

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

void main(void)
{
    char          Name[64];
    char          ID[64];
    unsigned long Table[12] = {9, 13, 7, 2, 12, 6, 20, 5, 5, 11, 18, 14};
    unsigned long Key[12];
    int          k, len;

    do
    {
        printf("Input your name(at least 3 chars):");
        gets(Name);
        len = strlen(Name);
    } while(len < 3);

    do
    {
        printf("Input your ID#(XXXX-XXXX):");
        gets(ID);
    } while( (strlen(ID) != 9) || (ID[4] != '-'));

    for(k = len; k < 12; k++)
    {
        Name[k] = 0x20;
    }

    strcat(ID, "123");

    printf("Your registration key is: ");

    for(k = 0; k < 12; k++)
    {
        Key[k] = (Name[k] ^ ID[k]) & 0xFF;
        Key[k] += Table[k];
        while(Key[k] > 'Z') Key[k] -= ('Z' - 'A');
        while(Key[k] < 'A') Key[k] += ('Z' - 'A');
        putchar(Key[k]);
    }

    putchar('\n');
}