タグ

2014年7月12日のブックマーク (8件)

  • インラインアセンブラで学ぶアセンブリ言語 第3回

    はじめに これまで、『インラインアセンブラで学ぶアセンブリ言語』の第1回と第2回を通じて、Microsoft Visual C++のインラインアセンブラを用い、アセンブリ言語の基について説明してきました。 第3回となる稿では、インラインアセンブラを用いた流れ制御を解説します。アセンブリ言語は高水準言語における文の概念がなく、すべての命令が単純なオペコードと引数(オペランド)だけで構成されています。この純粋な構造のために、流れ制御を行う場合も、if文やfor文のように記述することはできません。基的にプログラムの流れ制御はすべてC言語で言うところのgoto文だけで記述し、比較命令や条件ジャンプも個別の命令で行います。 来のマクロ機能を持たない生のアセンブリ言語ならば、ジャンプ先のプログラムの位置すらも、すべてメモリアドレスで指定しなければなりません。実際に、機械語にアセンブルされた後は

    インラインアセンブラで学ぶアセンブリ言語 第3回
  • ダミーコード挿入による難読化に少し触れてみた。 - ichirin2501's diary

    難読化関連を調べてて、こんな論文を見つけた。 「Obfuscation of Executable Code to Improve Resistance to Static Disassembly」 ほうほう、Junk Insertion ? なるほど、ぜんぜんわからん(英語) 具体例が記述されてて、 0x08048434 8b 44 24 04 mov 4(%esp), %eax 0x08048438 03 44 24 0c add 12(%esp), %eax 0x0804843c 83 e8 06 sub $6, %eaxみたいなコードがあって、 0x08048434から3byteのoffsetで 0x08048437にjmpすると、 add $3, %al inc %esp and $12, %alになる、ということで実際に試してみた。 直接アセンブリコードを書くにはまだ未熟なので

    ダミーコード挿入による難読化に少し触れてみた。 - ichirin2501's diary
  • プログラミングノート - x86

    movl 3(%esi,%ebx,2), %eax 整数演算 ロード/ストア mov eax, [4] mov eax, [ebx] mov eax, [ebx+4] mov eax, [ecx*2+4] mov eax, [ebx+ecx] mov eax, [ebx+ecx+4] mov eax, [ebx+ecx*2] mov eax, [ebx+ecx*2+4] mov eax, [rip+4] レジスタ (eax, ebx, ecx の部分) は汎用レジスタどれでも指定できる。 シフト (*2 の部分) は 2, 4, 8 のいずれか。 オフセット (+4 の部分) は符号付き 8 ビットまたは 32 ビット。 64 ビットでは rip 相対アドレッシングが可能。 ただし単純にオフセット (符号付き 32 ビット) を加算する形式のみ。 32 ビットでは eip 相対は不可。 c

  • トロイの木馬「Trojan.Farfli」,狙いはアフィリエイトでの金銭獲得か

    9月の始めころから筆者の日々の仕事には,頻繁に更新が行われているトロイの木馬「Trojan.Farfli」を調べる作業が加わった。その背景は,このトロイの木馬の作者が筆者の動きを見透かしたかのようにTrojan.Farfliを日々せっせと更新していることである。我々が確認したところ,Trojan.Farfliは平均すると1日3回のペースで更新されており,多いときは7回におよんだ。さらに7月から亜種の総数は300以上に達している。これに比べて,ほぼ同時期に検出された別のトロイの木馬は,圧倒的に亜種の数が少ない。例えば「Trojan.Hachilem」は150種類,「Trojan.Srizbi」は40種類しか亜種がない。厳密に言うと,Trojan.Farfliに作成されたファイルはポリモーフィック(関連記事:ITPro Dictionary「ポリモーフィック」)型であるため,その亜種は無数に存

    トロイの木馬「Trojan.Farfli」,狙いはアフィリエイトでの金銭獲得か
  • WineHQ - Secure Download Manager v3.13.4563.26 (P2827958)

    sh19910711
    sh19910711 2014/07/12
    DreamSparkのダウンローダーを動かす時
  • Pythonでバイナリデータの取り扱い - 猫型エンジニアのブログ

    Pythonでパケット処理をする際に勉強する必要があったため、PythonのStructクラスのpackおよびunpackに関してまとめてみました。それぞれバイナリデータ⇔C言語の構造体の変換を行います。 unpack関数 struct.unpack(fmt, string) 与えられたバイナリデータを、フォーマットとに従って解釈した結果をタプルで返します。フォーマットでの指定の仕方は公式ドキュメントを参考にしてください。 バイナリデータをunsigned_short型に変換する "FFFF"をunsigned_short型として解釈させます。 >>> from struct import * >>> binary_data = '\xFF\xFF' >>> unpack('H',binary_data) (65535,) バイナリデータをshort型に変換する 同じバイナリでも今度は符号

    Pythonでバイナリデータの取り扱い - 猫型エンジニアのブログ
  • バイナリデータの出力処理 - 強火で進め

    いまどきバイナリデータを加工するような人は画像処理や圧縮、暗号などを扱ってる様な人しか居ないかも知れませんがちょっと必要が有って調べたので書いときます。 Pythonでバイナリデータを加工するときは pack() 、 unpack() 関数を使用します。 公式のドキュメント http://www.python.jp/doc/release/lib/module-struct.html http://docs.python.jp/2.4/lib/module-struct.html まずは pack() 関数の解説をします。 1バイトのデータを出力する 1バイト、ファイル出力する場合はこのように書きます。 from struct import * f = open('test.dat', 'wb') f.write(pack('B', 0x01)) f.close() ファイルの内容をバイナ

    バイナリデータの出力処理 - 強火で進め
  • シェルコード解析に必携の「5つ道具」

    リバースエンジニアリングのスタンダード「IDA Pro」 リバースエンジニアリングには、逆アセンブラである「IDA Pro」がよく用いられます。IDA Proは逆アセンブラのデファクトスタンダートといっても過言ではありません。正規版はHex-Rays社から販売されていますが、非商用の利用に限っては、旧バージョン(Ver.5.0)を無償版として利用することができます。 最新版(Ver.6.1)と比べ、無償版では対応しているファイルフォーマットやCPUアーキテクチャが少なかったり、組み込まれているプラグインやデバッガの数が少なかったりと、いくつか機能的に劣っている部分があります。とはいえ、シェルコード解析やマルウェア解析をこれから始めてみよう、という方であれば問題ないかと思います。解析をバリバリ行えるようになり、無償版では物足りないと思ったときに最新版の購入を検討するとよいでしょう。 IDA

    シェルコード解析に必携の「5つ道具」