恶意代码分析实战Lab 5-1

问题

1.DllMain的地址是什么?

使用IDA打开后,鼠标所在位置

.text:1000D02E

在这里插入图片描述

2.使用Imports窗口并浏览到gethostbyname, 导入函数定位到什么地址?

在这里插入图片描述

.idata:100163CC

3.有多少函数调用了gethostbyname?

Jump to xref operand
在这里插入图片描述
函数交叉引用,p是引用,r是读取,必须先读取,再引用。引用了9次,被5个函数调用。

4.将精力集中在位于0x10001757处的对gethostbyname的调用,你能找出那个DNS请求将被触发吗?

使用G键定位0x10001757
在这里插入图片描述
call函数默认将栈顶的值作为函数的参数传递给函数,这里是eax push进去的,eax对应的off_10019040:

在这里插入图片描述

[This is RDO]pics.praticalmalwareanalys

然后点击黄色部分aThisRdoPics,可以看到完整的字符串

[This is RDO]pics.praticalmalwareanalysis.com在这里插入图片描述
刚才gethostbyname那段代码

off_1001904值给了eax之后(off_10019040是字符串指针),0Dh转换成十进制是13,因此最后的结果是指针指向p,所以最后push进栈的值是pics.praticalmalwareanalysis.com

5.IDA Pro识别了在0x10001656处的子过程中的多少个局部变量?

使用G键跳转地址0x10001656,
在这里插入图片描述
分析sub_10001656函数,一共有23个局部变量,大部分以var_为前缀。

6.IDA Pro识别了在0x10001656处的子过程中的多少个参数?

一个参数
在子过程中有arg_0这个参数 lpThreadParameter??

7.使用Strings窗口,来在反汇编中定位字符串\cmd.exe /c。 它位于哪?

一直以为我装的这个IDA没有strings(确实是我没找到),结果需要shift+F12,没有F12
Mac—开启键盘F1 - F12功能键以及F1 - F12功能键的作用
结果还是不知道怎么弄,
找到了,F16都找到了,还是没成功shift+F12
在这里插入图片描述

找到后,双击
在这里插入图片描述
位置:xdoors_d:10095B34

8.在引用\cmd.exe /c的代码所在的区域发生了什么?

\cmd.exe /c下方发现'Encrypt Magic Number For This Remote Shell Session [0x%02x]'
结合recv和send调用,可以猜测是一个shell远程会话函数。
在这里插入图片描述

9.在同样的区域,在0x100101C8处,看起来好像dword_1008E5C4是一个全局变量,它帮助决定走哪条路径。那恶意代码是如何设置dword_1008E5C4的呢?(提示:使用dword_1008E5C4的交叉引用。)

在这里插入图片描述
在这里插入图片描述
只有一处显示被修改,对于该交叉引用,双击进入
在这里插入图片描述
eax被赋给dword_1008E5C4,在这之前是调用了一个sub_10003695函数,进入查看
在这里插入图片描述
GetVersionExA获取版本信息

cmp     [ebp+VersionInformation.dwPlatformId], 2

dwPlatformId2进行比较确定设置AL寄存器。2代表VER_PLATFORM_WIN32_NT,如果这里相等,则AL寄存器将被置位。
setz:当ZF标志被设定时,AL寄存器设1
所以sub_10003694的返回值是1,最后的dword_1008E5C4的值就被赋成了1,所以这个全局变量在程序运行的时候一直保持的是1

10.在位于0x1000FF58处的子过程中的几百行指令中,一系列使用memecmp来比较字符串的比较。如果对robotwork的字符串比较是成功的(当memcmp返回0),会发生什么?

位于0x1000FF58处的远程shell函数从0x1000FF58包含了一系列memecmp函数,在0x10010452处是与robotworkmemcmp函数。
在这里插入图片描述

首先压入robotwork字符串指针,紧接着压入eax,调用memcmp,如果两个数相同,返回0,然后add eap, 0Ch,0Ch是12d,也是4(字节)*3(个),因为push后面跟的是立即数,所以一个数占4字节,然后offset也是4个字节,所以,一开始的push 9,和后面的两次push,加起来一共是3次,所以这里回收了这3个一共12字节的空间
test eax, eax,如果eax为0,则ZF置为1,JnZ不跳转
所以当字符串比较成功(当memcmp返回0)时,JNZ不跳转,程序继续按从上到下的顺序执行,下面要执行的就是sub_100052A2
查询注册表
.text:10005322 push offset aWorktime ; "WorkTime" .text:100053A0 push offset aWorktimes ; "WorkTimes"
并将两个值返回到push [ebp+s] ,传给socket

