3 回答

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

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊
添加回答
舉報(bào)