作者:smokingroom
日期:2005-04-12
站点:www.programmerlife.com
邮箱:smokingroom@sina.com
前言:反跟踪调试技术对于Delphi程序员来说,似乎比较陌生。因为许多的技术,直接用Delphi语言似乎比较难以完成,而对汇编来说,则比较容易完成,因此,下面的代码用到了内嵌汇编语言。如果你看不懂也不要紧,因为已经经过测试,可以直接放进你的程序里面。不过,这些技术也不是什么高深技术,对于许多Cracker而言,这只不过是小菜一碟,不过,对于水平不怎么样的Cracker,还是有一定杀伤力的~~
一、防单步调试
1、利用标志寄存器(Win9x/WinNt都适用)
CPU标志寄存器(FR)中第八位为陷阱标志(Trap),如果该位置位,则CPU运行于单步模式,因此我们可以根据该位来判断是否处于单步模式,从而实现"反"单步运行。
代码如下:
procedure Check_Trap;
asm
PUSHFD //标志寄存器内容进栈
POP EAX //获得标志寄存器内容
TEST AH,$01 //测试陷阱标志
JE @exit
PUSH 0
CALL ExitProcess //判断出CPU处于单步模式,终止进程,当然,你可以狠点,比如关机什么的,看你的了:)
@exit:
end;
2、修改中断入口地址(Win9x适用)
对中断的处理,系统提供了一个中断入口地址表,单步调试正是通过修改这个中断入口地址表中中断1的入口地址,使用指向自己的处理过程,如果我们在程序运行过程中,将中断1的入口地址破坏一下,会怎么样呢?_-_b
代码如下:
procedure Crash_INT1;
var
IDT:array[0..5] of Byte;
asm
CALL GetVersion //GetVersion結果最高位為0則為NT/2000/XP,否則為9x
TEST EAX,$80000000
JE @exit //这里若为NT则退出过程
SIDT IDT //取得中断描述表寄存器内容(Interrupt descriptor table)
MOV EAX,DWORD PTR [IDT+2] //取得中断入口地址表
ADD EAX,8 //INT 1的入口地址
CLI
MOV WORD PTR [EAX],CX //低16位,随便给它一个值吧
ROR ECX,16
MOV WORD PTR [EAX+6],CX //高16位,随便给它一个值吧
ROL ECX,16
STI
@exit:
end;
二、防API断点跟踪
使用SoftIce或TRW的Cracker们,下API断点可谓是基本功课了,比如bpx hmemcpy/bpx MessageBoxA等,实际上,调试器是在API入口处放置了中断指令$CC(即int 3),因此我们可以判断该API入口处第一字节的代码是否为$CC来判断是否设了断点。
代码如下,我们检查MessageBoxA这个API是否被设了断点。
procedure Check_Bpx;
var
DllName,ApiName:PChar;
begin
DllName:='user32.dll';
ApiName:='MessageBoxA';
asm
PUSH DllName
CALL GetModuleHandle //获取user32模块的基地址
PUSH ApiName
PUSH EAX
CALL GetProcAddress //获取MessageBoxA函数的入口地址
CMP BYTE PTR [EAX], $CC //比较入口处首字节是否为$CC(int 3)
JNE @exit
PUSH 0
CALL ExitProcess //判断出MessageBoxA函数已经被设断点,终止进程。
@exit:
end;
end;
三、检测非系统级调试器(WinNT适用)
1、利用调试API--IsDebuggerPresent
WinNT系统中,提供了一个IsDebuggerPresent函数,该函数可以判断本进程是否被别的进程调试。不过只对进程级调试器有用,对系统级调试
器是无效的,比如SoftIce及TRW等。
代码如下,首先判断kernel32中是否已经支持该函数,若支持则调用。
procedure Check_Debugger;
var
DllName:PChar;
ApiName:PChar;
begin
DllName:='kernel32.dll';
ApiName:='IsDebuggerPresent';
asm
PUSH DllName
CALL GetModuleHandle
PUSH ApiName
PUSH EAX
CALL GetProcAddress
CMP EAX,0
JZ @exit
CALL EAX
CMP EAX,1
JNE @exit
CALL ExitProcess
@exit:
end;
end;
四、检测系统级调试器
1、利用SoftIce后门,检测SoftIce(Win9x/WinNT适用)
procedure Check_SoftIce;
asm
PUSH EBP
PUSH Offset @seh_handler //因为SoftIce不存时,将引发异常,故需要使用seh来处理
PUSH FS:[0]
MOV FS:[0],ESP //安装seh
MOV EBP,$4243484B //EBP=$4243484B,AX=4 为SoftIce接口参数
MOV AX,$04
INT 3
POP FS:[0] //缷载seh
ADD ESP,4
POP EBP
CMP AL,4 //若AL<>4则SOFTICE已经加载!!!
JE @exit
CALL ExitProcess //若加载,则退出
@seh_handler:
MOV EAX,[ESP+12]
INC [EAX][TCONTEXT].Eip
MOV EAX,0
RET 16
@exit:
end;
{************************************************************************************}
备注:以上代码,在Delphi环境下调试通过,你可以直接应用到你的Delphi程序中。
我还会碌续加进其它的反跟踪调试技术。
(************************************************************************************}
相关推荐
一个反汇编 反跟踪的例子
代码很简单,但是使用Win32DASM反汇编此程序,不但无法正常显示出输入/输出函数名与字符串列表,并且会让它反汇编出错误的代码. 使用SoftICE下MessagBoxA中断,中断后,你会发现SoftICE列出的代码一样是面目全非.
Delphi反调试技术
1.程序窗口句柄检测原理:用FindWindow函数查找具有相同窗口类名和标题的窗口,如果找到就说明有OD在运行//********************************************//通过查找窗口类名来实现检测OllyDBG//********************************************function AntiLoader():Boolean;...
反追踪技术等信息123
追踪与反追踪技术、黑客技术攻防等、网络安全攻防
Delphi异常机制与SEH
为什么80%的码农都做不了架构师?>>> ...
微信小程序 | 小程序开发
事实上,目前小程序在我们生活中已经随处可见(特别是这次疫情的推动,不管是什么岗位、什么年龄阶段的人,到哪都需要打开健康码)WePY是由腾讯开源的,一款让小程序支持组件化开发的框架,通过预编译的手段让开发者可以选择自己喜欢的开发风格去开发小程序。Mpvue是一个使用Vue开发小程序的前端框架,也是 支持 微信小程序、百度智能小程序,头条小程序 和 支付宝小程序;微信小程序、支付宝小程序、淘宝小程序、抖音小程序、头条小程序、QQ小程序、美团小程序等。,其他平台的小程序往往是平台本身的一些公司或者顺手开发的。
Python 使用Pygame库实现足球游戏:创建一个球员和一个足球,并使玩家能够控制球员的移动。游戏将包括碰撞检测、简单的物理模拟,以及基本的用户输入处理
本文将介绍如何使用Python和Pygame库创建一个简单的足球游戏。我们将搭建一个基本的游戏环境,创建一个球员和一个足球,并使玩家能够控制球员的移动。游戏将包括碰撞检测、简单的物理模拟,以及基本的用户输入处理。这个简单的足球游戏展示了Pygame的一些基本功能。虽然这是一个简单的游戏,但它包含了创建游戏循环、用户输入处理、物理模拟、碰撞检测等重要概念。
软件反跟踪技术
<br />一、软件分析技术概述<br /> <br />转自:http://bbs.isbase.net/thread-50211-1-1.html<br /><br /><br />在进行软件的破解、解密以及计算机病毒分析工作中,一个首要的问题是对软件及病毒进行分析。<br />这些软件都是机器代码程序,对于它们分析必须使用静态或动态调试工具,分析跟踪其汇编代码。 <br />从软件使用说明和操作中分析软件<br />欲破解软件,首先应该先使用该软件,了解一下功能是否有限制,最好阅读一下软件的说明或手册
vue3+SuperMap iClient3D for Cesium实现可视域分析功能
基于Vue3框架及SuperMap iClient3D for Cesium提供的ViewShed3D类实现场景动态可视域分析
delphi 防止跟踪
还有一点,调试器对我们的威胁很大,我们不会让Cracker们舒舒服服地使用SoftICE、TRW或OllyDbg来调试我们的程序。除了常用的MeItICE方法外,这里我给一个笔者写的方法: {检查自己的进程的父进程是否为Explorer.exe,否则是被调试器加载了}
Vue3 - Element Plus 日期选择器 el-date-picker,设置 type=week 变成周选择器后,将选择周时修改为 “周一至周日“ 为一组范围(详细示例代码,新手小白秒会)
vue3,element-plus,DatePicker日期选择器,el-date-picker,周,type=week,周选择器,日期选择器week怎么拿到具体的时间范围,如何取week周选择器的value值,format如何设置,时间选择器按周选择时展示具体日期范围,vue3elementPlus日期选择器选择一周7天的数据格式怎么拿到,el-date-picker设置type等于week后怎么设置format属性,format和value-format怎么设置,范围选择器周,一周,选择一周7天时间
12.工具高级参数CogCalibNPointToNPointTool
CogCalibNPointToNPointTool是一种多点2D坐标校正工具,用于将图像像素坐标转换为物理世界坐标。该工具通过两组点(图像坐标点和物理坐标点)计算最佳转换关系,并将结果保存供后续使用。操作步骤包括获取图像、添加坐标点对、计算转换参数。校正结果会显示平移、缩放、旋转等参数及RMS误差值,较大的误差可能表明点位置不准确或自由度不足。该工具广泛应用于机器视觉领域,通过9点标定等案例可验证坐标转换的准确性并优化参数设置。
《Windows PE权威指南》学习之第23章 破解PE病毒(1)
目前,常见的杀毒软件对PE病毒的处理方法都很简单,大部分不能还原文件,而是直接删除,用户别无选择,只能是重新安装受感染的程序。 PE病毒比直接在内存中感染,或通过加载启动项加载的病毒还要难以清除。原因是其感染范围大,无论是系统盘还是非系统盘,无论是硬盘还是U盘,都有可能存在被感染的文件,杀之不竭,防不胜防。有些用户即使重新安装了操作系统,也常常会因为不小心点击了带病毒的PE文件而重新感染。本章主要研究PE病毒所使用的基本技术特征,以及解毒方法。
高速电路设计必看:同步开关噪声问题解析
数字电路中的同步开关噪声(SSN)问题日益突出,尤其是随着高速器件应用增多。本文分析了地弹和电压弹的产生机理,指出其与电源网络电感、输出驱动电流变化率密切相关。文章详细阐述了地弹参数特征,包括峰值电压、脉冲宽度等关键指标,并探讨了负载电容、信号压摆率等因素对地弹的影响。最后提出系统化的解决方案,涵盖芯片选型、电路设计、PCB布局和后期调试等多个环节,强调通过降低回路电感和控制电流变化率来有效抑制SSN。这些措施需要在性能、成本和复杂度之间取得平衡,为高速数字电路设计提供了重要参考。
计算机加密反跟踪技术密文技术
一)跟踪技术 大家知道DOS中有一个功能强大的动态跟踪调试软件DEBUG,它能够实现对程序的跟踪和逐条运行,其实这是利用了单步中断和断点中断的原因,而且目前的大多数跟踪调试软件都是利用了这两个中断。 单步中断(INT1)是由机器内部状态引起的一种中断,当系统标志寄存器的TF标志(单步跟踪标志)被置位时,就会自动产生一次单步中断,使得CPU能在执行一条指令后停下来,并显示各寄存器的内容。 断点中断(INT3)是一种软中断,软中断又称为自陷指令,当CPU执行到自陷指令时,就进入断点中断服务程序,由断点中断服务
MIKE水动力笔记4_制作网格
建立水动力模型前的重要一步就是制作网格,本文所讲内容就是如何在MIKE中制作网格。
AI上推荐 之 AutoInt模型(Transformer开始玩特征交互)
1. 写在前面 这段时间做优化模型的事情,正好和特征交互有关系,这个也是推荐系统里面一直探索的一个方向,从浅层模型的FM, FFM, HOFM, FwFM到深层模型的DNN, PNN, NFM, AFM, DeepFM, DCN, xDeepFM, FiBiNet等,而这次正好借着这次机会, 多看一些有关于特征交叉方向的模型paper, 把一些新的模型或者较为前沿的思想融入进来。 上一篇的FiBinet模型就是在特征交互上一个非常有意思的探索, 通过SENET动态选择有用的交互特征, 然后再用一个双线性交互
VB反跟踪技术点滴
作 者: laomms 跟其它语言相比,VB总是被人“鄙视”,其实没有好与不好的语言,正如某程序员说的:没有最好的语言,只有最好的程序员。VB也有它自己的特点,简单、方便、可视化强、利于快速开发,6M的迷你版更是让人在不释手。而且容易入门,也是通往其它语言最好的一个奠基。可惜关于VB方面的保护技术的文章很少,软件加密技术里面有涉及VB的保护内容,但是源码太少了,大部分是C和MASM源码,这...
IEM模型,地表粗糙度模拟
利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟
用时间差反跟踪
概述: 如果关掉中断,不仅仅是键盘不动了,时钟也不会走,所以可以利用时间差来反跟踪,具体方法是:先关掉中断,,再用当前时间作 key 加密,在执行一大堆指令后,偷偷地再用当前时间解密, 如果为了解密跳过关中断指令, 时间就会变化, 解密结果就会不对,然后...当然是死机啦 !汇编编程示例:code segment assume cs:code,ds:cod
深度学习工具包 DeepLearningToolbox
深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[](https://bitdeli.com/free "Bitdeli Badge")
Devexpress16.2.6破解工具
Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具
反跟踪技术
软件保护技术---反跟踪技术 1、Anti-Debug1.MeltICE子类型类型:检测SoftICE、TRW2000平台:Windows9x、Windows NT原理:用CreateFileA( )或_lopen( )函数试图获得SoftICE的驱动程序"//./SICE"(Windows9X版本)、"//./SIWDEBUG"、"//./NTICE"(Windows NT版本)
迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)
迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)
Mozilla 发布新 Firefox 用户信息反跟踪策略
开发四年只会写业务代码,分布式高并发都不会还做程序员? Mozilia 在近日发布最新的 Firefox 反跟踪策略,...
游戏AI 反跟踪算法
反跟踪算法。又叫闪避算法。这种算法与跟踪算法一样简单,事实上,你已经有这样的代码了!只要将之前跟踪算法的代码进行等式翻转,刹那间,你已经获得了闪避算法的精要! 假设你所在的位置是player_x, player_y ,而敌人所在位置是 enemy_x, enemy_y , 反跟踪代码如下: 首先X轴 ...
软件中反跟踪技术和软件调试
反跟踪技术 1、调试器分类:用户模式调试器(OD、VC++调试器、DRW2000)和内核模式调试器(SoftICE) 2、反调试技术: a、窗口方法检测:利用WIN API函数查找调试器窗口类名或者标题窗口,找到则表示监视程序运行。几种调试器类名:flyOD或者OllyDBG(检测flyODBUG)、SICE(检测softICE)、DRW(检测DRW2000) b、检查父进程:遍历操作系统所有进程...
202



被折叠的 条评论
为什么被折叠?



