目录

1.前言

2.原理讲解

3.代码实现

前言

这节的反调试是通过构造代码来干扰正常的分析。反调试参考CrypMic勒索病毒

原理讲解

在逆向分析汇编代码时,一般都是通过汇编指令call或jmp跳到一个函数内进行执行,这次的反调试就是利用特殊构造代码实现指定跳转

在汇编中call address可以分解为两条指令:push eip+6,jmp address。这里的push eip+6是保存call指令的下一个指令地址作为返回地址,一般eip+6就是指向call指令的下一条指令,jmp address是跳到指定的地址里执行命令。函数执行完后通过retn返回到原来的地址中继续执行。retn可以分解为:pop eip,jmp eip。这里pop的eip就是前面保存的返回地址

上面是正常的函数调用,但是我们可以通过对汇编代码进行构造跳转到指定的地址。我们前面看到call是首先把返回地址入栈,然后jmp到指定地址执行,执行到汇编指令retn的时候就把返回地址pop出来,然后跳转回去执行。如果我们自己构造push address 再jmp到一个地址,那么通过retn返回的时候就可以返回到前面push进去的指定address了。如图中的执行流程。

代码实现

代码实现处借助了API函数getchar进行中间跳板,然后跳转到指定函数中执行代码,跳转到指定的函数后需要自己结束程序,否则会由于没有指定返回地址而导致程序崩溃

 #include<Windows.h>
#include<stdio.h> /*
注意事项:使用这种方式不会跳回来原来的函数,不过可以定向跳到其他函数去实现功能
*/
void test();
void test2(); int main()
{
__asm
{
push test
jmp getchar
}
printf("原来的函数地址!!!!\n");
return ;
} void test()
{
printf("test!!!\n");
test2();
exit();
} void test2()
{
printf("test2!!!!\n");
}

结果如图,跳转到push进去的地址处打印字符

利用IDA的反汇编结果,可以看到F5大法已经失效了,如果要进行分析,只能通过汇编进行分析

反调试——jmp到那个地址的更多相关文章

  1. 强大反调试cm的奇葩破解

    系统 : Windows xp 程序 : Crackme-xp 程序下载地址 :http://pan.baidu.com/s/1slUwmVr 要求 : 编写注册机 使用工具 : OD & I ...

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

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

  3. Windows 下常见的反调试方法

    稍稍总结一下在Crack或Rervese中比较常见的一些反调试方法,实现起来也比较简单,之后有写的Demo源码参考,没有太大的难度. ①最简单也是最基础的,Windows提供的API接口:IsDebu ...

  4. Win7 x86内核调试与TP反调试的研究

    参考  这两天对某P双机调试的学习及成果 ,非常好的一篇分析贴. 本文在Win7 x86下的分析,在虚拟机中以/DEBUG模式启动TP游戏,系统会自动重启. 0x01 内核调试全局变量  根据软件调试 ...

  5. 学习:反调试之IsDebuggerPresent

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

  6. 学习:逆向PUSH越界/INT 68/反调试导致的程序

    自己根据shark恒老师的分析,总结一下: 一般反调试自动关闭程序利用的函数有: 1.CreateToolhelp32Snapshot 2.FindWindow 3.ExitProcess 4.Pos ...

  7. Windows反调试技术(下)

    OD的DBGHELP模块 检测DBGHELP模块,此模块是用来加载调试符号的,所以一般加载此模块的进程的进程就是调试器.绕过方法也很简单,将DBGHELP.DLL改名. #include <Wi ...

  8. Windows反调试技术(上)

    写在前面 在逆向工程中为了防止破解者调试软件,通常都会在软件中采用一些反调试技术来防破解.下面就是一些在逆向工程中常见的反调试技巧与示例. BeingDebuged 利用调试器加载程序时调试器会通过C ...

  9. 使用KRPano资源分析工具强力加密KRPano项目(XML防破解,切片图保护,JS反调试)

    软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278936(软件免费版本在群内提供) 最新博客地址:blog.turenlong.com 限时下载地址:htt ...

随机推荐

  1. 切换npm源地址

    全局安装nrm (npm源管理工具) npm install -g nrm 查看所有的源地址   * 代表当前的源地址 nrm ls * npm ----- https://registry.npmj ...

  2. C#创建控制台项目引用Topshelf的方式,部署windows服务。

    上一篇是直接创建windows service服务来处理需求.调试可能会麻烦一点.把里面的逻辑写好了.然后受大神指点,用Topshelf会更好一些. 来公司面试的时候问我,为什么要用stringbui ...

  3. Java 多线程 - Java对象头, Monitor

    详见: http://www.cnblogs.com/pureEve/p/6421273.html

  4. DotNet 资源大全(转)

      awesome-dotnet 是由 quozd 发起和维护.内容包括:编译器.压缩.应用框架.应用模板.加密.数据库.反编译.IDE.日志.风格指南等. https://github.com/jo ...

  5. 关于npm镜像,发布,内网搭建等

    npm config set registry http://registry.npmjs.org npm config set registry https://registry.npm.taoba ...

  6. Vue.js学习笔记(介绍)

    Vue语法也可以进行APP开发,需要借助weex Vue.js是一套构建用户界面的框架,只关注视图层,便于与第三方库或既有项目整合. 在Vue中的核心概念:让用户不能操作Dom元素(减少不必要的dom ...

  7. Redis在Linux中安装使用

    一.安装$ wget http://download.redis.io/releases/redis-x.x.x.tar.gz $ tar xzf redis-x.x.x.tar.gz $ cd re ...

  8. CSRF & CORS 的区别

    转发 CSRF & CORS 的区别 下面转的两篇文章分别说明了以下两个概念和一些解决方法: 1. CSRF - Cross-Site Request Forgery - 跨站请求伪造 2. ...

  9. oop编程思想简单理解

    四大基本特性: 抽象:提取现实世界中某事物的关键特性,为该事物构建模型的过程.对同一事物在不同的需求下,需要提取的特性可能不一样.得到的抽象模型中一般包含:属性(数据)和操作(行为).这个抽象模型我们 ...

  10. .net基础学java系列(三)徘徊反思

    .net基础学java系列(三)徘徊反思 上一篇文章:.net基础学java系列(二)IDE 之 插件 这两天晚上看完了IDEA的教学视频:https://edu.51cto.com/course/1 ...