新书推荐:16.4.2 病毒查杀
liebian365 2025-01-21 19:17 13 浏览 0 评论
如果我们的计算机不幸感染了恶意病毒,通常我们会使用反病毒软件拦截和查杀恶意病毒软件。反病毒软件防护病毒的方法我们在前文已经阐述过,此处不再赘述。接下来我们还是以Win32.Capric.exe的“X病毒”为例,首先使用手工的方法清理病毒,然后再写一个针对该病毒的专杀工具。
实验一百一十二:手工破解PE病毒
手工清除helloWorld_virus.exe感染的“X病毒”。由上一小节对病毒源代码的分析我们得知,如果需要彻底修复被感染的目标文件,我们需要将被病毒修改的部分逐一进行修复。
为了直观的获取helloWorld.exe被感染前后的变化,我们使用第十章中开发的工具PECompare.exe对比感染病毒后的两个目标文件,如下所示:
如果我们对照感染病毒前的目标文件,清理病毒将是一件非常容易的事情。现在让我们假设在没有目标原文件参照的情况下,如何修复。
●第一步:修复程序的入口地址。
思路:当我们运行被感染的目标文件时,会先弹出一个提示信息,然后再跳转到原程序的入口地址处执行。因此,我们可以在虚拟机安全环境下,使用OllyDbg调试器跟踪调试被感染的目标文件。
1.开始调试之前,需要先在helloWorld_virus.exe文件PE头的3BH地址处去掉病毒标记’X’,将58H改为00。
000000B0 50 45 00 00 4C 01 03 00 8C 10 A7 60 00 00 00 00 PE..L...?....
000000C0 00 00 00 00 E0 00 0F 01 0B 01 05 0C 00 02 00 00 ....?..........
000000D0 00 04 00 00 00 00 00 00 00 32 00 00 00 10 00 00 .........2......
000000E0 00 20 00 00 00 00 40 00 00 10 00 58 00 02 00 00 . ....@....X....
1. 将helloWorld_virus.exe拖入调试器,按F8单步跟踪,直到弹出感染病毒提示信息,点击“确定”后,执行下一条语句后,EAX寄存器中的值00001000H就是原程序的入口地址。再下一条语句则是加程序加载基址,如图16-28所示。
●第二步:修复最后一个节区对齐后的大。
1. 取PE头的3CH地址处FileAlignment字段(文件中的节的对齐粒度)的值为200H。
2. 观察最后一个节区节表项:
000001F0 2E 64 61 74 61 00 00 00 .data...
00000200 00 0E 00 00 00 30 00 00 00 0E 00 00 00 08 00 00 .....0..........
00000210 00 00 00 00 00 00 00 00 00 00 00 00 60 00 00 E0 ............`..?
由上可知,最后一个节区在文件内的起始地址为00000800H,观察PE文件800H地址处存储的数据:
00000800 48 65 6C 6C 6F 57 6F 72 6C 64 50 45 00 00 00 00 HelloWorldPE....
00000810 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000820 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
………
000009F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000A00 E8 00 00 00 00 5D 81 ED 05 10 40 00 0B ED 74 21 ?...].?.@..韙!
………
我们会发现A00H地址处之前存在大片的空白区域,有理由相信从A00H开始存储的是感染的恶意病毒代码。因此,我们可以将A00H地址后的所有数据全部删除。原节区文件中对齐后大小(SizeOfRawData)修改为200H。
●第三步:修复最后一个节区实际大小VirtualSize 为0DH(800H开始的14个字节)。
●第四步:修复整个映像文件的大小SizeOflmage为00004000H。 最后一个节区内存RVA地址为3000H,文件内对齐后的大小为200H(对应内存空间1000H)。因此,映像文件的大小=3000H+1000H。
至此,修复完成。执行修复后的目标文件如下图所示:
实验一百一十三:制作病毒专杀工具
让我们写一个“X病毒”的专杀工具。在开始写代码之前,让我们先分析一下专杀工具的编写思路。
●思路:
1.在PE头3BH地址处病毒特征标记'X'修改为’00’。
2.原文件最后一个节区文件对齐后大小=被感染程序入口地址-最后一个节区的RVA地址。
3.修复原文件的程序入口地址。使用调试器加载被感染文件,从代码中动态获取原程序入口地址。
在病毒文件的入口地址处调用WriteProcessMemory插入一个int3指令,并开始单步执行。当单步执行到从入口地址开始的0x61地址处(第一条PUSH指令的下一条指令地址01013061H)时,从context上下文中取出栈顶stCT.Esp的值(000DFF80H),然后调用ReadProcessMemory函数读取该地址处存储的原程序入口地址。
参见病毒程序源代码:
; 这些在感染过程中会发生变化,因此需要保存
push dword ptr [ebp+tmpep] ;入口地址
pop dword ptr [ebp+oldep]
push dword ptr [ebp+tmpib] ;装载基址
pop dword ptr [ebp+oldib]
当病毒文件加载内存后,如下图所示:
0101305BH地址处第一次出现PUSH指令,对应的硬编码为8F85H。执行第一条PUSH指令后,原程序入口地址已经入栈,可以从栈顶取出,保存到临时变量中返回。
4.最后一个节区实际大小VirtualSize = 原文件对齐后大小。
5.原文件映像文件SizeOflmage大小=最后一个节区的RVA地址+原文件对齐后大小(1000H向下取整)。
6.清理后病毒文件的大小=最后一个节区在文件内的起始地址+原文件对齐后大小。
- 上一篇:你知道电脑蓝屏代码含义吗?
- 下一篇:浅谈DLL注入
相关推荐
- 4万多吨豪华游轮遇险 竟是因为这个原因……
-
(观察者网讯)4.7万吨豪华游轮搁浅,竟是因为油量太低?据观察者网此前报道,挪威游轮“维京天空”号上周六(23日)在挪威近海发生引擎故障搁浅。船上载有1300多人,其中28人受伤住院。经过数天的调...
- “菜鸟黑客”必用兵器之“渗透测试篇二”
-
"菜鸟黑客"必用兵器之"渗透测试篇二"上篇文章主要针对伙伴们对"渗透测试"应该如何学习?"渗透测试"的基本流程?本篇文章继续上次的分享,接着介绍一下黑客们常用的渗透测试工具有哪些?以及用实验环境让大家...
- 科幻春晚丨《震动羽翼说“Hello”》两万年星间飞行,探测器对地球的最终告白
-
作者|藤井太洋译者|祝力新【编者按】2021年科幻春晚的最后一篇小说,来自大家喜爱的日本科幻作家藤井太洋。小说将视角放在一颗太空探测器上,延续了他一贯的浪漫风格。...
- 麦子陪你做作业(二):KEGG通路数据库的正确打开姿势
-
作者:麦子KEGG是通路数据库中最庞大的,涵盖基因组网络信息,主要注释基因的功能和调控关系。当我们选到了合适的候选分子,单变量研究也已做完,接着研究机制的时便可使用到它。你需要了解你的分子目前已有哪些...
- 知存科技王绍迪:突破存储墙瓶颈,详解存算一体架构优势
-
智东西(公众号:zhidxcom)编辑|韦世玮智东西6月5日消息,近日,在落幕不久的GTIC2021嵌入式AI创新峰会上,知存科技CEO王绍迪博士以《存算一体AI芯片:AIoT设备的算力新选择》...
- 每日新闻播报(September 14)_每日新闻播报英文
-
AnOscarstatuestandscoveredwithplasticduringpreparationsleadinguptothe87thAcademyAward...
- 香港新巴城巴开放实时到站数据 供科技界研发使用
-
中新网3月22日电据香港《明报》报道,香港特区政府致力推动智慧城市,鼓励公私营机构开放数据,以便科技界研发使用。香港运输署21日与新巴及城巴(两巴)公司签署谅解备忘录,两巴将于2019年第3季度,开...
- 5款不容错过的APP: Red Bull Alert,Flipagram,WifiMapper
-
本周有不少非常出色的app推出,鸵鸟电台做了一个小合集。亮相本周榜单的有WifiMapper's安卓版的app,其中包含了RedBull的一款新型闹钟,还有一款可爱的怪物主题益智游戏。一起来看看我...
- Qt动画效果展示_qt显示图片
-
今天在这篇博文中,主要实践Qt动画,做一个实例来讲解Qt动画使用,其界面如下图所示(由于没有录制为gif动画图片,所以请各位下载查看效果):该程序使用应用程序单窗口,主窗口继承于QMainWindow...
- 如何从0到1设计实现一门自己的脚本语言
-
作者:dong...
- 三年级语文上册 仿写句子 需要的直接下载打印吧
-
描写秋天的好句好段1.秋天来了,山野变成了美丽的图画。苹果露出红红的脸庞,梨树挂起金黄的灯笼,高粱举起了燃烧的火把。大雁在天空一会儿写“人”字,一会儿写“一”字。2.花园里,菊花争奇斗艳,红的似火,粉...
- C++|那些一看就很简洁、优雅、经典的小代码段
-
目录0等概率随机洗牌:1大小写转换2字符串复制...
- 二年级上册语文必考句子仿写,家长打印,孩子照着练
-
二年级上册语文必考句子仿写,家长打印,孩子照着练。具体如下:...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)