c言語

デーモンの仕組み

デーモンはバックグラウンドで動き、terminalからインタラクティブに操作されることがないプロセスである。起動時に開始し、rootユーザやapache、postfixなどの特権ユーザにより動かされる。systemdで操作するcrondとかsshdとかのことである。 デーモンは一…

gccでlibc抜きでコンパイルを通す

Hello from a libc-free world! (Part 1) (Ksplice Blog) がおもしろかったのでやっていく。 libcありのとき コード よくあるhello worldのコード $ cat hello_with_libc.c # include <stdio.h> int main() { printf("Hello World\n"); return 0; } コンパイル $ gcc </stdio.h>…

VMの検知について

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

シンボルを削ることによるmain関数のアンチデバッキング

CTFでよく見かけるmain関数のシンボルを削ることによるmain関数のアンチデバッキングについて。 まず、以下のコードをgccでコンパイルして、main関数のシンボルを確かめる。 #include <stdio.h> int main() { printf("test\n"); } $ objdump -d a.out|grep main 00000</stdio.h>…

GDB アンチデバッギング

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