SlideShare a Scribd company logo
1 of 22
いかにして乱数を解析するか 
oupo 
2014 / 9
自己紹介 
● 第4世代でいろいろ 
– バトルファクトリーの解析 
– くじ番号から裏IDを特定するツール 
– バトルタワーの解析 
– ものひろいの乱数調整 
● 線形合同法についてのいくつかの記事 
● ほか:某超次元サッカーRPGの解析
● コンピュータプログラムの用語をたくさん使い 
ますが、分からない用語があってもあまり気に 
せずに聞いてもらえれば。 
● 質問やツッコミがあればお気軽に 
お気軽にね!
DeSmuME
DeSmuME 
● DSのエミュレータ 
– DSのゲームがPCで動かせる
実践:戦闘乱数のトレー 
ス
実践:メモリサーチ
解析ではアプローチが重要 
● プラチナで戦闘乱数のルーチンを見つけるの 
に、試しに現在HPを出発点にしてたぐって 
いったが遠すぎて途中で諦めた 
● クイックセーブ、クイックロードで時間で勝手 
に進んでいかないことはわかるので、さっきの 
ペラップのような手順でseedをメモリサーチす 
ればすぐに見つかる
アセンブリコード
アセンブリコード 
● ある程度踏み込んだ解析をしようとしたらアセ 
ンブリコードを読むことが必要 
– アセンブリコード=機械が実行できるように変換さ 
れたプログラム 
● DSではARMという命令セットが使われている 
– iPhoneやAndroid端末などでも使われている組み込み 
向けのもの 
– なお、多くのPCで使われている命令セットはx86と 
いう。ARMとはずいぶん性格が違う
アセンブリコード 
void init_genrand(unsigned long s) 
{ 
mt[0]= s; 
for (mti=1; mti<N; mti++) { 
mt[mti] = 
(1812433253UL * (mt[mti-1] ^ 
(mt[mti-1] >> 30)) + mti); 
} 
}
アセンブリコード 
void init_genrand(unsigned long s) 
{ 
mt[0]= s; 
for (mti=1; mti<N; mti++) { 
:0203EEA4 E92D4008 stmdb sp!, {r3,lr} 
:0203EEA8 E59F1060 ldr r1, [0203ef10] ; 021467b8 
:0203EEAC E3A02001 mov r2, #1 
:0203EEB0 E5913000 ldr r3, [r1, #0] 
:0203EEB4 E5830000 str r0, [r3, #0] 
:0203EEB8 E5910000 ldr r0, [r1, #0] 
:0203EEBC E58029C0 str r2, [r0, #1c0] 
:0203EEC0 E5910000 ldr r0, [r1, #0] 
:0203EEC4 E590E9C0 ldr lr, [r0, #1c0] 
:0203EEC8 E35E0E27 cmp lr, #270 
:0203EECC A8BD8008 ldmiage sp!, {r3,pc} 
:0203EED0 E59F003C ldr r0, [0203ef14] ; 6c078965 
|0203EED4 E591C000 ldr r12, [r1, #0] 
:0203EED8 E08C210E add r2, r12, lr, lsl #2 
:0203EEDC E5122004 ldr r2, [r2, -#4] 
:0203EEE0 E0222F22 eor r2, r2, r2, lsr #1e 
:0203EEE4 E023E092 mla r3, r2, r0, lr 
:0203EEE8 E78C310E str r3, [r12, lr, lsl #2] 
:0203EEEC E5913000 ldr r3, [r1, #0] 
:0203EEF0 E59329C0 ldr r2, [r3, #1c0] 
:0203EEF4 E2822001 add r2, r2, #1 
:0203EEF8 E58329C0 str r2, [r3, #1c0] 
:0203EEFC E5912000 ldr r2, [r1, #0] 
:0203EF00 E592E9C0 ldr lr, [r2, #1c0] 
:0203EF04 E35E0E27 cmp lr, #270 
*0203EF08 BAFFFFF1 blt 0203eed4 
:0203EF0C E8BD8008 ldmia sp!, {r3,pc} ワオ! 
mt[mti] = 
(1812433253UL * (mt[mti-1] ^ 
(mt[mti-1] >> 30)) + mti); 
} 
}
アセンブリコード 
● 逆アセンブルして出てくるのは関数名も変数名 
も型情報もないプログラム 
● そのまま静的に読むのはしんどい 
● デバッガがあれば少しはラクになるところだが 
…
DeSmuMEのいけてないところ 
● デバッガがない 
Photo by hobvias sudoneighm / CC BY 
http://www.flickr.com/photos/34427466731@N01/2192192956
デバッガとは? 
● プログラムのバグを自動的に直してくれるとっ 
ても便利なプログラム!
デバッガとは? 
● プログラムのバグを自動的に直してくれるとっ 
ても便利なプログラム! 
● ではない 
● レジスタ(作業領域のこと)やメモリの値を見な 
がら、命令を1行1行実行(ステップ実行)してく 
れるツール
NO$GBA Debugger 
● デバッガのついたエミュ 
レータ 
● シェアウェアだったものが 
2014年7月28日にフリー 
ウェアとして公開 
● あのktxadさんも使っている! 
● ちょっと触ってみたが使い方が分からなかった…orz
でもでも 
● DeSmuMEはソースコードが公開されているの 
で意欲と時間さえあれば自分でデバッガを実装 
することだって可能
DeSmuMEのいけてるところ 
● ソースコードが公開されている 
● Luaスクリプト 
– 乱数ルーチンをトレースするというようなデ 
バッガではできないことができる 
– メモリフックと逆アセンブルリストを読むこ 
とで、効率は悪いにせよデバッガでの解析と 
だいたい同等なことが解析できる (はず?)
まとめ 
● エミュレータを使えばDSのゲームの解析がで 
きます 
● 楽しいけれども、大変です
まとめ 
● エミュレータを使えばDSのゲームの解析がで 
きます 
● 楽しいけれども、大変です 
質問はないか?

More Related Content

Viewers also liked

Trauma and urologic reconstruction network of surgeons - MMC and BNCX
Trauma and urologic reconstruction network of surgeons - MMC and BNCXTrauma and urologic reconstruction network of surgeons - MMC and BNCX
Trauma and urologic reconstruction network of surgeons - MMC and BNCXjeremybmyers
 
원대TGK 카다로그
원대TGK 카다로그원대TGK 카다로그
원대TGK 카다로그승환 임
 
【アジャイルサムライ】6章_ユーザストーリーを集める
【アジャイルサムライ】6章_ユーザストーリーを集める【アジャイルサムライ】6章_ユーザストーリーを集める
【アジャイルサムライ】6章_ユーザストーリーを集めるAkio Terayama
 
スクラム開発について
スクラム開発についてスクラム開発について
スクラム開発についてAkio Terayama
 
Certifier l'identité enjeux
Certifier l'identité   enjeuxCertifier l'identité   enjeux
Certifier l'identité enjeuxrichard peirano
 
Traces numériques, cours en seconde - compte rendu et pistes d'évolutions
Traces numériques, cours en seconde - compte rendu et pistes d'évolutionsTraces numériques, cours en seconde - compte rendu et pistes d'évolutions
Traces numériques, cours en seconde - compte rendu et pistes d'évolutionsrichard peirano
 
Iocコンテナについて
IocコンテナについてIocコンテナについて
IocコンテナについてAkio Terayama
 
Eco friendly fuels
Eco friendly fuelsEco friendly fuels
Eco friendly fuelsprateek006
 

Viewers also liked (10)

Trauma and urologic reconstruction network of surgeons - MMC and BNCX
Trauma and urologic reconstruction network of surgeons - MMC and BNCXTrauma and urologic reconstruction network of surgeons - MMC and BNCX
Trauma and urologic reconstruction network of surgeons - MMC and BNCX
 
원대TGK 카다로그
원대TGK 카다로그원대TGK 카다로그
원대TGK 카다로그
 
Nano technology
Nano technologyNano technology
Nano technology
 
【アジャイルサムライ】6章_ユーザストーリーを集める
【アジャイルサムライ】6章_ユーザストーリーを集める【アジャイルサムライ】6章_ユーザストーリーを集める
【アジャイルサムライ】6章_ユーザストーリーを集める
 
スクラム開発について
スクラム開発についてスクラム開発について
スクラム開発について
 
Certifier l'identité enjeux
Certifier l'identité   enjeuxCertifier l'identité   enjeux
Certifier l'identité enjeux
 
Traces numériques, cours en seconde - compte rendu et pistes d'évolutions
Traces numériques, cours en seconde - compte rendu et pistes d'évolutionsTraces numériques, cours en seconde - compte rendu et pistes d'évolutions
Traces numériques, cours en seconde - compte rendu et pistes d'évolutions
 
Enjeux et rs
Enjeux et  rsEnjeux et  rs
Enjeux et rs
 
Iocコンテナについて
IocコンテナについてIocコンテナについて
Iocコンテナについて
 
Eco friendly fuels
Eco friendly fuelsEco friendly fuels
Eco friendly fuels
 

イカ乱