PRGN crackme by bart/xt
PRNG & RSA-512
-----------------------

PRNG - Pseudo-Random Number Generator

(hehe, bart, zrobiles literowke w nazwie wlasnego cm =)

Magic key to N (modulus z RSA), ktory jest generowany za pomoca 
wspomnianego wyzej PRNG. Zarodek jest 16-bitowy, wiec
brute-force bedzie trwal chwile. Oczywiscie mozna
bawic sie w rozklad N na czynniki pierwsze przy uzyciu
MPQS czy krzywych eliptycznych, ale to raczej rozwiazanie
dla sadystow :).
Musi zachodzic rownosc:

RSA_ENCRYPT(serial) == name
serial == RSA_DECRYPT(name)

klucz publiczny d, liczymy w ten sposob:

	decr(p,1,p);
        decr(q,1,q);				
	multiply(p,q,phi);
        xgcd(e,phi,d,d,sn);

czyli e*d=1 mod fi(p*q)
      e*d=1 mod (p-1)*(q-1)
xgcd to rozszerzony algorytm euklidesa

Mozna rowniez przechwycic P i Q w trakcie ich generowania -
cos jak keyloader, tyle ze takie rozwiazanie nie byloby
zbyt eleganckie.

generowanie liczb P i Q:

.text:00401318       call    make_word_seed   ;zarodek (16-bit)
.text:0040131D       push    P
.text:00401323       push    20h	      ;32 bajty
.text:00401325       call    sub_0_401297
.text:0040132A       push    Q
.text:00401330       push    20h
.text:00401332       call    sub_0_401297
.text:00401337       push    modulus
.text:0040133D       push    Q
.text:00401343       push    P
.text:00401349       call    bigmul

sub_0_401297	proc near		; CODE XREF: PRNG+50p PRNG+5Dp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		mov	esi, [ebp+arg_0]
		mov	ebx, [ebp+arg_4]
		xor	edi, edi
		jmp	short loc_0_4012B6
; 

loc_0_4012A7:				
		call	rnd                         ;jakas procka domowej roboty 
		mov	edx, eax
		mov	ds:byte_0_40B128[edi], dl   ;kolejne pseudo-losowe bajty
		inc	edi

loc_0_4012B6:				
		cmp	edi, esi
		jb	short loc_0_4012A7
		push	ebx
		push	offset byte_0_40B128
		push	esi
		call	bytes_to_big
		push	ebx
		push	ebx
		call	nxprime    ;na wyjsciu ebx - liczba pierwsza
		add	esp, 14h
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn	

keygen moze dostac zwiechy jesli wpiszesz niewlasciwy magic key (brute
bedzie trwal zbyt dlugo), wiec lepiej uwazac =). aha, keygen nie
jest demonem szybkosci, wiec przy generowaniu seriali, cierpliwosc
jak najbardziej wskazana =)

jeszcze jedno: mozna po prostu zaszyfrowac serial i w miejsce name
wstawic wynik.. tez bedzie dzialac =)

greets: divine, sachy, witeg, tato, thigo, tomkol, nils, lutin, statman..

z wyrazami szacunku,
ged_/cpl+tmg
ged@hoga.pl