読者です 読者をやめる 読者になる 読者になる

objdumpのdiffをいい感じに取る方法のメモ

たとえば、次のような二つのC言語コードを考える。 /* test1.c */ #include <stdio.h> double divide(long x, long y) { return x/(double)y; } int main() { divide(1, 2); divide(1, 0); return 0; } /* test2.c */ #include <stdio.h> #include <stdlib.h> double divide(long x, long</stdlib.h></stdio.h></stdio.h>…

ScalaFXでGUIアプリケーションを作ってみる

「JavaFXでGUIアプリケーションを作ってみる」、「JavaFX+FXMLでGUIアプリケーションを作ってみる」では、JavaFXを使って簡単なGUIアプリケーションを作った。 ここでは、JVMベースの言語であるScalaとScalaFXライブラリを用いて、同様のアプリケーションを…

「Self Introduction & The Story that I Tried to Make Sayonara ROP Chain in Linux」というタイトルで発表した

Lightning TalkでLow Layer経験に関する自己紹介とSayonara ROP ChainをLinuxで作ろうとした話について発表した。 Self Introduction & The Story that I Tried to Make Sayonara ROP Chain in Linux from inaz2 内容はAVTOKYO 2014での発表と重複するが、改…

JavaFX+FXMLでGUIアプリケーションを作ってみる

「JavaFXでGUIアプリケーションを作ってみる」では、JavaFXによるGUIアプリケーションを作った。 JavaFXではコードから直接GUI画面を構築するほかに、FXMLと呼ばれるXMLファイルを使って構築することもでき、より見通しのよいコードを書くことができる。 こ…

JavaFXでGUIアプリケーションを作ってみる

「Java+SwingでGUIアプリケーションを作ってみる」では、JDKとEclipseをインストールし、Java+SwingによるGUIアプリケーションを作った。 SwingはJava 1.2から存在する標準のGUIライブラリであるが、Java 8からは新たな標準としてJavaFXへの置き換えが進めら…

Java+SwingでGUIアプリケーションを作ってみる

JavaとSwingを使い、JRE(Java Runtime Environment)をインストールしたコンピュータで実行可能なGUIアプリケーションを作ってみる。 環境 Windows 8.1 Pro 64 bit版 >systeminfo OS 名: Microsoft Windows 8.1 Pro OS バージョン: 6.3.9600 N/A ビルド 960…

Raspberry PiにインストールしたブラウザをRDPから操作する

Raspberry PiでWebブラウザを全画面表示し、RDP(リモートデスクトップ接続)から操作できるようにしてみる。 環境 Raspberry Pi 3 (Raspbian Jessie Lite) $ uname -a Linux raspberrypi 4.1.19-v7+ #858 SMP Tue Mar 15 15:56:00 GMT 2016 armv7l GNU/Linu…

Raspberry PiにKodiをインストールしてネットテレビを作る

Raspberry PiにメディアセンターKodi(旧XMBC)をインストールして、接続されたディスプレイでYouTubeなどを見れるようにしてみる。 また、AndroidのリモコンアプリKoreからKodiを操作できるようにしてみる。 環境 Raspberry Pi 3 (Raspbian Jessie Lite) $ …

Raspberry PiでIPv6 PPPoE対応ルータを作る

Raspberry PiでIPv6 PPPoE接続、パケット転送、LAN内へのRA送信を行い、IPv6ルータにしてみる。 環境 Raspberry Pi 3 (Raspbian Jessie Lite) $ uname -a Linux raspberrypi 4.1.19-v7+ #858 SMP Tue Mar 15 15:56:00 GMT 2016 armv7l GNU/Linux $ cat /etc/…

Raspberry Pi 3でファイルサーバ兼iTunesサーバを作る

Raspberry PiとUSB HDDで家庭用サーバを作るにあたって、設定した内容のメモ。 用意するもの Raspberry Pi 3 Model B microSDカード 32GB USB電源アダプタ、USB-microUSBケーブル(2.4A対応) HDMIディスプレイ、HDMIケーブル USBキーボード USB HDD スピー…

React NativeでAndroidアプリケーションを作ってみる

「ElectronでGUIアプリケーションを作ってみる」では、Electronを使ってJavaScriptで簡単なGUIアプリを作った。 ここではReact Nativeを使い、JavaScriptで同様のAndroidアプリを作ってみる。 なお、ここではWindowsを使って開発を行う。 環境 Windows 8.1 P…

ElectronでGUIアプリケーションを作ってみる

「ReactにReduxを組み合わせて使ってみる」では、ReactとReduxで簡単な文字数カウンタを作った。 ここでは、Electronを使ってこれをGUIアプリにしてみる。 また、Windows用にパッケージングを行い、Windows上でも動かしてみる。 環境 Ubuntu 14.04.4 LTS 64b…

