恶意代码分析实战 6 OllyDbg

news2024/11/13 12:40:11

6.1 Lab 9-1

程序分析
首先,进行静态分析,使用strings。

CreateFileA
RegQueryValueExA
RegOpenKeyExA
RegSetValueExA
RegCreateKeyExA
RegDeleteValueA
WideCharToMultiByte
GetModuleHandleA
GetEnvironmentVariableA
SetEnvironmentVariableA
SOFTWARE\Microsoft \XPS
HTTP/1.0
GET
SLEEP
cmd.exe
>> NUL
http://www.practicalmalwareanalysis.com
%SYSTEMROOT%\system32\

这里有一些东西我们比较在意,我们可以看到该程序对注册表和环境变量进行了一些操作,并且具有网络特征;出现了cmd.exe可能具有远程shell的功能;创建了文件,可能下载了什么东西。
接下来进行动态分析,将程序拖入IDA和OllyDbg中,在IDA中查找该函数的起点,然后在OllyDbg中定位到起点,进行分析。
首先,在地址0x402AFD查看命令行参数的数量是否等于1,等于1,ZF等于1,此时jnz无法跳转,cal了函数 0x401000,我们在IDA中查看一下该函数是什么。
vmware_kZbaNsRdf7.png
发现函数 RegOpenKeyExA ,打开指定的注册表,RegQueryValueExA 检索与打开的注册表项关联的指定值名称的类型和数据。该函数综合功能是查找是否存在它指定的注册表。
vmware_iQcnsdPG1z.png
没有查找到指定的注册表,反返回了0.进入了0x402410,我们打开IDA查看一下这个函数是干啥的。
vmware_NioTrD07SV.png
GetModuleFileName 函数获取当前可执行文件的路径,shellExeute函数对指定文件进行操作,我们看得到有“cmd.exe”“>> NUL”“/c del”字符串,可能是对自身进行了删除,在OllyDbg中跟进。
vmware_bA9hS4JYhi.png
vmware_dddqhlQLcz.png
可以看到字符串"/c del C:\DOCUME1\ADMINI1\Lab09-01.exe >> NUL",对可执行文件进行了删除,然后结束了程序。
问题

  1. 如何让这个恶意代码安装自身?

首先需要跳过__alloca_probe函数,通过加入一个参数跳过。
vmware_NNKUFS9eci.png
还需要跳过0x402510函数,进入这个函数分析可以得知,需要的参数为“abcd”。

  1. 这个恶意代码的命令行选项是什么?它要求的密码是什么?

vmware_Ze2v0UXy2f.png
可以对几个函数进行依次分析。
参数-in
(1)若带的参数是-in,则安装服务。

(2) 参数-re
若带的参数是-re,则卸载服务

(4) 参数-c
若带的参数是-c,则删除自身并设置注册表配置键

(5) 参数-cc
若带的参数是-cc,则打印注册表配置键

该恶意程序还能能执行多种指令 ‘-in’ 进行安装,‘-re’ 进行恶意程序的彻底清除,‘-cc’ 进行注册表打印,‘-c’ 进行恶意代码更新配置;要求的密码是 ‘abcd’

  1. 如何利用OllyDbg永久修补这个恶意代码,使其不需要指定的命令行密码?

可以通过修改跳转条件。
vmware_rYnjDI0g2S.png
将此处改为je,既可在密码错误时跳转。

  1. 这个恶意代码基于系统的特征是什么?

会创建一个指定注册表项 “HKLM\SOFTWARE\Microsoft \XPS” 的 “configuration”键”;同时会创建一个服务,该服务的名称由安转时传入的参数决定;另外,该程序还会自我赋值到Windows系统目录下。

  1. 这个恶意代码是否有网络特征?

msedge_ZXMETcTzDN.png
会向指定的站点发出http (HTTP/1.0 GET) 请求,默认的站点是“http://www.practicaolmalwareanalysis.com”

6.2 Lab 9-2

用OllyDbg分析恶意代码文件Lab09-02.cxe,回答下列问题。
问题

  1. 在二进制文件中,你看到的静态字符串是什么?

使用Strings进行分析。
vmware_9ULb5X4PxV.png

  1. 当你运行这个二进制文件时,会发生什么?

没有发生什么就终止了。

  1. 怎样让恶意代码的攻击负载(payload)获得运行?

