首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

调试技术

---- 反调试技术 公众号 前言 继续学习《逆向工程核心原理》,本篇笔记是第七部分:反调试技术,包括一些静态反调试技术和动态反调试技术 值得注意的是,这本书距今有将近10年了,故这里这些都是比较老的东西了...一、反调试技术概况 反调试技术调试器和OS有很强的的依赖性,分类如下所示: 二、静态反调试技术 静态反调试技术主要是通过一些API探测调试器,并使程序无法运行 1、PEB PEB结构体信息可以判断进程是否处于调试状态...\n"); _gettch(); return 0; } 三、动态反调试技术 动态反调试技术扰乱调试器跟踪功能,使程序中的代码和数据无法查看 1、异常 (1)SEH 以基于INT3异常为例...,这样别的调试器就无法调试正在被调试的进程 自我创建技术:父进程负责创建子进程,但是由子进程负责运行实际代码,所以调试器如果调试父进程则得不到OEP,但是如果调试子进程就能找到OEP代码 Debug Blocker...技术弥补了这一缺点,即使是子进程也无法调试 SEH反调试是在同一内存空间处理异常,但是Debug Blocker是在调试进程的内存空间处理被调试进程的异常,所以其他调试器不能附加目标进程,要附加目标进程就先得断开与父进程的联系

