2008年7月18日 星期五

LD_PRELOAD

在一般的OS當中, 都有提供dynamic linker的能力, 就是當一個application再執行的時候,
可以動態的將一個shared library載入到程式中.

在Unix or Unix like的系統中, 可以使用LD_PRELOAD這個環境變數, 可以將而外的library載入到程式. 而且lirary的function可以覆蓋既有library的function.
例如 :
我們自己寫一個 malloc.so 這個一library, 裡面有一個我們自己寫的malloc()
然後執行


LD_PRELOAD="./malloc.so" test_prog


在test_prog裡, 所有的malloc都不再是呼叫系統標準library的malloc, 而是呼叫malloc.so

這樣, 可以讓我們方便再不重新compiler 程式的情況下, 做特定function的debug, test等.

當然, 這個工具也有另外的用途, 就是用來做Reverse Engineering (逆向工程).
有興趣的人可以參考下面的文章 :
Reverse Engineering with LD_PRELOAD

2008年7月12日 星期六

netcat : 一各有用的網路小工具

再別人的blog上面看到有人再介紹一個有趣的網路小工具 netcat.
從他的名字看來, "net" "cat", 就知道他是一各類似cat的工具, 但是是網路版的.
那他可以做什麼呢??

1. 當Client傳送檔案, 將abc這個檔案傳送到192.168.1.1 port 2222.

cat abc | netcat 192.168.1.1 2222


2. 當Server接收檔案, 再本機上port 2222上listen, 如果有收到資料就寫入檔案cde

netcat -l -p 2222 > cde


3. 建立一個server, 只要有人telnet 到port 1234, 就進入本機的shell.

netcat -l -p 1234 -e /bin/sh


相關link :
netcat : Wikipedia
神奇的指令:netcat
Netcat用法