3 回答
TA貢獻1829條經驗 獲得超13個贊
在深入了解調試器之后,我發現實際執行與ctrl中斷等信號相關的行為的入口點是核32!ctrlRoutine。該函數與ThreadProc具有相同的原型,因此可以直接與CreateRemoteThread一起使用,而無需注入代碼。然而,這不是一個出口的符號!它位于不同版本的Windows上不同的地址(甚至有不同的名稱)。該怎么辦?
這是我最后想出的解決辦法。我為我的應用程序安裝了一個控制臺ctrl處理程序,然后為我的應用程序生成一個ctrl中斷信號。當調用我的處理程序時,我會回顧堆棧的頂部,找出傳遞給內核32!BaseThreadStart的參數。我獲取第一個Param,它是所需的線程開始地址,它是內核32!CtrlRoutine的地址。然后我從我的處理程序返回,表明我已經處理了信號,我的應用程序不應該被終止。回到主線程中,我將等待內核32!CtrlRoutine的地址被檢索。一旦我得到了它,我就在目標進程中創建一個遠程線程,并使用已發現的開始地址。這將導致對目標進程中的ctrl處理程序進行評估,就好像ctrl中斷已被按下一樣!
好的是,只有目標進程受到影響,任何進程(即使是加窗口的進程)都可以成為目標。一個缺點是我的小應用程序不能在批處理文件中使用,因為它會在發送ctrl中斷事件時殺死它,以便發現kernel 32!ctrlRoutine的地址。
start
TA貢獻1775條經驗 獲得超8個贊
添加回答
舉報
