Показать сообщение отдельно

  #2  
Старый 06.03.2008, 17:16
ProTeuS
HARDstasy
Регистрация: 26.11.2004
Сообщений: 1,367
Провел на форуме:
4226592

Репутация: 2175


Отправить сообщение для ProTeuS с помощью ICQ
По умолчанию

более того, буфер Data по адресу 00483FC0 да и сам алгоритм проверки тоже не изменили. все байт в байт.
итого кейген для сабжа имеет вид:

Код:
unit main; //на форме баттон и 4 спинедита

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Spin;

type
  TForm1 = class(TForm)
    Button1: TButton;
    SpinEdit1: TSpinEdit;
    SpinEdit2: TSpinEdit;
    SpinEdit3: TSpinEdit;
    SpinEdit4: TSpinEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
Data: array [1..400] of byte =(
 $26, 00, 00, 00, $5B, 00, 00, 00, $62, 00, 00, 00, $36, 00, 00, 00,  //&...[...b...6...
 $34, 00, 00, 00, $60, 00, 00, 00, $13, 00, 00, 00, $35, 00, 00, 00,  //4...`......5...
 $19, 00, 00, 00, $54, 00, 00, 00, $3F, 00, 00, 00, $44, 00, 00, 00,  //...T...?...D...
 $4C, 00, 00, 00, $38, 00, 00, 00, $5D, 00, 00, 00, $33, 00, 00, 00,  //L...8...]...3...
 $56, 00, 00, 00, $61, 00, 00, 00, $42, 00, 00, 00, $21, 00, 00, 00,  //V...a...B...!...
 $3E, 00, 00, 00, $2D, 00, 00, 00, $23, 00, 00, 00, $0E, 00, 00, 00,  //>...-...#......
 $1E, 00, 00, 00, $5F, 00, 00, 00, $57, 00, 00, 00, $12, 00, 00, 00,  //..._...W......
 $1B, 00, 00, 00, $17, 00, 00, 00, $22, 00, 00, 00, $58, 00, 00, 00,  //......"...X...
 $2C, 00, 00, 00, $63, 00, 00, 00, $5C, 00, 00, 00, $18, 00, 00, 00,  //,...c...\......
 $37, 00, 00, 00, $41, 00, 00, 00, $59, 00, 00, 00, $4D, 00, 00, 00,  //7...A...Y...M...
 $15, 00, 00, 00, $5A, 00, 00, 00, $53, 00, 00, 00, $0B, 00, 00, 00,  //...Z...S......
 $05, 00, 00, 00, $1C, 00, 00, 00, $10, 00, 00, 00, $2E, 00, 00, 00,  //.............
 $49, 00, 00, 00, $40, 00, 00, 00, $0D, 00, 00, 00, $07, 00, 00, 00,  //I...@..........
 $50, 00, 00, 00, $3D, 00, 00, 00, $32, 00, 00, 00, $46, 00, 00, 00,  //P...=...2...F...
 $0A, 00, 00, 00, $43, 00, 00, 00, $2B, 00, 00, 00, $00, 00, 00, 00,  //....C...+.......
 $3B, 00, 00, 00, $48, 00, 00, 00, $5E, 00, 00, 00, $4E, 00, 00, 00,  //;...H...^...N...
 $51, 00, 00, 00, $1F, 00, 00, 00, $20, 00, 00, 00, $3A, 00, 00, 00,  //Q...... ...:...
 $01, 00, 00, 00, $2A, 00, 00, 00, $45, 00, 00, 00, $55, 00, 00, 00,  //...*...E...U...
 $4A, 00, 00, 00, $02, 00, 00, 00, $52, 00, 00, 00, $27, 00, 00, 00,  //J......R...'...
 $03, 00, 00, 00, $4B, 00, 00, 00, $08, 00, 00, 00, $3C, 00, 00, 00,  //...K......<...
 $0F, 00, 00, 00, $14, 00, 00, 00, $24, 00, 00, 00, $25, 00, 00, 00,  //......$...%...
 $28, 00, 00, 00, $29, 00, 00, 00, $16, 00, 00, 00, $1D, 00, 00, 00,  //(...).........
 $1A, 00, 00, 00, $11, 00, 00, 00, $2F, 00, 00, 00, $39, 00, 00, 00,  //....../...9...
 $09, 00, 00, 00, $47, 00, 00, 00, $06, 00, 00, 00, $4F, 00, 00, 00,  //....G......O...
 $04, 00, 00, 00, $31, 00, 00, 00, $0C, 00, 00, 00, $30, 00, 00, 00); //...1.......0...


