reversing

リアルモードでも32bitのレジスタを使うことができる

この記事は自作OS Advent Calendar 2018の21日目の記事です。 自作OSのアドカレなので、まずは作っているCPUエミュの話をしましょう。 CPUエミュを作っている話 そもそもなぜCPUエミュを作っているのかというと、 Golangで書かれたファミコンのエミュのコー…

HackIT CTF 2017 rev200 writeup

問題 Description: You haxor, come on you little sciddie… debug me, eh? You fucking little lamer… You fuckin’ come on, come debug me! I’ll get your ass, you jerk! Oh, you IDA monkey! Fuck all you and your tools! Come on, you scum haxor, you…

HackIT CTF 2017 rev150 writeup

問題 Description: Looks like this packer can not unpack what has been packed :( There are 2 mistakes in unpacking procedure. It leads to the error. Try to fix unpacker and figure out what is inside. packerとpackedという2つの64bitのELFが与…

GOT、PLTとIAT

動的リンクされたライブラリのアドレス解決の際、ELFではGOT、PLTが、PEではIATがそれぞれ用いられる。たまにどっちがどっちでどうだったのか分からなくなるのでメモしておく。 GOTとPLT GOT(Global Offset Table)はシンボルへのポインタの配列で、 プログラ…

DMCAに調査目的でのリバースエンジニアリングが例外に追加されそう

DMCA updated – toaster penetration testing gets green light in America • The Registerによると、アメリカの法律であるDMCA(デジタルミレニアム著作権法)の例外に、調査目的でのリバースエンジニアリング等のセキュリティテストが2年以内に追加されるよ…

Unbreakable Enterprise Product Activationをz3pyを使って解いてみる

はじめに z3pyにkatagaitai勉強会#6 - 関西|easyで入門したので、練習がてらGoogle CTF 2016のUnbreakable Enterprise Product Activationを解いた。 この問題を人力で解くのは難しく、競技期間中は解けなかったが、z3pyを使えば楽に解くことができた。 実行…

strippedなgoのバイナリを読み解く

この前はふつーのgoのバイナリを読んだ。今回はstrippedなgoのバイナリを読んでいく。 環境 $ uname -a Linux ubuntu 3.19.0-58-generic #64~14.04.1-Ubuntu SMP Fri Mar 18 19:05:43 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux $ lsb_release -a No LSB modu…

golangのバイナリをちょっとまじめに読んでみる

golangのバイナリをちょっとまじめに読んだのでメモ。runtimeのコードと合わせて、バイナリがどういう構造になっているのか正面から読んだ。 環境 $ uname -a Linux ubuntu 3.19.0-58-generic #64~14.04.1-Ubuntu SMP Fri Mar 18 19:05:43 UTC 2016 x86_64 x…

VMの検知について

マルウェアを解析する際にはVMで解析を行うことが多いので、VMを検知してアンチデバッキングするマルウェアが存在する。それらが用いる手法についてまとめた。 1. TSCを用いる TSC(IA32_TIME_STAMP_COUNTER_MSR: TSC_MSR)とは、CPUクロックごとに加算される6…

シンボルがないELFバイナリのmain関数を特定する

まず、以下のコードをgccでコンパイルして、main関数のシンボルを確かめる。 #include <stdio.h> int main() { printf("test\n"); } $ objdump -d a.out|grep main 0000000000400420 <__libc_start_main@plt>: 400464: e8 b7 ff ff ff callq 400420 <__libc_start_main@plt> 000000000040052d <main>:stripコマンドでmain関</main></__libc_start_main@plt></__libc_start_main@plt></stdio.h>…

GDB アンチデバッギング

GDB アンチデバッギングについて調べたのでメモ。 ptraceを使う検知法とファイルディスクリプタの増加による検知法の2通りの方法を発見したけど、後者は古いバージョンでしか動かないっぽい。 ptraceを使って検知 ptraceとはプロセス追跡をするシステムコ…

ついに美咲ちゃん買ったった!!

解析魔法少女美咲ちゃん マジカル・オープン!っていうプログラム解析入門的な本がずっと欲しかったんだけど、割りとレアな本みたいで、この本を知った当初は定価2730円(税込み)なのにAmazonで中古5000円位で売ってて買う気がしなかった。解析魔法少女 美咲ち…