21:00 *yuushi_q_ mode +o BaW_ 21:00 *yuushi_q_ mode +o epyon 21:00 *yuushi_q_ mode +o noname 21:00 *yuushi_q_ mode +o Will 21:01 *IPUSIRON join #rce (~ipusiron@p16131-adsau16honb12-acca.tokyo.ocn.ne.jp) 21:01 (IPUSIRON) こんばんは 21:01 (Pude_) こんばんは 21:01 (yuushi_q_) こんばんは 21:01 *Pude_ mode +o IPUSIRON 21:01 (Will) こんばんはー 21:01 (IPUSIRON) IRCクライアントDLするのと設定で遅れました。 21:01 (IPUSIRON) かまわず続けてください。 21:02 (Will) お、始まりそうw 21:02 (Will) 取り敢えず、始まる前に宣伝だけさせてもおうw 21:02 (Will) http://security.symphonic-net.com/rcejp/ 21:03 (Will) RCE関連のフォーラムを最近作ったんで、興味あるかた参加の方お願いします。 21:03 (Will) ---------------------宣伝終わりw--------------------- 21:03 (yuushi_q_) では始めましょう 21:03 (IPUSIRON) サイトからリンクします<フォーラム 21:04 (Will) お願いします。 21:04 (h4ox) よろしくお願いいたします。 21:04 (epyon) よろしくお願いします. 21:04 (yuushi_q_) よろしくお願いします 21:05 (yuushi_q_) まずはlevel3 をやるかlevel1&2をやるかアンケートとります 21:06 (yuushi_q_) やりたいほうを書き込んで下さい 21:07 (h4ox) できればlevel1をお願いしたいです。 --------2008/10/19 21:15:18 ログを開始 21:15 チャンネルに入りました 21:15 *yuushi_q join #rce (~yuushi_q@ntsitm258195.sitm.nt.ftth.ppp.infoweb.ne.jp) 21:15 *topic : #rce2 21:15 *h4ox!~h4oxdb@p1116-ipbf1606hodogaya.kanagawa.ocn.ne.jp set the topic at 2008/10/19 21:11:25 21:15 *names : yuushi_q Yamadei @ucq @IPUSIRON @Will @noname @BaW_ @epyon @NWMonster @h4ox @Pude_ @tacuya 21:15 *mode +sn 21:15 メンバ情報を取得しました 21:15 *h4ox topic : #rce2 21:15 (yuushi_q) 戻りました 21:16 *Yamadei quit ("http://www.mibbit.com ajax IRC Client") 21:16 *Yamadei join #rce (7b080791@webchat.mibbit.com) 21:16 (yuushi_q) 途中で落ちでしまい申し訳ありません 21:17 *epyon mode +oo Yamadei yuushi_q 21:17 (yuushi_q) http://www.netagent.co.jp/rve/rve.cgi 21:18 (yuushi_q) こちらから問題ファイルを落として下さい 21:18 *ucq quit (EOF From client) 21:19 (yuushi_q) また同じ質問になりますがlevel3かlevel1&2どちらをやりたいでしょうか? 21:20 *Yamadei quit ("http://www.mibbit.com ajax IRC Client") 21:22 (yuushi_q) level3にしましょう^^ 21:22 (noname) 21:07から21:09のところに答えが出てるんですがコピペしてあげたいけどなぜか出来ない(;_;) 21:23 (yuushi_q) 統計結果でお願いします 21:23 (Will) 21:07 (h4ox) できればlevel1をお願いしたいです。 21:23 (Will) 21:07 (tacuya) SASに登録できなくて内容が全然分かりません・・ 21:23 (Will) 21:08 (IPUSIRON) 自分はおまかせします。 21:23 (Will) 21:08 (Pude_) どちらでもかまいません。 21:23 (Will) との事です 21:24 (noname) h4ox level1 tacuya わからない ipusiron おまかさします pude_ どちらでも epyon level1&2希望 と書いてあります 私はヌルーで 21:24 (yuushi_q) では1からやりましょう  21:24 (h4ox) よろしくお願いいたします。 21:24 (tacuya) お願いします 21:25 (Pude_) お願いします。 21:25 (yuushi_q) まずは起動させてみてください 21:25 (epyon) よろしくお願いしますー 21:26 (yuushi_q) ダブルクリックでは開かないと思います^^ 21:26 (yuushi_q) あっ、質問は随時OKです 21:26 (BaW_) 遅れましたがよろしくお願いします 21:27 (yuushi_q) 拡張子をexeに変えてあげると実行できますが、すぐに落ちますね 21:28 (yuushi_q) コマンドプロンプトから実行させてあげましょう 21:28 (yuushi_q) 何も表示されませんね 21:28 (tacuya) はい 21:28 (yuushi_q) ollydbgtにかけてみましょう 21:29 *NWMonster quit ("") 21:29 (yuushi_q) ollydbgです 21:29 *planet join #rce (~planet@FL1-125-197-249-82.tky.mesh.ad.jp) 21:29 (BaW_) 起動しました 21:29 *epyon mode +o planet 21:29 (planet) ばんわ 21:30 (yuushi_q) ここまで大丈夫でしょうか? 21:30 (h4ox) すいません・・・今DL中です 21:30 (yuushi_q) しばらく待ちましょう 21:31 (h4ox) 開けました 21:31 (tacuya) できました 21:31 (yuushi_q) メッセージがでると思いますが無視して下さい 21:32 (yuushi_q) さっそく順番に解析しましょう 21:33 (yuushi_q) と言いましたが重要でない部分を飛ばすということをします 21:33 *NWMonster join #rce (Mncht@123.8.8.202) 21:33 *epyon mode +o NWMonster 21:34 (tacuya) はい 21:34 (yuushi_q) C言語ではライブラリ(stdio.hとかにあるやつ)を使う場合初期化する必要があります 21:35 (yuushi_q) その処理がmainより前に入り解析を邪魔してくれやがります 21:35 (tacuya) どうすれば・・・ 21:35 (BaW_) fm 21:36 (yuushi_q) IDA proというデバッガなら一発でmain関数を見つけることができます 21:36 (yuushi_q) でも今回はあえてollydbgでやりましょう 21:36 (tacuya) はい 21:36 (NWMonster) B4 was made for arm cpu. 21:37 (yuushi_q) ? 21:38 (yuushi_q) main関数の特徴といえば引数にあります 21:39 (tacuya) argc, argvとかですか? 21:39 (yuushi_q) はい 21:39 (yuushi_q) それプラスenv(環境変数)があります 21:39 (tacuya) なるほど 21:40 (yuushi_q) それを引数にcallしてある場所を探せばいいのです 21:41 (yuushi_q) それをヒントに探してみましょう 21:42 (yuushi_q) 引数を3つとってるcallを上から探すと目安がつくと思います 21:43 (yuushi_q) 見つけられた方挙手して下さい 21:44 (epyon) ノ 21:44 *NWMonster quit ("") 21:44 (yuushi_q) 実際にmain関数の中を見ると怪しい文字があるのでわかると思います 21:46 (yuushi_q) 便利なコマンド 21:46 (yuushi_q) callのところでEnter押すとで関数に入る -押すと一つ前に戻る 21:48 (yuushi_q) 豆知識 21:48 (yuushi_q) オプション->環境設定->コード強調表示でcallとかの色を変えると見やすくなります 21:48 (yuushi_q) 皆さん見つかりましたか? 21:50 (h4ox) すいません、ollydbgの使い方をよくわかっていないので、私はスルーの方向でお願いいたします・・・(ネットで調べつつやってみてます) 21:50 (BaW_) argってのがある場所ですか? 21:51 (yuushi_q) argってたぶん表示されないと思います・・・ 21:52 (h4ox) CALL level1.*** って所ですかね? 21:53 (yuushi_q) その中から引数が3つ(pushがみっつ) 21:53 (yuushi_q) あるところです 21:55 (yuushi_q) 0x004011DCからエントリポイントでそこからretするまでの間にmain関数の呼び出しがあります 21:56 (tacuya) 直前にpushが3つあるところから入ってるんですね 21:56 (yuushi_q) はい 21:57 (yuushi_q) 見つかりましたか? 21:57 (tacuya) すぐに RETNされてるようです 21:57 (yuushi_q) 怪しい文字が見えてれば、そこです。 21:58 (tacuya) 怪しいです 21:58 (BaW_) それっぽところありました 21:59 (yuushi_q) 他の皆さんはできましたか? 21:59 (epyon) 大丈夫ですー 21:59 (tacuya) F2押しときました 22:00 (yuushi_q) これ省略できるのとできないのとで解析時間がかなり変わります 22:00 (BaW_) fmfm 22:01 (yuushi_q) 試しにやってみるとわかるのですが 22:01 (yuushi_q) しんどいです。 22:01 (tacuya) ふむふむ 22:01 (yuushi_q) h4oxさんできそうですか? 22:01 (epyon) 検索→全ての参照文字列から入るクセが・・・ 22:02 (yuushi_q) それやるとはまりますね 22:02 (h4ox) 検索ってCTRL+Fでいいんですよね? 22:02 (yuushi_q) はい 22:02 (yuushi_q) 検索しなくても上から見ていけばありますよ 22:02 (h4ox) で、CALLのみとかだとオペランドが足りないみたいなエラーがでるのですが、*みたいな事ってできないんですかね? 22:03 (tacuya) callってしてもオペランドが少ないって怒られました 22:03 (yuushi_q) call constで全即値検索になります 22:04 (tacuya) ! 22:04 *NWMonster join #rce (Mncht@123.8.15.49) 22:04 (h4ox) ありがとうございます 22:05 (tacuya) CTRL+Lで次の候補にいけるんですね 22:05 (yuushi_q) はい 22:06 *NWMonster quit ("") 22:07 *planet quit ("さようなら") 22:08 (BaW_) C言語のものは必ず引数3つ取るんですか? 22:10 (epyon) winmainだとまた違うみたいです 22:10 (yuushi_q) うーん、微妙です。 22:10 (BaW_) なるほど 22:10 (yuushi_q) VCは自動的に3つになるようです 22:10 (BaW_) fm 22:11 (yuushi_q) さてmain関数のアドレスは0x00401110ですね 22:11 (tacuya) はい 22:11 (yuushi_q) 0x0040134Aから呼び出されています 22:11 *planet join #rce (~planet@FL1-125-197-249-82.tky.mesh.ad.jp) 22:11 (BaW_) おぉあってるみたいです 22:12 (yuushi_q) main関数の中身を見ちゃいましょう 22:12 (yuushi_q) good luck どうみても怪しいですね 22:12 (BaW_) 臭いますね 22:12 (tacuya) はい・・ 22:12 *epyon mode +o planet 22:13 (yuushi_q) もしテキスト検索したらretnではまることになると思います 22:13 (yuushi_q) good luckになんでいかないんだみたいな 22:14 (yuushi_q) main関数だとわかっていれば簡単です 22:14 (tacuya) なるほど 22:14 (yuushi_q) call命令のためesp+4] 22:14 (yuushi_q) にargc 22:14 (yuushi_q) [esp+8]にargvです 22:16 (yuushi_q) ここまで大丈夫ですか? 22:16 (tacuya) はい 22:16 (BaW_) はい 22:17 (epyon) はい 22:17 (h4ox) はい 22:17 (yuushi_q) では引数はいくつ必要でしょう? 22:18 (tacuya) 2個でしょうか 22:18 (yuushi_q) 正解です。 22:18 (tacuya) 下のPushの数を言いました 22:19 (tacuya) ESIの値が怪しい値です 22:19 (yuushi_q) あれはレジスタの退避です 22:19 (tacuya) なるほど 22:19 (yuushi_q) 関数の一番最初で比較してます 22:21 (BaW_) この比較は何を意味するんでしょうか? 22:21 (yuushi_q) 最初の方をC言語流にかくならば 22:21 (yuushi_q) if (argc!=3) return 1; 22:22 (tacuya) CMPの次にJEですね 22:22 (yuushi_q) はい 22:22 (BaW_) なるほど 22:23 (yuushi_q) 次はpopまで見てみましょう 22:23 (yuushi_q) [esp+8]はargv [EAX+4]はargv[1]です 22:24 (yuushi_q) ここまで大丈夫ですか? 22:25 (Pude_) はい 22:26 (tacuya) [esp+8] は0012FEE0 + 8だから 0012FEE8 になって Return先となりますか? 22:27 (yuushi_q) いいえならないです。return先は[esp]です 22:29 (yuushi_q) callでreturn先をpushして、そのままespはスタックトップ=return先をさし続けるので 22:29 (tacuya) ふむふむ 22:30 (yuushi_q) 大丈夫ですか? 22:30 (tacuya) はい 22:30 (yuushi_q) では次行きます 22:30 (BaW_) はい 22:30 (yuushi_q) esiにargv、ediに"good luck"、ecxにカウンタです 22:31 (yuushi_q) repecmpで比較 22:31 (yuushi_q) strncmp(argv[1],"good luck",10)って感じです 22:32 (yuushi_q) OKですか? 22:33 (tacuya) 処理が004011Dまで行かないです・・ 22:34 (yuushi_q) 解析->引数から適当に引数を設定して下さい 22:35 (yuushi_q) ファイル->開くからでもできます 22:35 (yuushi_q) できましたか? 22:36 (BaW_) できました 22:37 (BaW_) 適当に2つ与えたらいいんですよね? 22:37 (yuushi_q) tacuyaさんできました? 22:38 (tacuya) できました! 22:39 (yuushi_q) そのままF7で進めるとretunしちゃいます。 22:39 (tacuya) やってしまいました 22:40 (yuushi_q) さっきわかったとおり、第一引数は"good luck"なのでそれに変更しましょう 22:41 (BaW_) ふむ 22:41 (yuushi_q) 変えたら、0x40113cまで進めましょう 22:42 (BaW_) おっと 22:42 (BaW_) Jumpしました^^; 22:43 (yuushi_q) 引数をよくみましょう。 22:43 (tacuya) いけました 22:44 (yuushi_q) Bawさんできました? 22:45 (BaW_) 引数のとこにgood luckでいいんですよね? 22:45 (yuushi_q) それだと引数の数いくつになります? 22:45 (BaW_) ひとつですね 22:45 (tacuya) スペースが・・ 22:45 (BaW_) もうひとつは適当で言い訳ですか 22:46 (yuushi_q) はい 22:47 (BaW_) あ、できました 22:47 (yuushi_q) これ自分もハマりました 22:48 (BaW_) そうなんですかw 22:48 (tacuya) 落とし穴ですね 22:48 (epyon) main前からなめ直しました・・・ 22:48 (yuushi_q) 次いきましょう。 22:48 (BaW_) はい 22:49 (yuushi_q) call 前に[esp+8]=argvがpushされていることに注意してcall先へ行きましょう 22:50 (tacuya) はい 22:50 (yuushi_q) 最初のpush esi はレジスタの退避です 22:51 (yuushi_q) pushされたためスタックがずれ、[esp+8]がargvを指します 22:51 (yuushi_q) ここまで大丈夫ですか? 22:52 *gleentea join #rce (~GleenTea@p2214-ipbfp1101osakakita.osaka.ocn.ne.jp) 22:52 *epyon mode +o gleentea 22:53 (tacuya) pushされたなら前にpushされたesp+8が奥に入っちゃう気がしてしまいます 22:54 (yuushi_q) [esp+8]は単なるアドレスのpushです、なので奥にはいきません 22:57 (yuushi_q) 大丈夫ですか? 22:57 (tacuya) すいません スタックはどこで確認できますか? 22:57 (yuushi_q) 右下です 22:58 (tacuya) なるほど 22:58 (tacuya) 分かりました 22:59 (yuushi_q) では一気にループまで読み進めます 23:00 (BaW_) ループのところまで行きました 23:00 (yuushi_q) 二重に命令の前に"["みたいのがついてるところがループしている場所です 23:01 (tacuya) はい 23:03 (yuushi_q) あっ説明まちがってました。pushされたのは[EAX+8]でargv[2]でした 23:04 (tacuya) はい! 23:05 (BaW_) なるほど! 23:06 (yuushi_q) ループでは第二引数を1文字づつnotしています 23:06 (yuushi_q) デバッガで追いながらやると分かると思います 23:06 (yuushi_q) ここまでOKですか? 23:06 (tacuya) はい 23:07 (BaW_) ok 23:07 (BaW_) deusu 23:07 (yuushi_q) さあ、後は似た処理の繰り返しです、頑張って自力でやってみましょう 23:07 (tacuya) やってみます 23:08 (BaW_) はい! 23:10 (yuushi_q) 途中でつまづいたら質問して下さい 23:17 (tacuya) XOR EDX,EDX とか TEST CL,CLは何をしてるんですか? 23:21 (yuushi_q) どこのアドレスですか? 23:21 (tacuya) 0040100B0, 0040100B2 です 23:22 (tacuya) 間違えました 23:22 (tacuya) 004010AAと004010B0です 23:22 (yuushi_q) XOR EDX,EDXみたいなXOR レジスタ,レジスタ はそのレジスタを0で初期化することと同じです 23:22 (tacuya) なるほど 23:23 (yuushi_q) TEST CL,CLはTESTは数値を変更しないand演算です 23:25 (tacuya) どんな意味があるんですか? 23:25 (yuushi_q) clで1ないならZF=0 cl=0ならZF=1です 23:25 (tacuya) なるほど 23:26 (tacuya) フラグのみセットするものなんですね 23:26 (yuushi_q) そうです 23:27 (yuushi_q) できそうですか? 23:30 (tacuya) 一歩ずつですが進んでいっています 23:30 (tacuya) ちょっと時間がかかりそうです 23:31 (yuushi_q) こういうアルゴリズム的なところは自分でやると力がつくので頑張ってください 23:31 (tacuya) はい! 23:32 (tacuya) 自分はほっといて先に進んでください 23:33 (yuushi_q) 時間的に2に進むのは難しいんで待ってますよ 23:34 (tacuya) すいません 23:34 (BaW_) 2つ目のループなんですが 23:34 (yuushi_q) はい 23:35 (BaW_) EAXに実行パスらしきものが入っててEDXとADDしてるのはどういうことが起きてるんでしょうか 23:42 (yuushi_q) 正解Passとの比較です。 23:46 (BaW_) ふむ 23:47 (yuushi_q) ちょっとPCはログアウトします。 23:48 (BaW_) 了解です 23:52 *yuushi_q quit (Ping timeout) 23:54 *yuushi_q join #rce (~gateway@ntsitm296076.sitm.nt.ftth.ppp.infoweb.ne.jp) 23:55 (yuushi_q) 戻りました。 23:55 (yuushi_q) 戻りました。 23:56 (h4ox) おかえりなさい 23:56 (BaW_) お帰りなさいませ 23:56 (yuushi_q) 皆さんできましたか? 23:59 (BaW_) まだです・・・orz でも進んじゃってください 23:59 (h4ox) 勉強しておきます・・・ 23:59 (tacuya) 同じくです・・ 00:02 *noname mode +o yuushi_q 00:03 (yuushi_q) 引数をnotしたということは正解パスもnotされている 00:04 (yuushi_q) 怪しい文字列をnotすれば答えが見つかるかもしれません 00:05 (yuushi_q) ヒント call先 00:06 (yuushi_q) できそうですか? 00:09 (tacuya) ちょっと時間的に厳しそうです 00:09 *Pude_ quit ("See you...") 00:10 *h4ox part () 00:10 (yuushi_q) 正解パスのヒントみたいかたは#rce2へ 00:11 (yuushi_q) ぐだぐだですが、自由解散です。 00:12 (tacuya) 明日再挑戦してみます 00:12 (yuushi_q) 私はまだ残りますのでやりたい方はまだ残っても大丈夫です 00:12 (IPUSIRON) SASがSAS SNSからmixiに移転しました。詳細は告知してありますが、何かわからないことがあれば聞いてください。 00:14 (noname) 明日はやいので落ちます。お疲れ様でした! 00:14 *noname part () 00:15 (epyon) お疲れ様です 00:15 (IPUSIRON) お疲れ様でした 00:16 (yuushi_q) これでリバースエンジニアリング興味を持った方は是非mixiのSAS SNSまたはRCE Japanまでどうぞ 00:16 (BaW_) お疲れ様です 00:16 (Will) http://security.symphonic-net.com/rcejp/ 00:16 (Will) ここですかさずURLを出すw 00:17 (tacuya) 自分もおちます 00:17 (tacuya) 今日はありがとうございました 00:18 *tacuya quit ("Leaving...") 00:19 *IPUSIRON quit (EOF From client) 00:21 (yuushi_q) まだlevel1続けてる方います? 00:22 (BaW_) やってはみてるんですがイマイチですw 00:22 (yuushi_q) ヒント読みました? 00:23 (BaW_) いえ、rce2入ったときには時すでにお寿司でしたw 00:23 (yuushi_q) ヒントいります? 00:24 (BaW_) お願いします 00:24 (yuushi_q) 第2引数の文字はHellから始まります 00:25 (BaW_) 頑張ってみます 00:33 (yuushi_q) どこで詰まってます? 00:33 (yuushi_q) どこで詰まってます? 00:34 (BaW_) 4010CBのとこでジャンプしちゃうとこです^^; 00:35 (yuushi_q) 今、PCじゃないんでコードお願いします 00:36 (BaW_) 004010C5 CMP EDX,7B7 00:36 (BaW_) 004010CB JNZ SHORT level1.00401108 00:36 (BaW_) こんな感じのところです 00:38 (yuushi_q) そこはチェックサムです。正解じゃないとジャンプするのでjnzをnopにしちゃいましょう 00:39 (BaW_) わかりました 00:49 (yuushi_q) はい。チャレンジ当日に会いましたw 00:51 (BaW_) ちょいと時間掛かりそうなんで明日またチャレンジしてみますね 00:51 *gleentea part (See You) 00:51 (yuushi_q) はいです 00:51 (BaW_) 今日はどうもありがとうございました 00:52 (yuushi_q) いえいえ、こちらこそありがとうございました 00:52 *BaW_ quit ("Leaving...") 00:54 (yuushi_q) 了解です