恶意代码分析实战 18 64位

news2025/1/12 12:13:56

18.1 Lab21-01

  1. 当你不带任何参数运行程序时会发生什么?

当你运行这个程序却没带任何参数,它会立即退出。

  1. 根据你使用的IDAPro的版本,main函数可能没有被自动识别,你如何识别对main函数的调用?

main函数有三个参数入栈,分别是一个整数和两个指针。
vmware_NLeHioRlqk.png
main函数位于0x00000001400010C0处。你可以通过寻找接受一个整数与两个指针作为输入参数的函数调用定位main函数。

  1. 从0x0000000140001150地址到0x0000000140001161地址的指令在栈上存储了什么?

vmware_8dfXjVNYi5.png
字符串oc1.exe存储在栈中。

  1. 在不改变二进制程序文件名的前提下,如何才能让这个程序运行它的真正负载

vmware_cm3e4JgC48.png
这里对字符串进行了检查,如果在不改变二进制程序文件名的前提下,让这个程序运行。为了不修改可执行程序的文件名就能让这个程序运行有效载荷,你需要修补在0x0000000140001213处的jump指令,将其替换为NOP指令。
vmware_WNjpbiXAtq.png

  1. 0x0000000140001205位置的strncmp函数调用比较了哪两个字符串?

vmware_XHYXZHAe33.png
使用WinDbg查看。
vmware_4KPvSuvSbr.png
下断点,运行程序。
vmware_ZT6EL6ENrW.png
用于比较的字符串。
vmware_Jd92rqDFxL.png
可执行文件的名字会通过调用在0x0000000140001205位置的strncmp函数与字符串jzm.exe进行比较。

  1. 0x00000001400013C8位置的函数接收哪些参数?

vmware_M1NKUelwAv.png
vmware_lcWnhFxYhr.png
在0x00000001400013C8地址的函数只需要一个参数,其中包含了创建的远程主机套接字。

  1. 有多少个参数被传递给在0x0000000140001093位置对CreateProcess函数的调用?你是如何知道的?

vmware_WsiHLe1RDF.png
绝大多数到栈上的移动都代表CreateProcessA函数的参数,但有些并不是。比如mov指令操作的是CreateProcessA函数的参数LPSTARTUPINFO,而STARTUPINFO结构也被存储在栈上,从var_78变量开始,看到的mov指令是被移入STARTUPINFO结构的一些值,这个结构刚好是被存储在栈上的,但不是CreateProcesSA函数的参数。因为函数参数与其他栈行为的复杂交织,所以我们很难通过仅查看函数调用来搞清楚有多少个参数被传递给这个函数。然而,因为CreateProcessA函数拥有完备的文档,我们知道它需要整整10个参数。
调用CreateProcess函数需要10个参数。我们无法从IDAPro的列表中获取这些参数,因为我们不能区分存储在栈上与用于函数调用的变量,但这个函数在MSDN中拥有使用文档,始终需。要10个参数

18.2 Lab21-02

  1. 恶意代码的资源节有什么有趣的东西

vmware_l4XwlZ4PtE.png
包含三个PE文件。这个恶意代码包含了X64、X64DLL和X86资源节。每个资源节中都包含了一个内嵌的PE文件。

  1. 这个恶意代码是为x64编译的,还是为86编译的?

vmware_wrKzsbZyoI.png
Lab21-02.exe被编译为一个32位系统的程序。这在PE头中的characteristics域中显示,其中设置了IMAGE_FILE_32BIT_MACHINE标志位。

  1. 恶意代码是如何确定出它正在运行的环境类型的

vmware_p3AbFqgCtS.png
vmware_aseyoDVNo8.png
该恶意代码试图解析并调用IsWow64Process函数,以确定它是否在x64系统上运行。

  1. 与在x86环境中相比,恶意代码在x64环境中会做哪些不同的事情

