计算机病毒实践汇总六:IDA Pro基础
在尝试学习分析的过程中,判断结论不一定准确,只是一些我自己的思考和探索。敬请批评指正!
1. IDA使用
(1)搜索、下载并执行IDA Pro,对可执行程序lab05-01.dll进行装载,分别以图形模式和文本模式查看程序的反汇编结果
运行IDA Pro,打开Lab05-01.dll,以图形化界面显示:

直接定位到DLLMain开始的位置上。用空格键可以切换到文本模式查看:

(2)查看程序中的所有函数
程序中的所有函数包括:导入函数、导出函数、在中间过程中使用的函数。
我们可以从Import窗口查看导入函数,Export窗口查看导出函数,Function Window查看程序中所有函数:

(3) 查看程序中的所有字符串:
打开字符串strings视图:

这里就可以看到所有的字符串:

(4)查看某个函数调用其它函数的情况
随便在左侧函数栏找一个函数,双击到达这个函数所在位置.text节10011F40:

使用图形化工具查看:

Function calls显示所有的函数调用;Xrefs to查看哪些函数调用了这个函数:
Xrefs from查看这个函数调用了那些函数:
User Xrefs chart可以让用户选择显示内容:
- Cross references to:显示被那些函数调用,相当于Xrefs to
- Cross references from:显示调用那些函数,相当于Xrefs from
- Recursive:递归显示, 若取消则仅显示上下直接调用函数
- Follow only current direction:仅当前函数,若取消就变成了显示全部的函数调用
- Recursion depth:显示调用的深度
- Externals:是否忽略外部Windows API函数
- Data:是否忽略数据
- From Library Functions:是否忽略库函数内部的交叉参考
- To Library functions:是否忽略外部的交叉参考
- Print Comment:是否对外部函数打印注释
2. 使用IDA对lab05-01.dll进行分析
(1)DLLMain的地址是?
一打开lab05-01.dll程序,自动停到入口地址DLLMain的位置:

可以看到DLLMain的地址是在.text节1000D02E的位置
(2)调用了gethostbyname的函数有?
打开导入表:

通过ALT+T调出查找gethostbyname:

然后被定位到:

双击该项,跳转到其定位的地址100163CC的位置上:

使用IDAPro的交叉引用功能,在上述位置用快捷键Ctrl+X打开交叉引用窗口:

p是gethostbyname被调用的引用,经过观察可得,在5个不同的位置调用了gethostbyname。
(3)分析地址为0x10001757处对gethostbyname的调用,确定DNS请求的目标。
使用快捷键G快速定位到0x10001757:

这里是一段汇编代码,call指令调用gethostbyname:

这一段里面,首先在eax中压入偏移,双击off_10019040可以查看:

这里可以通过IDA的自动注释功能看到部分内容,双击aThisIsRdoPics查看完整的内容:

- 这里就是这个偏移指向的字符串“[This is RDO]pics.praticalmalwareanalysis.com”。
接着,eax加上了0Dh,我们通过hex界面可能看得更直观,右击aThisIsRdoPics选择在新的十六进制视图打开:

光标放在网址最前位置,可以在下方看到相对偏移,除去中括号中内容的网址部分开始位置的偏移就是0Dh:

然后将这个指向这个URL的eax压入栈,调用gethostbyname函数。
(4)字符串“\cmd.exe /c”出现在内存中的什么位置?分析引用“\cmd.exe /c”的代码所在区域可能完成的作用。
在字符串视图查找字符串“\cmd.exe /c”:

双击打开:

可以看到位置是xdoors_d:10095B34。通过双击字符串后面注释中的上箭头或Ctrl+C查看交叉引用找到其引用:

定位到:

汇编学的不好,在这里看汇编代码也实在是费劲,为了大体判断这一部分的功能,我采用图形化界面,直接双击蓝色无条件跳转指向线、绿色条件跳转指向线查看代码的流程。
可以看到一些有用的信息:
call ds:GetCurrentDirectoryA:是一个系统参数,在一个缓冲区中装载当前目录。
call ds:GetLocalTime:获取本地时间。
字符串位置:

