制作日記

こういうの作った方が、逃げにくいじゃない

擬似乱数その3

乱数生成してるのはここらへんかな?
00492F37 /$ E8 83590000CALL winmugen.004988BF
00492F3C |. 8B48 14 MOV ECX,DWORD PTR DS:[EAX+14]
00492F3F |. 69C9 0D661900IMUL ECX,ECX,19660D
00492F45 |. 81C1 5FF36E3CADD ECX,3C6EF35F
00492F4B |. 8948 14MOV DWORD PTR DS:[EAX+14],ECX
00492F4E |. 8BC1MOV EAX,ECX
00492F50 |. C1E8 10SHR EAX,10
00492F53 |. 25 FF7F0000AND EAX,7FFF
00492F58 \. C3RETNETN

最後にAND EAX,7FFFとしている
生成した乱数は4byteだから、論理積で7FFFhつまり32767以下にしている
この後下3桁だけ取り出すとしたら……

767までは等確率、それ以上の発生確率は32/33まで減るわけだ
計算してみると、0.9696……
さっきの調査と大体合致する、あってるっぽいね

↑のアセンブラの解説、数字は全部16進数のまま表記してるから注意
00492F3C |. 8B48 14 MOV ECX,DWORD PTR DS:[EAX+14]
アドレス[EAX+14]の値をECXに代入、乱数を作るための種を取り出してる
00492F3F |. 69C9 0D661900 IMUL ECX,ECX,19660D
ECX*19660DをECXに代入
00492F45 |. 81C1 5FF36E3C ADD ECX,3C6EF35F
ECXに3C6EF35Fを加算
00492F4B |. 8948 14 MOV DWORD PTR DS:[EAX+14],ECX
アドレス[EAX+14]にECXの値を代入、乱数を作るための種を更新
00492F4E |. 8BC1 MOV EAX,ECX
EAXにECXの値を代入
00492F50 |. C1E8 10 SHR EAX,10
右シフト(10回)
00492F53 |. 25 FF7F0000 AND EAX,7FFF
7FFFとの論理積をとる

種さえ予測出来たらrandom制御出来るかもしれないねー
予測出来たらなwww

これがあってるなら、%nでの制御は容易だけど……
コード追加必須だし、そこまでする価値ないな

コメントの投稿

非公開コメント

プロフィール

Author:drab
霊夢改変キャラ
「12 3 ! {V} [_]」
公開中
L霊夢でもl_reimuでも好きなように読んでください

最新記事
最新コメント
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク