-
-
[讨论] 讨论 DbgUiIssueRemoteBreakin 隐藏的最佳解决方案
-
发表于:
2022-11-28 23:49
7932
-
[讨论] 讨论 DbgUiIssueRemoteBreakin 隐藏的最佳解决方案
句柄 一直是兵家必争之地 进程隐藏肯定是实现不了的,因为不可能隐藏全局表,那如何防止扫描句柄呢。我的方案是不使用句柄,把OpenProcess在内的所有用到句柄的函数全部重写一遍(调试器用到的不多,十几个吧),在重写DbgUiIssueRemoteBreakin的时候遇到了麻烦,因为这个函数搞的动静实在太大了
1.必须传入OpenProcess获取的句柄
2.底层创建了远程线程
3.DbgUiRemoteBreakin这个函数里面扫描了TEB中的一个值isenableDebug,处于调试状态了才int3
可以反调试的东西太多太多
那么,重写DbgUiIssueRemoteBreakin的必要性是非常大的,但是这其中就有一个问题,重写它底层调用的NtCreateThreadEx是不够的,因为这个函数并没有Handle->Object,而是把任务放到了PspCreateThread里面,这个函数用到了很多未导出结构体,所以这个函数在未来变动的可能性很大(win7->win10发生的变化天翻地覆),所以这并不是最优的解决方案
但这并不是我不想重写它的原因,还有就是给调试进程创建线程这个操作也非常的危险,会被PsSetCreateThreadNotifyRoutine检测,虽然说DbgUiIssueRemoteBreakin只会在调试的时候调用一次,但是一次也会暴露这个方案的不完美
所以我联想到了另一个解决方案,插入APC,这并不是windows的官方解决方案,因为正确的方案是DbgUiIssueRemoteBreakin,所以插入APC也暴露出一个问题,不稳定。但它的优点是没有创建线程
仅以此贴,分享我这几天的研究成果,并希望抛砖引玉,能够得到更完美的解决方式
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2022-12-5 07:43
被sanqiu编辑
,原因: