PE感染逆向之修复

从熊猫烧香病毒逆向分析到专杀工具编写实战指南 恶意软件分析是网络安全领域的核心技术,其核心在于通过逆向工程理解恶意代码的运作原理与行为模式。从概念上讲,逆向分析通常分为动态行为监控与静态代码剖析两大方向,前者使用如Process Monitor等工具实时监控文件、注册表和网络活动,后者则依赖IDA Pro等反汇编工具深入解析二进制逻辑。这项技术的核心价值在于能够精准定位病毒的感染机制、持久化手段与传播途径,从而为威胁检测、应急响应和专杀工具开发提供直接依据。在应用场景上,无论是分析历史经典病毒样本以掌握基础方法论,还是应对新型未知威胁,逆向分析都是安全 阅读详情
作 者: achillis

这篇文章是在Servex.exe专杀工具写完之后的一些小小感想,关于PE感染和修复,
  自某日不小心中了Serverx.exe病毒,电脑中大部分EXE文件被感染,系统盘system32目录下的病毒文件Serverx.exe总也杀不掉,因为即使删掉了,每次运行了被感染的程序之后还会再次生成。(关于此毒的详细资料,有兴趣的直接在百度搜索"Serverx.exe"或"愤怒天使"即可)在网上求助无果,遂自己动手,研究了一下这个病毒的感染方式,最终找到了恢复被感染文件的方法,下面将此过程分享给大家。

遇到这种感染型的病毒,恢复时需要解决几个问题。
第一个问题,感染后的文件能否恢复?

那么我们从被感染后的EXE运行情况来看看。以调用Winrar解压缩为例,可以正常实现解压过程。但在解压后就应退出的Winrar仍在运行。如果用Process Explorer观察进程树的话,会发现是Winrar本身又重新运行了一个Winrar进程来完成解压缩功能,而解压完成后,第一个运行的Winrar仍在继续运行,用FileMon监视的话会发现它有大量的文件访问操作,从访问的目录顺序和规律来看是在遍历并寻找EXE进行感染。而这两个Winrar的路径是一样的,也就是说实现感染功能的和实现解压功能的是同一个程序,解压功能仍然是被感染后的Winrar完成的,这说明一个问题:感染后的文件功能没有被破坏!这非常重要,也是因为程序的功能没有被破坏才有下面的恢复过程。

第二个问题,此病毒是何种感染方式?
典型的感染方式有“夹心饼”式的捆绑感染,替换资源或添加资源式的感染,准确说这些不算是“正宗”的PE感染。其它典型的方式有加新区段,写入shellcode(这里把病毒自己注入的代码也称为shellcode),然后跳回原入口。还有一些高级的感染方式,不一一列举。
为了分析这个病毒的感染方式,我将感染前后的Winrar.exe进行对比,首先会发现文件大小要增加,再用PEID(或其它同类工具)查看一下相关数据,首先发现入口所在区段不一样了,由.text段变成了最后的.rsrc段,入口处代码也不一样了。既然感染跟区段有关,那么就来看一下感染前后区段数据的变化:
感染前: 
名称:  区段_感染前.jpg
查看次数: 265
文件大小:  28.0 KB
感染后: 
名称:  区段_感染后.jpg
查看次数: 263
文件大小:  28.0 KB
可以看到,区段数并没有增加,仍为7个,但是最后一个区段的虚拟大小(VirtualSize)和原始大小(RawSize)都有所增加,且段属性标记也被修改了。这样我们对此病毒的感染方式有所了解了,就是增加最后一个段的大小,写入shellcode,并修改段属性为可执行,并不是某些人分析的增加新区段方式。具体地把一些数据列出来并进行计算(所有数据都是Winrar.exe的):
感染前文件大小:929792 Bytes   感染后:974742 Bytes  增加:44950=0xAF96
感染前最后一个节的数据:
VirtualSize:0x00032000   RawSize:0x00031200   Flags:0x40000040
感染后最后一个节的数据:
VirtualSize:0x0003C196   RawSize:0x0003C196   Flags:0xE0000040
增加的大小:VirtualSize:0x0000A196  RawSize:0x0000AF96
经过计算,最后一个节的RawSize增加的大小刚好等于文件增加的大小,这个用WinHex打开感染前后的文件比较一下就可以证实,病毒确实是在原始文件末的地方开始写入shellcode的。对PE知识的了解使我们知道节表中的RawSize对应于这个节在文件中实际的大小,我们更证实了之前的想法。可知病毒的感染方法是这样的:根据shell
【网络安全】Xred蠕虫感染机制剖析与Delphi修复工具实战 本文深入剖析了Xred蠕虫病毒的感染机制,包括其对EXE文件和XLSX文件的隐蔽感染方式,以及利用COM组件和Delphi技术实现的恶意行为。文章还提供了基于Delphi开发的修复工具实战指南,帮助用户有效清除病毒并恢复被感染文件,为网络安全防护提供了实用解决方案。 阅读详情

相关推荐

从Delphi到COM组件:解析Xred蠕虫的跨时代技术栈

本文深入解析了Xred蠕虫如何利用Delphi和COM组件技术实现跨时代传播,揭示了其在现代系统中的持续威胁。通过分析Delphi的编译效率和COM组件的隐蔽性,探讨了Xred蠕虫的技术优势及修复策略,为网络安全领域提供了重要参考。

weixin_29325515的博客 447

熊猫烧香病毒逆向分析:3种感染路径与IDA/OD实战调试(附感染标志)

本文深入剖析了熊猫烧香病毒的逆向工程实战,详细解析了其三种感染路径的技术实现细节。通过IDA静态分析与OllyDbg动态调试,揭示了病毒的感染机制与对抗技术,包括文件感染标记、反调试技术和关键API动态解析机制。文章还提供了病毒清除与修复技术的实用指南,帮助安全研究人员深入理解这一经典病毒的工作原理。

weixin_29315569的博客 279

Windows PE病毒实战:从恶意代码感染到PE文件格式解析(含常见考题解析)

本文深入解析Windows PE病毒从恶意代码感染到PE文件格式的实战技术,涵盖PE文件结构基础、常见感染手法及防御清除策略。通过详细代码示例和工具推荐,帮助安全研究人员掌握恶意代码分析的核心技能,特别适合应对网络安全考试中的PE病毒相关考题。

weixin_29234423的博客 142

PE工具开发实战:非正向与安全解析

本文介绍了基于PE文件格式开发的多种实用工具,涵盖信息查看、加壳脱壳、病毒查杀、资源提取、文件修复和进程注入六大领域。核心实现均通过解析PE结构体(如DOS头、NT头、节表等)来完成,包括内存映射、特征检测、资源遍历等关键技术。使用C/C++直接操作PE结构体可高效实现功能,开发者需注意32/64位兼容性问题。这些工具在安全防护、逆向分析和程序调试中具有重要应用价值,掌握PE结构解析技术即可扩展更多实用功能。

m0_60781580的博客 1158

【网络安全】Xred蠕虫的Delphi实现与COM组件修复技术解析

本文深入解析了Xred蠕虫病毒的Delphi实现与COM组件修复技术,详细介绍了其感染机制、系统兼容性处理及文档感染原理。通过开发图形化修复工具,提供了EXE和XLSX文件的两种修复方案,并分享了防御建议与最佳实践,帮助提升网络安全防护能力。

weixin_29219189的博客 537

severvx专杀 愤怒天使专杀

severvx专杀severvx专杀severvx专severvx专杀杀

Serverx专杀工具V1.2

Serverx专杀工具V1.2Serverx专杀工具V1.2Serverx专杀工具V1.2

TMS.FlexCel.VCL.v.6.3.0.0.XE-XE8,D10.1-D10.2

TMS.FlexCel.VCL

最新EXE感染代码。PE头感染!

仅限于技术交流。请勿做非法用图!!感染代码,PE感染

PE文件的感染C++源代码

PE文件的感染C++源代码 PE文件规定了可执行文件的格式,凡是符合此格式的文件都能在windows系统上运行。PE文件的格式暂且不谈,说一些感染PE文件的几种途径。 导入表感染。这个涉及比较复杂的操作,首先,要自行写一个dll文件,提供程序中对原dll引用的所有函数,然后增加一个节区,修改ImportAddress中的地址,使其指向新增加的节,这样,程序加载后,只要调用相关函数,就会先执行自己写的dll,执行完后,再跳转到原代码人口处执行。 导入地址感染。这个相对简单些,在PE文件头部分,IMAGE_OPTION_HEADER中有个ImportAddress目录,这个目录中只是一些jmp指令,我们可以修改jmp指令跳转的地址,使其指向在PE文件中我们新增加的代码。这需要在原PE文件中增加代码,PE文件在硬盘上默认200H字节对齐,一般存有空隙,如果代码量小,不用增加新节就可以插入代码。 修改入口函数地址。这个是最省事的办法,在原PE文件中新增加一个节,计算新节的RVA,然后修改入口代码,使其指向新增加的节。当然,如果.text节空隙足够大的话,不用添加新节也可以。 修改快捷方式文件。如果PE文件存在快捷方式,可以先行感染快捷方式,使快捷方式指向自己写的程序,自写程序启动后,再执行真正的PE文件。这种做法比较猥琐,而且不可靠。