ReactにReduxを組み合わせて使ってみる

「Webpack+BabelでReactを使ってみる」では、Reactを使って簡単なアプリケーションを書いた。 ReactはMVVM(Model-View-ViewModel)におけるV層を扱うモジュールである一方、VM層に相当するものとしてReduxがある。 ここでは、ReactにReduxを組み合わせて同…

react-routerで簡単なSingle-page applicationを作ってみる

「Webpack+BabelでReactを使ってみる」では、WebpackとBabelを用いてReactアプリケーションを書いた。 ここでは、react-routerモジュールを使い、簡単なルーティングを含むSingle-page application(SPA)を書いてみる。 環境 Ubuntu 14.04.4 LTS 64bit版 $ …

Webpack+BabelでReactを使ってみる

モジュールバンドラWebpackとJavaScriptコンパイラBabelをインストールし、UIライブラリReactを使ってみる。 環境 Ubuntu 14.04.4 LTS 64bit版 $ uname -a Linux vm-ubuntu64 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64…

iptablesでREDIRECTする前のポート番号を取得する

iptablesで次のように複数のポートを特定のポートにリダイレクトしているような状況で、リダイレクト前のポート番号をソケットから取得する方法のメモ。 -A PREROUTING -i eth0 -p tcp -m multiport --dports 8000:8080 -j REDIRECT --to-ports 5000 環境 Ub…

部屋を借りる際に知っておいたほうがよいことのメモ

不動産賃貸に関する基本知識や、部屋探し(仲介業者選び)および物件選びの際の観点についてのメモ。 不動産賃貸に関する登場人物 不動産オーナー: 投資・資産運用目的で賃貸マンションの部屋を購入する 管理会社(マンション管理業/賃貸住宅管理業): オー…

Pocket Operator PO-12 rhythmを買った

Teenage Engineeringによって製造されている電卓のようなポケットサイズのシンセサイザPocket Operatorを買った。 買ったのは、いくつかあるモデルのうち最もスタンダードなドラムマシンタイプのPO-12 rhythm。 16種類のサウンドを16拍の各タイミングに配置…

Netflix/Hulu/dTV/U-NEXT/Amazonプライムビデオを試してみた

レンタルビデオ店に行く代わりにしたい、PCのサブディスプレイを活用したいという理由で定額動画配信サービスをいろいろ試した結果のメモ(2016年3月時点)。 提携関係 各サービスの会員規模および提携関係については、次の記事が参考になる。 dTV、Hulu、Ne…

高機能トレーサーqiraを使ってみる

qira(QEMU Interactive Runtime Analyser)は、George Hotz(geohot)氏が開発している高機能トレーサーである。 qiraは実行時のレジスタ、メモリ操作をすべて記録することにより、特定の命令アドレスを実行しているタイミングや特定アドレスのメモリ読み書…

angrでシンボリック実行をやってみる

シンボリック実行とは、プログラム上の変数をシンボルとして扱い、シンボルに対する一連の操作を分析することで条件を満たす入力値を特定するプログラム解析手法である。 ここでは、CTFチームShellphishが開発しているバイナリ解析ツールangrを使い、簡単な…

DLL injectionでWindows APIによる暗号化処理を覗いてみる

「LD_PRELOAD injectionでOpenSSLによる暗号化処理を覗いてみる」では、Linux環境におけるOpenSSLを使った暗号化処理を覗いてみた。 ここでは、「IAT書き換えによるAPIフックをやってみる」と同様の方法にて、Windows環境におけるWindows APIを使った暗号化…

LD_PRELOAD injectionでOpenSSLによる暗号化処理を覗いてみる

LD_PRELOAD環境変数を使ったライブラリ関数フックにより、OpenSSLの暗号化処理を覗くコードを書いてみる。 環境 Ubuntu 14.04.4 LTS 64bit版 $ uname -a Linux vm-ubuntu64 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x…

Intel Pinでlivestringsを作ってみる

「Intel Pinでcmptraceを作ってみる」では、x86/x64用のDBIツールであるIntel Pinを使ってcmp命令のトレースを行うコードを書いた。 ここでは、同様にIntel Pinを使い、メモリ上に展開されているASCII文字列を列挙するlivestringsを作ってみる。 環境 Ubuntu…

Intel Pinでcmptraceを作ってみる

「Intel Pinを使ってみる」では、Intel Pinをダウンロードし、付属しているコードを使ってみた。 ここでは、実際にコードを書き、cmp命令のトレースを行うコードcmptraceを作ってみる。 環境 Ubuntu 14.04.4 LTS 64bit版 $ uname -a Linux vm-ubuntu64 3.19.…

