・ω・
黒翼猫のその他の代表作品 PFW Application Blocker Windows 2000 拡張カーネル DLLインジェクションを利用したアプリ制御ソフト Windows 2000 拡張カーネル .Net 4.0やXAUDIO2やOffice2007などが動くAPI提供
Application Blocker プログラムが User32.dll をロードする時に、ポリシーを 参照してプログラムの初期化処理が呼ばれる前に起動をブロックするソフト
Windows 2000拡張カーネル 自作ソフト PE Maker を利用 して、DLLの内部構造解析 を行って、DLLのアドレス変換などを行ってコードを埋め込める領域を作成し、API拡張を行って Windows 2000で XPのソフトを動くようにした パッケージ。
Windows 2000で .Net 4.0専用 Twitter Client を起動
Windows 2000で 最新Webブラウザ 起動
Windows 2000で 有名メディアプレイヤー起動
もふったーについて 世界初、UserStream に対応したWindows 95 対応 Twitter Client Windows API MSLU (Microsoft Layer for Unicode ) OpenSSL(v1.0.0k) GDIPLUS
日替わりで 『もふもふ』 画像が表示可能 なTwitter クライアント アイコンはアニメーションGIFにも対応。
Consumer keyと Consumer Secret key ツイッターのサーバがOAUTHを介して ツイッターのクライアントを認証する IDとPasswordのようなもの
Q. Consumer Secret Keyは 難読化しないといけないのか 公式の開発ページに『Your application‘s OAuth settings. Keep the “Consumer secret” a secret. This key should never be human-readable in your application.』 (あなたのアプリケーションのOauthの設定です。Consumer secretの機密は保ちなさい。このキーは人間があなたのアプリケーションの中で人が決して読めないようにすべきです)と書いてるので生で埋め込むのは避けた方がよいでしょう。
生で文字列が実装されていました。 でも、後から買収されたソフトなので仕方ないですね ところがTwitter 公式アプリでは 生で文字列が実装されていました。 でも、後から買収されたソフトなので仕方ないですね
もふったーのComsumer Key難読化1 最初のバージョンは、ハッシュ化した Comsumer Keyをプログラム内で復元するだけの単純なもの。 ↓ メモリダンプすると見える
もふったーのComsumer Key難読化2 必要な時に関数でハッシュ化した Keyの任意の部位を取り出せるようにした。 int UnHash (int *return_str,int n); ↓ しかし…?
Comsumer Key難読化2の問題 HMACk(m)=h((K⊕ opad)||h((K⊕ ipad) ||m)) Kは秘密鍵、ipad = 0x3636…3636 opad = 0x5c5c … 5c5c 1.最初のTwitterでクライアント認証時はメッセー空白。 2.SHA1経由するときに ipad/opadで排他論理和を取った生のデータが出現してしまう。 →つまり、ハッシュをかけてもいつも同じ文字列になるので、 ここは、固定バイナリ文字列にしてしまえばいい。 →排他論理和をかける関数ごとパッケージしてしまう
シークレットキーに “QQQ…QQQ”を指定して、実際に SHAInputの直後にメモリブロックを表示してみると Q(0x51) XOR OPAD (0x5c) = 0x0d が表示されてしまった様子。
→予めコンシュマシークレットの一部を後から復号することで難読化 Comsumer Key難読化3の問題 連結後のメッセージが長い場合(64バイト以上の場合)、SHA1関数が2度呼ばれるため、1回目の関数の内で1文字ずつ取り出しても、ハッシュ中の文字列を流用するため、値をクリアすることができない →予めコンシュマシークレットの一部を後から復号することで難読化
おまけ: よくあるリバースエンジニアリング対策 1.IsDebuggerPresent()をタイマーでコールしてTrueだったら何らかのデバッガー上で動作してるので強制終了させる。 例: Apple の iTunes 2.プログラム内で特定範囲のチェックサムを監視させる。 (デバッガ上でブレークポイントを設定すると、ブレークポイントのコードが 0xcc になってチェックサムが変化するのを利用する) 例: Microsoft の Skype