這個網誌中的熱門文章
buffer_overflow 第3章 筆記5 函數名稱的雜湊值
前情提要: 上一章的筆記我們在kernel32.dll裡面,最後找到了LoadLibraryA()的函數位置,其實可以開始用組合語言寫一個自動定位,並且找到LoadLibraryA()位址的程式,但為什摸不開始動手。 原因: 我們可以找到存放函數字串的位置,在一個一個字元比對是否為"LoadLibraryA",不過這在組合語言的角度,有點難寫,過程會變的很麻煩。 所以: 本節要用,另外用雜湊值(hash)的方式,來比對。 雜湊值: 簡單來說,"love you"字串經過某種運算可以得到一個固定長度為3的數值,例如=245 ,"oiasjdoiashfoaisjd"字串經過運算後,也得到一個長度3的數值,例如=889 雜湊值有好多種,本例: 使用團體:The Last Stage of Delerium 的演算法,基本運算式如下, extern char *c; //存放字串 unsigned h =0; //存放雜湊值 while(*c) h=((h<<5)|(h>>27))+*c++; //19為32位元減去13而來,13就是組語0xd 當然你也可以使用其他的雜湊值來計算,不過雜湊值產生的結果盡量不要太長,也盡量不要有英文字母,為了方便比對。 以下程式為該雜湊值小程式以C++撰寫: 原碼來自書本上 :非常感謝作者fon909 //file name f...

留言
張貼留言