var
  Form1: TForm1;

implementation

{$R *.dfm}

function Generate(first, second, third, fourth :word): word;
begin
  asm
    PUSH ESI
    PUSH ECX
    PUSH ECX
    MOV DX, second
    AND fourth, 0
    CMP DX, 270Fh
    JA @ending
    MOV AX, third
    CMP AX, 270Fh
    JA @ending
    XOR ECX, ECX
    MOV CX, first
    CMP CX, 715h
    MOV esi, ECX //!!!
    JNZ @next
    CMP DX, 1C1Eh
    JNZ @next
    CMP AX, 159Dh
    JNZ @next
  @fail:
    PUSH -2
    JMP @ending2
  @next:
    CMP CX, 71Ah
    JNZ @next2
    CMP DX, 1009h
    JNZ @next2
    CMP AX, 15h
    JE @fail
  @next2:
    CMP CX, 714h
    JNZ @main
    CMP DX, 1321h
    JNZ @main
    CMP AX, 0B6Ch
    JE @fail
  @main:
    PUSH EBX
    PUSH EBP
    PUSH EDI
    MOVZX EDI,AX
    MOVZX EAX,DX
    MOV esi, EAX //!!!
    PUSH 64h
    POP EBX
    MOV EAX,EDI
    CDQ
    IDIV EBX
    PUSH 0Ah
    POP EBP
    MOVZX ECX, CX
    PUSH 64h
    MOV EBX, EAX
    MOV EAX, ECX
    CDQ
    IDIV EBP
    ADD EBX, esi
    ADD EAX, EBX
    ADD EAX, EDI
    CDQ
    POP EDI
    IDIV EDI
    MOV EAX, esi
    PUSH 64h
    POP EBX
    PUSH 64h
    POP EBP
    PUSH EBP
    MOV DI, WORD PTR DS:[EDX*4 + Data]
    CDQ
    IMUL DI,DI,64h
    IDIV EBX
    MOV EBX, EAX
    MOV EAX, ECX
    CDQ
    IDIV EBP
    ADD EBX, ECX
    POP ECX
    ADD EAX, EBX
    CDQ
    IDIV ECX
    ADD DI, WORD PTR DS:[EDX*4 + Data]
    MOV DX, DI
    POP EDI
    POP EBP
    POP EBX
    CMP first, 77Bh
    MOV fourth, DX //result
    JE @fail2
    CMP first, 77Ah
    JE @fail2
    XOR EAX, EAX
    INC EAX
    JMP @end
  @fail2:
    PUSH 2
  @ending2:
   POP EAX
    JMP @end
  @ending:
    OR EAX, -1h
  @end:
    MOV CX, fourth
    MOV RESULT, CX
    POP ECX
    POP ECX
    POP ESI
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
label
next_iteration;
var
first, second, third, fourth: word;
begin
    randomize;
  next_iteration:
    first := random(9999); //генерируем 4 случайных числа 
    second := random(9999);
    third := random(9999);
    fourth := random(9999);
    if first div $A <> $B5 then goto next_iteration; //вот эта ОГРОМНАЯ разница в коде между двумя продуктами
    if first = $77B then goto next_iteration; //эти значения не следует брать, т.к. они используются только в
    if first = $77A then goto next_iteration; //education и academic version, а нам нужна FULL
    SpinEdit1.Value := first;
    SpinEdit2.Value := second;
    SpinEdit3.Value := third;
    SpinEdit4.Value := Generate(first, second, third, fourth);
end;

end.
 
Ответить с цитированием