x86
x86代码路径首先将字符串Lab21-02.d11和X86传递到sub_40100函数中。基于我们的静态分析结果,我们可以猜测并把这个函数重命名为extractResource。
vmware_HXL9fnh2h0.png
检查extractResource函数,我们可以看到它确实是将X86资源节中的文件提取到了磁盘上,然后将第二个参数附加到GetSystemDirectoryA函数获取的结果字符串上,从而将X86资源提取到C:\Windows\System32\Lab21-02.dll。
接下来,恶意代码在对sub_401130函数的调用中,通过使用OpenProcessToken、LookupPrivilegeValueA和AdjustTokenPrivileges等API函数设置了SeDebugPrivilege,这过程我们已经在第11章的“使用SeDebugPrivilege”节进行了详细讲解。然后,恶意代码调用了EnumProcesses函数并遍历进程列表,使用strnicmp函数查找一个名称为explorer.exe的进程。
最后,恶意代码执行DLL注入,使用VirtualA11ocEx和CreateRemoteThread函数,将Lab21-02.dll注入explorer.exe中。这种DLL注入方法与Lab12-1中的相同。比较Lab21-02.dll和Lab12-01.dl的MD5哈希值,我们可以看到,它们是相同的。因此,我们可以得出结论,当运行在32位系统上时,这个恶意代码与Lab12-1的样本执行相同操作,我们必须调查x64代码路径分析这个程序在64位系统上是否执行了不同的操作。
x64
vmware_jMg9HMMXHu.png
vmware_wERQaT6SUN.png
X64代码路径开始时,两次调用了extractResource函数,分别抽取X64和X64DLL资源节到磁盘上。
这两个二进制文件分别被提取为Lab21-02x.dll和Lab21-02x.exe,并放置到GetSystemDirectoryA函数返回的目录下。但如果我们在64位系统上动态运行这个恶意代码,我们在C:WindowsSystem32日录下将不会看到这两个程序。这是因为Lab21-02.cxe是在64位机器上运行的32位二进制程序,所以它会运行在WOW64环境中。系统路径会被映射至C:WindowsSysWOW64目录,在这里你可以找到那些文件.
接下来,恶意代码使用ShellExecuteA函数,在本地计算机上启动Lab21-02x.exe。 通过查看Lab21-02x.exe的PE头,我们可以看到Characteristics域设置了IMAGE_FILE_64BIT_MACHINE标志位,这告诉我们这个二进制文件是为x64模式编译的,也会作为一个64位进程运行。
为了在IDAPro中反汇编Lab21-02x.cxe,我们需要使用x64位高级版本的IDAPro。当我们反汇编文件后,我们可以从高层次上查看这个文件,它的结构看起来很像Lab21-02.exe。例如,Lab21-02x.exe在开始时也是通过遍历进程列表,动态地定位API函数。Lab21-02x.exe在使用1strcpyA函数和1strcatA函数来创建字符串时,开始与Lab21-02.exe有所偏离。
在x86机器上,恶意代码会将86资源节解析到磁盘上,并将其注入eplorerere中。在x64机器上,恶意代码会从X64和X64DLL资源节中释放两个文件到磁盘上,并以一个64位进程启动该执行文件。

  1. 恶意代码在x86环境中运行时会释放出哪些文件?你可以在哪里找到这些文件?

在x86系统上,恶意代码将Lab21-02.dll安置到Windows系统目录中,通常是C:\Windows\System32。

  1. 当运行在x64机器上时,恶意代码丢弃了哪些文件?你在哪里能找到这个或这些文件?

chrome_sDzpIuHVTm.png
在x64系统上,恶意代码将Lab21-02x.dll和Lab21-02x.exe释放到Windows系统目录中,但由于这是一个在WOW64中运行的32位进程,所以目录是C:\Windows\SysWOW64。

  1. 当运行在x64系统上时,恶意代码启动什么类型的进程?

chrome_M9xFoB8L7U.png
在x64系统上,恶意代码将启动Lab21-02x.exe,这是一个64位进程。你可以在PE头中看到,Characteristics域中设置了IMAGE_FILE_64BIT_MACHINE标志位。

  1. 这个恶意代码的目的是什么?

在x64和×86系统上,恶意代码都对explorer.ere执行DLL注入。在x64系统上,它安置并运行个64位的二进制程序,并注入一个64位的DLL到64位模式运行的explorer.exe进程。在x86系统上,它注入一个32位的DLL到32位模式运行的explorer.ee进程中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/179218.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NodeJS 中 Express 之中间件

NodeJS 中 Express 之中间件参考描述中间件next()一个简单的中间件函数使用全局中间件局部中间件共享注意事项位置next()分类错误级中间件内置中间件express.urlencoded()express.json()第三方中间件参考 项目描述哔哩哔哩黑马程序员搜索引擎Bing 描述 项目描述Edge109.0.151…

【web前端】盒子模型

border 边框 content 内容 padding内边距 margin外边距 1.边框 border 边框粗细 用px作为单位 border-style : solid 实线的 dashed虚线的 dotted 点的 边框的符合写法: 那三个没有先后顺序 边框可以分开写 表格的细线边框 border-collapse …

【编程入门】开源记事本(微信小程序版)

背景 前面已输出多个系列: 《十余种编程语言做个计算器》 《十余种编程语言写2048小游戏》 《17种编程语言10种排序算法》 《十余种编程语言写博客系统》 《十余种编程语言写云笔记》 本系列对比云笔记,将更为简化,去掉了网络调用&#xff0…

20230126英语学习

Your Dog’s Behavior Is a Product of Their Genes 狗狗做什么,基因来决定 这篇好难,字基本都认识,但它不认识我~ “Identification of the genes behind dog behavior has historically been challenging,” says first author Emily Dut…

【计算机网络(考研版)】第一站:计算机网络概述(一)

目录 一、计算机网络的概念 1.计算机网络的定义 2.计算机网络的组成 3.计算机网络的功能 4.计算机网络的分类 二、计算机网络的性能指标 1.速率 2.带宽 3.时延 4.时延带宽积 5.往返时间 6.利用率 三、计算机网络的体系结构 1.体系结构 2.协议 3.服务 4.接口&a…

活动星投票优秀支书网络评选微信的投票方式线上免费投票

