标 题: 又灌水-反(调试/跟踪/脱壳) 技术集锦
发信人: kongfoo
时 间: 2004-05-27,14:50
详细信息:

反(调试/跟踪/脱壳) 技术集锦
kongfoo/2004.4.18-5.27

  具体代码就不贴了,知道原理就可以写出代码。一些是实践所得,一些是别人的成果,也
都收集在一起了。解密、加密这个攻防战好像和传统作战的攻防战不同,防的一方能用的技术
远远多于攻的一方。

  1)花指令
  很无聊的技巧,但也有一定作用:隐藏指令,干扰分析。

  2)花循环
  无用循环,让跟踪者浪费时间,心烦。

  3)时间比较
  经典的反跟踪技巧,单步跟踪比连续执行的时间长很多。

  4)父进程检查
  被调试器加载后父进程就不是通常的Explorer.exe。

  5)检查调试器
  Windows本身就提供一些API可以用来检查调试器是否存在。如IsDebuggerPresent/NtQueryInformationProcess。
另外还有CreateFile/PEB(和IsDebuggerPresent一样)等方法检查调试器。

  6)动态加/解密代码
  干扰分析。把执行过的代码重新加密可以防止跟踪者翻看代码。

  7)IAT加密
  防止ImpREC等工具的自动脱壳修复,加大脱壳难度。

  8)指令摘取
  有很多方式,从OEP处摘取指令,随机摘取一段指令等,加大脱壳难度。摘取的指令还可变形处理。

  9)CALL处理
  根据CALL指令本身特点,让其先CALL进壳的空间,加大脱壳难度。

  10)自调试
  对于一个程序,Windows只允许这个程序被一个调试器调试,基于此,采用双进程或多进程方式,
自已调试自己,加大跟踪难度。另外,通过设置某中断地址,使程序发生某中断时执行程序中的中断
处理代码,进行解码、指令摘取等动作,加大跟踪难度。

  11)异常处理机制
  人为产生异常,改变程序流程或在异常处理时进行解码,加大跟踪难度。常见的异常有内存存取
错误异常,中断异常(INT3/单步/其它中断等),非法指令,非法EIP等。

  12)多线程的运用
  利用被调试程序所有线程会被挂起的特点,达到干扰跟踪的目的。一,用多线程改变程序流程:在
线程中修改主线程代码,如果被单步跟踪线程将不会运行,流程也就不对了。二,用多线程解码:同理,
线程不能运行解码也就不能进行。

  13)反SMC
  用Timer/线程不断地将敏感的内存空间的属性设置成只读,可以防止被打补丁。

  14)CRC校验
  代码被修改之后CRC检验值就不同了。

  15)破坏调试环境
  破坏调试寄存器内容,破坏中断处理地址或自己接管中断处理等,从根本上反调试。

  16)反进程转存
  将某个不会用到的代码空间设置成NO_ACCESS,LordPE等工具dump到这个空间时就
会异常而dump不了啦。

  17)监视键盘
  监视F7、F9就够了。

  18)固定屏幕
  在壳运行期间把屏幕固定,跟踪者看都不看到,当然跟不了。

  19)破坏异常处理环境
  用SetUnhandledExceptionFilter破坏异常处理环境,使调试器无法捕捉程序产生的异常。

  20)调试父进程
  利用调试函数的特点,即被调试进程会被挂起的特点,反单步跟踪。

  21)Arm的CC保护,CopyMem-II保护
  把所有跳转改成CC,父进程检测到INT3中断时查表改EIP去到正常的位置。
  CopyMem-II就是把自己复制到另一块内存中去运行,哪么dump的时候就麻烦些啦。

  22)反attach分析
  执行过的代码就破坏掉,防止attach分析。另外,生成一个指明不能用调试器的进程之后本
身进程直接退出,可防attach。(NT系统有效)

  23)指令预取
  利用CPU会预读取指令的特点,干扰单步跟踪。如:
      mov word ptr [@@],20cdh
    @@:
      nop
      nop
  正常情况下CPU预读了2个nop,而不会执行INT 20(cd20),但单步跟踪下来就不同了。

  24)写代码时的反调试
  对加壳选项的不同而生成不同的代码,这样可以有效地防止脱壳机的patch。只用标志位
来判断是否加密IAT是很危险的。

  25)随机存放敏感数据
  如果用jmp OEP的方式去OEP,并且代码位置是固定的,哪么写脱壳机时OEP就随手可得了,
所以使代码不定长,或把敏感数据隐藏起来是很好的对策。另外一些壳运行时要用的原程序的
参数放在程序里面比一堆地放在壳后面更安全得多。

  26)反汇编
  把自己作为一个指令解释器,反汇编自身代码并解释执行,这样就可以防止指令被改。

  软件设计的复杂性比单纯的反调试技巧更有效。加密算法的运用更是有力的反脱壳措施。
anti技巧的安排也很重要,比如子程序里面放anti代码要更好些,因为跟踪者要先过双进程
这一关;解码前设置anti dump比解码后设置更好些,因为解码后立即用LordPE的话anti dump
就形同虚设了。

标 题: 又灌水-反(调试/跟踪/脱壳) 技术集锦相关推荐

  1. BFS模版题----水缸灌水(c++)

    先挂题目: 水缸灌水 题目描述 有两个无刻度标志的水壶,分别可装x升和y升(x,y为整数,x.y<=100)的水.设另一方面有一水缸,可用来向水壶灌水或倒出水,两水壶间,水也可以相互倾灌.已知x ...

  2. 【原创】反调试技巧总结-原理和实现(1)(2)(3)(4)(5)(6)......

    标 题: [原创]反调试技巧总结-原理和实现(1)(2)(3)(4)(5)(6)...... 作 者: shellwolf 时 间: 2008-08-10,22:40:53 链 接: http://b ...

  3. android的反调试方法,Android平台融合多特征的APP反调试方法与流程

    本发明涉及Android平台融合多特征的APP反调试方法,属于计算机与信息科学技术领域. 背景技术: 应用程序本身并不具备反调试的功能,但是动态调试是动态分析应用逻辑.动态脱壳等攻击方式所采取的必要手 ...

  4. 【JS 逆向百例】网洛者反爬练习平台第五题:控制台反调试

    关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 文章目录 声明 逆向目标 逆向过程 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业 ...

  5. 动态改变类名_反调试之检测类名与标题名

    本文内容分为两部分: 1.介绍涉及到的API 2.实践 涉及到的API函数的学习: 1.GetProcAddress 定义:GetProcAddress是一个计算机函数,功能是检索指定的动态链接库(D ...

  6. 聊聊机器翻译界的“灌水与反灌水之战”!

    文 | Willie_桶桶 编 | 智商掉了一地 针对机器翻译领域如何提高和判断实验可信度,这篇ACL2021的oustanding paper迈出了关键的一步!(来读!全文在末尾) 作为不停读论文和 ...

  7. [转转]反调试技巧总结-原理和实现-----转

    原本也是转的,但我没找到原作者 标 题: 反调试技巧总结-原理和实现-----转 作 者: lcx4 时 间: 2016-4-7 链 接: http://www.lcx4.com/?post=51 2 ...

  8. 二本本科生连发10篇SCI被喷“灌水严重”?原来是因为......

    近日,徐州工程学院的万仲禹同学因发10篇SCI并且获香港城市大学全额奖学金直博资格,引发了各界热议,目前万仲禹本人已做出回应,表示"希望成千上万的二本学生看到,我们没有985/211的条件, ...

  9. 反调试技巧总结-原理和实现

    总结: 1.  FindWindow.比如 FindWindowA("OLLYDBG", NULL); 2.  EnumWindow函数调用后,系统枚举所有顶级窗口,为每个窗口调用 ...

最新文章

  1. HttpModule与HttpHandler详解
  2. github登陆方案
  3. 基于CentOS 搭建 Seafile 专属网盘
  4. 1. 写出一个能创建多级目录的 PHP 函数(新浪网技术部)
  5. 设备树与驱动的关系_Linux CommonClock Framework分析之四 gpio clk gate驱动实现
  6. 2017微服务 mysql集群_成功升P7多亏掌握了这几点:高并发+Nginx+微服务+Redis+MySQL...
  7. WPF中的动画——(一)基本概念
  8. python类属性的应用 子类继承可以节约空间
  9. android csv显示乱码问题,Android CSV解析器问题
  10. docker 容器命令
  11. vSAN其实很简单-vSAN盘他之重新部署vCenter
  12. T2 Funcin T1,out T2(T1 arg)
  13. 世界独创的螺旋数组低于n(o^2)的生成算法
  14. 程序猿生存指南-15 领导视察
  15. 业务流程图(TFD)实例
  16. Ubuntu 16.04+1080Ti机器学习基本环境配置【转】
  17. n79登陆微信显示服务器繁忙,不支持n79就算“阉割”?5G手机全网通争议又来了...
  18. 工资管理系统/c语言期末大作业学习经历
  19. Java中的基本数据类型讲解(数值型、字符型、布尔型)
  20. Go语言系列——01-HelloWorld、02-命名规范、03-变量、04-类型、05-常量、06-函数(Function)、07-包、08-if-else语句、09-循环、10-switch语句

热门文章

  1. 基于STM32F407四旋翼无人机 --- 姿态解算讲解(四元数)(叉积法融合陀螺仪数据和加速度数据)(五)
  2. 微信支付宝服务商哪家好 支付宝有什么优势
  3. Struts2的简单搭建(三)
  4. vue 路由进度条 nprogress
  5. js购物车功能php,实战项目:用原生JS实现一个购物车的功能
  6. 最新2021修复安装了谷歌框架GMS后华为/荣耀手机FCM推送服务仍不能用的问题(Microsoft Authenticator微软验证器在安装了Google服务后还是提示不可用)
  7. SourceInsight4.0暗色主题配置
  8. ubuntu13.10中使用qq音乐网页版
  9. 小熊派学习:手册查询和ADC深入使用
  10. ReentrantLock的实现原理