双击查看:

获得关键信息:“Shell Session”会话
call ds:CreatePipe:创建匿名管道的同时返回两个句柄:管道读句柄和管道写句柄。
call ds:GetStartupInfoA:获取进程起始信息。
call ds:recv:套接字接收函数
call ds:closesocket:关闭套接字。
综合来看,这一部分可能完成的作用是使用套接字的一个远程会话。
(5)函数sub_10004E79调用了哪些函数?其中的API函数有哪些?根据API函数信息猜测该函数的作用,并尝试对该函数进行重命名。
在左侧函数栏查找到sub_10004E79,双击查看:

使用图形化工具查看这个函数调用了那些函数:

函数sub_10004E79调用了直接调用了四个函数,间接调用了四个函数。
API函数有:
GetSystemDefaultLangID:取得系统的默认语言ID
Sprintf:把格式化的数据写入某个字符串中
C语言库函数有:
Send:向一个已经连接的socket发送数据
Strlen:检测字符串实际长度
Malloc:向系统申请分配指定个字节的内存空间
Free:释放指向的存储空间
猜测这个函数应该是获取了系统语言并打印出来,可以在左侧函数栏右击函数编辑:

重命名函数,方便进一步研究:

更改后可以看到函数名都已经被修改了:

(6)在0x10001701处是一个对socket的调用,它的三个参数分别是什么?结合MSDN中socket帮助和IDA中的命名符号常量,你认为这三个参数实际分别是什么?
首先到达0x10001701处,看到其三个参数分别为:2,1,6:

可以使用hex-ray反汇编C语言伪代码看得更清楚:

在MSDN中查找socket function:

可以找到我们需要的参数:
AF

Type

protocol

Socket函数中的三个参数分别为:
2:AF_INET使用IPv4协议
1:SOCK_STREAM使用流式Socket
6:IPPROTO_TCP使用tcp协议
可以右击更改为对应的名称方便理解:

这个标志实际上是一个枚举型变量:

更改后效果:

4. 实践小结
有同学遇到了这样一个问题来问我:在Function window中搜索后面某一题中调用的函数没有找到,在Import中搜索到了,这个Function Window不应该包含这个程序里所有的函数吗,为什么会找不到一个确实被调用了的函数呢?
我看了一下,确实是这样,打开其它程序,同样不显示导入函数:

