恶意代码分析实战 Lab19

lab19-01

1IDApro打开看到解码代码如下


od调试的时候显示说无法作为及时调试器调试,所以只能用windbg,虽然麻烦了点

解码后程序先跳到003a0464


接着在464处,马上调用003a03bf函数


步入查看程序又调用003a039e函数


步入查看函数,这段函数很短,可以很容易看出来是在得到kernel32的base地址,看30h是的搭配peb结构地址,1ch是得到InInitializationOrderLinks链表项,并且得到第二个链表项的偏移8的dllbase,这里认为kernel是第二个被初始化的,win7下就不一定是这样了.


接着返回函数,注意到接下来调用了很多的003a0352函数,可以知道这个函数是得到一些kernelAPI地址的函数


进入003a0352函数查看,注意到函数003a0331函数调用,推测这是得到散列值的函数,注意到后面的比较就知道不难推测这个函数作用,这里的24h是kernel的base也就是第一个参数,kernelbase+3ch为了得到PE头地址,然后78h得到的是导出表的rva


所以edx现在是导出表地址,他的18h偏移是numberofnames,1ch偏移是addressoffunctions,20h是addressofnames,24h是addressofnameordinals

所以不难看出来上面函数在偏移20h的addressofnames

看一下散列算法,可以看到是跟课本一样


为了知道6次调用都得到那些API地址可以在函数003a0352内部jne后面一个mov指令设置断点然后db esi查看函数名,如第二次是得到GetSystemDirectoryAPI地址


通过这种方法知道分别得到loadlibrary GetSystemDirectory Terminateprocess getcurrentProcess winExec这五个API地址

得到这几个API之后首先调用ebp-4也就是loadlibrary参数是eax里面的URLMON.dll



接着得到urldownloadtofileAPI地址放在ebp-18h


接着调用ebp-8的GetSystemDirectory


接着调用ebp-18h就是urldownloadtofileAPI我们看一下参数url和filename就好


接着调用ebp-14h运行那个1.exe程序


然后调用ebp-10h得到当前进程句柄,然后调用ebp-ch结束当前进程


分析结束


lab19-02

函数先提权

然后调用sub_401000函数,这个函数得到如下字符串,得到的是系统默认浏览器的绝对路径名


函数sub_401180函数是运行这个浏览器


接着sub_401230实现shellcode注入,shellcode在asc_407030


跳到asc_407030处按c使得IDApro将他识别为代码


看到解码很简单异或E7就好,我用winhex将这段shellcode拷贝出来保存在shellcoade19-02.bin然后在和E7异或,最后用IDApro打开就可以静态分析shellcode的源代码了

会发现程序的几个函数调用和流程和我们之前分析的lab19-01很像,同样的到kernel32,dll的base

然后得到loadlibrary的地址

接着调用loadlibrary得到ws2_32.dll


为了动态分析,使用lab19-01同样的分析方法可以得到








得到两个dll所需要的API后,调用如下函数


然后是建立套接字


建立连接


看下参数sockaddr其中02c8a8c0指的是ip192.168.200.2(c0:a8:c8:02) 1234 0002指的13330(0x3412)端口和2(AF_INET)


连接成功会创建cmd进程,建立反向shell

注意建立进程之前的参数设置,下图这里的esp为startupinfo结构体,他的48h开始是进程的标准输入标准输出和标准错误,都被赋值为eax(来自esi来自之前建立套接口的返回值)

    



最后会调用getcurrentprocess和terminateprocess结束进程



运行结果反向shell成功



lab19-03

用推荐工具检测是否存在脚本


然后winhex打开pdf,搜索JavaScript

将那一段拷贝出来得到找到攻击负载



找到负载就可以用课本提供脚本提取处shellcode,然后用课本提供那个.exe运行恶意代码,动态分析了

要知道都得到那些API的地址的方法之前两个代码分析已经讲过不再赘述,直接给出结论,导入如下函数



直接看代码

分配堆


设置文件指针,然后读取信息到之前创建的堆中(sub_13D内部会调用readfile)


得到临时文件目录


再sub_EB内部会创建文件foo.exe,然后会把之前堆里面的数据写到文件


然后创建foo.exe进程


后面是基本一样的操作,又写了一个bar.pdf文件再临时文件目录下

最后调用shellExecute启动这个pdf文件,文件名在第三个参数向上追溯就知道对那个文件操作



这个程序没有动态分析验证,是因为觉得前面两个分析的够多了,这个代码也不难看出,只要知道了每个call都是在调用那个API(像我上面那样注释)就不难理解代码主要在做什么,当然很多细节没有分析道,毕竟只是静态分析,比如每个函数的参数具体是什么如果没有动态分析是很难确定的,但是不妨碍我们静态分析推测,比如上面的一些对文件的操作,我们不难推测都是对原来的.pdf文件的读写操作,显然后面写的两个exe和.pdf文件之前都存在最开始的.pdf文件,这是很显然的,即使不用动态分析我们也应该有这样的自觉

分析结束


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值