軟體彩蛋我想大家都應該聽說過。經典的比如在Excel得某個單元隔裡面OOXX就可以獲得一個賽車遊戲之類。這是一種軟體彩蛋,純屬娛樂。但是更多的“彩蛋”被用作軟體後門。比如我們提供給客戶一個軟體,通常是看不到某些調試用的視窗和工具的;當我們被要求給客戶提供現場支援人員的時候,我們往往希望通過某種隱秘的手段來開啟這些條使用的工具和視窗,這就是後門。這類後門中又以按鍵後門最為常見,下面我們就利用一個已有的第三方函數庫Utilities.dll來構建一個後門系統。 首先建立一個工程,然後完成對第三方庫Utilities的引用。 然後開打Form1的代碼編輯視窗,在表單類中添加一個 後門類KeyboardIncantationMonitor C# code private KeyboardIncantationMonitor m_KeyBackDoor = new KeyboardIncantationMonitor(); 建立一個私人成員函數,並添加兩個後門 1 private 2 void AddBackDoor(){ //! 第一個後門 3 4 do { //! 申請一個後門暗號 5 KeyboardIncantationMonitor.KeysIncantation tInc = m_KeyBackDoor.NewIncantation() as KeyboardIncantationMonitor.KeysIncantation; //! 初始化這個暗號為:依次按下 <Esc>HELLO<Enter> 6 tInc.AddKey(Keys.Escape); tInc.AddKey(Keys.H); tInc.AddKey(Keys.E); tInc.AddKey(Keys.L); tInc.AddKey(Keys.L); tInc.AddKey(Keys.O); tInc.AddKey(Keys.Enter); //! 對上暗號以後的處理常式 7 tInc.IncantationCantillatedReport += 8 new IncantationReport(BackdoorHandler_A); //! 將這個暗號添加到後門監視器裡面 9 m_KeyBackDoor.AddIncantation(tInc); } while (false); //! 第二個後門 10 11 do { //! 申請一個後門暗號 12 KeyboardIncantationMonitor.KeysIncantation tInc = m_KeyBackDoor.NewIncantation() as KeyboardIncantationMonitor.KeysIncantation; //! 初始化這個暗號為:依次按下 <Esc>Bye<Enter> 13 tInc.AddKey(Keys.Escape); tInc.AddKey(Keys.B); tInc.AddKey(Keys.Y); tInc.AddKey(Keys.E); tInc.AddKey(Keys.Enter); //! 對上暗號以後的處理常式 14 tInc.IncantationCantillatedReport += 15 new IncantationReport(BackdoorHandler_B); //! 將這個暗號添加到後門監視器裡面 16 m_KeyBackDoor.AddIncantation(tInc); } while (false);}//! 第一個後門的處理常式 17 void BackdoorHandler_A(IIncantation tInc){ button1.Visible = 18 true;}//! 第二個後門的處理常式 19 void BackdoorHandler_B(IIncantation tInc){ button1.Visible = 20 false;} 在Form1的建構函式中增加對AddBackDoor方法的調用,這樣我們就把後門加好了 1 public Form1() { InitializeComponent(); //! 加入後門 2 AddBackDoor(); } 在什麼地方安插後門呢?依照個人喜好了,不過既然是一個按鍵後門,肯定要選擇一個能接收KeyDown或者KeyUp事件的地方。 比如我們在Form1上增加一個文字框,將其ReadOnly屬性設定為True,並添加一段文字:“著作權,翻版必究”。並在表單上增加一個按鈕,作為我們示範的對象:普通狀況下,看不到這個按鈕,開啟後門以後,按鈕的visible屬性就變為true,我們就能看見了;我們也可以使用另外一個後門重新將按鈕的visible屬性設定為false,然後就可以交給客戶了。^_^ 選中剛才所說的文字框控制項,在Property視窗中選擇Event,雙擊KeyDown,進入代碼編輯視窗,並在KeyDown處理常式中加入對後門監視器的處理:也就是把按下的鍵告訴監視器: 1 private 2 void textBox1_KeyDown(object sender, KeyEventArgs e) { //! 告訴後門監視器哪個鍵被按下了 3 m_KeyBackDoor.Append(e.KeyCode); } //在後門處理常式A中將Button的Visible屬性設定為True; //! 第一個後門的處理常式 4 5 void BackdoorHandler_A(IIncantation tInc) { button1.Visible = 6 true; } //在後門處理常式B中將Button的Visible屬性設定為False; //! 第二個後門的處理常式 7 8 void BackdoorHandler_B(IIncantation tInc) { button1.Visible = 9 false; } 運行程式,果然看不到Button,他被隱藏了 選中寫有“翻版必究”的文字框,依次按下: <Esc> <H> <E> <L> <L> <O> <Enter> 鍵, button1出現了 依次按下: <Esc> <B> <Y> <E> <Enter> 鍵, button1又消失了 大功告成。 無論任何時候你都可以從頭開始輸入後門,不必擔心上次從什麼地方開始的。當然,也不用考慮大小寫。 |