计算机病毒实践汇总六: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使用流式Socket6:IPPROTO_TCP使用tcp协议
可以右击更改为对应的名称方便理解:
这个标志实际上是一个枚举型变量:
更改后效果:
4. 实践小结
- 有同学遇到了这样一个问题来问我:在Function window中搜索后面某一题中调用的函数没有找到,在Import中搜索到了,这个Function Window不应该包含这个程序里所有的函数吗,为什么会找不到一个确实被调用了的函数呢?
我看了一下,确实是这样,打开其它程序,同样不显示导入函数:
查看Function Window中的标志F,因为标志F表示可能是导入函数,也可能是自己写的函数,没有看到有该标志的,可能是因为IDA版本问题或者是本身导入函数就不算在程序中写的函数?
IDA Pro功能实在是太强大了,在这么短的时间内只做到了根据问题粗略的使用,《恶意代码分析实战》用了一章的篇幅讲这个强大的反汇编器,读完了之后感觉有很多可拓展的使用方法(有些插件需要付费才能下载,免费版的功能和上面说的不大一样),还需要一定时间的学习。
在做这次实践的过程中,我一直在想如何在没有这些问题的提示下使用IDAPro对一个恶意代码进行高级静态分析。汇编和反汇编很重要,对程序及工具交互能力的利用也很重要。在接下来的学习过程中需要逐步解决这个问题。
参考资料:《恶意代码分析实战》读书笔记 静态分析高级技术一
转载于:https://www.cnblogs.com/hyq20135317/p/5572810.html
计算机病毒实践汇总六:IDA Pro基础相关推荐
- [免费专栏] Android安全之静态逆向APK应用浅析「手动注入smali」+「IDA Pro静态分析so文件」+「IDA Pro基础使用讲解」
也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...
- 计算机病毒实践汇总五:搭建虚拟网络环境
在尝试学习分析的过程中,判断结论不一定准确,只是一些我自己的思考和探索.敬请批评指正! 涉及内容: INetSim安装及使用 ApateDNS安装及使用 1. 搭建病毒分析网络环境原因 使用虚拟机作为 ...
- IDA PRO 静态反汇编与OllyDbg动态调试实战技巧汇总
IDA PRO 静态反汇编与OllyDbg动态调试实战技巧汇总 ********************************** 案例一: 使用IDA PRO+OllyDbg+PEview 追踪w ...
- [系统安全] 三.IDA Pro反汇编工具初识及逆向工程解密实战
您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...
- 小学计算机管理员教学计划,小学教学计划汇总六篇
小学教学计划汇总六篇 日子如同白驹过隙,不经意间,我们又将学习新的知识,有新的感受,做好教学计划,让自己成为更有竞争力的人吧.教学计划怎么写才能切实地帮助到自己将来的工作呢?下面是小编整理的小学教学计 ...
- 计算机网络教室课程安排表,关于计算机教学计划汇总六篇
关于计算机教学计划汇总六篇 时光飞逝,时间在慢慢推演,我们又将奔赴下一阶段的教学,我们要好好计划今后的教育教学方法.是不是无从下笔.没有头绪?以下是小编收集整理的计算机教学计划9篇,欢迎阅读与收藏. ...
- 计算机社团竞选优势6,关于社团竞选演讲稿汇总六篇
关于社团竞选演讲稿汇总六篇 使用正确的写作思路书写演讲稿会更加事半功倍.在我们平凡的日常里,演讲稿应用范围愈来愈广泛,大家知道演讲稿的格式吗?下面是小编为大家整理的社团竞选演讲稿6篇,供大家参考借鉴, ...
- Android之使用IDA Pro静态分析so文件
安卓应用程序的开发语言是java,但是由于java层的代码很容易被反编译,而反编译c/c++程序的难度比较大,所以现在很多安卓应用程序的核心部分都使用NDK进行开发.关于NDK的开发知识点,请看这篇博 ...
- ida调试linux程序,MAC使用IDA PRO远程调试LINUX程序
1 背景 在学习Linux系统上的一些漏洞知识的时候,往往需要进行"实地测试",但是在Linux系统上进行调试并不太方便,因为LINUX自带的GDB调试工具真的不太人性化,即使有G ...
最新文章
- Python中的注释和算数运算符
- java测试spring cloud_java – 从Spring引导单元测试中排除Spring Cloud Config Server
- FPGA设计的常用思想与技巧(转)
- 深入了解java虚拟机(JVM) 第四章 对象的创建
- 需要gmail的朋友请留下你们的email,还有86个
- linux 创建进程 execl,linux中进程的vfork()和execl()函数
- 【DFS + Backtracking】LeetCode 79. Word Search
- 数字电子技术基础(五):编码器
- 在WebServer中如何实现CGI技术
- excel找出重复值
- 微信小程序识别图片并提取文字_微信小程序图片上传(文字识别)
- android编码技巧_我如何使用编码技巧使航空公司取代丢失的婴儿车
- PMP 粗略量级估算与确定性估算
- golang控制结构之select
- jQuery入门 jQuery入门第三天
- win10电脑字体突然变得模糊,很细
- 微信公众号ios端,滚动条不隐藏解决办法其中之一
- SLC、MLC、TLC与QLC的区别
- Dell Wyse 3040瘦客户机,EMMC刷入OpenWrt,并启用自带的无线网卡
- 电流互感器与电能仪表的施工安装指导
热门文章
- PDE12 wave equation: charactistics
- PYTORCH BN层
- jbod ugood 磁盘驱动状态_LSI Storcli 工具使用
- google地球无法连接_WiFi无法连接?解决macOS Big Sur/Mojave/ Catalina上的Wi-Fi问题
- queryrunner带参数的构造函数和不带参数的构造函数有什么区别_再谈构造函数、原型、原型链之间的关系...
- grafana默认用户名密码_提升运维格调?Grafana整合Zabbix
- 苹果生产日期对照表2020_苹果官方确定部分AirPods Pro出现声音问题,承诺换修
- android制作弹出框样式,Android Dialog 弹出框 自定义 样式
- vc udp 广播接收和发送_udp聊天?使用udp+python实现多人聊天室
- loss值多少才算收敛_你了解TDS值是多少才是合格的吗?