使用OllyDbg进行分析,首先定位到程序入口。
vmware_RKAmia4GeX.png
可以发现这里将很多字符转移到了栈上,我们可以通过IDA来查看一下是什么字符串。
vmware_CZf81IrWob.png
或者使用OllyDbg进行跟随。
vmware_vdlhuR50An.png
继续运行,发现调用了GetMoudleFileName函数
vmware_zz1AsxhThC.png
运行到vmware_k3UkZR7cal.png这个位置。
调用了一个函数,有两个参数,其中一个是上面所返回的路径,另一个是‘\’,这个函数的作用是将当前可执行文件的文件名找出来。
运行到下一个call调用函数的地址。
vmware_azC7to9GkF.png
可以看到栈上有两个参数。
vmware_DVEa9ozumO.png
结合IDA我们可以得知这就是一个字符串比较函数。如果这个函数发现两个字符串不一样,那么就会退出程序。
将该可执行文件名称改为ocl.exe就可以运行该样本。

  1. 在地址0x00401133处发生了什么?

vmware_CZf81IrWob.png
将两个字符串压入了栈中。

  1. 传递给子例程(函数)0x00401089的参数是什么?

vmware_gIKBUrIQu0.png
参数是字符串和一个数据缓冲区。

  1. 恶意代码使用的域名是什么?

进入(函数)0x00401089。

char *__cdecl sub_401089(char *a1, int a2)
{
  signed int i; // [sp+4h] [bp-108h]@1
  signed int v4; // [sp+8h] [bp-104h]@1
  char v5; // [sp+Ch] [bp-100h]@1
  char v6; // [sp+Dh] [bp-FFh]@1
  __int16 v7; // [sp+109h] [bp-3h]@1
  char v8; // [sp+10Bh] [bp-1h]@1

  v5 = 0;
  memset(&v6, 0, 0xFCu);
  v7 = 0;
  v8 = 0;
  v4 = strlen(a1);
  for ( i = 0; i < 32; ++i )
    *(&v5 + i) = a1[i % v4] ^ *(_BYTE *)(i + a2);
  return &v5;
}

类似于一个解密函数。
运行看看结果。
vmware_edBqbuoz3h.png

  1. 恶意代码使用什么编码函数来混域名?

恶意代码用字符串 1qaz2wsx3edc 异或加密的 DNS 名来解密域名。

  1. 恶意代码在0x0040106E处调用CreateProcessA函数的意义是什么?

书上的解答是

恶意代码设置stdout、stderr和stdin的句柄到socket(被用在CreateProcessA的STARTUPINFO结构中)。由于cmd作为CreateProcessA的参数调用,因此通过绑定一个套接字与命令shell来创建逆向shell

大概意思就是说这个shell是通过这个CreateProcessA的STARTUPINFO来绑定stdou,stderr,stdin在cmd上的,只有这样才能把这些东西绑定在cmd上

6.3 Lab 9-3

使用OllyDbg和IDAPro分析恶意代码文件Lab09-03.exe。这个恶意代码加载3个自带的DLL
(DLLI.d、DLL2.dI、DLL3.dI),它们在编译时请求相同的内存加载位置。因此,在OllyDbg中对照IDAPro浏览这些DLL可以发现,相同代码可能会出现在不同的内存位置。这个实验的目的是让你在使用OllyDbg看代码时可以轻松地在IDAPro里找到它对应的位置。
问题

  1. Lab09-03.cxe导入了哪些DLL?

首先查看静态导入的DLL;
vmware_p9J4kjX2zk.png
然后打开IDA查看导入函数LoadLibrary函数导入了什么DLL;
vmware_a8si1jpmMc.png
vmware_2dcfz95U3g.png
一共是导入了6个DLL。

  1. DLL.dll、DLL2.dll、DLL3.dll 要求的基地址是多少

查看要求的基地址。
vmware_71u4JJwmvI.png
vmware_P3FiEEvqCT.png
vmware_k4PAuK6aOw.png

  1. 当使用OllyDbg调试Lab09-03.exe时,为DLL.d、DLL2.d、DLL3.du分配的基地址是什么?

因为 DLL3.dll 库需要在程序运行时才能导入,所以先运行到导入dll的地址。
vmware_8obodhPQiU.png
查看导入的基地址。
vmware_QXXFGWQH91.png

  1. 当Lab09-03.exe调用DLL1.dll中的一个导入函数时,这个导入函数都做了些什么

vmware_EMljisc084.png
OllyDbg中也给出了一段字符串。DLL1.exe的导入函数是:
vmware_FdjPR6kWmc.png
使用 IDA 打开 DLL1.dll,
vmware_NPSv4UUnW6.png
sub_10001038应该是一个printf函数,dword_10008030中的数据是GetCurrentProcessId的返回值。
vmware_1apwos2FvE.png
所以这个函数的功能就是打印出dll的进程ID。

  1. 当Lab09-03.exe调用WriteFile函数时,它写入的文件名是什么?

文件名称是DLL2中的函数返回的。
vmware_aYp1eABy1w.png
所以我们有必要查看一下DLL2中的这个函数是干什么的。
vmware_33SFlNhUwU.png
看来是“text.txt”。

  1. 当Lab09-03.cxe使用NetScheduleobAdd创建一个job时,从哪里获取第二个参数的数据?

