病毒分析教程第三话--静态逆向分析(上)

2023-10-29

静态逆向分析(上)


教程参考自《恶意代码分析实战》
程序来自:http://www.nostarch.com/malware.htm


使用上两话静态特征分析和动态行为分析的方法只能从宏观的角度分析样本,但由于无法得到源代码,所以我们无法确凿地判定这些样本就是恶意的。本着格物致知的宗旨,我们现在学习使用静态逆向分析的方法,从反汇编的角度来分析一个样本。


PS:由于静态逆向分析过程冗杂,所以本话使用问答的方式进行讲解。

Lab 5-1

本节实验使用样本Lab05-01.dll。
Lab05-01.dll

使用Exeinfo查壳,很幸运,没有加壳,是用VC6写的。
Exeinfo

DllMain的地址是什么?
直接点击左侧DllMain地址,便可在右侧窗口看到其地址,为0x1000D02E。这里顺带提一句,我们分析样本从DllMain开始分析就好了,因为所有DllEntryPoint到DllMain之间执行的代码一般是由编译器生成的,我们不必去分析。
DllMain

使用Imports窗口并浏览到gethostbyname,导入函数定位到什么位置?
点击上方的Imports标签,便可看到导入表,然后按Ctrl+F搜索gethostbyname,位置在.idata节的0x100163CC处。
Imports

有多少函数调用了gethostbyname?
在gethostbyname上按下Ctrl+X便可查看它的交叉引用情况,窗口最底下的“Line 1 of 18”这行文字,告诉我们存在对gethostbyname的9处交叉引用。一些版本的IDA Pro会计算两次交叉引用:类型p是被调用的引用,类型r是被“读取”的引用(因为是对一个导入项call dword ptr […],所以CPU必须先读取这个导入项,再调用它)。仔细查看交叉引用表,会发现实际上在5个不同的函数中调用了gethostbyname。
Xref

将精力集中在位于0x10001757处的对gethostbyname的调用,你能找出哪个DNS请求将被触发吗?
gethostbyname只有一个参数,就是要查询的域名,在下图红框中,可以看到参数存储在eax中,而eax的值是由off_10019040处复制过来的(当然还在off_10019040的基础上加了0x0D)。
DNS

双击off_100190404进去后可以发现得到的域名字符串是“[This is RDO]pics.practicalmalwareanalysis.com”。经过上面的add eax,0xDh,eax就变成了“pics.practicalmalwareanalysis.com”,所以DNS请求的域名就是pics.practicalmalwareanalysis.com
DNS

IDA Pro识别了在0x10001656处的子过程中的多少个局部变量?
有23个,下图红框中负偏移的都是局部变量。最下面一个正偏移的是传入的参数。
Var

IDA Pro识别了在0x10001656处的子过程中的多少个参数?
上个图中已经看到了,1个。当然也可以按下F5进行反编译,更直观地看到参数。
Args

使用Strings窗口,来在反汇编中定位字符串\cmd.exe /c。它位于哪?
按下Shift+F12唤出字符串窗口,定位到字符串\cmd.exe /c,在xdoors_d节中的0x10095B处。
Strings

在引用\cmd.exe /c的代码所在的区域发生了什么?
点击该字符串,然后转换成图形模式,以便更好地观察。
Cmd

这个函数的结构不会复杂,我们现在来看看这个函数在干嘛。将目光移到函数开头,发现有个可疑的字符串,看了下,从语句中可以猜测这是一个反弹shell连接成功的提示语。然后接着看下面红框里的call。
Tips

点进去后,发现有send和free函数,这是与socket相关的函数。
Send

返回继续看原来的函数,下拉可以看到一个recv函数,看来这是一个socket连接确凿无疑了。
Recv

再往下看,发现该函数调用了很多次memcmp,一直在做字符串的比较,如:“quit”、“minstall”、“inject”等。
Memcmp

Memcmp

