本帖最后由 oGanTongShenShou 于 2013-01-20 08:55:22 编辑

解决方案 »

  1.   

    以下是一个前辈反汇编的供参考,但Randomize的[eax+4]从哪里来的他自己说没有弄清楚,另外Rnd(-n)他也没做出反汇编
    -----------------
    我电脑上装的是VB6,所以拿MSVBVM60.dll来分析。去掉部分次要的代码后,核心代码如下:
    RandomNext:
    ...
    mov ecx,[ebp+8] //将上一次的随机数传入ecx
    imul ecx,ecx,2BC03
    mov eax,FFC39EC3
    sub eax,ecx //此时,eax的值就是产生的下一个随机数了
    ...Randomize:
    ...
    mov ecx,[esp+8] //将Randomize后的参数传入ecx
    mov edx,ecx
    and edx,FFFF
    shr ecx,8
    shl,edx,8
    and ecx,FFFF00
    xor edx,ecx
    mov ecx,[eax+4] //将旧的种子数传入ecx
    and ecx,FF0000FF
    or edx, ecx //此时,edx的值就是新的种子数
      

  2.   

    我写的不明白吗?
    所有的不是我分析的,都是网上现成的。
    你说的什么因变量?是Rnd(+n)的算法吗?那就是x = ( x * a + c ) MOD (2^24),我这是VB写法。标准写法应该是y = ( x * a + c ) MOD (2^24),y是第一个随机数;然后y又带入x得到下一个随机数...如此循环不断
      

  3.   

    很明显你后一个目的是实现不了的。
    [eax+4]很可能和当前时钟计数有关。