Intel Pinを使ってみる

Dynamic Binary Instrumentation(DBI)は実行時にバイナリの内容を書き換えることにより、CPU命令の単位でプログラム実行のトレースなどを行う手法である。 ここでは、x86/x64用のDBIツールであるIntel Pinを使ってみる。 環境 Ubuntu 14.04.4 LTS 64bit版 …

64 bitのUbuntu Linuxで32 bitの実行ファイルを動かす方法のメモ

環境 Ubuntu 14.04.4 LTS 64bit版 $ uname -a Linux vm-ubuntu64 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Descrip…

Mersenne Twisterの出力を推測してみる

「Z3Pyでglibc rand(3)の出力を推測してみる」および「Z3Pyでxorshift128+の出力を推測してみる」では、Z3Pyを使って疑似乱数生成アルゴリズムのいくつかの出力を観測することで、後続の出力を推測した。 ここでは、Pythonのrandomモジュールなどで利用され…

Z3Pyでxorshift128+の出力を推測してみる

「Z3Pyでglibc rand(3)の出力を推測してみる」では、glibc rand(3)の出力をいくつか観測することで、後続の出力を推測した。 ここでは、V8 JavaScript Engineなどで使われている疑似乱数生成アルゴリズムxorshift128+の出力を推測してみる。 環境 Ubuntu 14.…

Z3Pyでglibc rand(3)の出力を推測してみる

疑似乱数列は、いくつかの出力を観測することにより内部状態を復元することで推測が可能である。 ここでは、SMTソルバZ3Pyを使い、glibc rand(3)の出力を推測してみる。 環境 Ubuntu 14.04.3 LTS 64bit版、EGLIBC 2.19 $ uname -a Linux vm-ubuntu64 3.19.0-…

ArachniでWeb脆弱性スキャンをやってみる

Web

「w3afでWeb脆弱性スキャンをやってみる」では、w3afを使ってWeb脆弱性のスキャンを行った。 Web脆弱性のスキャンツールには、w3afの他にArachniがある。 ArachniはヘッドレスブラウザPhantomJSを利用しており、高精度な脆弱性テストを行うことができる。 こ…

w3afでWeb脆弱性スキャンをやってみる

Web

「sqlmapを使ってみる」では、sqlmapを使ってSQL injection脆弱性のスキャンを行った。 ここでは、SQL injection以外の脆弱性もスキャンできるテストツールw3afを使い、Web脆弱性のスキャンをやってみる。 環境 Ubuntu 14.04.3 LTS 64bit版、Docker 1.9.1 $ …

PythonでPEM形式のRSA鍵を生成する方法のメモ

適当なパラメータをもとに、PythonでPEM形式のRSA鍵を生成する方法のメモ。 環境 Ubuntu 14.04.3 LTS 64bit版 $ uname -a Linux vm-ubuntu64 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux $ lsb_…

テキストエディタAtomを使ってみる

メモ帳の代わりに使えるWindowsでのエディタとしてAtomを使い始めた。 Tree Viewとタブ表示、Markdown Preview(Ctrl+Shift+M)が便利。 日本語フォントを設定する デフォルトでは日本語フォントがうまく表示されないので、「File」→「Open Your Stylesheet…

sqlmapを使ってみる

Web

SQL injectionのテストツールであるsqlmapを使ってみる。 環境 Ubuntu 14.04.3 LTS 64bit版、Docker 1.9.1 $ uname -a Linux vm-ubuntu64 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux $ lsb_rel…

RSAに対する適応的選択暗号文攻撃とパディング方式

「plain RSAに対する攻撃手法を実装してみる」では、平文をそのまま暗号化した場合のRSA(plain RSA)に対するいくつかの攻撃手法を実装した。 他にも、plain RSAについては適応的選択暗号文攻撃(CCA2)に対して安全でないことが知られている。 ここでは、p…

SageMathを使ってCoppersmith's Attackをやってみる

「plain RSAに対する攻撃手法を実装してみる」では、plain RSAに対する種々の攻撃手法を実装した。 plain RSAに対する攻撃手法には、他にもCoppersmithの定理に関連した手法が知られている。 ここでは、Pythonベースの数式処理システムSageMathを用いてこれ…

plain RSAに対する攻撃手法を実装してみる

RSAは「単純な素因数分解アルゴリズムを実装してみる」「Msieveを使って大きな数を素因数分解してみる」「YAFUを使って大きな数を素因数分解してみる」で示したような方法により、公開鍵nを素因数分解することができれば秘密鍵dを得ることができる。 一方、…