将ebp(esp是栈顶指针,ebp是栈基址)地址增加s (栈中,esp地址减小,栈空间增大,ebp增加,ebp将向栈底偏移)
将ebp向下s的指针地址压栈

11.PSLIST导出函数做了什么?

在这里插入图片描述
sub_100036C3函数,

进入,检查操作系统版本

在这里插入图片描述
在这里插入图片描述
对应关系
在这里插入图片描述

12.使用图模式来绘制出对sub_10004E79的交叉引用图。当进入这个函数时,那个API函数可能被调用?仅仅基于这些API函数,你会如何重命名这个函数?

在这里插入图片描述
函数如图:
send:socket发送
malloc:分配栈堆
free:释放堆栈
GetSystemDefaultLangID获取系统的默认语言

可以将send函数根据具体功能修改函数名send_languageID
【右键没得重命名,先备个注吧,印象中是可以的】
在这里插入图片描述

13.DLLMain直接调用了多少个Windows API? 多少个在深度为2时被调用?

和上题一样,对DLLMain所在地址进行交叉引用图,并在绘制时设置深度为2
在这里插入图片描述

深度为1的图
在这里插入图片描述

14.在0x10001358处,有一个对Sleep(一个使用一个包含要睡眠的毫秒数的参数的API函数)的调用。顺着代码向后看,如果这段代码执行,这个程序会睡眠多久?

在这里插入图片描述
3E8h是十进制1000atoi调用结果乘以1000
eaxoff_10019020赋来的,进入off_10019020'[This is CTI]30',再偏移0Dh,指向30.
程序休眠时间为30X1000=30000毫秒 30秒

15.在0x10001701处是一个对socket的调用。它的3个参数是什么?

在这里插入图片描述
6 2 1和msdnsocket调用的符号常量有关

在这里插入图片描述
我用的这个ida里未找到

#include<sys/types.h>
#include<sys/socket.h>
int socket(int domain, int type, int protocol);

对应的参数为

#defineAF_INET2/*internetwork:UDP,TCP,etc.*/
#defineSOCK_STREAM1/*streamsocket*/
#defineIPPROTO_TCP6/*tcp*/

16.使用MSDN页面的socket和IDA Pro中的命名符号常量,你能使参数更加有意义吗?在你应用了修改以后,参数是什么?

17.搜索in指令(opcode 0xED)的使用。这个指令和一个魔术字符串VMXh用来进行VMware检测。这在这个恶意代码中被使用了吗?使用对执行in指令函数的交叉引用,能发现进一步检测VMware的证据吗?

Search > Sequence of Bytes>Find All Occurrences

在这里插入图片描述

在这里插入图片描述

18.将你的光标跳转到0x1001D988处,你发现了什么?

乱码
在这里插入图片描述
2D 31 3A 3A 27 75 3C 26 75 21 3D 3C 26 75 37 34 36 3E 31 3A 3A 27 79 75 26 21 27 3C 3B 32 75 31 30 36 3A 31 30 31 75 33 3A 27 75 05 27 34 36 21 3C 36 34 39 75 18 34 39 22 34 27 30 75 14 3B 34 39 2C 26 3C 26 75 19 34 37 75 6F 7C 64 67 66 61

结合Lab05-01.py,每个字节和0x55进行XOR
可以直接File>script file导入,好像被弃用了
在这里插入图片描述

sea = ScreenEA()

for i in range(0x00,0x50):
        b = Byte(sea+i)
        decoded_byte = b ^ 0x55
        PatchByte(sea+i,decoded_byte)

解密结果
xdoor is this backdoor, string decoded for Pratical Malware Analysis Lab:)1234

参考

1.斯科尔斯基, 哈尼克. 恶意代码分析实战[M]. 电子工业出版社, 2014.
2.恶意代码分析_Lab05-01_IDA

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值