反调试手法之CreateProcess反调试

              

在学习Win32 创建进程的时候.我们发现了有一个进程信息结构体. STARTUPINFO. 这个结构体可以实现反调试.

具体CreateProcess可以参考上一篇博客.:  https://www.cnblogs.com/iBinary/p/9571577.html

一丶实现反调试需要的东西.

假设我们要实现反调试. 那么我们需要一个API

GetStartupInfo (STARTUPINFO)  使用此API可以在进程启动的时候获取启动信息结构体

二丶实现反调试的具体思路

  1.我们的程序中调用Getstartupinfo API来获取启动时的启动信息.

  2.判断启动信息结构体的值.是否是我们预期的.如果不是在调用 ExitProcess结束进程.

  3.如果是调试器启动我们的程序.那么启动信息结构体的信息肯定是不同了.我们可以做实验.

测试:

  如果是桌面管理器打开. 

如果是调试器打开.

三丶编码实现反调试

代码很简单.如下.

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>

int main()
{
    STARTUPINFO si;
    si.cb = sizeof(si);

    GetStartupInfo(&si);

    if (si.dwFlags != 1)
    {
        ExitProcess(0);
    }
    printf("程序没有被反调试\r\n");
    system("pause");
    return 0;
}

测试. 没有反调试的时候打开.

调试器打开. PS: 调试器打开会退出. 并且不会输出内容. 这个属于简单的反调试.如果不知道有可能也过不了. 当然攻防对抗.看谁的基础扎实. 谁更厉害了.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏从零学习云计算

openshift/origin学习记录(0)——Ansible安装多节点openshift集群

本节内容是基于Ansible Playbook自动部署openshift集群,之后几节内容会通过一个AllInOne的集群手动添加组件,研究实现的流程。 ...

9330
来自专栏跟我一起学Docker

【番外篇】Vim-Go和Vs-Code环境搭建

如果说在Linux环境下,什么编辑器最好用,如果我说是VIM,估计会有一大部分人嗤之以鼻,怎么可能。VIM可能是他用过众多编辑器最难用的一个。在我...

3015
来自专栏魏艾斯博客www.vpsss.net

WordPress 手动优化和插件优化 MySQL 数据库的方法

1252
来自专栏做全栈攻城狮

采用React+Ant Design组件化开发前端界面(一)

注意:在webpack.config.dev.js添加的配置部分,也需要在webpack.config.prod.js中做相同的配置。否则可能导致项目发布上线后...

952
来自专栏草根专栏

使用VS Code开发asp.net core

下载地址: https://code.visualstudio.com/

2.1K12
来自专栏哈雷彗星撞地球

你知道如何为iOS工程改名吗?

我们在iOS开发中,难免会遇到项目做到一半要改名字的情况。如果项目名差的太大,工程名看起来总是不舒服的,有良心的开发者可能就会想着为工程改个贴切的名字,那么你就...

1153
来自专栏yukong的小专栏

【ssm个人博客项目实战03】左侧导航菜单功能实现

由于每一个菜单选项单击一下都会打开一个tab 所以我们可以把这个抽出来作为一个方法

1335
来自专栏互扯程序

跨域请求方案 终极版

现在是资源共享的时代,同样也是知识分享的时代,如果你觉得本文能学到知识,请把知识与别人分享。

3013
来自专栏木子昭的博客

img标签随机获取高质量图片

1821
来自专栏技术墨客

Webstorm调试Grunt脚本 原

需要注意的是:一定要在对应要调试的js中打断点才能进入调试模式。可以在Applications parameters设置要运行的任务参数。例如grunt dev...

953

扫码关注云+社区