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

idkqh7の研究日誌

基本は翻訳。{セキュリティ|プログラミング|バイオインフォマティクス|数学}について。

Unicorn + Usercorn

全国65,535人くらいのダウナー系猫耳フード付き美少女ハッカーの皆さんこんにちは!

性欲を持て余す。

検証環境

OSX Yosemite (iOSでも動かしたいならMacを開発環境にしておくと良い)

Unicornとは

www.unicorn-engine.org

本当に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!!!!!!