自己根据shark恒老师的分析,总结一下:

一般反调试自动关闭程序利用的函数有:

1、CreateToolhelp32Snapshot

2、FindWindow

3、ExitProcess

4、PostQuitMessage

5、INT 68,这个是汇编指令,主要是让OD异常


简化逆向过程:

1、载入OD发现,直接是POPAD,那么把OD给关了,让调试器来进行捕获异常,F9发现异常如下

2、发现两个return,然后一个jnz跳转,上面还有个popad,pushad和popad是配对,看了下当前的堆栈区域为如下,那么此时如果进行push的话肯定是超过了0012FFFF,越界了

内存映射, 条目 3
地址=0012C000
大小=00004000 (16384.)
属主= 00030000
区段=
包含=堆栈 于 主线程
类型=Priv 00021104
访问=RW 保护
初始访问=RW

但是现在的堆栈窗口的地址为如下

3、但是上面还有个popad,两个popad,那么我们让刚载入窗口的地址为pushad,来达到平衡不变,F9成功的运行到如下

4、通过GetProcAddress,来进行可疑函数的下断,然后进行F9运行

5、然后执行到返回,继续F8走出当前CALL,发现来到如下,进行进程名的判断,那么直接将跳转都改为JMP 无条件



6、继续F9,发现又断下来了,来到了PostQuitMessage,执行到返回走出当前CALL,修改当前跳转为JMP,这里可能还是会关闭,因为我们来到这里的时候,已经发送过了PostQuitMessage,所以我们需要重新来一遍,再前面就直接下断点,来到跳转的时候再设置JMP



7、继续F9,发现INT 68,会造成访问违规,我们直接NOP掉,成功运行

学习:逆向PUSH越界/INT 68/反调试导致的程序的更多相关文章

  1. 华为手机内核代码的编译及刷入教程【通过魔改华为P9 Android Kernel 对抗反调试机制】

    0x00  写在前面 攻防对立.程序调试与反调试之间的对抗是一个永恒的主题.在安卓逆向工程实践中,通过修改和编译安卓内核源码来对抗反调试是一种常见的方法.但网上关于此类的资料比较少,且都是基于AOSP ...

  2. 修改Android手机内核,绕过反调试

    本文博客链接:http://blog.csdn.net/qq1084283172/article/details/57086486 0x1.手机设备环境 Model number: Nexus 5 O ...

  3. 基于TLS的反调试技术

    TLS(Thread Local Storage 线程局部存储) 一个进程中的每个线程在访问同一个线程局部存储时,访问到的都是独立的绑定于该线程的数据块.在PEB(进程环境块)中TLS存储槽共64个( ...

  4. 聊一聊对一个 C# 商业程序的反反调试

    一:背景 1.讲故事 前段时间有位朋友在微信上找到我,说他对一个商业的 C# 程序用 WinDbg 附加不上去,每次附加之后那个 C# 程序就自动退出了,问一下到底是怎么回事?是不是哪里搞错了,有经验 ...

  5. Anroid逆向学习从编写so到静动态调试分析arm的一次总结

    Anroid逆向学习从编写so到静动态调试分析arm的一次总结 一.前言 最近跟着教我兄弟学逆向这篇教程学习Android逆向,在第七课后作业反复折腾了好几天,正好在折腾的时候对前面的学习总结一波,动 ...

  6. WinDbg调试流程的学习及对TP反调试的探索

    基础知识推荐阅读<软件调试>的第十八章 内核调试引擎 我在里直接总结一下内核调试引擎的几个关键标志位,也是TP进行反调试检测的关键位. KdPitchDebugger : Boolean ...

  7. 学习:反调试之IsDebuggerPresent

    前言:一个反调试IsDebuggerPresent的CreackMe IsDebuggerPresent函数的了解: IsDebuggerPresent 作用 确定调用进程是否由用户模式的调试器调试. ...

  8. 学习:反调试之ZwQueryInformationProcess

    SetUnhandledExceptionFilter触发条件:1.当程序有异常,且没相应的处理 2.没有人进行反调试,满足这两个条件的时候,就会其中传输的参数(实则就是一个异常处理函数) 来进行处理 ...

  9. 反调试——jmp到那个地址

    目录 1.前言 2.原理讲解 3.代码实现 前言 这节的反调试是通过构造代码来干扰正常的分析.反调试参考CrypMic勒索病毒 原理讲解 在逆向分析汇编代码时,一般都是通过汇编指令call或jmp跳到 ...

随机推荐

  1. MODBUS协议入门(转载)

    http://blog.sina.com.cn/s/blog_65ba9a5e0101df1g.html

  2. [LeetCode] 11. Container With Most Water 装最多水的容器

    Given n non-negative integers a1, a2, ..., an , where each represents a point at coordinate (i, ai). ...

  3. 代码问题【TADT//CVPR2019】

    paper:Li X, Ma C, Wu B, et al. Target-Aware Deep Tracking[C]. //CVPR2019 调用adam.m时候报错 结构体内容引用自非结构体数组 ...

  4. guava(四)区间Ranges

    一.构建区间 (a..b) open(C, C) [a..b] closed(C, C) [a..b) closedOpen(C, C) (a..b] openClosed(C, C) (a..+∞) ...

  5. 原生js实现append()方法

    一.在使用jquery时,append() 方法在被选元素的结尾(仍然在内部)插入指定内容 使用方法:$(selector).append(content),content为必需的.规定要插入的内容( ...

  6. 大话设计模式Python实现-状态模式

    状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 下面是一个状态模式的demo: #!/usr/bin/env python # -*- ...

  7. H3C 12508 收集诊断信息

        案例:H3C 12508单板卡出现remove状态,需要配合研发收集诊断信息. (此文档只展示研发要求的诊断信息.) 总体:12500交换机返回三种文件----故障时诊断信息,主备单板的日志文 ...

  8. Linux安装部署jdk+tomcat+mysql

    Linux安装部署测试环境 1. JDK安装下载 安装 yum search jdk 找到合适的jdk版本,以下图中的版本为例 yum install java-1.8.0-openjdk.x86_6 ...

  9. Kubernetes SatefulSet(有状态应用部署)

    Kubernetes SatefulSet(有状态应用部署) • 部署有状态应用• 解决Pod独立生命周期,保持Pod启动顺序和唯一性1. 稳定,唯一的网络标识符,持久存储2. 有序,优雅的部署和扩展 ...

  10. SpringBoot与Swagger整合

    1 SpringBoot与Swagger整合https://blog.csdn.net/jamieblue1/article/details/99847744 2 Swagger详解(SpringBo ...