Firmadyne 改 Kernel === --- ###### tags: `firmadyne` `Linux` 這篇紀錄將 mipsel 架構的 kernel 重編的過程,改寫一小段 log 寫法,並且查看 log 的改變 --- # Cross-compiler 首先要準備 Cross-compiler 雖然 Firmadyne Readme 中的 Compiling from Source 章節 有寫說如何自己用 GregorR/musl-cross 來 build cross-compiler 但我照著做,build不出來 只好直接載 Firmadyne 作者群已經 build 好的版本  中間有個 > click here to download our pre-built toolchains.  下載 mipsel-linux-musl.tar.xz 存到目錄 /opt/cross 執行以下指令 ``` cd /opt/cross sudo tar -xvf mipsel-linux-musl.tar.xz # 此時,應該會產生 mipsel-linux-musl 目錄 cd mipsel-linux-musl/bin # 根據 Firmadyne kernel-v2.6.32.git 的 Makefile # 是使用 mipsel-linux-musl/bin/mipsel-linux-musl-gcc # 這個目錄底下最像的東西就是 mipsel-linux-musl-gcc-5.3.0 了 # 直接改名 TryTry 看 mv mipsel-linux-musl-gcc-5.3.0 mipsel-linux-musl-gcc # 在實際 Make 時,跳出 log: # error while loading shared libraries: libmpfr.so.4: cannot open shared object file: No such file or directory # 以下是 Google 後的解方,看來只是 link 到已經有的 libmpfr.so.6 sudo ln -s /usr/lib/x86_64-linux-gnu/libmpfr.so.6 /usr/lib/x86_64-linux-gnu/libmpfr.so.4 ``` # Source Code Editing 我是改 driver/firmadyne/hooks.c  主要是在 Line 306 加了 ```c= printk(KERN_INFO MODULE_NAME": called from %pS\n", (void *)__builtin_return_address(0)); ``` 試圖查看 caller function # Build Kernel 參考 Firmadyne Readme ``` # 下載 Firmadyne kernel-v2.6.32,並進入此 git 目錄 git clone https://github.com/firmadyne/kernel-v2.6.32.git && cd kernel-v2.6.32 # 創 build 目錄 mkdir -p build/mipsel # 複製設定檔 cp config.mipsel build/mipsel/.config # 實際 Build Kernel make ARCH=mips CROSS_COMPILE=/opt/cross/mipsel-linux-musl/bin/mipsel-linux-musl- O=./build/mipsel -j8 # 將 Build 好的 Kernel: vmlinux # 放到 firmadyne/binaries/vmlinux.mipsel # 也就是實際 qemu 跑的 kernel cp build/mipsel/vmlinux ../firmadyne/binaries/vmlinux.mipsel ``` # 檢查 log  接下來跑的樣本 filename 為 `DAP-1520_REVA_FIRMWARE_1.05.B02.ZIP` arch 確定為 mipsel 且之前跑這個樣本時,已經確定會跳出 `__inet_insert_ifa` 相關的 log 表示等等應該會執行到上一 Part 新加的 Code 跑一下 ``` ./scripts/inferNetwork.sh 4 ``` 在 qemu.initial.serial.log 中,有 `__inet_insert_ifa` 的 log 後面都有跟剛剛新加的 Code,到此為止可確定有改成功 ``` [ 2.544000] firmadyne: __inet_insert_ifa[PID: 73 (rc)]: device:br0 ifa:0x3200a8c0 [ 2.544000] firmadyne: called from devinet_ioctl+0x3a4/0x7a0 ``` 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up