恶意代码分析实战五:OllyDebug动态结合
恶意代码分析实战五:OllyDebug动态结合
这一节课,主要是利用OD对目标程序进行动态分析,从而学习OllyDebug的使用。
----------------
Lab-09-02.exe
----------------
使用工具:
1.小生我怕怕版OD
2.Strings
3.IDA Pro
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
1、在二进制文件中,你看到的静态字符串是什么?
2、当你运行这个二进制文件时,会发生什么?
3、怎样让恶意代码的攻击负载(payload)获得运行?
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
以下请读者看完文章后自行完成,相信你可以的。
4、在地址0x00401133处发生了什么?
5、传递给子例程(函数)0x00401089的参数是什么?
6、恶意代码使用的域名是什么?
7、恶意代码使用什么编码函数来混淆域名?
8、恶意代码在0x0040106E处调用CreateProcessA函数的意义是什么?
其中1-2题大家利用已学的动静态分析基础技术来进行分析,这里就不再继续演示了
首先我们用OD载入Lab-09-02.exe,然后在main函数入口出下断点,相信大家都应该都已经会了吧,如果还不会可以继续复习下,第四课:IDA Pro神器的使用。
OllyDebug界面介绍
首先OD 一共分4块界面,左上的这一块是反汇编视图,右上的这一块是寄存器视图,左下的这一块是内存视图,右下的这一块是堆栈视图。
OllyDebug载入程序方法
我们载入Lab-09-02.exe
,在OD菜单处点击文件->打开->
然后选择恶意程序进行载入,也可以用快捷键F3来操作。
OllyDebug地址跳转
接着在反汇编视图处按快捷键ctrl+g
调出跳转地址窗口,输入main函数入口点然后点击OK跳转过去。
OllyDebug下断点
跳转过来后按F2下一个断点,然后按F9运行程序,F9运行后程序断下了我们断点的位置,可以根据EIP寄存器
,用来保存当前CPU即将执行指令的地址
,总之可以根据eip指针来看程序现在执行到哪里了。
首先我们来看看标红处,可以看到这里有一堆的mov指令,将字节送入栈空间。
这里我们注意观察可以看到他有两个0的地方,像是分成了两块,有点开发经验的同学可能就知道,其实这是字符串的结尾符,
因为我们在定义一个字符串的时候一般在尾部系统都会自动的添加一个00用来代表这个字符串结束了,所以这里其实是将两个字符串放到了栈空间里面。
OllyDebug单步执行
接着,我们来单步执行(F8),这里讲下单步的命令,其中(F7单步步入)代表的意思是遇到Call后会跟进去,而(F8单步步过)遇到Call后不会跟进去会步过。
我们按6次F8后执行到了00401133指令处,然后可以在堆栈信息处看到,当前堆栈空间里面存放的是'B'字符。
OllyDebug查看内存窗口数据
接着我们在堆栈信息窗口处,鼠标右键->数据窗口中跟随地址
,然后一直F8直到运行到了0这位置为止。
可以看到内存窗口处,汇编指令写入栈空间处的地方生成了字符串。1qaz2wsx3edc
第二处字符串也是采用通用的方法,可以看到字符串ocl.exe
OllyDebug分析函数
我们一直F8运行到GetModuleFileNameA
这一处,然后可以看到这里有3个push,之前我们讲IDA的时候说过,call 就是一个函数,而call上面挨着的push一般是函数的参数,所以这地方一共有3个参数,我们可以在堆栈窗口中看到参数的详细信息。
然后我们可以看到第二个参数是一个buffer,而第三个参数是buffer的大小,我们在第二个参数处右键->数据窗口中跟随,接着看内存窗口。
可以看到此时的buffer是空的,我们需要执行GetModuleFileNameA
后看看buffer中的数据,这里透露下,其实这个api函数是获取当前程序的路径,而我这程序是在桌面运行的,所以buffer数据应该是桌面路径+程序名。
当F8执行后,果然内存窗口中出现了当前的路径字符串。
IDA和OllyDebug动态结合
我们继续F8执行到00401217
地址处,然后可以在堆栈窗口看到这个函数一共2个参数,而且第一个参数就是刚才得到的路径,第二个是一个字符\
。由于在这里OD并没有给我们分析出来这个函数是干嘛的,所以我们需要借助IDA来分析这个函数的功能。
在IDA中跳到对应的地址,然后可以看到这个函数strrchr
,功能详见图2。
所以这个函数运行后应该是会返回第二个参数,最后一次出现在字符串中的位置。
OllyDebug载入符号表
那么这里为什么OD没有帮我们分析出这个函数是strrchr
呢,其实原因是因为OD没有该程序的符号表,我们可以通过IDA中点击菜单中的File->Produce file->Create MAP file...
然后勾选图2中的选项后导出map文件。
然后在OD中点击菜单插件->LoadMapEx->LoadMapEx
,然后选择我IDA生成的符号表文件后,可以看到在图2中看到原本OD没有显示的符号表中的函数,现在显示出来了。
函数执行后,我们可以在eax中看他的返回值,他返回了程序的文件名。
OllyDebug得到答案
然后我们继续f8执行到strcmp
处,可以在堆栈窗口中看到两个字符串ocl.exe
和Lab09-02.exe
,那么到这里我们就大概明白了为什么程序运行后什么反应都没有,是因为他进行了程序名的判断,如果程序名不是ocl.exe那么程序运行后就是直接退出的,那么最后我们来验证下将程序文件名改为ocl.exe运行后看看会有什么效果。
那么执行后呢,可以在Process Explorer中看到程序呢没有退出了而是正常的运行了。
恶意程序创建的Handles
恶意程序调用到的dll
总结:
这一节我们主要根据实验的例子学会了如何的使用OllyDebug这个工具
- 了解了OD的界面(反汇编窗口、寄存器窗口、数据窗口、堆栈窗口)
- 演示了OD如何载入程序(F3)
- OD如何进行地址的跳转(Ctrl+g)
- OD如何下断点(F2)
- OD如何单步步过(F8)
- OD如何单步步入(F7)
- OD查看内存数据窗口的方法
- OD分析函数,参数和返回值(参数在堆栈窗口,返回值在eax)
- IDA和OD动态结合分析
- OD加载IDA导出的符号表
- 通过修改程序名来达到运行恶意程序的目的
欢迎加入QQ群:一起研究逆向、PWN、WEB安全、物联网安全
恶意代码分析实战五:OllyDebug动态结合的更多相关文章
- 恶意代码分析实战四:IDA Pro神器的使用
目录 恶意代码分析实战四:IDA Pro神器的使用 实验: 题目1:利用IDA Pro分析dll的入口点并显示地址 空格切换文本视图: 带地址显示图形界面 题目2:IDA Pro导入表窗口 题目3:交 ...
- 恶意代码分析实战-启动一个恶意的DLL
如果不能把恶意代码运行起来,那么动态分析基础技术没有什么用. Windows版本中包含rundll32.exe程序,提供了一个运行DLL的平台. rundll32.exe Dllname,Export ...
- 恶意代码分析实战-PE资源提取
场景 1.提取恶意代码中的资源部分内容 思路 存在Loadresource函数的时候说明有一部分内容在资源里. 技术点 Lab1-4 ResourceHacker打开保存资源,载入IDA查看
- 恶意代码分析实战-x86反汇编速成班
x86反汇编速成 x86体系结构 3种硬件构成: 中央处理器:负责执行代码 内存(RAM):负责存储所有的数据和代码 输入/输出系统(I/O):为硬盘.键盘.显示器等设备提供接口 内存 一个程序的内存 ...
- 恶意代码分析实战-确认EXE什么时候编译的
场景 确认开源的后门在中毒机器上是什么版本,具有什么功能. 思路 1.查看样本PE里的编译时间 2.对照开源后门里组件的编译时间 技术点 查看NT头-TimeDateStamp struct IMAG ...
- Exp4 恶意代码分析 20154320 李超
恶意代码 概述 恶意代码是指故意编制或设置的.对网络或系统会产生威胁或潜在威胁的计算机代码.最常见的恶意代码有计算机病毒(简称病毒).特洛伊木马(简称木马).计算机蠕虫(简称蠕虫).后门.逻辑炸弹等. ...
- 20155326《网络攻防》Exp4 恶意代码分析
20155326<网络攻防>Exp4 恶意代码分析 基础问题回答: 1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪 ...
- 20145236《网络攻防》Exp4 恶意代码分析
20145236<网络攻防>Exp4 恶意代码分析 一.基础问题回答 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些 ...
- 20155232《网络对抗》Exp4 恶意代码分析
20155232<网络对抗>Exp4 恶意代码分析 1.实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或Exp3中生成后门 ...
随机推荐
- Java基础系列(34)- 什么是数组
数组的定义 数组是相同类型数据的有序集合 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们
- Shell系列(19)- 正则表达式
正则表达式与通配符 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep,awk,sed等命令可以支持正则表达式. 通配符用来匹配符号条件的文件名,通配符是完全匹配.ls,find,c ...
- 剑指offer计划25(模拟中等)---java
1.1.题目1 剑指 Offer 29. 顺时针打印矩阵 1.2.解法 常规开头,先判断特殊情况,然后创建四个变量存放矩阵四边的长度限制. 创建res数组存放结果. 循坏开始,遍历完一行或者一列,就将 ...
- ❤️【Android精进之路-03】创建第一个Android应用程序竟然如此简单❤️
您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 本文会重点介绍如何创建第一个Android应用,以及如何使用Android Studio进行调试 干货满满,建议收藏,需要用到时常看看.小伙伴们如 ...
- Kubernetes-Pod介绍(四)-Deployment
前言 本篇是Kubernetes第七篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战. Kubernetes系列文章: Kubernetes介绍 Kubernetes环境搭建 Kuberne ...
- lua常用一些功能
lua在openresty中获取请求的请求头 local head_table = ngx.req.get_headers() 由于table类型,无法直接使用ngx.say()显示,需要转换为cjs ...
- java基础面试题(一)
1.java中的数据类型,各占多少个字节? 2.面向对象的特性 1-封装:简单来说,封装就是把数据和操作数据的方法绑定起来,如果需要访问,可以使用已定义的接口进行访问 2-继承:从已有的类得到继承信息 ...
- IdentityServer4[2]:启动一个新的IdentityServer项目
启动一个新的IdentityServer项目 从头开始,从基础开始,然后变得更加复杂,循序渐进的学习 工具:VS2017 15.9.8 .Net Core2.2 基本过程 创建一个新的ASP.NET ...
- 关于mysql基础
早就想把自己的数据库基础巩固一下,然而一直没有时间,今天终于抽出时间对mysql数据库基础进行了学习与扩展. mysql与其他数据库的区别 Sqlite: 开源免费,体积小,单文件,没有进程.磁盘读性 ...
- 将Oracle数据库数据每天备份恢复一次数据到另一台服务器上两份数据
1.创建用户,授权,创建测试数据 创建用户 CREATE USER test identified by 123; 授权 grant dba to test; 创建测试数据 create table ...