20145326蔡馨熤《计算机病毒》——代码的动静态分析结合
20145326蔡馨熤《计算机病毒》——代码的动静态分析结合
尝试使用各种动静态工具,对代码9-3.exe进行分析,回答如下问题:
该程序导入了哪些DLL?
- 先打开PEiD工具查看样例代码。这里发现了4个dll被调用。
- 另外还有一些dll文件呢,它是在程序运行的时候加载的。我们打开IDA Pro来载入程序进行分析。一般来说,在程序的运行中静态加载的话,会用到LoadLibrary这个函数。我们找找看。
- 在imports中找到后,双击,然后选中地址交叉引用。type对应的是p的话,说明是函数调用,也正是我们关心的。点击交叉引用中的第一项和第二项,我们可以发现还有两个dll文件被调用。
三个dll要求的基地址分别是多少?当使用OD调试该程序时,实际分配的基地址分别是多少?
- 三个dll要求的基地址我们可以在PEiD工具中直接查看,发现都是10000000.
- 当使用OD调试该程序时,实际分配的基地址分别是什么呢?将样例代码导入到OD中后,我们点击一个类似“M”的按钮。然后可以看见dll1和dll2的基地址。这里要注意,操作系统不同,每个人的结果可能是不一样的。
- dll3这个动态链接库是在程序中动态加载的,利用的是函数LoadLibrary。在OD中找到LoadLibrary这个函数的位置,然后在它下面的一个位置设置断点,并让程序执行到这里。这样的话,dll3才会载入到我们的内存中。
当该程序调用DLL1.dll中的一个导入函数时,这个导入函数做了什么?
- 回到IDA Pro中,我们往上可以看见一个函数,即Dll1Print。这个函数其实是保存在dll1这个动态链接库文件中的。于是我们再重新打开一个IDA Pro窗口,将dll1这个文件拖进去,看看有什么发现。
- 找到Dll1Print这个函数的位置,这里有一个函数的调用,即
sub_10001038
,我们进去看一下,发现它有两个参数。第一个参数就是图中那个字符串,这个字符串中有个“%d”
,还有个“\n”
,所以我们可以说sub_10001038
其实就是个printf的函数。第二个参数保存在了eax中,看上一排,它的内容其实就是dword_10008030
的内容。我们双击dword_10008030
看看,然后再交叉引用。
- 一个引用的type为“w”,即写入。另一个引用的type为“r”,即读取。我们先看看第一个结果。可以看见有一个GetCurrentProcessId,于是得知dword_10008030这个变量保存的是我们当前进程的ID值。Dll1Print会把这个ID值打印出来。
当该程序调用writefile函数时,文件名是什么?
- 先找到Writefile这个函数。
- 我们发现它想写入的内容其实是一个网址,如图所示。
但我们想知道写入的文件名是什么,所以我们应该着重分析第一个参数。即ecx中的内容,但是ecx是由hObject决定的,hObject又是由dll2ReturnJ的返回值决定的。
将dll2单独载入。
dll2.dll中调用了两个函数,即dll2print和dll2ReturnJ。
先看看dll2print。我们发现这里同样有一个类似的字符串。想要打印的内容呢,保存在dword_1000B078这个位置。我们对这个位置交叉引用一下,双击第一个type为“w”的结果。
- 可以发现一个CreatefileA的函数,当CreatefileA这个函数被调用后,它所打开的文件的句柄就会保存在
dword_1000B078
这个位置,它所打开的文件就是“temp.txt”。所以说dword_1000B078
这个位置保存的就是“temp.txt”的句柄。当该程序调用writefile函数时,文件名是“temp.txt”。
当该程序调用NetScheduleJobADD创建一个job时,从哪里得到第二个参数数值
- 先找到NetScheduleJobADD的位置。
- 关于这个函数,我们可以查看MSDN上的相关说明。
它的功能就是在未来的一个指定时间提交一个任务,并且去执行。它的第二个参数是buffer,其实就是一个指针,指向一个AT_INFO的数据结构。
这段程序在Writefile之后,调用了LoadLibrary将dll3加载到我们的内存当中。接着是调用GetProcAddress来获取函数Dll3Print的地址,获取地址后,通过call指令来执行Dll3Print这个函数。之后又调用了一次GetProcAddress函数,用于获取Dll3GetStructure的地址,再执行这个函数。
我们再单独载入dll3。
- 首先看看Dll3Print这个函数,这里依旧有一个类似的字符串。Dll3Print所打印的神秘数据是WideCharStr里面的内容。
- 我们双击WideCharStr后再进行交叉引用,可以发现这个变量在dllmain中出现过。dllmain中调用了MultibytetoWideChar这样一个函数。通过MSDN得知它的功能是将多字节的形式转换成宽字符的形式。
有个字符串是
“ping www.malwareanalysisbook.com”
,将它转换成宽字符的形式,最后将结果保存在WideCharStr中。我们再来看看函数
dll3GetStructure
,发现它有一个参数。这个参数就是我们当前程序中一个局部变量的地址。
- 由图得知,将
dword_1000B0A0
这个地址赋给了以eax的值为地址的内存空间里面,存入的内容是什么呢?我们双击dword_1000B0A0
再进行交叉引用看看,第一个结果就是对它的内容进行改写的位置。双击进去看看。可以看见一个区域中有很多mov操作,作用就是赋值呗。
- 这个区域的起始地址就会成为
NetScheduleJobADD
的第二个参数的内容。这个区域就是类似AT_INFO的一个结构体。
- 为了把这个结构体更好的显现出来,我们进行如下操作。点击Structures窗口,然后按下“insert”键,点击add standard Structure,选中AT_INFO,添加成功。然后再来到数据的位置。选中当前位置,然后点击
“edit”
,“struct var”
,再选择“AT_INFO”
。
- 最后再回到dllmain的位置,可以发现,对刚刚那个区域进行转换后,更有助于我们的分析。
该程序所打印的三块数据中,三个dll的数据分别是什么?
dll1的数据是当前进程的ID值。
dll2的数据是temp.txt的句柄。
dll3的数据是
“ping www.malwareanalysisbook.com”
这个字符串在内存中的地址。
如何将dll2.dll加载到IDA中,使其与OD中加载的地址匹配?
- 将dll2单独导入到IDA Pro中,不过要选择手动加载。
- 这里要求我们输入dll2的基地址,我们可以在OD中查看到结果。
- 顺利导入dll2。与OD中加载的地址成功匹配。
转载于:https://www.cnblogs.com/cxy1616/p/6916933.html
20145326蔡馨熤《计算机病毒》——代码的动静态分析结合相关推荐
- 20145326蔡馨熤《计算机病毒》——静态分析(2)
20145326蔡馨熤<计算机病毒>--静态分析(2) 基于样例代码lab01-02.exe. 相比于VirusTotal,我更喜欢用VirScan,因为前者太慢了.我们可以从报告中获得一 ...
- 20145326蔡馨熤《信息安全系统设计基础》第1周学习总结
20145326蔡馨熤<信息安全系统设计基础>第1周学习总结 教材学习内容总结: 一.Linux基础 1.环境登录 无需密码自动登录,系统用户名shiyanlou 2.环境介绍 本实验环境 ...
- 20145326蔡馨熤《信息安全系统设计基础》期末总结
20145326蔡馨熤<信息安全系统设计基础>期末总结 每周作业链接汇总 第0周作业 简要内容:初步翻阅课本,提出问题:学会如何使用虚拟机VirtualBox并成功安装Ubantu:预习了 ...
- 20145326蔡馨熤《网络对抗》——信息搜集与漏洞扫描
20145326蔡馨熤<网络对抗>--信息搜集与漏洞扫描 1.实验后回答问题 (1)哪些组织负责DNS,IP的管理. ICANN是一个集合了全球网络界商业.技术及学术各领域专家的非营利性国 ...
- 20145326蔡馨熠《信息安全系统设计》第2周学习总结
20145326蔡馨熠<信息安全系统设计>第2周学习总结 教材学习内容总结 一.计算机系统与链接 信息就是位+上下文,都是由一串位表示的,区分不同数据对象的唯一方法是我们读到这些数据对象时 ...
- 20145326蔡馨熠 实验三 敏捷开发与XP实践
20145326蔡馨熠 实验三 "敏捷开发与XP实践" 程序设计过程 一.实验内容 使用 git 上传代码 使用 git 相互更改代码 实现代码的重载 1.git上传代码 首先我通 ...
- 20145326蔡馨熠《网络对抗》——免杀原理与实践
20145326蔡馨熠<网络对抗>--免杀原理与实践 报告内容 1.理解免杀技术原理. 免杀,也就是反病毒(AntiVirus)与反间谍(AntiSpyware)的对立面,英文为Anti- ...
- 问卷调查(20145326蔡馨熠)
你对自己的未来有什么规划?做了哪些准备? 答:希望在大学期间好好的充实自己,不仅在学术上要有一定进步,在自身综合素质上和为人处事的技巧上也要有所提高才行,为将来踏身社会做准备.然后就是希望身体健健康康 ...
- C/C++ 项目必读:代码格式化和静态分析检查的一站式工作流 Cpp Linter
本篇是关于 C/C++ 代码格式化和静态分析检查的实践分享. 目前 C/C++ 语言的代码格式化和检查工具使用的最为广泛的是 LLVM[1] 项目中的 Clang-Format[2] 和 Clang- ...
最新文章
- GitHub上中国顶尖大学的课程资源共享计划
- linux m4a 转换成 mp3
- 结对-贪吃蛇-项目进度
- luogu P2365 任务安排(FJOI2019 batch)
- DropDownList设置选定项,设置选择项,最安全的方法
- java 发邮件_java实现邮件的发送
- Eclipse下载及安装hibernate插件
- laravel的路由分组,中间件,命名空间,子域名,路由前缀(四)
- java代码发送http请求时DnsResolver使用问题
- 著名的软件系统开发公司有哪些公司
- [转] 关于“时间”的一次探索
- OpenGL 实现视频编辑中的转场效果
- android第三方开发包(十七)
- VUE微信H5生成二维码海报保存在本地相册
- 汉字一、二级字库的汉字与unicode编码(十六进制)对照表,按照unicode的顺序排列 1
- linux 软件包kbd 位置,kbd-audio:通过麦克风来捕获和分析键盘输入的工具
- 预测学习:深度生成式模型、DcGAN、应用案例、相关paper
- archlinux安装
- matlab计算macd_[原创]基于MATLAB的一个简单的交易策略(基于MACD)的Matlab代码-经管之家官网!...
- ubuntu中把软件放在桌面
热门文章
- ctfshow-WEB-web14( 利用数据库读写功能读取网站敏感文件)
- SQLi LABS Less-13 报错注入+布尔盲注
- 谈谈JavaScript中的function constructor和new关键字
- 多线程、多平台环境中的跟踪 - 使用 log4j 和 UNIX 命令来挖掘跟踪数据
- 20135337——信息安全设计基础第八周学习笔记
- lucene学习-3 - 代码重构
- Running 1 linux_yesterdaytodaytomorrow
- Linux下的NFS网络文件系统
- Java中抽象类和接口的区别(来源二,原始来源不明确)
- 测试用例集-9.QQ登录功能测试用例