(转)反调试技术

从网页到桌面应用:HTML转EXE工具的进化与未来 本文探讨了HTML转EXE工具的演进历程与未来趋势,详细解析了从早期HTA到现代基于Chromium和Electron框架的技术飞跃。文章重点介绍了HTML App Build的关键技术架构、行业应用场景及开发实战指南,为开发者提供从网页到桌面应用转换的完整解决方案。 阅读详情

转自:http://zhidao.baidu.com/question/97839146.html

1.程序窗口句柄检测
原理:用FindWindow函数查找具有相同窗口类名和标题的窗口,如果找到就说明有OD在运行
//********************************************
//通过查找窗口类名来实现检测OllyDBG
//********************************************
function AntiLoader():Boolean;
const
OllyName='OLLYDBG';
var
Hwnd:Thandle;
begin
Hwnd:=FindWindow(OllyName,nil);
if Hwnd<>0 then
    Result:=True
else
    Result:=False;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if AntiLoader then
    MessageBox(Handle,'找到调试器!','提示',MB_OK+MB_ICONINFORMATION)
else
    MessageBox(Handle,'未找到调试器!','提示',MB_OK+MB_ICONINFORMATION)
end;

2.用线程环境块检测
原理:用ring3级下的调试器对可执行程序进行调试时,调试器会把被调试的可执行程序作为一个子线程进行跟踪.这时被调试的可执行程序的PEB结构偏移0x02处的BeingDebugged的值为1,如果可执行程序未被调试,则值为0,所以可以利用这个值来检测程序是否被ring3级下的调试器调试
//***************************************
//使用PEB结构检测OllyDBG
//***************************************
function AntiLoader():Boolean; //检测调试器;
var
YInt,NInt:Integer;
begin
asm
    mov eax,fs:[$30]
    //获取PEB偏移2h处BeingDebugged的值
    movzx eax,byte ptr[eax+$2]
    or al,al
    jz @No
    jnz @Yes
    @No:
      mov NInt,1
    @Yes:
      Mov YInt,1
end;
if YInt=1 then
    Result:=True;
if NInt=1 then
    Result:=False;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if AntiLoader then
    MessageBox(Handle,'发现调试器!','提示',MB_OK+MB_ICONINFORMATION)
else
    MessageBox(Handle,'未发现调试器!','提示',MB_OK+MB_ICONINFORMATION);
end;
3.用API函数IsDebuggerPresent检测
原理:操作系统将调试对象设置为在特殊环境中运行,而kernel32.dll中的API函数IsDebuggerPresent的功能是用于判断进程是否处于调试环境中,这样就可以利用这个API函数来查看进程是否在调试器中执行
//****************************************
//利用IsDebuggerPresent函数检测OllyDBG
//****************************************
function AntiLoader():Boolean;
var
isDebuggerPresent: function:Boolean;
Addr: THandle;
begin
Addr := LoadLibrary('kernel32.dll');
isDebuggerPresent := GetProcAddress(Addr, 'IsDebuggerPresent');
if isDebuggerPresent then
    Result:=True
else
    Result:=False;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if AntiLoader then
    MessageBox(Handle,'发现调试器!','提示',MB_OK+MB_ICONINFORMATION)
else
    MessageBox(Handle,'未发现提示器!','提示',MB_OK+MB_ICONINFORMATION);
end;
4.检查程序的父进程
原理:Windows操作系统下的GUI可执行程序的父进程都是explorer.exe(CUI可执行程序的父进程是CMD.exe,系统服务的父进程是Service.exe,在实际使用的时候需要根据自己的程序类型来选择父进程实现反跟踪),而正被调试器OD调试的程序的父进程是调试器的执行程序ollydbg.exe而不是别的.所以可以利用检查父进程是否为explorer.exe的方法来检测OD.
//***************************************************
//检查父进程来检测OllyDBG
//***************************************************
function AntiLoader():Boolean;
const
ParentName='/EXPLORER.EXE';
var
hSnap,hProcess:THandle;
szBuffer:array[0..MAX_PATH] of char;
FileName:array[0..MAX_PATH] of char;
Process32:PROCESSENTRY32;
LoopFlag:BOOL;
begin
////得到所有进程的列表快照
hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if hSnap=INVALID_HANDLE_VALUE then
begin
    Result:=False;
    Exit;
end;
Process32.dwSize:=sizeof(PROCESSENTRY32);
//查找进程
LoopFlag:=Process32First(hSnap,Process32);
if LoopFlag=False then
begin
    CloseHandle(hSnap);
    Result:=False;
    Exit;
