パスワードを忘れた? アカウント作成
4559975 journal
日記

fs0x7fの日記: ちょっと変わったデベハトップ問題とisupperの危険性 5

日記 by fs0x7f

パスに含まれるマルチバイト文字の後続バイトをASCIIの1バイト文字として大文字小文字変換してしまうバグのことをデベハトップ問題って自分で勝手に呼んでるのだけど、コレに関連するちょっと風変わりな現象に遭遇してソレにまつわるちょっと面白い事に気が付いたのでメモしておく。
# ShiftJIS(CP932)の「デスクトップ」を小文字化破壊すると「デベハトップ」で、大文字化破壊すると「ェスクエィシ」になります。

Microsoftが提供しているMD5・sha1ハッシュ計算ツールで、ファイル チェックサム整合性検証 (FCIV) ユーティリティ(fciv.exe)というのがある。
UIは日本語化されていないのだが、中途半端に多言語対応しててエラーメッセージなどはOSの言語で出力されるとかいう微妙に気持ち悪い仕様になっている。
このユーティリティのパスの取り扱いには少々癖があり、相対パスは受け付けるがカレントパス指定(.\)は受け付けず、しかし一度駆け上がってカレントを指定したり、カレントパスの二重指定(.\.\)は受け付けるというかなり気持ち悪い仕様になっている。
んで、パラメータに与えた引数はデベハトップ問題を発症するのだが、対象がパラメータで渡した分だけなので中々表面化しないとかいう気持ち悪い仕様になっている(修正版のテストするまでパラメータのみって事に気が付かなかった…orz)。
# あくまでもパラメータの問題なので、-rオプションを使ってfciv自身が探した場合は問題ない

受け付けるパスの問題を回避した次に気がついたのは「版」の含まれるパスを与えると1バイト片仮名で「エナ」となって失敗するとかいうデベハトップ問題をもっと気持ち悪くしたような現象だった。
バイト列は[版:0x94 0xC5]から[エ:0xB4][ナ:0xC5]に変化しているので0x94+0x20=0xB4の大文字→小文字変換がかかっている感じだが、0x94でisupperが真になるとか聞いたことがないし、Googleで探しても特に0x94がダメ文字だなんて話も特に聞いたことがない。
Google先生に聞いても0x94に関連する先例が見つからなかったのでOllyDbgでひたすら追いかける事にした。

問題:
fciv.00404825から始まる関数を要約すると、引数で受けた値をEAXに入れて以下のコードを実行する。
411130が示す配列は512バイト有り、そのうち後ろ256バイトは0である。
訂正:411130は514バイトの配列の3バイト目を指しており、その配列の後ろ256バイトは0である。
この関数が受け入れ可能な値の範囲を書け。また受け入れ可能な値の範囲を超えたときに何が起こるか予測せよ。
00406508 MOV ECX,DWORD PTR DS:[411130]
0040650E MOVZX EAX,BYTE PTR DS:[ECX+EAX*2]
00406512 AND EAX,1
00406515 RETN

Ans1.
    0-255
    訂正:-1~255
Ans2.
    ・無関係なメモリを参照して不定値を返す。
    ・セグメンテーション違反その他でクラッシュする。

問題:
以下のコードは、マルチバイト文字が渡される可能性のある、大文字を小文字に変換する為のコードである。
問題点を2点書け。
00404812 MOVSX EAX,BYTE PTR DS:[ESI]
00404815 PUSH EAX
00404816 CALL fciv.004064ED
0040481B ADD ESP,4
0040481E TEST EAX,EAX
00404820 JE SHORT fciv.00404825
00404822 ADD BYTE PTR DS:[ESI],20
00404825 INC ESI
00404826 CMP ESI,EBP
00404828 JB SHORT fciv.00404812

Ans1.
    mbcs判定が無くバイト単位で判別しているので、マルチバイト文字の後続バイトを破壊してデベハトップ問題を起こす。
Ans2.
    MOVSXなので負数を使って文字を判別する可能性がある。
    先のfciv.00404825の内容からすれば、最悪、セグメンテーション違反を起こす。

問題:このコードを生成しうるC++のコードを書け。
Ans3. for(char *p=str;*p;p++)if(isupper(*p))p+='a'-'A';

気が付いたら、なんのヒネリも無いisupper()判定でも最悪の場合セグメンテーション違反が発生するという恐ろしい話になってしまった。
よっぽど変なコンパイル&メモリ配置にならなければ前後に他のライブラリ変数が配置されてクラッシュはしないけど、たったコレだけのコードでもアウト。

isupperの実装で範囲チェックを省いた処理系が悪い?
とりあえず手近にあったC処理系のライブラリを大ざっぱに読んだ感じ
× GNU C Library
× Mingw(TCC)
× Microsoft Visual C++ 10.0
○ FreeBSD
と、FreeBSD以外全滅なんですが。(バージョンは確認してないから不公平だったらごめんね!)

というわけで、シングルバイト文字列圏含めて、isXXXXには注意してね!
ロケールの設定はちゃんとやろうね!
あとマルチバイト処理もきっちりやってほしいな!
さもないとアクセス失敗どころかクラッシュしかねないよ!

# どうでもいいけど、BSDのctypeの実装でCurrentRuneLocaleとか内部名がRune何とかってなってるんだけど、これルーン文字のRuneだよね。
# 浪漫っつうか中二病って言うか・・・なんか愛着沸きそうになっちゃうじゃないか!