经过上面几个特征,我们大致搞清楚了这个函数的功能,就是建立一个反弹shell,然后根据接收的命令(quit、minstall、inject等)进行恶意操作。

在同样的区域,在0x100101C8处,看起来好像dword_1008E5C4是一个全局变量,它帮助决定走哪条路径。那恶意代码是如何设置dword_1008E5C4的呢?(提示:使用dword_1008E5C4的交叉引用。)
选中dword_1008E5C4,然后按下Ctrl+X查看交叉引用。
E5C4

有3处交叉引用,但是真正修改了这个值的是第一个语句(类型为w),其它的两处都仅是读操作。
Xref

点过去看,dword_1008E5C4的值来自eax,而eax是函数sub_10003695返回的,继续看函数sub_10003695。
Sub

sub_10003695函数很短,主要就调用了一个GetVersionExA,用来获取当前的操作系统版本,其中将dwPlatformId与数字2进行比较,来确定如何设置AL寄存器。如果PlatformId为VER_PLATFORM_WIN32_NT,AL会被置位。这里只是简单地判断当前操作系统是否Windows 2000或更高版本,我们可以得出结论,该全局变量通常会被置为1。也就是说高于Windows 2000的版本则调用cmd.exe,否则调用command.exe。
GetVersion

在位于0x1000FF58处的子过程中的几百行指令中,一系列使用memcmp来比较字 符串的比较。如果对robotwork的字符串比较是成功的(当memcmp返回0),会发生什么?
若比较成功,红框中的jnz就不会跳转,函数sub_100052A2会被调用,参数是[ebp+s](socket)。
Robot

双击进入sub_100052A2,开头就是一个RegOpenKeyExA打开键HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion。
Key

然后查询了WorkTime和WorkTimes键的值。(aWorkTime是字符串WorkTime,aWorkTimes是字符串WorkTimes),然后直接调用sub_100038EE(就是上面那个调用了send和free的函数)将这些信息发送出去。
Val

未完待续。。。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

病毒分析教程第三话--静态逆向分析(上) 的相关文章

  • 2017-百度-安全岗笔试

    2017 baidu spring 1 请回答如下端口默认对应的服务 以及在渗透测试过程中我们可以从哪些角度考虑其安全问题 端口 21 22 873 1433 3306 6379 11211 端口 服务 说明 21 FTP 匿名访问 弱口令
  • STM32内部FLASH读写-通用

    转https m baidu com from 844b bd page type 1 ssid 0 uid 0 pu usm 401 2Csz 401320 2001 2Cta 40iphone 1 10 1 3 602 baiduid
  • 基于vite搭建一个react移动端脚手架

    基于移动端的配置 vite官网 优点 光速启动 热模块替换 按需编译 脚手架功能 antd mobile移动端组件 axios网络数据交互 hox状态管理 react router dom路由管理 postcss px to viewpor
  • mybatis批量更新操作

    批量更新第一种方式 update IVMP DEVICE TYPE AISLE set AISLE TYPE
  • SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers

    https arxiv org pdf 2105 15203 pdf 文章提出了SegFormer encoder由金字塔Transformer组成 不使用位置编码 而是使用一个3x3的逐深度卷积 decoder使用了简单的MLP 因为分类
  • 搞懂oauth2.0授权码模式

    OAuth 2 0 是什么 举一个电商的场景 你估计更有感觉 假如你是一个卖家 在京东商城开了一个店铺 日常运营中你要将订单打印出来以便给用户发货 但打印这事儿也挺繁琐的 之前你总是手工操作 后来发现有个叫 小兔 的第三方软件 它可以帮你高
  • 解决字体文件Font跨域权限问题

    问题描述 Font from origin http trunk supply chain com has been blocked from loading by Cross Origin Resource Sharing policy
  • 腾讯云技术专家卢萌凯手把手教你Demo一个人脸识别程序!

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文来自腾讯云技术沙龙 本次沙龙主题为Serverless架构开发与SCF部署实践 卢萌凯 毕业于东南大学 曾就职于华为 熟悉云行业解决方案 目前负责腾讯云中间件产品及无服务器云函数
  • Linux应用开发

    1 为什么要学Linux 使用标准C C 编写运行在Linux上的应用程序 编写部署在Linux上的应用程序 如Python Java web服务程序 2 Linux学习方向 2 1 学习路线 熟悉 Linux 系统 基本命令 安装 Lin
  • Android Studio之将application工程改成library工程生成aar包

    一 修改application工程的app build gradle脚本 1 将项目由应用工程更改为库工程 apply plugin com android application 更改为 apply plugin com android
  • el-input输入框的那些事

    vue3 element plus ts es6 此帖只为记录开发中遇到的需求 技术问题 坑 1 文本域禁止自由拉伸 1 文本域禁止自由拉伸 el input有一个枚举类型的resize属性 控制拉伸 none both horizonta

