病毒的重定位技术
病毒的重定位技术应该也算是最基本和最有用的技术之一了,其实重定位技术只要是对外壳开发比较熟悉的朋友都应该很熟悉了。重定位顾名思义重新定位地址。上篇文章中我们已经讲解到了由于我们被感染对象的不同,我们部分定义的变量被插入的地址也不同。所以这就需要我们重新定位,也就是今天的主题——重定位技术。
首先我们来看
假如我们定义一段变量
szText db 'Virus Dels Demo', 0
假设我们这个变量在我们病毒体的地址是00403201h, 那么我们插入到被感染对象后这个变量的地址是00408602h。那么我们如何能让我们的病毒体代码在运行时期来计算到被插入被感染对象后变量的地址呢?
我们思索下是否能找到一些固定的地方。有时候换位思考是很不错的,我们病毒体既然被插入的地址是不固定的,那么病毒体的一些绝对偏移它相对病毒体的偏移肯定是固定的吧。
假设一个病毒的起始位置是00400021h,那么它插入到被感染对象后的位置是00500021h, 那么我们是不是只要知道一个变量相对于我们病毒起始位置的偏移就可以求得这个变量插入后的位置了?
比如我们的szText变量相对于病毒起始位置的偏移是9h, 那么只要通过求得病毒插入到被感染对象后的病毒起始位置 + 这个变量相对病毒起始位置的偏移 = 变量在被感染对象中的位置。
是不是很好理解?
继续思索:
我们如何求病毒被插入感染对象后的起始位置,它是可变的。
我们来看一下call指令, call指令是将下一句指令的偏移压入堆栈,然后设置eip寄存器指向要跳转的地址。
看以下代码:
00401010 >/$ E8 00000000 ;call 00401015
00401015 |$ 5B ;pop ebx
就如这段代码call指令首先将下一句指令的地址00401015h压入堆栈,然后将eip寄存器指向00401015h。
病毒技术中call指令详解:
我们都知道call 调用一个内存地址的话,编译器编译的是相对于调用地址的偏移(注意:这里不是绝对偏移,相对偏移),求调用地址的公式是调用地址 - (call指令所处偏移 +5) = 相对偏移
如上面这段代码, 假设我们的代码是call 00401016的话, 那么编译器会将机器码编译为 E8 00000001 。 E8为call对应的机器码。 00000001为偏移差,不懂自己根据上面的公式算算。
我想大家看到这点应该明白我讲解call 指令的作用了吧。。 因为call是将下句指令偏移压入堆栈,然后设置eip寄存器为调用地址。所以我们只要在调用地址中取得堆栈中4字节数据则为下句指令的偏移。
这句代码执行的到00401015处通过pop ebx取得堆栈中4字节的数据(这4字节数据则为call 地址所处位置下句指令偏移地址, 也就是pop ebx指令的地址)。通过这个地址我们就可以把它参照(就相当于上面所说的把它相当于病毒的起始地址),这样我们后面任何绝对地址均采用 这个地址 + 绝对地址相对这个地址的偏移 来取得真正的地址。说起来有些绕口,不过的确是这么个意思。初学者可以多读读理解下。
这里很多不了解基础的人,写代码总是开始E8 00000000
其实你可以调用其他的地址,然后在其后写一些垃圾代码防止杀软的查杀。然后只要把下句指令偏移作为参照就行了。
看代码。
szText db 'Virus Dels Demo', 0
__Entry:
call Dels2
Dels:
int 3
int 3
Dels2:
pop ebx
lea edx, [ebx + szText - Dels] ; edx = szText
ret
代码很简单很好理解,通过调用call dels, 然后通过pop ebx获得dels的偏移,然后通过szText - Dels获得szText变量基于Dels的相对偏移,然后在+dels(ebx) = 重定位后的偏移。
如果您能看到这里,我想您已经是基本理解了。其实就是这么简单,找一个能在运行时计算出来的地址,然后+上相对它的偏移则为重定位后的地址。主要思路就是这样,至于如何发挥就是大家的事情了,您可以发挥你的创造力来变形你的重定位代码,任何技术都是基础。。
好了今天这篇文章就到这里吧。下篇文章我们再见面。
相关推荐
字符串替换—牛客网(C++实现)
一.题目描述 请你实现一个简单的字符串替换函数。原串中需要替换的占位符为"%s",请按照参数列表的顺序一一替换占位符。若参数列表的字符数大于占位符个数。则将剩下的参数字符添加到字符串的结尾。 给定一个字符串A,同时给定它的长度n及参数字符数组arg,请返回替换后的字符串。保证参数个数大于等于占位符个数。保证原串由大小写英文字母组成,同时长度小于等于500。 测试样例: “A%sC%sE”,7,[‘...
病毒重定位的基本思路和方法
熟悉Masm32的使用,熟悉病毒重定位的基本思路和方法,在 HelloWorld.exe 中添加一段代码, 该段代码满足以下几个条件:1.该段代码弹出一个对话框 (标题: 武大信安病毒重定位,内容: 姓 名+学号后四位) 2.该段代码同时包括代码和字符串数据。3. 该段代码可以插入到.text节的任意指令之间,而不需要修改该段代 码中的任何字节。
幻尔串口总线舵机控制Python SDK
幻尔串口总线舵机控制Python SDK,可以直接在PC端,不需要借助单片机对舵机进行控制。
重定位的原理&实现
重定位 病毒自身的重定位是病毒代码在得以顺利运行前应解决的最基本问题。病毒代码在运行时同样也要引用一些数据,比如API 函数的名字、杀毒软件的黑名单、系统相关的特殊数据等,由于病毒代码在宿主进程中运行时的内存地址是在编译汇编代码时无法预知的,而病毒在感染不同的宿主时其位于宿主中的准确位置同样也无法提前预知,因此病毒就要在运行时动态确定其引用数据的地址,否则,引用数据时几乎肯定会发生错误。对于普通
随机化策略——随机变量rand、约束constraint、权重dist、随机数产生示例
文章目录一、随机变量类型1.1.rand随机变量1.2.randc随机变量二、随机化约束2.1.constraint指定约束范围2.1.1.关系操作符约束(>、<、=、>=、<=)2.1.2.范围操作符约束(inside)2.1.3.权重分布约束(dist)2.1.4.条件约束(if-else; ->)三、启动随机化——randomize( )函数四、关闭或打开随机变...
3步搞定专利数据爬取:用Selenium绕过国家知识产权局反爬(附完整代码)
本文详细介绍了3种高效获取专利数据的技术方案,重点解析了使用Selenium绕过国家知识产权局反爬的实战方法,并提供了完整代码示例。文章还探讨了Requests+lxml轻量级方案和混合技术策略,帮助开发者根据需求选择最佳数据爬取方案,特别适合需要专利统计数据的开发者参考。
病毒代码重定位技术
2. 避免破坏宿主文件功能:如果病毒直接使用固定的地址,可能会覆盖宿主文件的关键代码或数据,导致宿主文件无法正常运行,从而容易被用户察觉。相对地址是基于当前指令或数据的位置进行计算的,这样当病毒在宿主文件中的位置发生变化时,相对地址的计算结果仍然能够正确指向所需的资源。4. 动态链接库劫持:某些病毒通过劫持系统的动态链接库(DLL),修改其中的函数调用地址,从而实现重定位和自身代码的执行。这些方法使得病毒能够在不同的感染环境中保持功能,增加了其隐蔽性和生存能力,同时也给病毒的检测和清除带来了更大的挑战。
解密电商大促背后的智慧:LSTM与ARIMA模型的双剑合璧
举个例子,如果某东发现某款新推出的电子产品在促销前夕搜索量突然暴涨,虽然这个产品没有过去的销售记录,但LSTM模型可以结合用户对类似产品的行为模式、实时的市场反馈,迅速捕捉到这些变化,并预测这款产品在大促期间的需求会急剧上升。想象一下,如果预测不准确,备货不足,商品很快就卖光了,大量用户可能在促销期间买不到想要的商品,这不仅让用户失望,还会影响某东的品牌形象。这种情况就像我们看一部很长的电视剧,看得越久,前面的情节可能就越来越模糊,到最后有些关键的情节细节都忘了,影响了对整个剧情的理解。
关于病毒的重定位
今天写个关于病毒的,其实我所写的东西所是想到什么写什么,或者今天收获什么就写什么。很乱。病毒一般不独立存在,而是附在宿主中,很像生物病毒。关于病毒的特性有很多资料,我这里不多说。在病毒编写的时候是独立编译,而附在宿主时候成了某个程序的“附属物”。什么叫重定位,我也不能确切的说,但是我给出个例子,就能明白了。比如病毒代码里存在变量a,b。这个变量在编译后实际上拥有固定的“编译地址”,
STC51单片机串口多字节数据接收的优化策略
本文深入探讨了STC51单片机串口多字节数据接收的优化策略。针对数据丢包、粘包等常见痛点,核心思路是采用“缓冲队列+定时器超时”模式,将实时处理转变为“先收纳,后处理”。文章详细讲解了硬件初始化、中断服务程序优化(快速入队与激活超时裁判)以及主循环的非阻塞设计,并进阶介绍了环形缓冲区实现与错误处理,旨在构建稳定可靠的串口通信系统。
基于STM32L4XX、HAL库的DP83822 以太网收发器(PHY)驱动程序设计
一、简介:DP83822是德州仪器(TI)推出的一款低功耗、高性能10/100Mbps以太网物理层收发器(PHY)。它具有以下主要特性:支持10BASE-T和100BASE-TX以太网标准低功耗设计,适合嵌入式应用MII/RMII接口,方便与微控制器连接内置自检和诊断功能支持自动协商和手动配置工业级温度范围(-40°C至+85°C)
病毒重定位
一个典型的病毒重定位方法: call _n _n: pop ebp sub ebp,offset _n 这里offset是硬编码
1.5 RAG技术栈全景图:LangChain vs LlamaIndex深度对比,选错框架后悔3年,一文帮你选对
摘要:LangChain与LlamaIndex框架深度对比 本文全面对比了RAG领域两大主流框架LangChain和LlamaIndex。LangChain是通用AI应用框架,具有模块化设计和丰富生态;LlamaIndex专为RAG优化,提供开箱即用解决方案。功能对比显示,LangChain在文档加载和Agent支持方面更强,而LlamaIndex在检索策略、向量存储和多模态处理上表现更优。代码示例展示了二者实现RAG的不同方式:LangChain需要更多配置但灵活性高,LlamaIndex则提供更简洁的A
病毒/壳中用到的代码重定位技术
当把壳加在软件上(或者病毒感染PE文件/补丁加在软件上)时,在壳代码上定义的变量和常量的地址都会无法访问,因为编译器给壳中变量A生成的地址是A,但是把壳段加在软件上时变量A的地址就不在是A了,为了继续能够寻址到壳的变量,需要对代码重新定位 下面是一个壳中用到的重定位代码: DepackerCode: pushad call CallMe CallMe: pop ebp
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
老版QQ原生表情gif动态
这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。
病毒重定位技术1
include 'win32ax.inc' use32 .code start: call $+5 ca: pop eax lea eax,[eax+sdata-ca] .end start section '.data' readable writeable sdata db "fuckyoursister!",0
汉书HE8,好用的汇编代码编写工具
汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大
病毒编程技术-2
* Windows平台和PE文件格式 Windows平台是当今最为流行的桌面系统,在服务器市场上,也占有相当的份额。其可执行文件(普通的用户程序、共享库以及NT系统的驱动文件)采用的是PE(Portable Executebale)文件格式。病毒要完成各种操作,在Windows系统上一般都是通过调用系统提供的API进行的,以保证在各种Windows版本上都能运行,因此读者应对基本
温度PID控制PLC程序
温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值
经典的重定位代码
在病毒里面经常会使用到这种技术,因为病毒的启动往往不是通过 windows 来加载,那么各个地址的重定位也就需要手工来完成,如果代码本身就具备重定位功能的话,那么手工加载病毒就会容易的多,可以轻易把病毒塞入一块任意的由 VirtualAlloc 分配的内存. 经典的代码是这样的:// call这个动作发生的时候,会把返回地址退入堆栈的顶部,此时返回地址就是delta所在位置的绝对地址
代码重定位
远程线程的代码重定位:就是修正函数、变量的地址使它们能在新的进程(线程)中正常调用.常用方法是使用偏移量,使这些地址用[偏移量+变量名]的形式来表现。用函数时,参数要用到全局变量的时候,要先lea出地址来;重定位代码//--------取偏移量方法 ---------------------------------------------------- call @vst
学习日记——(计算机病毒)PE文件病毒
一、相关知识 PE文件病毒的原理:PE文件病毒感染病毒时,将自身代码复制到目标文件中 PE文件病毒在目标文件前运行,那么,它是怎么做到的呢? 答:PE病毒感染其他文件的常见方法是: 在文件中添加一个新节,然后把病毒代码和执行后返回宿主程序的代码写入到新添加的节中; 同时修改PE文件头的入口地址,使它指向新添加的病毒代码入口; 这样做后,当程序运行时,首先运行病毒代码,运行完后再转去运行宿主代码。 PE文件病毒的感染过程: 第一种: 判断目标文件开始的两个字节是否为“MZ”; 判断PE文件的
Win32 PE病毒原理分析
by guojpeng/CVC.GB 在绝大多数病毒爱好者眼中,真正的病毒技术在Win32 PE病毒中才会得到真正的体现(令病毒极度疯狂的DOS时代已经过去)。并且要掌握病毒技术的精髓,学会Win32汇编是非常必要的。本节所涉及到的源代码全部采用Win32汇编语言编写。 Win32病毒同时也是所有病毒中数量极多,破坏性极大,技巧性最强的一类病毒。譬如FunLove、中国黑客等病毒都是属
PE病毒技术剖析
任何语言只要表达能力足够强,都可用于编写PE病毒。但现存的绝大部分PE病毒都是直接用汇编编写的,一方面是因为汇编编译后的代码短小精悍,可以充分进行人工优化,以满足隐蔽性的要求;另外一方面之所以用汇编是因为其灵活和可控,病毒要同系统底层有时甚至是硬件打交道,由于编译器的特点不尽相同,用高级语言实现某些功能甚至会更加麻烦,比如用汇编很方便地就可以直接进行自身重定位、自身代码修改以及读写IO端口等操作,
计算机病毒分析与对抗————3、PE文件型病毒
病毒如何感染PE文件?首先,判断文件是否是PE文件,接下来添加节:主要涉及到的技术如下:1、病毒感染重定位技术重定位的过程可以通过以下步骤进行:用CALL指令跳转到下一条指令,使下一条指令感染后在内存中的实际地址进栈。用POP指令取出栈顶的内容,这样就可以得到感染后下一条指令在内存中的实际地址感染后变量的地址=步骤(2)的地址-偏移地址代码如下:call test pop eax sub ea...
1522



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



