首页
社区
课程
招聘
[讨论] 讨论 DbgUiIssueRemoteBreakin 隐藏的最佳解决方案
2022-11-28 23:49 7180

[讨论] 讨论 DbgUiIssueRemoteBreakin 隐藏的最佳解决方案

2022-11-28 23:49
7180

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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2022-12-5 07:43 被sanqiu编辑 ,原因:
收藏
点赞0
打赏
分享
最新回复 (5)
雪    币: 6
活跃值: (2925)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
咖啡_741298 2022-11-29 05:14
2
0
这玩意不就是触发一个int3异常,好让调试器接管吗? 重写一个太简单了吧
雪    币: 89
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
sanqiu 2022-11-29 13:17
3
0
咖啡_741298 这玩意不就是触发一个int3异常,好让调试器接管吗? 重写一个太简单了吧
重写创建线程吗?我不认为那是一个简单的事,可能我水平低吧
雪    币: 2594
活跃值: (3692)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
syser 2022-11-29 14:10
4
0
sanqiu 重写创建线程吗?我不认为那是一个简单的事,可能我水平低吧
他的意思是 原理上 这个只是为了触发下一个异常 让调试器接到通知 不去搞这个线程也可以的
雪    币: 89
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
sanqiu 2022-11-29 17:11
5
0
syser 他的意思是 原理上 这个只是为了触发下一个异常 让调试器接到通知 不去搞这个线程也可以的
不搞线程当然可以,我甚至可以hook了直接返回SUCCESS ,或者干脆直接nop
雪    币: 89
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
sanqiu 2022-11-30 02:10
6
0
哈哈哈哈 此贴终结 https://bbs.pediy.com/thread-262154.htm
这个帖子简直是我思路的完全复刻,第一,第二个想法我在帖子前面已经明说了,第三个想法我想的也是PsSetThreadContext,然后我在查询一些细节的时候阴差阳错的搜到了这个帖子,秒啊妙啊
游客
登录 | 注册 方可回帖
返回