基于Web的智能家居(源码+开题)

实践上,智能家居系统的普及和应用将极大改善人们的居住体验,提高生活质量,同时也有助于促进智能家居产业链的发展和完善,为社会经济发展注入新的活力。此外,本研究还将对基于Web的智能家居系统的用户体验进行深入研究,通过用户调研和数据分析,不断优化系统功能和界面设计,提升用户的使用体验和满意度。针对以上问题,本研究将综合运用物联网、云计算、大数据等新一代信息技术,通过系统架构设计、功能模块开发、安全性保障、用户体验优化等多个方面的研究工作,力求为基于Web的智能家居系统的研发和应用提供全面而有效的解决方案。

sryue06的博客 1904

CMake安装grpc生成gRPCTargets.cmake文件

以下是安装语句: cd grpc_folder git submodule update --init cmake .. make -j 4 sudo make install 然而编写依赖gRPC的程序,发现无法调用gRPC的CMake文件,错误提示如下所示: include could not find load file: /usr/local/lib/cmake/g...

2329

华大HC32F460从零到200MHz:手把手教你配置时钟系统(附避坑指南)

本文详细解析了华大HC32F460 MCU的时钟系统配置,从启动过程、时钟树分析到实战配置200MHz系统时钟。文章手把手指导开发者如何正确配置外部晶振、MPLL锁相环及总线分频,并提供了硬件检查、代码解读及常见问题排查的避坑指南,帮助用户从零构建稳定可靠的高性能时钟环境。

net55的博客 296

WIN10环境下STK11.5(含Analyzer, EOIR, Scheduler插件)的安装与破解全攻略

本文提供了一份详细的WIN10环境下STK11.5软件及其核心插件(Analyzer, EOIR, Scheduler)的安装与破解全攻略。内容涵盖从安装包准备、系统环境检查,到基础版安装、插件部署、破解文件替换及许可证配置的完整步骤,并附有常见问题排错指南,旨在帮助用户免费搭建功能齐全的卫星仿真分析环境。

solidity8miner的博客 756

ESP32 IDF开发 应用篇⑲ 空中升级OTA

在实际产品开发过程中,在线升级可以远程解决产品软件开发引入的问题,更好地满足用户需求。OTA(空中)更新是使用 Wi-Fi 连接而不是串行端口将固件加载到 ESP 模块的过程。(1)、ESP32 的 OTA 升级有三种方式:·Arduino IDE:主要用于软件开发阶段,实现不接线固件烧写·Web Browser:通过 Web 浏览器手动提供应用程序更新模块·HTTP Server:自动使用http服务器 - 针对产品应用在三种升级情况下,必须通过串行端口完成第一个固件上传。

lu330274924的博客 3324

【ROS学习笔记】13.ROS中的坐标管理系统

文章目录1 机器人中的坐标变换2 TF功能包TF坐标变换如何实现?TF的一个小案例3 小程序:小海龟跟随实验打开小程序查看当前的TF树坐标相对位置关系可视化1(tf_echo)坐标相对位置关系可视化2(rviz) 本节学习ROS中的坐标管理系统。 (部分图摘自:b站【古月居】古月·ROS入门21讲) 1 机器人中的坐标变换 机器人运动学的核心,描述任意两个坐标系之中任意两个向量之间的变换,可以用一个4×4的变换矩阵(Transformation Matrices)来描述它的平移和旋转变化。 变换矩阵中有包括

takedachia的博客 4338

2025美赛E题为农业留出空间(附代码+全保姆教程)Making Room for Agriculture

有机农业的核心在于减少化学投入,促进自然控制和可持续性。变量定义CCC: 作物种群III: 害虫种群PPP: 天然捕食者种群(蝙蝠、鸟类等)BBB: 生物多样性水平(以种类数量表示)SSS: 土壤健康指数(影响植物繁殖与作物生长)EEE: 农业生态系统的整体稳定性。

博客 1495

让 ABAP 复杂内表优雅“喂饱”:Complex Internal Table Filling 全面实战指南

本文为ABAP开发者系统梳理了复杂内表的填充与复制方法。重点介绍了work area的两种声明方式、APPEND操作的多形态用法及其初始值语义,以及VALUE #( )构造器的逐行与整表写法。同时讲解了CORRESPONDING的同名字段映射功能,帮助开发者在"航司与航线"等复杂业务场景中实现最佳实践。文章还涵盖内存优化、可读性建议和常见误区,提供可运行样例,适用于ABAP On-Premise和SAP BTP环境。

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

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

深度学习工具包 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');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: 软件保护壳技术专题 - 反汇编引擎的构建
下一篇: NTFS之HARDLINK攻防
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值