羽夏殼世界——花指令的實現
阿新 • • 發佈:2022-04-12
寫在前面
此係列是本人一個字一個字碼出來的,包括程式碼實現和效果截圖。 如有好的建議,歡迎反饋。碼字不易,如果本篇文章有幫助你的,如有閒錢,可以打賞支援我的創作。如想轉載,請把我的轉載資訊附在文章後面,並宣告我的個人資訊和本人部落格地址即可,但必須事先通知我。
你如果是從中間插過來看的,請仔細閱讀 羽夏殼世界——序 ,方便學習本教程。
花指令原理
在學習指令的原理之前,我建議你學一下硬編碼,相關博文可以參考 羽夏筆記——硬編碼(32位) 或者官方的 Intel
白皮書。
花指令的原理十分簡單,本篇可能是我寫過最短的文章。花指令無非就是干擾人的視線以及靜態分析器的,在英文為JunkCode
這是啥,什麼亂七八糟的,看不明白,如果我執行完跳轉之後,程式碼就成這樣了:
這會就可以明顯的看清楚它的真面目了,就是傳參呼叫puts
函式。我們可以用nop
指令清楚干擾視線的花指令,會和正常閱讀程式碼差不多了。
花指令的實現
上面的例子已經把花指令的原理和簡單的實現都給介紹了,下面我們來看看該專案程式碼的花指令相關程式碼:
#define FakeProtect(a) a.embed(WingProtectFakeCode, SizeofWingProtectFakeCode); #define WingProtectFakeCode "\xEB\xCWingProtect\xEB"
別看這是一條簡單的字串內聯巨集,用起來可是相當的噁心人,如下是效果:
上面的程式碼就是呼叫了一個簡單的Sleep
函式,它的真實面目如下圖所示:
有關花指令的實現,就到此結束了。
下一篇
羽夏殼世界—— 實現篇小結