LiSa
April 1st, 2005, 04:28
hello,
I found an interesting debugger detection wich use the pseudo random generator of
irvinelib : random32(seed). It is looking like :
time1 := keGetSystemTime()
/ / little stuff
time2 := keGetSystemTime()
value1 := random32(time2) xor random32(time2) mod 5 * time1
/ /
later
number = complexfunction (value1) mod 3
if number =0 ou 1 -> BAD
if number =2 OK
I ripped part of code and make a small prg to test this,the results are the following :
If time 2 - time1 < 5 ms will return 2
If time 2 - time1 > 5 ms will return 0 or 1
So this program is indeed monitoring iteself the performance of a pseudonumber generation,
if debugged this is somewhat altered and you are detected.
I fake this by patching time1 and constraining time2=time1+2 (very fast computer...
Have someone already seen such a stuff and what is the mathematical backgound behind that?
Thanks.
I found an interesting debugger detection wich use the pseudo random generator of
irvinelib : random32(seed). It is looking like :
time1 := keGetSystemTime()
/ / little stuff
time2 := keGetSystemTime()
value1 := random32(time2) xor random32(time2) mod 5 * time1
/ /
later
number = complexfunction (value1) mod 3
if number =0 ou 1 -> BAD
if number =2 OK
I ripped part of code and make a small prg to test this,the results are the following :
If time 2 - time1 < 5 ms will return 2
If time 2 - time1 > 5 ms will return 0 or 1
So this program is indeed monitoring iteself the performance of a pseudonumber generation,
if debugged this is somewhat altered and you are detected.
I fake this by patching time1 and constraining time2=time1+2 (very fast computer...

Have someone already seen such a stuff and what is the mathematical backgound behind that?
Thanks.