随机推荐

  • 相关性模型与回归模型(例题代码)

    一 相关性模型 SPSS 相关性模型涉及到两种最为常用的相关系数 皮尔逊person相关系数 斯皮尔曼spearman等级相关系数 1 皮尔逊相关系数 相关性可视化 总结 1 如果两个变量本身就是线性的关系 那么皮尔逊相关系数绝对值大的就是
  • 系统安装部署系列教程(三):VHD方式安装系统

    普通的系统安装方式需要占用一个分区 假如某个分区有很多富裕空间 而且并不想完全格式化分区 可以考虑使用虚拟磁盘方式 VHD 安装系统 使用VHD方式安装的系统 只会占用一个文件 将来不需要的时候直接删除这个文件即可 而且VHD方式安装系统不
  • python多维list去重

    一维的list去重可以用set list 但是二维的list转set就会报错 unhashable type list 原因是set传进来的是不可哈希的变量 Python中那么哪些是可哈希元素 哪些是不可哈希元素 可哈希的元素有 int f
  • 期权策略篇: 实现买方狂欢,让卖方稳赚不赔的策略

    欢迎来到期权策略篇 实现买方狂欢 让卖方稳赚不赔的策略 今天给大家带来的期权策略比较简单 是我们比较常见的四种单腿期权策略 这四种策略分别是买入看涨期权 买入看跌期权 卖出看涨期权 卖出看跌期权策略 本文来自 期权酱 这四种期权策略相对于之
  • 7.27 总结+复盘

    一 初赛错题解析 第一题 题目 解析 像素位 字节位 字节 故选B 第二题 题目 解析 送命题 不会就是不会 做不会只能感叹自己道行甚浅 B选项是代码托管仓库 第三题 题目 解析 选A没啥好说的 记住就好 好奇怎么实现 请自行搜索 拓展一个
  • 2023更新阿里云服务器租用价格表(超详细)

    阿里云服务器分为云服务器ECS和轻量应用服务器 云服务器u1公网带宽可选1M到5M 系统盘为ESSD云盘40GB起 CPU内存配置可选2核2G 2核4G 4核8G 8核16G等配置 云服务器s6公网带宽可选1M到5M 系统盘40G起可选高效
  • 运放单的电源供电和双电源供电

    我们经常看到很多非常经典的运算放大器应用图集 但是他们都建立在双电源的基 础上 很多时候 电路的设计者必须用单电源供电 但是他们不知道该如何将双电源 的电路转换成单电源电路 在设计单电源电路时需要比双电源电路更加小 1 1 电源供电和单电源
  • vue后台管理动态路由-页面刷新之后跳转到默认页面的问题

    路由我们是用公共路由 动态路由 写的过程中发现 在动态路由的页面刷新页面后跳转到了默认页面 也就是我们设置的 path pathMatch redirect dashboard hidden true 本来这行代码我是写到公共路由里面了 就
  • 技术爆炸已至,AIGC(AI-Generated Content)带来内容产业全新格局

    公众号 做棵大树 欢迎关注一起进步 最近 在元宇宙概念大火的同时 人工智能技术也正在迎来新一轮的爆发 Chat GPT AIGC AI Generated Content 人工智能生成内容 正在成为一个新的风口 AIGC 即人工智能生成内容
  • Proteus元件库元件名称及中英对照表

    以下是具体内容 AND 与门 ANTENNA 天线 BATTERY 直流电源 BELL 铃 钟 BVC 同轴电缆接插件 BRIDEG 1 整流桥 二极管 BRIDEG 2 整流桥 集成块 BUFFER 缓冲器 BUZZER 蜂鸣器 CAP
  • 改进YOLO系列:4.添加ACmix注意力机制

    添加ACmix注意力机制 1 ACmix注意力机制论文 ACmix注意力机制原理 ACmix注意力机制的配置 common py配置 yolo py配置 yaml文件配置 1 ACmix注意力机制论文 论文题目 On the Integra
  • 上帝掷骰子吗--量子物理史话

    上帝掷骰子吗 量子物理史话 第一章黄金时代 一 我们的故事要从1887年的德国开始 位于莱茵河边的卡尔斯鲁厄是一座风景秀丽的城市 在它的城中心 矗立着著名的18世纪的宫殿 郁郁葱葱的森林和温暖的气候也使得这座小城成为了欧洲的一个旅游名胜 然
  • C++智能指针简单剖析

    转自 https www cnblogs com lanxuezaipiao p 4132096 html 导读 最近在补看 C Primer Plus 第六版 这的确是本好书 其中关于智能指针的章节解析的非常清晰 一解我以前的多处困惑 C
  • 如何有效地进行代码 Review

    前言 作为公司代码委员会 golang 分会的理事 我 review 了很多代码 看了很多别人的 review 评论 发现不少同学 code review 与写出好代码的水平有待提高 在这里 想分享一下我的一些理念和思路 为什么技术人员包括
  • select下拉框赋值和取值

    jq的select常用的方法 一 下拉框赋值 1 已创建select的下拉框 选中option的value为jquery 例 szfs val jquery 选中option的text为jquery 例 select id option t
  • 五分钟搭建Jetbrains家族IDE授权服务器

    作为Java码农 IntelliJ IDEA可谓是N0 1的开发环境了 对框架的支持 界面 插件都是比较方便的 大大加快了开发的速度以及开发的乐趣 酷炫的界面也能大大的装一个逼 虽然这里教大家搭建授权服务器 但是月入1狗的同志还是支持一下人
  • LVGL学习笔记

    文章目录 前言 一 软件安装 1 VSCode安装 2 MSYS2安装 二 配置环境 1 添加环境变量 2 配置msys2环境 3 配置VSCode 三 运行lvgl示例 前言 最近需要使用LittlevGL 以下简称lvgl 做ARM开发
  • 比较C Sharp和Java

    本文对比C 与Java编程语言 因为这两种语言都具有自动垃圾回收以及运行时编译执行的特点 并且他们的语法都是继承自C语言 C 因此二者有个很多相似之处 但由于C 也被描述为一个C 和Java的混合体 并添加了一些新特性 引入了一些变化 因此
  • 记录el-form+el-dialog表单重置问题

    问题1 使用this refs formName resetFields 方法 表单无法重置 原因 resetField 方法不是将表单重置为空 而是重置为初始值 所以当我们打开新建表单的时候 表单项绑定的属性值为空 在提交表单后 表单项绑
  • 病毒分析教程第三话--静态逆向分析(上)

    静态逆向分析 上 教程参考自 恶意代码分析实战 程序来自 http www nostarch com malware htm 使用上两话静态特征分析和动态行为分析的方法只能从宏观的角度分析样本 但由于无法得到源代码 所以我们无法确凿地判定这