分析dll3getstructure。
msedge_1WH7tDhdRq.png
可以看到这个函数有一个参数,将其赋给eax结合分析exe时看到的调用
msedge_2MT2ALvlGp.png
传入的参数是edx而edx的值是buffer的内容
而这个buffer其实就是一个局部变量也就是说在调用dll3strcture时其参数就是局部变量的地址回到dll3.dll的分析在获取到地址之后
msedge_EcbWwYkEU1.png
把dword的值赋给eax指向的地址中,也就是前面说的buffer我们跟进,查看交叉引用
msedge_OIlBroSnqY.png
可以看到是一系列的move赋值的操作这些数据的地址会保存在buffer里,而buffer保存在ecx,而之后ecx是作为netschedulejobadd的第二个参数
msedge_mBYq0JoGiN.png
Lab09-03.exe 从DLL3GetStructure中获取NetScheduleJobAdd调用的缓冲区,它动态地解析获得第二个参数的数据

  1. 在运行或调试Lab09-03.exe时,你会看到Lab09-03.exe打印出三块神秘数据。DLL1的神秘数据DLL2的神秘数据,DLL3的神秘数据分别是什么?

DLL1的神秘数据是进程ID,DLL2的神秘数据是打开temp.txt文件的句柄,DLL3的神秘数据是字符串“ping www.malwareanalysisbook.com”。

  1. 如何将DLL2.d加载到IDAPro中,使得它与OlyDbg使用的加地址匹配

vmware_WM6JtOqMMd.png
vmware_inFXjNxZOC.png
vmware_SILCGsE59W.png+
vmware_Ip5xRsfeSW.png
成功。

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

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

相关文章

DaVinci:Camera Raw(ARRI)

本文主要介绍 ARRI 的 Raw 格式素材相关的 Camera Raw 参数。解码质量Decode Quality解码质量决定了图像解拜耳之后所呈现的素质&#xff0c;也与最终的输出息息相关。默认为“使用项目设置” Use project setting&#xff0c;表示使用项目设置对话框中的“Camera RAW”解码质量…

mysql之explain(性能分析)

目录 1.说明 2.使用方式 3.字段解释 (1)id (2)select_type (3)table (4)type (5)possible_keys (6)keys (7)ken_len (8)ref ​编辑 (9)rows (10)extra 4.示例 1.说明 使用EXPLAIN关键字可以模拟优化器执行SOL查询语句&#xff0c;从而知道MySOL是如何处理你的S…

MySQL主从复制、读写分离

一、MySQL主从复制 MySQL数据库默认是支持主从复制的&#xff0c;不需要借助于其他的技术&#xff0c;我们只需要在数据库中简单的配置即可。 1. MySQL主从复制概述 MySQL主从复制是一个异步的复制过程&#xff0c;底层是基于MySQL数据库自带的 二进制日志 功能。就是一台或多台…

Redis持久化-RDB

Redis持久化-RDB 1.官方资料 在线文档 : https://redis.io/topics/persistence 2.Redis持久化方案 1.RDB&#xff08;Redis DataBase&#xff09; 2.AOF&#xff08;Append Of File&#xff09; 3.RDB是什么 在指定的时间间隔内将内存中的数据集快照写入磁盘&#xff0c…

尚医通-手机登录-判断用户登录状态-用户网关整合(三十)

目录&#xff1a; &#xff08;1&#xff09;前台用户系统-手机登录-前端整合 &#xff08;2&#xff09;全局的登录事件-判断登录状态 &#xff08;3&#xff09;登录注册-用户认证和网关整合 &#xff08;1&#xff09;前台用户系统-手机登录-前端整合 service-user模块的配…

图论(入门版)

目录 1 向、权 2 最小生成树 2.1 Prim算法 2.2 Kruskal算法 3 最大流问题 3.1 Naive算法 3.2 Ford—Fulkerson算法 3.3 Edmonds—Karp算法 3.4 Dinic算法 4 最小割问题 5 二部图 5.1 判断是否是二部图的方法 5.2 匈牙利算法&#xff08;最小匹配问题&a…

跳跃表,也称跳表

跳表是Redis五种数据结构中有序集合Zset的底层实现 可以看成多个有序链表 链表相较于数组删除和插入的效率要高很多&#xff08;改变指针指向就行&#xff09; 但是在查找的时候跟数组比起来&#xff0c;速度就比较慢了&#xff0c;因为链表需要从头开始遍历 为了改变这个查找…

索宝蛋白冲刺A股上市:计划募资5.5亿元,复星等为其股东

近日&#xff0c;宁波索宝蛋白科技股份有限公司&#xff08;下称“索宝蛋白”&#xff09;预披露更新招股书&#xff0c;准备在上海证券交易所主板上市。据贝多财经了解&#xff0c;索宝蛋白曾于2022年7月1日提交招股书&#xff0c;此次招股书更新了截至2022年6月30日的财务数据…