end;
while Integer(LoopFlag)<>0 do
    begin
      if Process32.th32ProcessID=GetCurrentProcessId() then
        begin
          hProcess:=OpenProcess(PROCESS_ALL_ACCESS,FALSE,Process32.th32ParentProcessID);
          if hProcess<>0 then
            begin
              if GetModuleFileNameEx(hProcess,0,FileName,MAX_PATH)<>0 then
                begin
                  //取得系统目录
                  GetWindowsDirectory(szBuffer,MAX_PATH);
                  //合并系统目录和/EXPLORER.EXE
                  StrCat(szBuffer,ParentName);
                  //转换成大写以后比较当前调试程序的进程是否为父进程
                  if UpperCase(String(FileName))<>UpperCase(String(szBuffer)) then
                    Result:=True
                  else
                    Result:=False;
                end;
            end
          else
            Result:=False;
        end;
      LoopFlag:=Process32Next(hSnap,Process32);
    end;
CloseHandle(hSnap);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if AntiLoader then
    MessageBox(Handle,'发现调试器!','提示',MB_OK+MB_ICONINFORMATION)
else
    MessageBox(Handle,'未发现调试器!','提示',MB_OK+MB_ICONINFORMATION)
end;
5.检查STARTUPINFO结构
原理:Windows操作系统中的explorer.exe创建进程的时候会把STARTUPINFO结构中的值设为0,而非explorer.exe创建进程的时候会忽略这个结构中的值,也就是结构中的值不为0,所以可以利用这个来判断OD是否在调试程序.
/************************************************
//通过检测STARTUPINFO结构来检测OllyDbg
//************************************************
function AntiLoader():Boolean;
var
Info:STARTUPINFO;
begin
GetStartupInfo(Info);
if (Info.dwX<>0) or (Info.dwY<>0) or (Info.dwXCountChars<>0) or (Info.dwYCountChars<>0) or
     (Info.dwFillAttribute<>0) or (Info.dwXSize<>0) or (Info.dwYSize<>0) then
    Result:=True
else
    Result:=False;
end;
procedure TMainFrm.FormCreate(Sender: TObject);
begin
if AntiLoader then
    MessageBox(Handle,'发现调试器!','提示',MB_OK)
else
    MessageBox(Handle,'未发现调试器!','提示',MB_OK);

Android混合加固实战:VMP与Dex2C技术解析与逆向对抗 在移动应用安全领域,代码保护是防止逆向工程和恶意篡改的核心需求。其基本原理是通过混淆、加密或转换原始代码,增加攻击者的分析难度。从技术价值看,这不仅能保护知识产权和核心算法,还能有效抵御自动化脱壳工具。当前,单一保护方案易被破解,因此结合多种技术的混合加固方案成为高安全场景的主流选择。其中,虚拟机保护(VMP)通过自定义指令集混淆执行流,而Dex2C技术将关键代码编译为本地机器码,两者结合形成了立体防御。这种混合加固方案尤其适用于金融、支付等对安全性要求极高的应用场景,能显著提升逆向分析的时间与技能门槛。本 阅读详情

相关推荐

逆向工程实战:从CrackMe019入门软件保护与算法分析

软件逆向工程是信息安全领域的核心技术之一,它通过分析程序的二进制代码来理解其工作原理、发现潜在漏洞或绕过保护机制。其基本原理是在不运行或动态运行程序的状态下,利用反汇编、反编译和动态调试等技术,解析程序的逻辑与数据结构。这项技术的核心价值在于提升软件安全性评估能力、进行恶意代码分析以及理解闭源软件的交互协议。典型的应用场景包括CTF竞赛、软件漏洞挖掘、安全加固和遗留系统分析。本文以经典的CrackMe019练习题为载体,详细演示了如何结合静态分析与动态调试,定位关键验证函数并逆向其核心算法,最终实现密钥生成

weixin_29325515的博客 312

od被检测解决方案

2.StrongOD中选择CreateAsRestrict。改成任意,可以过GetWindow检测。1.升级dbghelp.dll。.ini中的驱动名称。

青月的成长记录吖 1178

静态反调试技术

文章目录声明静态反调试目的注意PEBhttps://blog.youkuaiyun.com/CSNN2019/article/details/113113347BeingDebugged(+0x2)破解之法:Ldr(0xc)破解之法:ProcessHeap(+0x18)Flags(0xC)&Force Flags(+0x10)破解之法:NtGlobalFlag(+0x68)破解之法调试程序代码反调试技术系列: 声明 静态反调试目的 被调试的进程用静态反调试技术来侦测自身是否处于被调试状态,若侦测到处于被调试的状

优快云_2023的博客 3936

游戏是如何检测到有OD等调试工具的(转)

 知其然,知其所以然,希望大家觉得有用,大家可以用在自己程序中查看自己的程序是否被调试..同时为了更好的了解一些游戏无法用OD调试的原因1.程序窗口句柄检测原理:用FindWindow函数查找具有相同窗口类名和标题的窗口,如果找到就说明有OD在运行//********************************************//通过查找窗口类名来实现检测OllyDBG//******

