恶意代码分析实战—实验9-1

实验环境:

实验设备环境:windows xp
实验工具:strings,IDAPro,Ollydbg,Process explore

实验过程

使用strings进行静态分析:
静态分析
我们可以看到此字符串中包含有一些网络连接函数以及创建线程的API函数。
接下来我们采用OD结合IDA的方式进行分析:
但是由于OD无法准确的定位到main函数开始的位置,所以需要采用IDA确定函数开始执行的位置:
main函数地址

在这里我们可以看到main函数的地址为:00401128,现在我们可以在OD中跳到这个地址(Ctrl+G以后输入地址)并下断点:
在这里插入图片描述
运行程序到达断点处后我们会发现一系列数字,但是我们并不知道是什么含义,可以通过IDA获得字符串含义如下:

IDA
我们会发现其实在IDA中也是同样存在这些数字,鼠标点击相应数字后按'r'建就可以转换成字符如下:
转换字符
当然在OD中也可以获得,OD中单步执行到数字命令上方后点击跟踪执行按钮:
跟踪

在单步执行过后就会发现:
显示字符串
继续向下执行到调用系统函数getmodulefilename处,这个函数的作用是获得当前运行程序的路径,现在来观看一下堆栈窗口:
数据跟随
现在我们可以通过跟踪其数据的方式查看运行程序路径,点击单步运行以后步过此系统函数后:
程序运行路径
下面我们继续单步运行,会发现其调用了一个函数,在堆栈窗口发现其存在两个参数:
函数
并且对比数据窗口中的地址会发现第一个参数就是路径信息,但是od并没有告诉我们此函数时什么,所以现在我们可以利用IDA进行查看:
函数
也就是说od中的00401550其实是_strrchr函数。
分析IDA中程序,此函数的作用是获取文件名称(Filename)。
现在用OD步过此函数,会发现在寄存器EAX中会保存此文件名称:
文件名称
继续向下步过,停在下一个调用call指令的位置(004014C0),通过堆栈窗口我们可以发现其调用了两个参数:
调用函数
但是OD还是没有给出此函数名称,我们可以通过IDA查看:
IDA查看函数
我们会发现此函数其实就是strcmp函数,字符串比较函数,因为两个参数并不相等,所以就会返回一个非0值存储在EAX中。
接着步过,其会对eax中的值进行与运算之后会进行判断跳转,但是在OD中这样的结构并不明显,不直观,我们可以利用IDA进行分析:
IDA
其在运行完jz命令之后就会走红色的这条流程,跟随红色的流程其实就是函数结束流程,这也就解释了为什么我们点击程序就会闪退。
为了使程序运行我们需要将文件更改名字为:ocl.exe使其可以通过strcmp函数的比较。

更改名字后重新打开OD以及ODA,在OD中直接跳转到比较函数的位置,下断点之后运行,到达call指令位置后步过,此时我们会发现EAX寄存器中的值变为了全0。
此时就可以继续运行了,利用IDA图形化查看流程:
流程
我们会发现其会调用一些有关于套接字的函数。向下分析发现其调用了一个无法辨析名字的函数:sub_401089,其存在两个参数,我们可以利用OD运行到函数运行前:
IDA函数
4012BD的位置,下断点以后步过:
参数位置

我们会发现其参数信息就是之前我们解析出来的字符串的一部分,第二个参数是一串unicode编码,在IDA中进入此函数,利用IDA反汇编出c语言代码:
反汇编函数
重点在于上图中圈出的位置,其会将unicode字符串循环和之前我们解析出来的字符串进行异或。
同样在OD中我们会发现汇编语言中也会发现异或的汇编指令如下:
异或
点击运行(此过程是函数内部过程,可以点击函数进入查找),持续运行以后我们会发现解析出来的数据信息:
解析出的网址
我们可以发现会解析出一个网址。步过继续分析,退出此函数后回到主函数中,接下来调用函数:
函数
但是我们发现在OD中无法识别此函数,但是在IDA中我们发现此函数就是gethostbyname函数:
在OD中会的堆栈窗口显示出了此函数的两个参数:
参数信息
此函数执行以后会返回一个IP地址。查看IDA流程图:
IDA流程图
如果解析不成功那么就会休眠并返回继续循环解析,如果成功了,就会调用htons函数将主机字节顺序转变为网络字节顺序,之后会调用connect函数进行远程连接。无论connect函数是否成功都会调用sleep函数然后返回主函数继续循环解析。
如果调用成功的话:
调用成功
会调用上图中圈出的函数,双击进入:
函数内部
其实图中所示的函数是一个远程的shell,在调用createprocess函数以前会使用startupinfo作为参数,并进行了相应的修改:
参数修改
其中此参数就是将显示的窗口隐藏(因为等于的是0)。
最后会调用cmd.exe程序,同样也是隐式调用,用户无法发现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值