Re: A92: random number


[Prev][Next][Index][Thread]

Re: A92: random number




hy,

I studied a little bit the way to generate random numbers.
(for polymorph & genetic viruses ;-)  )

First it is impossible to generate real random numbers.
Even John  Von Neumann said (in french, sorry, I don't know
how to translate it) : "Quiconque supposerait l'emploi de méthodes
algorithmiques pour la production de chiffres aléatoires serait
dans l'erreur" (if someone can translate it...)

So all random number generators are pseudo random numbers
generators.
And it is very very hard to make good random number generators.

A good way to generate random numbers is to use (in french again,
sorry) "un générateur de séquence congruentielle linéaire). I didn't
known what is was before but in fact it is quite simple.  Here is how
to do :

	Xn+1 = (a * Xn + c) mod m

where a, c, and m are positives. (it is quite the same way as 
explain Arno Kizina)

If the choice of a, c, and m is good, the generator will be 
quite good. But if you make a bad choice, it will be very bad.
Sorry, I don't know how to make a good choice.


Here is the code of such a generator in x86 asm :
(the x86 assembly is a real shit. The 68k is 10000 x better !)

M	DD	134217729
A	DD	44739244
C	DD	134217727
Rand_Seed	DD	0

;--------------
;set Rand_Seed up with a random number to seed the
;pseudo random generator. 
;--------------
RANDOM_SEED:
	push	si ds dx cx bx ax
	call	RS1		;it is just for the virus for
RS1:	pop	bx		;making it totally relocatable 
	sub	bx, offset RS1	;using bx
	xor	ax,ax
	mov	ds,ax
	mov	si,46ch		;it is the timer if i don't make a mistake
	lodsd
	xor	edx,edx
	mov	ecx,M
	div	ecx
	mov	cs:[bx][Rand_Seed],edx
	pop	ax bx cx dx ds si
	ret

;---------
;return pseudo-random number in ax
;--------
Get_Random:
	push	bx cx dx
	call	GR1
GR1:	pop	bx
	sub	bx,offset GR1
	mov	eax,[bx][Rand_Seed]
	mov	ecx,[bx][A]
	mul	ecx			;Xn * A
	add	eax,[bx][C]		;Xn * A   + C
	adc	edx,0
	mov	ecx,[bx][M]		;mod
	div	ecx			;M
	mov	eax,edx
	mov	[bx][Rand_Seed],eax
	pop	dx cx bx
	ret


If you want more informations you can also read 
The Art of Computer Programming of Donald E.Knuth
(Seminumerical algorithms, vol2, p1-170, Addison Wesley, 
1981)

Good luck !!!
Benoit SCHERRER
E-Mail : mailto:p.c.scherrer@wanadoo.fr
Web :    http://perso.wanadoo.fr/scherrer