YAFUを使って大きな数を素因数分解してみる

「Msieveを使って大きな数を素因数分解してみる」では、Msieveを使って大きな数の素因数分解を行った。 素因数分解プログラムには、Msieveの他にYAFU(Yet Another Factorization Utility)がある。 YAFUはECMにGMP-ECM、MPQSにMsieve、GNFSにGGNFSを用い、…

Msieveを使って大きな数を素因数分解してみる

「単純な素因数分解アルゴリズムを実装してみる」では、実装の容易な素因数分解アルゴリズムをPythonで実装し、一般的なPCで解くことができるbit数などを調べた。 より大きな数を素因数分解できるアルゴリズムには、楕円曲線法(ECM)、複数多項式二次ふるい…

単純な素因数分解アルゴリズムを実装してみる

「OpenSSLとPythonでRSA暗号の原理を知る」で書いたように、RSA暗号は公開鍵である整数modulusを二つの素数に素因数分解することができれば破ることができる。 ここでは、いくつかの単純な素因数分解アルゴリズムをPythonで実装し、一般的なPCで解くことがで…

GRUBで簡単なOSカーネルを動かしてみる

「x86 bootloaderから簡単なOSカーネルを動かしてみる」では、bootloaderを作った上で簡単なOSカーネルを動かした。 ここでは、GRUBをbootloaderとして利用してOSカーネルを動かしてみる。 環境 Ubuntu 14.04.3 LTS 64bit版、QEMU 2.0.0 $ uname -a Linux vm…

GNU Emacs入門

Emacsの使い方についてまとめてみる。 CtrlとCapsLockの位置を入れ替える EmacsはCtrlキーの同時押しを頻繁に行うため、左Ctrlと左CapsLockの位置を入れ替えておくとよい。 Windowsであれば、Sysinternals Ctrl2capやChange Keyが使える。 インストール ここ…

JIT-ROP緩和手法Heisenbyteについてまとめてみる

この記事は「情報セキュリティ系論文紹介 Advent Calendar 2015」24日目の記事です。 JIT-ROP緩和手法として発表されたHeisenbyteについてまとめてみる。 Heisenbyte: Thwarting Memory Disclosure Attacks using Destructive Code Reads (ACM CCS 2015) tl;…

CBC modeに対するPadding oracle attackをやってみる

この記事は「脆弱性"&'<<>\ Advent Calendar 2015」23日目の記事です。 ブロック暗号モードのひとつであるCBC modeには、Padding oracle attackと呼ばれる攻撃手法が存在することが知られている。 これは、繰り返し復号を行うことができ、かつ復号の成否が観…

各種アーキテクチャのクロスコンパイラ環境を構築する

Docker上に作成したDebian 8環境にてbinutils、gcc、glibcをソースコードからビルドし、さまざまなアーキテクチャのクロスコンパイラ環境を構築してみる。 なお、構築した環境は次のDocker imageとして公開してある(イメージサイズが2.8GBと大きいことに注…

脆弱性テスト・学習用Webアプリケーションのメモ

Web

脆弱性スキャンツールのテストあるいは脆弱性内容の学習を目的として、意図的に脆弱性が作り込まれたWebアプリケーションをいろいろ調べた結果のメモ。 Badstore Badstore: 1.2.3 ~ VulnHub Last update: 2004-02-24 (1.2.3) この手のアプリケーションの元祖…

qemu-debootstrapを使ってユーザモードQEMUで動くDockerイメージを作ってみる

「DockerでユーザモードQEMUによるARMエミュレーション環境を構築する」では、mazzolino/armhf-ubuntuというDockerイメージを使ってqemu-user-staticによるARM版Ubuntuのエミュレーション環境を構築した。 ここでは、qemu-debootstrapを使ってARM版DebianのD…

gdbを使っていい感じにプロセスツリーを手元の端末に繋ぎ変えるシェルスクリプト

次のエントリにあるように、gdbを使うとプロセスの標準入出力を別の端末(tty)に繋ぎ変えることができる。 コンソールから切れたプロセスを標準出力につなげなおす - 絶品ゆどうふのタレ しかし実際にはあるプロセスからサブプロセスが複数呼ばれている状況…

x86/x86-64/ARM/AArch64/PowerPC/PowerPC64のアセンブリコードを読んでみる

簡単なC言語コードを各アーキテクチャ向けにコンパイルした結果のメモを兼ねて、アセンブリコードを読んでみる。 環境 Ubuntu 14.04.2 LTS 64bit版 $ uname -a Linux vm-ubuntu64 3.13.0-48-generic #80-Ubuntu SMP Thu Mar 12 11:16:15 UTC 2015 x86_64 x86…