Java判断结构练习

目录 1.倍数 2.零食 3.区间 4.三角形 5.游戏时间 6.加薪 7.动物 8.选择练习1 9.DDD 10.点的坐标 11.三角形类型 12.游戏时间2 13.税 14.简单排序 15.一元二次方程公式 16.平均数3 1.倍数 读取两个正整数值 A 和 B。 如果其中一个是另一个的整数倍&#xff0c…

树状数组(代码模板和原理详解)

树状数组代码模板 普通数组&#xff1a;求前缀和&#xff1a; O(n)O(n)O(n)&#xff0c;修改&#xff1a;O(1)O(1)O(1) 前缀和数组&#xff1a;求前缀和&#xff1a;O(1)O(1)O(1)&#xff0c;修改&#xff1a;O(n)O(n)O(n) 鱼和熊掌不可兼得&#xff0c;当我们同时需要对一个…

NEZUKO: 1——202201152003

NEZUKO: 1——202201152003 About Release Back to the Top Name: nezuko: 1Date release: 21 Aug 2019Author: yunaranyancatSeries: nezuko Download Back to the Top Please remember that VulnHub is a free community resource so we are unable to check the machin…

在Java中使用堆排序求解TopK问题

在Java中使用堆排序求解TopK问题 1. 问题描述 给定一个很大的数组&#xff0c;长度100w&#xff0c;求第k大的数是多少&#xff1f; 这个问题是一个很经典的问题&#xff0c;如果采用传统方式&#xff0c;即现排序&#xff0c;然后找到第k个数&#xff0c;对于数据量很大的时…

Knowledge-based-BERT(一)

多种预训练任务解决NLP处理SMILES的多种弊端&#xff0c;代码&#xff1a;Knowledge-based-BERT&#xff0c;原文&#xff1a;Knowledge-based BERT: a method to extract molecular features like computational chemists&#xff0c;代码解析从K_BERT_pretrain开始。模型框架…

Tkinter的Listbox控件

Tkinter的Listbox控件是个选项框&#xff0c;主要是用来在给定的选项中选择一个 使用方法 创建选项框Listbox 和其他控件的创建方法一样&#xff0c;直接创建即可&#xff0c;命名为Lb Lbtk.Listbox(root) Lb.pack() 在选项框中加入选项 可以边创建边添加&#xff0c;即利…

【C#】WPF实现经典纸牌游戏,适合新手入门

文章目录1 纸牌类2 布局3 初始化4 事件点击牌堆拖动牌的去留源代码1 纸牌类 之所以产生这个无聊至极的念头&#xff0c;是因为发现Unicode中竟然有这种字符。。。 黑桃&#x1f0a1; &#x1f0a2; &#x1f0a3; &#x1f0a4; &#x1f0a5; &#x1f0a6; &#x1f0a7; &…

【设计模式】结构型模式·外观模式

学习汇总入口【23种设计模式】学习汇总(数万字讲解体系思维导图) 写作不易&#xff0c;如果您觉得写的不错&#xff0c;欢迎给博主来一波点赞、收藏~让博主更有动力吧&#xff01;> 学习汇总入口 一.概述 外观&#xff08;Facade&#xff09;模式是七大设计原则“迪米特法则…

谷粒商城-高级篇-Day12-性能压测和缓存

文章目录性能优化nginx动静分离优化三级分类的获取&#xff08;优化业务&#xff09;分布式缓存整合redis高并发下的缓存失效问题缓存穿透缓存雪崩缓存击穿解决这些问题分布式锁Redisson可重入锁&#xff08;Reentrant Lock&#xff09;指定过期时间读写锁闭锁信号量使用Redssi…

Python实现一个简易的CLI翻译程序

Python实现一个简易的CLI翻译程序Python百度翻译API实现一个简易的CLI翻译程序获取百度翻译API编写一个简单的Python程序Python百度翻译API实现一个简易的CLI翻译程序 之前翻译用的linux上的golddict,每次翻译都很慢。。。 所以想写一个简单快速的翻译命令行翻译软件 获取百度…

Allegro如何自动高亮不等长的网络操作指导

Allegro如何自动高亮不等长的网络操作指导 在做PCB设计的时候,时常需要要做等长,Allegro可以自动高亮一组内不等长的网络,可以直观的看到哪些网络长度是不满足的,类似下图 绿色的是通过的,红色是长度不足的,粉色是超长的 具体操作如下 选择Route-Timing Vision出现optio…

Springboot359的医院病历管理系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 2 第3章 系统分析 3 3.1 需求分析 3 3.2 系统可行性分析 4 3.2.1技术可行性&#xff1a;技术背景 4 3.2.2经济…