断点 技术相关

继续研究一下OD实现部分中 断点相关的技术:

1、普通断点:

1.1 OD的处理方法是将指令的第一个字节替换成CC,造成中断。为什么可以?(因为它属于int3中断  的代码)

这个INT 3指令,其机器码是CCh,也常称为CC指令。当被调试进程执行INT 3指令导致一个异常时,调试器就会捕捉这个异常从而停在断点处,然后将断点处的指令恢复成原来指令。当然,如果自己写调试器,也可用其他一些指令代替INT 3来触发异常。

用INT 3断点的好处是可以设置无数个断点,缺点是改变了原程序指令,容易被软件检测到。例如为了防范API被下断,一些软件会检测API的首地址是否为CCh,以此来判断是否被下了断点。在这用C语言来实现这个检测,方法是取得检测函数的地址,然后读取它的第一个字节,判断它是否等于“CCh”。 

1.2通过检测指令的第一个字节是否为CC来反调试。  实现?

FARPROC Uaddr ;
BYTE Mark = 0;
(FARPROC&) Uaddr =GetProcAddress ( LoadLibrary("user32.dll"),"MessageBoxA");
Mark = *((BYTE*)Uaddr);       // 取MessageBoxA函数第一字节
if(Mark ==0xCC)               // 如该字节为CC,则认为MessageBoxA函数被下断
    return TRUE               // 发现断点

程序编译后,对MessageBoxA设断,程序将会发现自己被设断跟踪。当然躲过检测的方法是将断点下在函数内部或末尾,例如可以将断点下在函数入口的下一行,就可躲过检测了。

总之是一个比较勉强的反调试方法。

当我们设置断点后,OD会将对应指令处第一个字节指令替换成CC。但是为了不影响界面显示效果,OD会将CC显示为原字节。但是,我们可以在内存单元中读取出其真实的内容,并且可以在反调试中用此方法来检测断点。所以,我们设置的断点有时候莫名其妙的消失了不要感到奇怪,或许说这是调试器的本身的弱点吧。

2、BPX对所有调用都下断点

2.1BPX可以给引用或者调用了指定API函数的指令都下断点。

2.2或者通过 查看函数列表(ctrl+N)--> 搜索对应函数-->  右键选择查看调用树 --> 从而对函数下断点

3、内存断点:

3.1通过设置内存页的访问属性,来触发异常,从而产生断点。

“Memory,on access(内存访问)”是内存访问断点(读或者写),

“Memory,on write(内存写入)”是内存写断点。

这种类型的断点修改内存页的访问属性。当前我们设置了内存断点。任何代码访问(读,写或者执行代码)了该处代码的话,都会触发异常。 

3.2还能够对区块进行内存访问和写入。

3.3内存访问一次性断点

这个断点是一次性断点,当所在段被读取或执行时就中断,中断发生以后,断点将被删除。想捕捉调用或返回到某个模块时,如后面章节中的脱壳时,该类断点就显得特别有用。

部分总结到这里,明天继续。

断点 技术相关,布布扣,bubuko.com

时间: 2024-11-16 00:05:11

断点 技术相关的相关文章

JAVA之IO技术相关Properties类 存储配置文件信息

package ioTest.io3; /* * Properties存储配置文件信息 * 1.文件信息--------------------------- * 2.根据文件信息获取key和value---|流| * 3.将key,value的之对应存储到properties对象中 */ import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOu

JAVA之IO技术相关 如何设置软件的使用次数

/* * 如何设置软件的使用次数? * 开发了一款软件,可以给用户进行试用,但是到了一定次数后,软件不能再被试用 * 同时提醒用户付费. * 思路: * 计数呗 * 问题出现,计数器只能存在于程序运行过程中,实际是保存在内存中的. * 那么一旦程序结束,这个计数器的值又恢复为了初始程序中设定的值. * 那么如何保存这个值,在下一次启动应用程序的时候,让其仍然存在啊 * 思路:让这个值持久化,方法将其值保存在硬盘上的文件上.再每次运行 * 程序之前,先读取这个配置文件:程序关闭之前存储信息到配置文

JAVA之IO技术相关Properties类的使用

package ioTest.io3; /*Properties是hashtable的子类. * 也就是说它具备map集合的特点,而且它里面存储的键值对都是字符串 * 是集合中和io技术结合的一个容器 * * 该对象的特点是可以用于键值对形式的配置文件 */ import java.util.Properties; public class PropertiesDemo { public static void main(String[] args) { // TODO Auto-generat

android 技术相关Blog

android 技术相关 LVXIANGAN的专栏 http://blog.csdn.net/LVXIANGAN/article/category/1101038 Android NFC 开发实例 http://blog.csdn.net/pku_android/article/details/7430788

Web技术相关信息列表

http://baike.baidu.com/view/15906.htm#rs_15906_5829 Web技术相关信息列表 WEB技术 HTML XHTML ? HTML 5 ? CSS ? TCP/IP XML XML ? XSL ? XSLT ? XSL-FO ? XPath ? XPointer ? XLink ? DTD ? XML Schema ? DOM ? XForms? SOAP ? WSDL ? RDF ? RSS ? WAP ? Web Services Web脚本 Ja

JEE技术相关

1st projects Spring 3.0.5  FullStack library.     Hibernate 3.6.1(4.0 alpha1) ORM library.     Mybatis 3.0.4 ORM library.     Blueprint 1.0 CSS framework     CXF 2.3.2 Webservice library.     Jersey 1.5 JAX-RS REST implement.     Thirft 0.5 , Avro1.5

sessionStorage、localStorage技术相关以及商家sid、sbid记录相关、vue相关问题

一个项目的需求如下: 作为第一个第三方平台,我们可以提供给不同的商家技术支持,即在一个url后面根据不同的商家来提供不同的查询字符串(包含sid和sbid),所以为了得到这个商家的信息,我们需要使用解析这个查询字符串然后从后天获取数据. 出现的问题1: 由于这是vue做的单页面应用,在下方有不同的按钮路由到不同的页面, 所以如果点击到其他路由,然后再点击回来的时候,根据路由设置,我们的首页的url此时应该是没有查询字符串了,当然,这个不重要啊,因为我们可以把数据(sid和sbid)放在一个全局变

双线路服务器技术相关特点

对于服务器托管双线路技术的实施就是可以在不增加硬件成本,不需要添加更多地维护更新人员,不需要花费更多精力的基础上,仅仅是一点点不同ISP带宽的接入,就可尽最大能力去发挥和使用服务器的网络和硬件资源,提高访问量.的最大特点就是简单而有效的提高网站访问速度.所以在未来的中国互联网发展道路上,该技术一定会成为网站内容信息服务商最为青睐的信息服务解决技术方案.双线路技术实现起来麻烦吗?   双线路技术的实现需要我们的专业工程师技术人员,从用户服务器网络配置方面和正龙数据IDC中心机房核心路由设备上加以相

虚拟化技术相关

本文的目的是弄明白虚拟化相关的一些技术概念,KVM,QEMU, hypervisor, libvirt,virt-manager, XEN等等. 我们先整体的理解一下这些概念. virt-manager是类似与virtual-box,vm-ware等的虚拟机软件,图形化的一个东西,通过它你可以图形话的方式来创建虚拟机,并运行虚拟机.libvirt是被virt-manager调用的一个驱动. libvirt的作用是封装了更底层的kvm或者XEN的接口.KVM ,XEN其实都属于一种hypervis