“优秀支书”网络评选投票_多人投票流程顺序_视频投票图文投票_微信比赛投票小程序近些年来,第三方的微信投票制作平台如雨后春笋般络绎不绝。随着手机的互联网的发展及微信开放平台各项基于手机能力的开放,更多人选择微信投票小程序平台,因为…

最详细、最仔细、最清晰的几道python习题及答案(建议收藏哦)

名字:阿玥的小东东 学习:python。c 主页:没了 今天阿玥带大家来看看更详细的python的练习题 目录 1. 在python中, list, tuple, dict, set有什么区别, 主要应用在什么样的场景? 2. 静态函数, 类函数, 成员函数、属性函数的区别? 2.1静态…

Unix\Linux多线程复健(二)线程同步

线程同步 并非让线程并行,而是有先后的顺序执行,当有一个线程对内存操作时,其他线程不可以对这个内存地址操作 线程之间的分工合作 线程的优势之一:能够通过全局变量共享信息 临界区:访问某一共享资源的代码片段&#…

【JavaEE初阶】第六节.多线程 (基础篇 )线程安全问题(下篇)

前言 一、内存可见性 二、内存可见性的解决办法 —— volatile关键字 三、wait 和notify 关键字 3.1 wait() 方法 3.2 notify() 方法 3.3 notify All() 方法 3.4 wait 和 sleep 的对比 总结 前言 本节内容接上小节有关线程安全问题;本节内容我们将介绍有关…

CUDA编程笔记(6)

文章目录前言全局内存的访问模式合并访问和非合并访问使用全局内存进行矩阵转置矩阵复制矩阵转置总结前言 全局内存的合理使用 全局内存的访问模式 合并访问和非合并访问 合并访问指的是一个线程束(同一个线程块中相邻的wrapSize个线程。现在GPU的内建变量wrapSi…

Linux系统之网络客户端工具

Linux系统之网络客户端工具一、Links工具1.Links工具介绍2.安装Links软件3.Links工具的使用4.打印网页源码输出5.打印url版本到标准格式输出二、wget工具1.wget工具介绍2.安装wget软件3.wget工具的使用三、curl工具1.curl工具的介绍2.curl的常用参数3.curl的基本使用四、scp工具…

机器学习(二)--NumPy

本篇文章介绍了一些Numpy的基础操作。NumPy 是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。📙参考:NumPy 数据类型 | 菜鸟教程 (runoob.com)1.Numpy ndarray对象Numpy最重要的一…

Introduction to Multi-Armed Bandits——04 Thompson Sampling[2]

Introduction to Multi-Armed Bandits——04 Thompson Sampling[2] 参考资料 Russo D J, Van Roy B, Kazerouni A, et al. A tutorial on thompson sampling[J]. Foundations and Trends in Machine Learning, 2018, 11(1): 1-96. ts_tutorial 项目代码地址: https://githu…

蓝桥杯刷题014——求阶乘(二分法)

求阶乘 蓝桥杯2022省赛题目 问题描述 满足 N ! 的末尾恰好有 K 个 0 的最小的 N 是多少? 如果这样的 N 不存在输出 −1 。 输入格式 一个整数 K 。 输出格式 一个整数代表答案。 样例输入 2样例输出 10评测用例规模与约定 对于 30% 的数据, 1≤K≤10^6. 对于 100% 的数据, …

新瑞鹏冲刺上市:持续亏损,旗下宠物医院屡被罚,彭永鹤为董事长

家门口的宠物医院所属集团也要上市了。 1月24日,新瑞鹏宠物医疗集团有限公司(New Ruipeng Pet Group Inc.,下称“新瑞鹏”或“新瑞鹏集团”)在美国证监会(SEC)公开提交招股书,准备在美国纳斯达…

LabVIEW什么时候需要实时系统

LabVIEW什么时候需要实时系统实时计算系统能够非常可靠地执行具有非常具体时序要求的程序,这对于许多科学和工程项目来说都很重要。构建实时系统所需的关键组件是实时操作系统(RTOS)。精确计时对于许多工程师和科学家来说,在安装了…

C 语言零基础入门教程(十)

C 作用域规则 任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问。C 语言中有三个地方可以声明变量: 1、函数或块内部的局部变量 2、在所有函数外部的全局变量 3、在形式参数的函数参数定义中 让我们来看看什…

返回值的理解

前言 我们写的函数是怎么返回的,该如何返回一个临时变量,临时变量不是出栈就销毁了吗,为什么可以传递给调用方?返回对象的大小对使用的方式有影响吗?本文将带你探究这些问题,阅读本文需要对函数栈帧有一定…

Win10+GTX3060+Python+PyTorch+Tensorflow安装

本文是个备忘录,是折腾半个下午的成果,记下来免得忘记了。 0. 安装Win10,安装显卡驱动程序。 1. 弄清楚目前版本的PyTorch和Tensorflow支持哪个版本的Python。截至本文编写时,PyTorch需要Python的3.7~3.9,Tensorflow…

【NI Multisim 14.0虚拟仪器设计——放置虚拟仪器仪表(字发生器)】

目录 序言 🍍放置虚拟仪器仪表 🍉字发生器 (1)“控件”选项组 (2)“显示”选项组 (3)“触发”选项组 (4)“频率”选项组 (5)字符…