1.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    基础反调试技术总结

    早就决定把反调试这个小技术方向拿来扒一扒,但是技术点实在太多,并且相互交叉,实在又不太好明确分类,想想应该画一张整体概览图,这样不但便于大家迅速浏览总体框架,也便于随时查找,花了两天时间把之前的知识又浏览了一下...1 总体技术点概览: Being Debuged、CheckRemoteDebuggerPresent()、NTQuerySystem Information()、NTQueryObject()、ZwSetInformationThread...()、检测调试器、父进程检测、时间差、陷阱标志 TrapFlag、INT2d、0xCC检测、比较校验和、垃圾代码、扰乱代码对齐、双进程保护、代码重组、Stolen Bytes、API重定向、SEH与TLS...图中上面的黄色部分为注释部分“0 - - 1”表示调试前后的值对比,“2- -50000062h?”中的问号表示50000062这个值是个不确定值,有可能随环境变化,具体见下图: ? ? ? ?

    55720

    技术分享 | 新手如何调试 OceanBase

    前言 observer 调试有三种⽅法:⽇志,gdb 调试,vscode 调试(本质上是 gdb 或 lldb)。...这里我们关注如何借助 vscode 进行调试 调试版本 OB代码基线:开源版本,社区版,3.1.5 github:https://github.com/oceanbase/oceanbase.git commit...id:99777b4bc94d2cfc6be8ae1dce624e46beefad08 调试方式采用本地开发工具+远程 gdb 方式 本地指的是调试者的电脑(windows 或 mac) 远程指的是.../obd.sh deploy -c single.yaml 后续修改源码再调试时可直接运行: ....SQL ,所以调试时设置的断点有可能会命中后台任务执行的 SQL ,调试起来不是很方便 接下来开始愉快的调试吧=-= 参考: 文档概览-OceanBase 数据库-OceanBase文档中心-分布式数据库使用文档

    1.2K20

    调试技术揭秘(转)

    调试一些病毒程序的时候,可能会碰到一些反调试技术,也就是说,被调试的程序可以检测到自己是否被调试器附加了,如果探知自己正在被调试,肯定是有人试图反汇编啦之类的方法破0解自己。...为了了解如何破0解反调试技术,首先我们来看看反调试技术。...,因此可以通过判断这个标志位的方式来反调试。...NtSetInformationThread(GetCurrentThread(), (THREADINFOCLASS)0x11, 0, 0); } 七、触发异常的方法 这个技术的原理是...然而,如果进程正在被调试的话,这个LastError值会被修改,因此如果调试器绕过了第七步里讲的反调试技术的话,我们还可以通过验证LastError值是不是被修改过来检测调试器的存在,示例代码:

    86920

    Java 动态调试技术原理及实践

    调试是发现和减少计算机程序或电子仪器设备中程序错误的一个过程。最常用的断点调试技术会在断点位置停顿,导致应用停止响应。本文将介绍一种Java动态调试技术,希望能对大家有帮助。...但断点调试会在断点位置停顿,使得整个应用停止响应。在线上停顿应用是致命的,动态调试技术给了我们创造新的调试模式的想象空间。...本文将研究Java语言中的动态调试技术,首先概括Java动态调试所涉及的技术基础,接着介绍我们在Java动态调试领域的思考及实践,通过结合实际业务场景,设计并实现了一种具备动态性的断点调试工具Java-debug-tool...总结 本文详细剖析了Java动态调试关键技术的实现细节,并介绍了我们基于Java动态调试技术结合实际故障排查场景进行的一点探索实践;动态调试技术为研发人员进行线上问题排查提供了一种新的思路,我们基于动态调试技术解决了传统断点调试存在的问题...,使得可以将断点调试这种技术应用在线上,以线下调试的思维来进行线上调试,提高问题排查效率。

    1.9K30

    技术教程】如何使用EasyStreamClientTool调试工具?

    随着EasyNVR用户的增多,我们碰到的咨询也越来越多,为了让EasyNVR遇到的问题可以快速定位,我们又开发了一款新的调试工具:EasyStreamClientTool。...调试流程 调试某一路流是否能够正常接入,我们可以从:连接-》信令(协议)-》流媒体数据解析-》串流输出,这4个环节逐一进行排查。...第一步:连接,很多场景下,我们采用"EasyStreamClient -m tcp -d "命令初步连接时,如果接收到数据,会有大批量的帧信息打印,如果无法连接到,这个时候可以直接去进行网络方面的设置和调试了...收流是一个流媒体数据包解析与合并的过程,当我们要调试收到或者解析的音视频数据是否符合规范,可以使用命令"EasyStreamClient -d -s file -f ",将收到的数据存成文件,再利用桌面工具...admin:a1234567@192.168.99.212:554/h264/ch1/main/av_stream image.png 如果像上图一样能打印大量帧信息打印代表流连接正常,可以继续下一步调试

    87110

    Linux内核调试技术——kprobe使用与实现

    Linux kprobes调试技术是内核开发者们专门为了便于跟踪内核函数执行状态所设计的一种轻量级内核调试技术。...利用kprobes技术,内核开发人员可以在内核的绝大多数指定函数中动态的插入探测点来收集所需的调试状态信息而基本不影响内核原有的执行流程。...腾讯T6-9首发“Linux内核源码嵌入式开发进阶笔记”,差距不止一点点哦 一、kprobes技术背景 开发人员在内核或者模块的调试过程中,往往会需要要知道其中的一些函数有无被调用、何时被调用、执行是否正确以及函数的入参和返回值是什么等等...因此kprobes技术具有对内核执行流程影响小和操作方便的优点。 kprobes技术包括的3种探测手段分别时kprobe、jprobe和kretprobe。...其中涉及硬件架构相关的是CPU的异常处理和单步调试技术,前者用于让程序的执行流程陷入到用户注册的回调函数中去,而后者则用于单步执行被探测点指令,因此并不是所有的架构均支持,目前kprobes技术已经支持多种架构

    2.5K30

    Linux设备驱动程序(四)——调试技术

    前言 由于内核是一个不与特定进程相关的功能集合,所以内核代码无法轻易地放在调试器中执行,而且也很难跟踪跟踪,本章节将介绍监视内核代码并跟踪错误的技术。...一、内核中的调试技术 我们列出用来开发的内核应当激活的配置选项,除了特别指出外,所有的这些选项都在内核配置工具的“kernel hacking” 菜单中。...四、通过监视调试 有许多方法可用来监视用户空间程序的工作情况,比如用调试器一步步跟踪它的函数插人打印语句,或者在 strace 状态下运行程序等等。在检查内核代码时,后面这种技术最值得关注。...五、调试系统故障 即使采用了所有这些监视和调试技术,有时驱动程序中依然会有错误,这样的驱动程序在执行时就会产生系统故障。 注意,“故障(fault)”并不意味着“惊恐(panic)”。...另外一个值得掌握的技巧是: (gdb)print *(address) 这里,填充 address 指向的一个 16 进制地址,输出是对应那个地址的代码的文件和行号,这个技术可能有用,例如,来找出一个函数指针真正指向哪里

    83841

    Linux内核调试技术——kprobe使用与实现

    Linux kprobes调试技术是内核开发者们专门为了便于跟踪内核函数执行状态所设计的一种轻量级内核调试技术。...利用kprobes技术,内核开发人员可以在内核的绝大多数指定函数中动态的插入探测点来收集所需的调试状态信息而基本不影响内核原有的执行流程。...内核源码:Linux-4.1.15 实验环境:CentOS(x86_64)、树莓派1b 一、kprobes技术背景 开发人员在内核或者模块的调试过程中,往往会需要要知道其中的一些函数有无被调用、何时被调用...其中涉及硬件架构相关的是CPU的异常处理和单步调试技术,前者用于让程序的执行流程陷入到用户注册的回调函数中去,而后者则用于单步执行被探测点指令,因此并不是所有的架构均支持,目前kprobes技术已经支持多种架构...五、总结 kprobes内核探测技术作为一种内核代码的跟踪及调试手段,开发人员可以动态的跟踪内核函数的执行,相较与传统的添加内核日志等调试手段,它具有操作简单,使用灵活,对原始代码破坏小等多方面优势。

    5.8K21

    Linux内核调试技术——kprobe使用与实现(一)

    Linux kprobes调试技术是内核开发者们专门为了便于跟踪内核函数执行状态所设计的一种轻量级内核调试技术。...利用kprobes技术,内核开发人员可以在内核的绝大多数指定函数中动态的插入探测点来收集所需的调试状态信息而基本不影响内核原有的执行流程。...一、kprobes技术背景 开发人员在内核或者模块的调试过程中,往往会需要要知道其中的一些函数有无被调用、何时被调用、执行是否正确以及函数的入参和返回值是什么等等。...因此kprobes技术具有对内核执行流程影响小和操作方便的优点。 kprobes技术包括的3种探测手段分别时kprobe、jprobe和kretprobe。...其中涉及硬件架构相关的是CPU的异常处理和单步调试技术,前者用于让程序的执行流程陷入到用户注册的回调函数中去,而后者则用于单步执行被探测点指令,因此并不是所有的架构均支持,目前kprobes技术已经支持多种架构

    3.9K21

    Linux内核调试技术——kprobe使用与实现(五)

    Linux内核调试技术——kprobe使用与实现(一) Linux内核调试技术——kprobe使用与实现(二) Linux内核调试技术——kprobe使用与实现(三) Linux内核调试技术——kprobe...使用与实现(四) Linux内核调试技术——kprobe使用与实现(五)-触发kprobe探测和回调 前文中,从register_kprobe函数注册kprobe的流程已经看到,用户指定的被探测函数入口地址处的指令已经被替换成架构相关的...在调试完成后直接返回1。 3、p不存在且被探测地址的指令也不是BREAKPOINT_INSTRUCTION ?...,并不涉及太多架构相关的细节: x86_64架构的单步执行函数其主要原理是:当程序执行到某条想要单独执行CPU指令时,在执行之前产生一次CPU异常,此时把异常返回时的CPU的EFLAGS寄存器的TF(调试位...当单步指令执行完成后,CPU会自动产生一次调试异常(由于TF被置位)。此时,Kprobes会利用debug异常,执行post_handler()。下面来简单看一下: ?

    2.3K60

    Windows反调试技术简单讲解(用户模式篇)

    ,都可以正常识别 其实Windows在PEB的BeingDebugged标志为TRUE之后,还有别的操作,鉴于笔者没有具体研究过这些变化,故这里不再深入(有时间可以单独补一篇) 方式2:线程隐藏调试 从...Windows 2000开始,微软在一个内部函数上提供了这个功能 其效果是:对指定设置了隐藏调试的线程,打断点,断点不断,且程序会退出 原理是:Windows对设置了线程隐藏调试的线程,出现异常不会通知调试器...) 为啥有这么一招,这还要说说Windows调试器是如何在附加时让被调试器断下来的 原理太简单了:创建一个远程线程,执行DbgUiRemoteBreakin,DbgUiRemoteBreakin内部触发...获取相关资料 这里贴一个网址inline hook 知道这里,其实就是覆盖Windows的原代码,跳转到我们的函数,直接ExitProcess即可(不需要回去) 下面是演示: 方法4:自调试...Windows只允许一个被调试进程被一个调试进程调试,利用这一点,直接自己调试自己不香(注意不能直接自己调试自己,会用到双进程) 放一下微软的调试API,我们便是使用它 Mircosoft Debug

    1.1K20
    领券