恶意代码分析实战四:IDA Pro神器的使用
恶意代码分析实战四:IDA Pro神器的使用
这节课主要通过使用IDA Pro来进行静态高级分析
实验:
----------------
Lab05-01.dll
----------------
使用工具:
1. IDA Pro
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
1、DllMain的地址是什么?
2、使用Imports窗口并浏览到的gethostbyname,导入函数定位到什么地址?
3、有多少函数调用了gethostbyname?
4、将精力集中在位于0x10001757处的对gethostbyname的调用,你能找出哪个DNS请求将被触发吗?
5、IDA Pro识别了在0x10001656处的子过程中的多少个局部变量?
6、IDA Pro识别了在0x10001656处的子过程中的多少个参数?
7、使用Strings窗口,来在反汇编中定位字符串\cmd.exe /c 。它位于哪?
8、在引用\cmd.exe /c的代码所在的区域发生了什么?
9、在同一的区域,在0x100101C8处,看起来好像是dword_1008E5C4是一个全局变量,它帮助决定走哪条路径。那恶意代码是如何设置dword_1008E5C4的呢?(提示:使用dword_1008E5C4的交叉引用。)
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
题目1:利用IDA Pro分析dll的入口点并显示地址
按照如下步骤打开IDA Pro并且加载dll文件进行分析。
等待分析完毕后,IDA Pro自动的会显示出dll的入口点函数dllmain
,如图。
题目1让我们显示出dllmain函数的地址,这里有两种方法,第一种方法是直接按空格切换成文本视图,第二种方法是在设置中显示带地址的图形显示。
空格切换文本视图:
带地址显示图形界面
点击菜单 Options->General...->勾上 Line prefixes (graph)
题目2:IDA Pro导入表窗口
在Imports
窗口中按ctrl+f
进行搜索输入gethostbyname
,定位到gethostbyname后双击过去调到文本视图界面看到其地址。
题目3:交叉应用,看多少处函数调用了
在gethostbyname
处按ctrl+x
调出交叉引用
,能看到所有对gethostbyname处有调用读取写入等的所有地方。
点击Type
进行类型排序,然后我们仔细来看这里有两个Type,一个是p
代表的是函数,r
代表的是读取属性,
所以这里一共有9个p,但是这9个p并不能代码是9个函数调用了,我们在仔细来看图2,其中他有很多地址重复的,所以我们按照地址来分一共可以分析出是4处函数调用了gethostbyname。
题目4:利用ctrl+g跳转地址
将精力集中在位于0x10001757处的对gethostbyname的调用,你能找出哪个DNS请求将被触发吗?
首先我们用ctrl+c拷贝0x10001757
这个地址,然后在IDA Pro文本视图或界面视图,按g
按键,跳转到对应的地址处。
切换到界面视图,然后对题目4的问题进行分析:你能找出哪个DNS请求将被触发吗?,我们找找gethostbyname的参数,一般call的意思就是调用函数,这里call gethostbyname就是调用gethostbyname这个api函数,然后call上面挨着的push就是函数参数,可以看到这里就一个参数push eax
,参数是eax,所以我们来看看是什么给eax进行了赋值,往上可以看到有一句mov eax,off_10019040
,这种带off_或者dword_下划线后面加个地址的可能都是全局变量
,在后面有个注释是IDA Pro自动加上的,他这里分析出来off_10019040是一个字符串[This is RDO]pics.praticalmalwareanalys
我们也可以直接双击全局变量过去,跳到他的定义处,在图一中还有一句add eax,0Dh
,意思是将eax字符串的指针指向从开头后0xD也就是后13处,那么正好是pics.praticalmalwareanalys
这个域名被解析。(答案)
题目5:局部变量分析
IDA Pro识别了在0x10001656处的子过程中的多少个局部变量?
首先跳转到地址处,不再重复如何跳转。然后我们在汇编代码的上面可以看到这些东西,红色标记的地方,这些都是局部变量和参数,其中带负号的
都是局部变量,这里一共有23个带负号的,也就是23个局部变量。
题目6:函数参数分析
IDA Pro识别了在0x10001656处的子过程中的多少个参数?
看上面的图,其中正数
的就是参数,这里只有一个参数lpThreadParameter
,其实也可以看函数头注释那里,IDA Pro自动分析出了DWORD __stdcall sub_10001656(LPVOID lpThreadParameter)
,可以看出是一个参数。
题目7:Strings字符串窗口
使用Strings窗口,来在反汇编中定位字符串\cmd.exe /c 。它位于哪?
我们可以按shift+f12
来打开字符串窗口,可以在菜单中点击View->Open subviews->Strings
打开字符串窗口。
双击过去之后点击这个地方,然后在图2中可以看到是0x100101D0
位置的反汇编push offset aCmdExeC
处。
题目8:代码分析
在引用\cmd.exe /c的代码所在的区域发生了什么?
我们在100101D0
地址处,按一下按键F5
进入反编译C++伪代码
进行代码分析。
首先我们在函数开头的地方开始逐步分析,可以看到一些敏感的字符串,这里有个关键字Remote Shell Session
,所以这个程序应该是一个恶意远程Shell程序。
接着就是用控制命令,远程创建cmd命令来达到执行Shell的目的。
题目9:进阶分析
在同一的区域,在0x100101C8处,看起来好像是dword_1008E5C4是一个全局变量,它帮助决定走哪条路径。那恶意代码是如何设置dword_1008E5C4的呢?(提示:使用dword_1008E5C4的交叉引用。)
跳转到地址,然后点击全局变量,在全局变量位置处按ctrl+x
调出交叉引用,然后可以看到有w 和r两种属性,其中我们可以知道w就是写入属性,而题目中需要我们来cmp
走哪条分支,还有如何设置dword_1008E5C4全局变量,那么肯定是要看w属性看是什么东西写入到了全局变量dword_1008E5C4
。
可以看到代码处是eax复制给了全局变量dword_1008E5C4
,而eax来源于上一句call的返回值,所以我们需要继续跟入Call来看他的返回值是什么?
sub_10003695函数功能是获取系统版本信息,并且判断系统版本是否为NT系统,如果是返回true,否则返回false。
根据上面的分析我们可以得出结论,dword_1008E5C4的值应该是true也就是不为0,所以他不会跳转到loc_1001d7处,而是继续执行"cmd.exe /c"处。
总结:
这一节我们学习了IDA Pro的很多知识,主要学会了IDA Pro
- 文本视图和界面视图的切换(用空格按键)
- 在界面视图显示地址
- 查看IDA Pro的导入表窗口
- 交叉引用,查看被多少处函数调用(ctrl + x)
- 地址的跳转(ctrl + g)
- 函数内局部变量的分析(带负号的)
- 函数参数分析(push xx,call xxx)、(正数的)
- Strings 字符串窗口的查看(shift + f12)
- 代码分析(f5)
- 静态分析流程分支,追溯(利用ctrl +x) 看w和r属性,分析函数返回值
恶意代码分析实战四:IDA Pro神器的使用的更多相关文章
- 恶意代码分析实战五:OllyDebug动态结合
目录 恶意代码分析实战五:OllyDebug动态结合 OllyDebug界面介绍 OllyDebug载入程序方法 OllyDebug地址跳转 OllyDebug下断点 OllyDebug单步执行 Ol ...
- 恶意代码分析实战-PE资源提取
场景 1.提取恶意代码中的资源部分内容 思路 存在Loadresource函数的时候说明有一部分内容在资源里. 技术点 Lab1-4 ResourceHacker打开保存资源,载入IDA查看
- 恶意代码分析实战-启动一个恶意的DLL
如果不能把恶意代码运行起来,那么动态分析基础技术没有什么用. Windows版本中包含rundll32.exe程序,提供了一个运行DLL的平台. rundll32.exe Dllname,Export ...
- 恶意代码分析实战-x86反汇编速成班
x86反汇编速成 x86体系结构 3种硬件构成: 中央处理器:负责执行代码 内存(RAM):负责存储所有的数据和代码 输入/输出系统(I/O):为硬盘.键盘.显示器等设备提供接口 内存 一个程序的内存 ...
- 恶意代码分析实战-确认EXE什么时候编译的
场景 确认开源的后门在中毒机器上是什么版本,具有什么功能. 思路 1.查看样本PE里的编译时间 2.对照开源后门里组件的编译时间 技术点 查看NT头-TimeDateStamp struct IMAG ...
- 2017-2018-2 20155314《网络对抗技术》Exp4 恶意代码分析
2017-2018-2 20155314<网络对抗技术>Exp4 恶意代码分析 目录 实验要求 实验内容 实验环境 基础问题回答 预备知识 实验步骤 1 静态分析 1.1 使用virsca ...
- 20165310 NetSec2019 Week6 Exp4 恶意代码分析
20165310 NetSec2019 Week6 Exp4 恶意代码分析 一.实验要求 1.系统运行监控 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里.运行一段时间 ...
- 2018-2019-2 20165234 《网络对抗技术》 Exp4 恶意代码分析
实验四 恶意代码分析 实验目的 1.监控自己系统的运行状态,看有没有可疑的程序在运行. 2.分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals ...
- 2018-2019-2 网络对抗技术 20162329 Exp4 恶意代码分析
目录 Exp4 恶意代码分析 一.基础问题 问题1: 问题2: 二.系统监控 1. 系统命令监控 2. 使用Windows系统工具集sysmon监控系统状态 三.恶意软件分析 1. virustota ...
随机推荐
- 【OWASP TOP10】2021年常见web安全漏洞TOP10排行
[2021]常见web安全漏洞TOP10排行 应用程序安全风险 攻击者可以通过应用程序中许多的不同的路径方式去危害企业业务.每种路径方法都代表了一种风险,这些风险都值得关注. 什么是 OWASP TO ...
- PHP中的PDO对象操作学习(一)初始化PDO及原始SQL语句操作
PDO 已经是 PHP 中操作数据库事实上的标准.包括现在的框架和各种类库,都是以 PDO 作为数据库的连接方式.基本上只有我们自己在写简单的测试代码或者小的功能时会使用 mysqli 来操作数据库. ...
- Linux系列(32) - rpm命令管理之RPM查询(4)
RPM包默认安装位置 RPM包默认安装路径 /etc/ 配置文件安装目录 /usr/bin/ 可执行的命令安装目录 /usr/lib/ 程序所使用的函数库保存位置 /usr/share/doc/ 基本 ...
- javascript 数组 shuffle 洗牌 打乱顺序
* php shuffle 打乱数组顺序 Array.prototype.shuffle = function () { "use strict"; var a = [], b = ...
- 写SQL的套路
定义问题 转化问题 如要解决的问题是:查出每门课程成绩都大于80分学生的姓名,可以转化为:只要学生最小分数的课程大于80分,就是所有课程成绩都大于80分. 查询同名同姓学生名单并统计同名人数--> ...
- python 文件夹扫描
扫描指定文件夹下的文件.或者匹配指定后缀和前缀的函数. 假设要扫描指定文件夹下的文件,包含子文件夹,调用scan_files("/export/home/test/") 假设要扫描 ...
- 启动jemeter 报错相关解决方案
1:当启动jemeter时报错"页面文件太小,无法完成操作" 如图: 是说明分配的内容不足,即可调整内存重启即可解决 1):打开:控制面板>系统和安全>系统 2):点击 ...
- 鸿蒙内核源码分析(GN应用篇) | GN语法及在鸿蒙的使用 | 百篇博客分析OpenHarmony源码 | v60.01
百篇博客系列篇.本篇为: v60.xx 鸿蒙内核源码分析(gn应用篇) | gn语法及在鸿蒙的使用 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙 ...
- AT4505-[AGC029F]Construction of a tree【构造题,hall定理,网络流】
正题 题目链接:https://www.luogu.com.cn/problem/AT4505 题目大意 给出\(n\)个点和\(n-1\)个点集\(U_i\),每个点集中选择两个点连边使得该图是一棵 ...
- Python3入门系列之-----算术运算符|比较运算符|赋值运算符|逻辑运算符|成员运算符|身份运算符
什么是运算符? 本章节主要说明Python的运算符.举个简单的例子 1 +2 = 3 . 例子中,1 和 1.2 被称为操作数,"+" 称为运算符. Python语言支持以下类型的 ...