Unicorn + Usercorn
全国65,535人くらいのダウナー系猫耳フード付き美少女ハッカーの皆さんこんにちは!
性欲を持て余す。
検証環境
OSX Yosemite (iOSでも動かしたいならMacを開発環境にしておくと良い)
Unicornとは
本当にUltimateだからヤバイ
Unicornのビルドとインストール
git clone https://github.com/unicorn-engine/unicorn brew install pkg-config glib cd unicorn ./make.sh sudo ./make.sh install
ついでにテストしてみる。(Fedoraとかだとライブラリのパスの問題でテスト通らない)
brew install cmocka
make test
go言語のバインディング動かしてみる
brew install go go get -u github.com/unicorn-engine/unicorn/bindings/go
package main import ( "fmt" uc "github.com/unicorn-engine/unicorn/bindings/go/unicorn" ) func main() { mu, _ := uc.NewUnicorn(uc.ARCH_X86, uc.MODE_32) // mov eax, 1234 code := []byte{184, 210, 4, 0, 0} mu.MemMap(0x1000, 0x1000) mu.MemWrite(0x1000, code) if err := mu.Start(0x1000, 0x1000+uint64(len(code))); err != nil { panic(err) } eax, _ := mu.RegRead(uc.X86_REG_EAX) fmt.Printf("EAX is now: %d\n", eax) }
go buildして動くか確認。
Usercornのビルド
git clone https://github.com/lunixbochs/usercorn cd usercorn brew install capstone go get github.com/bnagy/gapstone go get github.com/lunixbochs/fvbommel-util go get github.com/lunixbochs/ghostrace/ghost go get github.com/mgutz/ansi make
go get github.com/lunixbochs/ghostrace すると '''zsh ../../../go/src/github.com/lunixbochs/ghostrace/cli.go:25: undefined: ghost.NewTracer ''' みたいなエラー出るので、ghostrace/ghost指定してます。
Usercorn動かしてみる
./usercorn bins/x86_64.darwin.macho
正常な場合の出力結果。
hello with printf: world args (1): 0 @0x809bc3 = "_=[実行パス]" test: hi strcmp: -1, 1, 0 file test 1: success file test 2: success success
まとめ
COOOOOOOOOOOOOOOLLLLLL!!!!!!