首页
社区
课程
招聘
[求助]有关反调试的方案
发表于: 2008-4-6 21:44 8088

[求助]有关反调试的方案

2008-4-6 21:44
8088
之前老早我发过一篇帖子问大家有关的情况,就是如果完全不接触句柄的话,你打算如何调试程序,如果调试不了自然也就谈不上破解。有人说可以用虚拟机调试器,目前我想问一下,如果再排除虚拟机调试器呢?还有没有其它的方法可以调试程序的。

据我了解,虚拟机真正的核心在于解释执行,不知道有没有完全不用解释技术的虚拟机产品,如果是解释执行就一定会牵到运行时间方面的问题,我打算从这方面下手,已经有了具体的手段了,准备实行中。我可否就再问一下,避开句柄,不使用虚拟机调试器,有没有办法调程序的?

谢谢!

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (17)
雪    币: 191
活跃值: (41)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
2
学习 SoftICE 接管调试中断就可以了吧,或者学习 WinDbg 接管异常处理应该也可以。
2008-4-6 22:12
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
3
硬件调试器.....
2008-4-7 10:28
0
雪    币: 80
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
请教一下楼上,纯粹的硬件调试器有针对PC的吗,我在网上看到大部分都是嵌入式领域里的。可否帮忙解答一下,如果是纯软件的话那就是虚拟机的范畴了。另外,我现在觉得检测中断是否被接管了应该不是问题吧。

谢谢!
2008-4-7 13:51
0
雪    币: 108
活跃值: (141)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
5
仿真器
2008-4-7 17:37
0
雪    币: 80
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
仿真器就是虚拟机吧,只要虚拟机对硬件全虚拟,就等同于仿真机了。
2008-4-8 13:28
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
7
你说的应该是让实际电脑去执行代码吧?比如vmware那样的,应该不是纯粹解释,部分内容被下放到了真正的cpu去处理,否则速度不能那么快。
2008-4-8 14:05
0
雪    币: 80
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
如果是让实际电脑来以编译的方式执行代码的话,那么这个对我没有威胁,因为这种方法不利于调试,我要对付的就是以解释方式来执行代码的情况。
2008-4-8 14:25
0
雪    币: 135
活跃值: (226)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
9
调试和句柄什么关系?而且解释和编译之间本来就没有严格的界限
2008-4-8 18:04
0
雪    币: 80
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
回楼上:除全虚拟机调试,你要调试一个进程,或以非倾入式的查看一个进程的各种数据,首先你必须拿到这个进程的句柄才可能进行下面的一系列工作吧。如果拿不到进程句柄,那么是不是大部分的路就堵死了。

解释执行和编译执行之间我认为差别大了,真正编译执行时,执行的控制是由硬件来完成的,而硬件的动作是固定死的,而解释执行的时候,对代码的处理是软件执行的,而软件的行为是不固定的。所以被解释的代码的一切等于完全暴露在解释器下不是吗?

请指教! 谢谢!
2008-4-9 15:57
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
11
我想问问楼主如何不让别人拿到你进程的句柄
2008-4-9 17:53
0
雪    币: 135
活跃值: (226)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
12
我写过调试器编译器解释器.关于调试,我的理解是,调试器核心就是断点+反汇编而已,那么重点就是如何中断.中断是控制转移的一种,几乎所有的控制转移都可以拿来做断点(当然效果有优劣之分,INT3做断点仅1字节,而JMP做断点要5字节).总的来说,只要还能正确修改内存就可以中断.当然你也可以说,修改内存也需要句柄,也需要知道进程页表.但是这似乎难以隐藏,保护系统不大可能全面修改系统文件吧.何况,即使是硬件调试器或者虚拟硬件调试器,也仍然需要这些信息,因为进程不是IA32体系的概念,而是操作系统层次的概念,可以想象,即使用X86的虚拟机调试,关于进程的信息也必须要在虚拟机内获取.

关于编译与调试,这中间的界限并不明显,编译过程是 词法分析->语法分析->语法树->中间码->机器码(执行于真实CPU或虚拟机).真正纯解释,就是读取字符串的同时不生成语法树就解释执行,这种情况已经非常少了,大多数解释器是生成并优化语法树然后解释执行,这和编译什么区别?难道我不能认为这个语法树就是一种编译出来的中间码,而解释器是个虚拟机.这是靠近解释器的一种方案.靠近编译器的方案也有解释成分.比如,设计通用变量类型,把大量的运算操作封装到库里面,编译出来的代码主要是对库的调用.

关于你说的"如果是让实际电脑来以编译的方式执行代码的话,那么这个对我没有威胁,因为这种方法不利于调试".  "编译的方式执行代码"的确切含义我不是很理解,是否是指将代码修改转换后直接放到CPU上运行的 硬件虚拟化技术?这种方法也有可能可以用于调试,只要能在转换过程中加入一个透明的INT3都是对调试极大的帮助
2008-4-9 19:15
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
察看进程数据~~读内存不就得了?计算物理地址直接读不就不需要句柄了么?
俺的愚见....
2008-4-10 09:46
0
雪    币: 80
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
感谢DonQuixote朋友的指导,我并不需要让你拿不到句柄,但我可以得知到底有哪个进程拿过我的句柄,这样杀起来比较有目的性。我是这个意思,所以说不是不需要句柄,而是这个句柄你压根就不能碰,碰一次都不行。
2008-4-10 16:40
0
雪    币: 163
活跃值: (60)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
15
只要让加载驱动,谁杀谁还不一定呢..............
2008-4-10 17:56
0
雪    币: 80
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
并不怕被杀,关键是怕被调试。而且除了中断以外的大部分情况下,内核级别要拿到一个进程的执行体进程块,主要是在进程列表中搜索,以及拿到句柄用ReferenceObjectByHandle这个函数,后者已经有效对付了,对付前面一种情况只要在进程块链表中把自己给删除掉就行了。
2008-4-10 19:29
0
雪    币: 135
活跃值: (226)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
17
难道你说的监视句柄的方案是这个?
http://bbs.pediy.com/showthread.php?t=56724

估计实现起来不大可行,比如,taskmgr,金山读霸,瑞星,icesword,QQ,这些都会用到进程句柄,你打算把他们怎么办?全杀掉?还是开白名单放行?如果放行的话,我注入这些进程用他们的句柄,你打算怎么处理?把这些程序都保护起来?更何况还有他们的升级版呢,如何兼容?更何况windows内核也肯定会用到句柄,怎么处理?更何况弄掉你的监视代码也不是完全不可能的事
2008-4-10 19:59
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
18
楼主可以放一个试炼品看看

如果楼主的东西可以在ring3下运行就不要努力了,不可能在句柄方面有所突破的
ring0的倒可以试试看
2008-4-11 00:27
0
游客
登录 | 注册 方可回帖
返回
//