AIS3 pre-exam 2017 writeup

前言 因為平常沒在打CTF,也很久沒認真碰這塊,所以最後只有31分 QAQ 然後這是我第一次參加AIS3,高手感覺好多,怕 UPDATE: 最後正取惹,我朋友8x、9x名也正取惹,所以要上應該算容易的(? Web 1 這題直接 1 curl https://quiz.ais3.org:42351/ 就看得到Flag了 ...

July 16, 2017

座標系、歐拉角與方位角

此篇文章為我在研究利用車載IMU判斷行進方向並預防事故的一些技術資料整理及個人理解。 可能在學術上不是很嚴謹,也有可能有地方有錯誤。 名詞定義上也可能和其他學術論文不同。 環境 *** IMU(Inertial measurement unit): 慣性測量單元 *** IMU包含加速度計、磁力計、陀螺儀等sensor 而IMU被包進後照鏡中,掛在車子上 目的是希望車子行進時,可以計算出車子的方向或是其他資訊來幫助後續處理 ...

July 4, 2017

小朋友下樓梯輔助程式

小朋友下樓梯是啥? 它不僅是一個很狂的小遊戲 它更代表了我們的童年回憶 ![圖7](/images/pic7.png)...

November 14, 2016

Linux project - PGD present bit

前情提要 延續上一篇,這篇記錄Project主要內容的實作過程。 題目的要求是:For each page directory entry with an index located in the group of indexes specified by the parameters, this system call shows the value of the present field of the entry. 簡單說就是新增一個system call 讓它可以取得當前process的page global directory entry中的present bit 參數包含兩個integer代表起始和結尾index 和一個陣列指標參數,存放結果 ...

November 10, 2016

Linux Kernel編譯+新增System call(Ubuntu)

前情提要 因Linux Operating System課的project需要,人生第一次編Kernel就獻給他惹,所以怕忘就順手筆記一下。 環境 使用Ubuntu 16.04 LTS i386 Desktop 要編的Kernel是3.10版 過程 一開始當然要先裝好Linux環境(我是裝Ubuntu) 然後決定你要編的Kernel,並載下來解壓縮 (Kernel source可以到https://www.kernel.org 下載) 我這邊解壓縮出來後是linux-3.10.104/ 1 $ cd linux-3.10.104/ ...

November 7, 2016

DJ DAO FB9 Jubeat控制器開箱

前言 有鑒於過去一年打ju實在燒太多錢了,但要戒掉也沒那麼容易 於是就有買controller的念頭,這樣就可以在家打ju,不用一直燒錢了! 所以一開始我就先買了一台27吋的螢幕 一方面可以當控制器的螢幕,另一方面可以雙螢幕coding或看影片,整個爽度十足 然後存了一段時間的錢後,就上淘寶買了看起來價格便宜內容又實在的DJ DAO控制器FB9 ...

February 7, 2016

攻防Project2 - LD_PRELOAD實作library rootkit

LD_PRELOAD LD_PRELOAD是Linux/Unix下的環境變數,他可以決定預先要載入的共享函式庫 它比LD_LIBRARY_PATH指定的共用函式庫還要優先,因此LD_PRELOAD裡的全域符號會蓋掉後面載入的同名全域符號 所以我們可以利用LD_PRELOAD來達成Linux/Unix下的hook,要達到rootkit的效果也就輕而易舉 但這只對動態連結的程式有效,因為靜態連結函式庫的代碼都已經包進程式中 實作 因為ls用到readdir這個函數來實作 所以我們覆蓋掉libc裡面的readdir來實作rootkit 做法很簡單,載入libc中原本的readdir(我們叫它old_readdir) 然後把結果中有"HIDDEN"的都濾掉 code如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 #include <stdio.h> #include <dirent.h> #include <string.h> #include <dlfcn.h> #include <sys/types.h> void *libc = NULL; struct dirent *(*old_readdir)(DIR *dirp); struct dirent *readdir(DIR *dirp) { struct dirent *ret = NULL; if (NULL == libc) { if (NULL == (libc = dlopen("/lib/libc....

January 18, 2016

攻防Project1 Writeup

第一題:BOF easy [ pwn ] 題目 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <stdio.h> void l33t() { puts("Congrat !!Congrat"); system("/bin/sh"); } int main() { char buf[20]; puts("Buffer overerflow is easy"); printf("Read your input :"); fflush(stdout); read(fflush0,buf,100); return 0 ; } 解題思路 l33t()中有system("/bin/sh"),所以目標就是執行l33t() 由code可知buf長度20,但read()讀100個bytes,代表這裡可以buffer overflow 並且這題沒有ASLR,所以用objdump可以找出l33t()的address為0x80484fd 接著,只需要將main()的return address蓋成0x80484fd即可 payload: ...

January 16, 2016