查看Function Window中的标志F,因为标志F表示可能是导入函数,也可能是自己写的函数,没有看到有该标志的,可能是因为IDA版本问题或者是本身导入函数就不算在程序中写的函数?
IDA Pro功能实在是太强大了,在这么短的时间内只做到了根据问题粗略的使用,《恶意代码分析实战》用了一章的篇幅讲这个强大的反汇编器,读完了之后感觉有很多可拓展的使用方法(有些插件需要付费才能下载,免费版的功能和上面说的不大一样),还需要一定时间的学习。
在做这次实践的过程中,我一直在想如何在没有这些问题的提示下使用IDAPro对一个恶意代码进行高级静态分析。汇编和反汇编很重要,对程序及工具交互能力的利用也很重要。在接下来的学习过程中需要逐步解决这个问题。
计算机病毒实践汇总六:IDA Pro基础的更多相关文章
- 20145233计算机病毒实践九之IDA的使用
20145233计算机病毒实践之IDA的使用 PSLIST导出函数做了什么 这个函数是一个export函数,所以在view中选择export 查到后,双击打开这个函数的位置 仔细看这个函数可以发现这个 ...
- 计算机病毒实践汇总二:bufferzone沙盘使用体验
在尝试学习分析的过程中,判断结论不一定准确,只是一些我自己的思考和探索.敬请批评指正! 1. 安装bufferzone及其简单使用 (1)安装BufferZone BufferZone的msi安装文件 ...
- 计算机病毒实践汇总四:netcat使用方法
在尝试学习分析的过程中,判断结论不一定准确,只是一些我自己的思考和探索.敬请批评指正! 1. netcat概述 (1)特性 "TCP/IP协议栈瑞士军刀",可以被用在支持端口扫描. ...
- IDA,IDA PRO 产品介绍
IDA理念这是我们在开发产品时竭尽全力遵循的理念--在此过程中,我们相信我们将开发出能够为您带来所需的可靠性.便利性和易用性的软件.没有什么能打败人脑因为我们知道一秒钟的洞察力仍然胜过百年的处理时间, ...
- 安卓动态调试七种武器之孔雀翎 – Ida Pro
安卓动态调试七种武器之孔雀翎 – Ida Pro 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是 ...
- kafka原理和实践(六)总结升华
系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践( ...
- App架构师实践指南六之性能优化三
App架构师实践指南六之性能优化三 2018年08月02日 13:57:57 nicolelili1 阅读数:190 内存性能优化1.内存机制和原理 1.1 内存管理内存时一个基础又高深的话题,从 ...
- 《IDA Pro 代码破解解密》笔记一
博客地址:http://blog.csdn.net/qq1084283172/article/details/53158970 return 0; C语言返回0语句的汇编形式 Intel-32汇编: ...
- Ubuntu下安装IDA pro
预备 由于IDA pro只能装在32位环境下,如果是64位Ubuntu,需要运行如下命令安装32位的必备库. sudo dpkg --add-architecture i386 sudo apt-ge ...
随机推荐
- 关于Memcached一致性hash的探究
参考文章 http://blog.chinaunix.net/uid-20498361-id-4303232.html http://blog.csdn.net/kongqz/article/deta ...
- CentOS配置SVN服务器
系统环境:CentOS系统:CentOS 6.5 1.检查是否安装了低版本的SVN rpm -qa subversion 2.卸载旧版本SVN yum remove subversion 3.安装SV ...
- git的基础介绍和使用
git工作原理 git的工作原理还是比较简单的,当我们创建了本地代码仓库后,会在本地代码仓库的根目录中生成一个.git的隐藏文件. .git为一个文件目录,又叫做版本库.在本地代码仓库文件夹中,除.g ...
- 测试家庭流媒体服务器Windows7
测试首先选择了Darwin Streaming Server (DSS) for Windows 下载地址:http://dss.macosforge.org/downloads/DarwinStre ...
- Gold Game
一.项目描述:黄金点游戏 黄金点游戏是一个数字小游戏,其游戏规则是: N个同学(N通常大于10),每人写一个0-100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0 ...
- python 2day
一 优化 username='alex' password=‘alex123’ 可以写成 username,password =‘alex’,'alex123' 二.再次优化 for i in ran ...
- 详解rsync算法--如何减少同步文件时的网络传输量
先看下图中的场景,客户端A和B,以及服务器server都保存了同一个文件,最初,A.B和server上的文件内容都是相同的(记为File.1).某一时刻,B修改了文件内容,上传到SERVER上(记为F ...
- Can't use Subversion command line client:svn
在Intellij IDEA里checkout东西时出先这个错误提示:Can't use Subversion command line client:svn Subversion command l ...
- 6410实现网卡(DM9000A)收发功能及ARP协议实现
1. 网卡硬件结构(DM9000A) 网卡的实质就是MAC通过MII接口控制PHY的过程. MAC主要负责数据帧的构建.数据差错检查.传送控制等. PHY是物理接口收发器,属于物理层,当它收到MAC过 ...
- 英语学习app分析
以下数据分析由队员张波收集整理队员链接 队友的博客 一.数据统计 为了让统计数据更加准确可信,我们选取了三款android平台的应用市场软件作为数据的来源. 英语学习app下载量统计表: 序号 应用名 ...