Richard的专栏 3471

游戏过检测版CE

应能各种网络游戏的修改,

CE+OD无法附加游戏进程的破解方法

那些所谓的游戏保护 真的只是为难菜鸟而已,对于大鸟基本不起作用. 游戏无法就是采用 线程 进程 SSDT 等等这些东西来限制一些如:CE OD ASM32 这些工具调试而已 比如OD要调试一个程序进程 首先做的是2步操作 1.调用系统库中打开进程的API函数 2.创建新线程来调试程序进程. 当如果 一个游戏出现无法OD附加或者调试失败的情况,那么可以先检查下 这2个方面是否存在问题. 第一:检查SSDT表中的函数是否被修改,

18. OD-反调试研究,破解反调试,编写反调试

病毒、木马、外挂等必须要有的 “安全工作” 因为你一个安全软件一旦被成功调试了,就等同于被调戏了,一切主要操作顺序都被人掌握了,只要开发出逆向的突破即可。 我们要研究他们这些安全软件如何反调试的 比如软件发现被OD打开,直接自爆。。。 开始 第一个程序 F8运行程序 找到了弹出反调试报错的call F7 程序调用了 IsDebuggerPresent 函...

墨痕诉清风的博客 7837

WRF后处理:python cartopy绘制土地利用/土地分类图//python绘制WRF下垫面类型(以北极为例)

下垫面类型对于WRF的地表过程十分重要,而在我们研究WRF的地表过程之前,需要对输入的土地利用类型进行一些绘制,以便后续的修改。LU_MODIS21函数定义了绘制的土地类型、标签与对应色标,我们使用时,直接引用LU_MODIS21()即可返回。其实很简单,只要将你拥有的土地类型数据提取出来,将原本函数中的labels和C切片,重新定义色标再绘制即可。在这里,我将以北极地区为例,绘制北极地区的WRF下垫面数据,我使用的MODIS21这类。

weixin_43750300的博客 3856

游戏是如何检测到有OD等调试工具的

 希望大家觉得有用,大家可以用在自己程序中查看自己的程序是否被调试..同时为了更好的了解一些游戏无法用OD调试的原因1.程序窗口句柄检测原理:用FindWindow函数查找具有相同窗口类名和标题的窗口,如果找到就说明有OD在运行//********************************************//通过查找窗口类名来实现检测OllyDBG//**************

1425

语音增强评价指标全解析:从MOS到eSTOI的实战指南

本文全面解析了语音增强领域的核心评价指标,包括主观评价的黄金标准MOS,以及PESQ、STOI、eSTOI等关键客观指标。文章详细阐述了各指标的原理、适用场景与实战计算方法,并提供了Python代码示例,旨在帮助开发者和研究者建立科学的评估体系,以平衡语音可懂度与音质,从而优化算法效果。

yhn456789的博客 1198

3DMax马克杯制作教程

01 在前视图创建一个【圆柱体】,设置参数,长度为32,高度为82;高度分段12、边数为16;如图所示。 02 点击鼠标右键,把圆柱体转换为可编辑多边形,如图所示。 03 在修改面板中,选择【多边形】层级,在视图中选择所示的面,使用缩放工具稍微缩小一点,如图所示。 04 点击【插入设置】,如图所示。 设置插入数量为2.5mm。 05 点击【挤出设置】,如图所示。 ...

youximoxingEDO的博客 3477

项目中常用的D3D黑屏优化讲解和源码分享,DX系列的游戏都可以用

诸多工作室在项目测试功能稳定后,为了更高效率的 榨干电脑性能 尽可能的多开会选择将画面黑屏,零渲染!!今天我们来拆解分析实现原理和方案 大部分游戏画面渲染基本用的都是DX系列 除了DX9 现在很多游戏也用到了DX11 他们版本有差异 在逆向程序员眼里区别不大。 通过OD就可以查看游戏加载 了哪些模块,很多游戏都有加载d3d9.dll或者d3d11.dll 这也说明了 他们在正向开发过程中用到了 D3D进行了渲染。所以 也就可以在这些模块 里HOOK 劫持修改他的渲染函数 在...

微尘网络安全 4087

STM32H750xx【QSPI】轮询方式读写GD25Q64E

本文详细介绍了GD25Q64E其特性、引脚定义及功能说明,重点阐述了在STM32H750平台上通过CubeMX配置QuadSPI接口的步骤,包括时钟设置、参数优化等。文章提供了完整的BSP驱动开发流程,涵盖写使能、四线模式使能、ID读取、解除保护、扇区擦除、整片擦除、页编程和数据读取等关键功能实现,并通过读写测试验证了DummyCycles参数对数据准确性的影响。

honmy18的博客 1422

详解反调试技术(转)

