8.6 STARTUPINFO

startupinfo · 浏览次数 : 7

小编点评

## StartupInfo 结构体介绍 StartupInfo 结构体是一个用于指定新进程的配置结构体,包含以下重要成员: * **dwFlags**:控制是否允许调试器附加到该进程。默认值为 STARTF_NORMAL,表示不允许调试器附加。如果设置为 STARTF_DEBUGONLYTHISPROCESS,则调试器将直接失败并退出。 **其他成员:** * **cbReserved**:保留值,用于 future use。 * **lpDesktop**:指向当前工作区的桌面指针。 * **lIcon**:指向应用程序的图标指针。 * **szIcon**:应用程序图标的宽度。 * **dwState**:进程状态。 * **wCreationTime**:进程创建时间的毫秒数。 * **dwVirtualMemorySize**:虚拟内存大小。 ## 反调试技术实现方法 可以通过设置 dwFlags 参数来实现反调试技术,具体取决于您的需求: * **设置 dwFlags 为 STARTF_DEBUGONLYTHISPROCESS**:只有在通过调试器启动程序时才允许调试器附加到该进程。 * **通过判断 dwFlags 参数的值来控制调试器的启动方式**:例如,如果 dwFlags 为 0,则表示不允许调试器启动程序,如果 dwFlags 为 STARTF_DEBUGONLYTHISPROCESS,则表示只允许在启用的调试器中启动程序。 ## 示例代码 ```c #include <Windows.h>#include <stdio.h> BOOL IsDebug() { STARTUPINFO si = { 0 }; GetStartupInfo(&si); return si.dwFlags != 1; } int main(int argc, char * argv[]){ if (IsDebug()) { printf("\[-] 正在被调试 \\"); } system("pause"); return 0; } ``` **运行该程序,并在启动时使用调试器启动它。** 在程序运行过程中,如果 dwFlags 值为 0,则表示调试器无法附加到该进程,程序将不会启动。如果 dwFlags 值为 STARTF_DEBUGONLYTHISPROCESS,则调试器将无法启动程序,但程序不会退出。

正文

STARTUPINFO 结构体,可以用来指定新进程的主窗口外观风格、背景颜色、标题等信息,也可以用来实现反调试技术。通常情况下,我们可以将STARTUPINFO结构体中的dwFlags成员设置为STARTF_DEBUGONLYTHISPROCESS,以防止调试器附加到当前进程。设置了STARTF_DEBUGONLYTHISPROCESS后,如果尝试通过调试器附加到该进程,则调试器将直接失败并退出。

程序启动时默认会通过explorer资源管理器,调用CreateProcess()函数创建的时候会把STARTUPINFO结构体中的值设置为0,但如果通过调试器启动程序时该值并不会发生变化,我们可以通过判断结构体中的dwFlags参数来实现反调试。

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

BOOL IsDebug()
{
    STARTUPINFO si = { 0 };
    GetStartupInfo(&si);

    if (si.dwFlags != 1)
    {
        return TRUE;
    }
    return FALSE;
}

int main(int argc, char * argv[])
{
    if (IsDebug())
    {
        printf("[-] 正在被调试 \n");
    }

    system("pause");
    return 0;
}

与8.6 STARTUPINFO相似的内容:

8.6 STARTUPINFO

STARTUPINFO 结构体,可以用来指定新进程的主窗口外观风格、背景颜色、标题等信息,也可以用来实现反调试技术。通常情况下,我们可以将`STARTUPINFO`结构体中的`dwFlags`成员设置为`STARTF_DEBUGONLYTHISPROCESS`,以防止调试器附加到当前进程。设置了`STARTF_DEBUGONLYTHISPROCESS`后,如果尝试通过调试器附加到该进程,则调试器将

阿里云 龙蜥8.6系统镜像解决中文问号的方法

阿里云 龙蜥8.6系统镜像解决中文问号的方法 背景 计划测试环境上云 我这边作为先头不对开始搞 但是发现中文字体的显示存在问题,心中一片草泥马奔腾 搞国产OS, 连语言都不给我弄好. 问题现象 产品启动出现问题 [1]??????? [2]??????????????????????????????

Sentinel系列之SlotChain、NodeSelectorSlot、ClusterBuilderSlot分析

本文基于Sentinel 1.8.6版本分析 1. SlotChain 我们从入口com.alibaba.csp.sentinel.SphU#entry(java.lang.String) 开始分析。 一路走读下来,会进入到这个方法com.alibaba.csp.sentinel.CtSph#loo

Chrome116驱动下载路径 解决版本不匹配问题

# Chrome116驱动下载路径 解决版本不匹配问题 > 更新于 2023-08-23 后续可能会有同步(镜像),就不会引发该问题 > 本文基于python3.9 + selenium4.3+webdriver-manager 3.8.6 > 要看解决可以直接看最后的总结 # 背景 执行selen

OceanBase的学习与使用

OceanBase的学习与使用 简介 1. OceanBase数据库 注意这一块下载的其实是rpm包. 一般是通过下面的OAT或者是OCP工具进行安装. 有x86还有ARM两种架构. 虽然是el7结尾的, 但是发现实际上是可以使用与阿里龙蜥8.6系统的. 2. OCP OceanBase Cloud

.NET 8 Preview 6发布,支持新的了Blazor呈现方案 和 VS Code .NET MAUI 扩展

2023年7月11日 .NET 8 Preview 6,.NET 团队在官方博客发布了系列文章:Announcing .NET 8 Preview 6[1]ASP.NET Core updates in .NET 8 Preview 6[2]Announcing .NET MAUI in .NET

HMS Core 6.8.0版本发布公告

分析服务 ◆ 游戏行业新增“区服分析”埋点模板及分析报告,支持开发者分服务器查看用户付费、留存等指标,可进一步评估不同服务器的玩家质量; ◆ 新增营销活动报告,可查看广告任务带来的曝光、点击相关信息,让营销推广活动的前端效果一目了然; ◆ 新增Web归因及会话级归因,以及带来用户流量后的行为分析,满

Docker Compose V2 安装 ClickHouse v20.6.8.5 经验分享

前言 ClickHouse 是一款开源的分布式列式数据库管理系统,专门设计用于高性能的大数据分析和查询。 目前项目中用到的一个场景是将mongo的数据同步到clickhouse,使用clickhouse做报表,后续也将分享同步和使用方案 使用 Docker Compose 部署单机版,小项目和自己测

视频实时自然美颜, 无惧素颜上镜

华为HMS Core 视频编辑服务依托自身AI技术的核心优势,在最新版本HMS Core 6.8.0中上线了全新的视频美颜功能,能对指定图片或视频中的人脸实现磨皮、美白、大眼、瘦脸的美颜效果,适用于直播、相机、视频剪辑、图片处理等场景中,打造独特自然的美颜效果。 HMS Core视频美颜功能在技术上

[转帖]ElasticSearch Stack 各个版本收费情况

https://blog.csdn.net/vkingnew/article/details/91549698#commentBox 注释:绿色表示支持。 从 Elastic Stack 6.8 和 7.1 版本开始,Elasticsearch 的核心安全功能(TLS 加密、原生和基于文件的身份验证