PDA

Просмотр полной версии : кейгенинг EmEditor Version 7.00.2 "подшумок"


ProTeuS
06.03.2008, 17:12
оффсайт: http://www.emeditor.com/

это нефига не статья, и не тутор, просто 4еркну пару строк как удивительно иногда тупизм девелаперов помагает нашару закейгенить целую линейку их продуктов без особых усилий.

как-то загружая на фтп софт загрузил по нагу и эту тулзень, и юзая закейгененую версию emFTP заметил, 4то emEditor незареген и давно хотел поглядеть в 4ем разница в коде от первого продукта.

про4итав мою статейку по кейгенингу emFTP (http://cracklab.ru/art/?action=view&id=359), выбираем константу в функции подст4ета регномера для EmFTP (например 270Fh из команды CMP AX, 270Fh) и поиск в ольке (Find All Constans) доказывает, 4то девелеперы упорно не хотят менять алго генерации регномеров не то 4то для новых билдов, а даже для совершенно других своих продуктов:
.text:0044F229 mov esi, 270Fh


.text:0044F21D sub_44F21D proc near ; CODE XREF: sub_44F3AC+27p
.text:0044F21D
.text:0044F21D var_4 = dword ptr -4
.text:0044F21D arg_0 = dword ptr 4
.text:0044F21D
.text:0044F21D push ecx
.text:0044F21E mov eax, [esp+4+arg_0]
.text:0044F222 movzx edx, word ptr [eax+2]
.text:0044F226 xor ecx, ecx
.text:0044F228 push esi
.text:0044F229 mov esi, 270Fh

и т.д.

по4ти один водин совпадает с алго прос4ета в EmFTP. идем на уровень выше и видим все то же сравнение первой вбитой 4байтной последовательности:


.text:0044F3AC sub_44F3AC proc near ; CODE XREF: sub_432638+3Ep
.text:0044F3AC movzx eax, word ptr [esi] //тут загружается первая вбитая при регистрации 4байтная последовательность
.text:0044F3AF push 0Ah
.text:0044F3B1 cdq
.text:0044F3B2 pop ecx
.text:0044F3B3 idiv ecx
.text:0044F3B5 cmp eax, 0B5h //тут сравнение. у девелоперов хватило фантазии только 4тобы сменить сравниваемый байт с B7 на B5, но алго оставили тем же
.text:0044F3BA jz short loc_44F3CD
.text:0044F3BC xor ecx, ecx
.text:0044F3BE cmp eax, 0ABh
.text:0044F3C3 setnz cl
.text:0044F3C6 lea ecx, [ecx+ecx-3]
.text:0044F3CA mov eax, ecx
.text:0044F3CC retn
.text:0044F3CD ; ---------------------------------------------------------------------------
.text:0044F3CD
.text:0044F3CD loc_44F3CD: ; CODE XREF: sub_44F3AC+Ej
.text:0044F3CD push edi
.text:0044F3CE movzx edi, word ptr [esi+6]
.text:0044F3D2 push esi
.text:0044F3D3 call parse
.text:0044F3D8 cmp eax, 0FFFFFFFEh
.text:0044F3DB jnz short loc_44F3DF
.text:0044F3DD pop edi
.text:0044F3DE retn

ProTeuS
06.03.2008, 17:16
более того, буфер 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.

KEZ
06.03.2008, 21:02
Бля, протеус, а почему на делфи то...??

ProTeuS
06.03.2008, 21:49
бекоз делфе хеккерский язык
а вообще, фишка 4то был рипнут кусок кода, я просто его аля инлайн кинул для нао4ности, 4тобы не замора4иваться с рисованием интерсейфа на асме, финт совершенно не в красоте и размере бинаря, а именно в быстром нахождении алго проверки, риппинге на скорую руку, несуть в какой среде его подклю4ать и 4ем компились. если бы коне4ной целью был бинарь или ревирс кода для какойнить малвари, то коне4но же пришлось бы постесняться и компилить масмом)

ProTeuS
10.12.2008, 15:59
недавно вышел EmEditor 8.01 (http://www.emeditor.com/). Для него кейген все еще актуален