1735478 journal
日記

fs0x7fの日記: [メモ]デベロッパー(アタッカー)サイド・ポリモーフィズム

日記 by fs0x7f

ダウンロード毎に変異するトロイの木馬、Android に登場そのストーリーに投げたコメント関連で思ったことをちょっと書き留めてみる。

マルウェアとその検知について自動化されたシステムと呼べるのは、ポリモーフィズムやヒューリスティックだった。
セキュリティホールの予防について自動化されたシステムと呼べるのは、スタックチェックやDEPやサンドボックスだった。
だがセキュリティホールの予防だけでは、有用なアプリケーションを装って裏でコッソリと悪さをするトロイの木馬には無力であった。
しかし、セキュリティホールの開拓やトロイ配布手段の構築において自動化がほぼ無意味であることが幸いし、配布経路を確立したトロイの木馬のブラックリスト化やセキュリティホールを突くコードパターンの収集などで対策が可能だった。

だが現在では、スマートフォンを中心にアプリマーケットが急速に拡大している。
過去の主流だったアプリケーション配布手段に比べてこのマーケットというシステムは、ワードサラダによるユーザの吊り上げやアプリの自動投稿などの自動化技術と相性が良いのは間違いないだろう。
なにしろ、インストールまでに見せるべき情報が圧倒的に少ない。
それらしく偽装した配布サイトは不要であり、広告その他でユーザを釣る必要もなく、社会的信用はマーケットが担保してくれる。バイナリ提供であることが当然であり不信感を抱かれる恐れも無い。インストールさせるまでに見せるものはスクリーンショットや解説文のみであり、ちょっとしたツールやゲーム(特にR18とかは画像数枚で脱衣ゲーとか作り放題)などは完全に自動化も可能だろう。

マーケットとは、全自動セキュリティホール生成装置と呼んでも差し支えないほどにトロイの配布手段を拡張していると見る事も可能だろう。
こうなると、防御側が圧倒的に不利になるのでは無いだろうか。

↑もうちょっと整理して/.に聞け辺りのネタとしてタレこもうかと思ったけれど面倒なので辞めた。
多分コラム一個分くらいまで膨らませることは可能なネタだと思うんだ。
やりたい人がいればご自由にどうぞというか、だれかやってくれないかな?

---

そして何故、自分のコメントはApple信者に誤認されるのか!
リンゴマークの付いた製品なんて一個も持ってないよ!
SafariベースらしいChromeとかソフトウェアにはお世話になっているけど!
どっちかって言うとAppleは嫌いなんだよ!
信者と一緒にしないでくれぇっ!

751850 journal
スラッシュドット

fs0x7fの日記: メタモデが本格的にメタじゃなくなってきた

日記 by fs0x7f

メタモデなのにコメントに対する評価用っぽいインタフェイスで、insightfulとかinterestingまで利用可能ってのは・・・まぁそれでもメタモデに成らない事は無いから良しとしても。

メタモデしにいくと何故か一切のモデレーションが付いてないコメントが一覧に並んでいたんだが、これってどういうことなの。
モデレーションされてないコメントにどうやってメタモデレーションをしろというのだ・・・

アレか。メタな判定はシステムがやるから判定材料よこせって話なのかな?
モデレートされなければメタモデは無視されて、モデレートされた時はメタモデと比較してモデレータの評価に反映させるとかそういう方向の。
うん。良くわからん。
slashcode読めば判るのかもしれないが、最新版は非公開とか何とかって話だから意味無いし・・・

だけど、FAQでは

なぜ同じコメントが出てくるのですか?

  M2の評価対象はモデレーションであって、コメントではありません。同じコメントが複数回モデレートされていれば、それぞれ違ったモデレーションを評価するために、複数回メタモデレーション対象になります。

と、今までと同じ意味合いの説明なんだよな。
どうなってんの。

あとそれと。一回押しただけで確定するのは勘弁してください。
見た目再変更できたように見えるけど、メタモデページをリロードしたら元に戻ってやんの。
紛らわしいったらもう・・・

228523 journal

fs0x7fの日記: カルマ: ダメかも 3

日記 by fs0x7f
カルマの基準が酷い気がする。
一回しか投稿しなくても、それがオフトピモデレートされれば、その時点でカルマがアウト判定って…
適当なモデレートもまま有ることなのに、運が悪ければ即切り捨てかよ…

AC投稿はできないし、投稿回数制限はACよりもひどくなる(1comment/30min→2comment/day)。
この制限だとプラスモデの機会も増やせないしカルマも下がりっぱなしになるんだろうけれど…
D2使いたいだけなのに、憂鬱だ。

2chのノリでACで投稿するな的な事を言う人は、一回このシステムにも物申して欲しい所だ。
226207 journal

fs0x7fの日記: コソコソと匿名の臆病者として投稿・・・していたつもりが

日記 by fs0x7f
コソコソと匿名の臆病者として投稿・・・していたハズなのに、普通にアカウント付き投稿になっていた件。

チェック外してないはずだけど、なぜだろう。
D2での投稿動作が確率的に異常を起こすのは最初からだしその一例なのか、単なる操作ミスか、チェックボックス情報送信完了前に断線したか・・・

ログイン無しでD2使えれば何の問題もないのにっ
typodupeerror

日本発のオープンソースソフトウェアは42件 -- ある官僚

読み込み中...