反调试技术,恶意代码用它识别是否被调试,或者让调试器失效。恶意代码编写者意识到分析人员经常使用调试器来观察恶意代码的操作,因此他们使用反调试技术尽可能地延长恶意代码的分析时间。为了阻止调试器的分析,当恶意代码意识到自己被调试时,它们可能改变正常的执行路径或者修改自身程序让自己崩溃,从而增加调试时间和复杂度。很多种反调试技术可以达到反调试效果。这里介绍当前常用的几种反调试技术,同时也会介绍一些逃避反...

生命不息 折腾不止 3386

Arm CCA架构:硬件级机密计算与安全隔离技术解析

机密计算(Confidential Computing)通过硬件级隔离技术构建可信执行环境(TEE),是当前云安全和数据隐私保护的核心方案。Armv9-A引入的CCA架构采用物理地址空间隔离和Granule保护表(GPT)机制,实现4KB颗粒度的内存访问控制。该技术通过标准化的RMI/RSI接口规范,为虚拟化环境和安全敏感应用提供硬件级保护,特别适用于金融交易、医疗数据处理等需要严格隔离的场景。相比传统TEE方案,Arm CCA在隔离等级和动态权限管理方面具有显著优势,其Realm World设计为机密计算

weixin_30905133的博客 565

Python-编写点云处理软件(二)点云软件ui制作之仿CC界面

至本篇结束,我们已经能够获得一个有点模子的界面了,但是具体的功能还没有编写,后续的文章将逐渐完善功能。

weixin_43894929的博客 3953

反调试技术揭秘(转)

在调试一些病毒程序的时候,可能会碰到一些反调试技术,也就是说,被调试的程序可以检测到自己是否被调试器附加了,如果探知自己正在被调试,肯定是有人试图反汇编之类的方法破解自己。为了了解如何破解反调试技术,首先我们来看看反调试技术。 一、Windows API 方法 Win32 提供了两个 API,IsDebuggerPresent 和 CheckRemoteD...

freeking101的博客 783

SAP GUI 字段遮罩功能详解及实现

默认情况下,系统使用作为掩码模式,遮罩整个字段内容长度;对于货币金额类型,掩码后会保留小数位并在整数位部分全部显示为,如****.**若需自定义掩码模式,可利用以下方式:维护“Maintain Masking Pattern”节点,在其中定义新的掩码方式(如:只露出后四位,其他位以X替代等);实现 BAdI(或类似命名,具体以系统版本为准)的方法,通过 ABAP 代码读取原始值,并依据业务逻辑生成掩码字符串返回,动态替换界面输出值;

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 707

java层反调试,原来... 反调试技术揭秘(转)

在调试一些病毒程序的时候,可能会碰到一些反调试技术,也就是说,被调试的程序可以检测到自己是否被调试器附加了,如果探知自己正在被调试,肯定是有人试图反汇编啦之类的方法破0解自己。为了了解如何破0解反调试技术,首先我们来看看反调试技术。一、Windows API方法Win32提供了两个API, IsDebuggerPresent和CheckRemoteDebuggerPresent可以用来检测当前进程...

weixin_39620197的博客 228

CUDA编程00 - 配置CUDA开发环境

第一步:在一台装有Nvidia显卡和驱动的机器上,用nvidia-smi命令查看显卡所支持cuda版本。安装时按提示下一步即可,安装完成用 nvcc -V 命令检查是否成功。第二步: 到Nvidia官网下载CUDA Toolkit并安装,第三步:编写HelloWorld。

GPU全栈博主 1359

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

原来... 反调试技术揭秘(转)

在调试一些病毒程序的时候,可能会碰到一些反调试技术,也就是说,被调试的程序可以检测到自己是否被调试器附加了,如果探知自己正在被调试,肯定是有人试图反汇编啦之类的方法破解自己。为了了解如何破解反调试技术,首先我们来看看反调试技术。 一、Windows API方法 Win32提供了两个API, IsDebuggerPresent和CheckRemoteDebuggerPresent...

weixin_30293135的博客 73

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【第44节】windows程序的反调试与反反调试

反反调试是与反调试相对的概念,是针对软件中反调试技术所采取的应对措施,目的是绕过或破解软件里的反调试机制,从而顺利地对软件进行调试和逆向分析。反调试与反反调试对比- 反调试:是软件开发者为了保护软件的代码逻辑、知识产权、防止软件被破解、篡改或逆向分析而采用的一系列技术手段。例如检测调试器的存在、修改程序运行环境以干扰调试过程等。- 反反调试:则是逆向分析人员为了突破这些反调试手段,继续对软件进行深入分析而采取的技术和方法。常见反反调试方法。

攻城狮7号的博客 5645

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: 花指令介绍
下一篇: SSDT HOOK中的几个宏
开发随笔
博客等级 码龄19年 6粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值