1. 程式人生 > 其它 >羽夏殼世界——花指令的實現

羽夏殼世界——花指令的實現

寫在前面

  此係列是本人一個字一個字碼出來的,包括程式碼實現和效果截圖。 如有好的建議,歡迎反饋。碼字不易,如果本篇文章有幫助你的,如有閒錢,可以打賞支援我的創作。如想轉載,請把我的轉載資訊附在文章後面,並宣告我的個人資訊和本人部落格地址即可,但必須事先通知我

你如果是從中間插過來看的,請仔細閱讀 羽夏殼世界——序 ,方便學習本教程。

花指令原理

  在學習指令的原理之前,我建議你學一下硬編碼,相關博文可以參考 羽夏筆記——硬編碼(32位) 或者官方的 Intel白皮書。
  花指令的原理十分簡單,本篇可能是我寫過最短的文章。花指令無非就是干擾人的視線以及靜態分析器的,在英文為JunkCode

,即垃圾程式碼,下面我以32位為例,寫一個示例看看:

  這是啥,什麼亂七八糟的,看不明白,如果我執行完跳轉之後,程式碼就成這樣了:

  這會就可以明顯的看清楚它的真面目了,就是傳參呼叫puts函式。我們可以用nop指令清楚干擾視線的花指令,會和正常閱讀程式碼差不多了。

花指令的實現

  上面的例子已經把花指令的原理和簡單的實現都給介紹了,下面我們來看看該專案程式碼的花指令相關程式碼:

#define FakeProtect(a) a.embed(WingProtectFakeCode, SizeofWingProtectFakeCode);

#define WingProtectFakeCode "\xEB\xCWingProtect\xEB"

  別看這是一條簡單的字串內聯巨集,用起來可是相當的噁心人,如下是效果:

  上面的程式碼就是呼叫了一個簡單的Sleep函式,它的真實面目如下圖所示:

  有關花指令的實現,就到此結束了。

下一篇

  羽夏殼世界—— 實現篇小結