IDA Pro分析Lab05-01.dll

  1. DLLMain的地址是什么?
    在这里插入图片描述

切换到文本模式观看
在这里插入图片描述

2.使用Imports窗口并浏览到gethostbyname,导入函数定位到什么地址?
在这里插入图片描述

3.有多少函数调用了gethostbyname?
52次
4.将精力集中在位于0x10001757处的对gethostbyname的调用,你能找出哪个DNS请求将被触发吗?
在这里插入图片描述

看到call指令去找调用这个函数的子程序由于此处无法截取函数信息
得知gethostbyname中的参数是name
观察上面几行汇编代码
将off_10019040的值存入到eax中然后再加上0D
将EAX也就是函数参数压入堆栈
按G键输入目地地址
第一步先进入到off_10019040中查看能否找到DNS请求
在这里插入图片描述

鼠标移到灰色字体会出现一个网址,可以初步判断这是DNS要解析的网址。
因为前面有[This is PDO]所以上面的汇编代码要加0Dh
5.IDA Pro 识别了在0x10001656处的子过程中的多少个局部变量?
按G键查看0x10001656处
在这里插入图片描述

  1. IDA Pro识别了在0x10001656处的子过程中的多少个参数?
    在这里插入图片描述

五和六结合看等号后面为负值的是局部变量
等号后面为正值的是参数
7.使用Strings窗口,来在反汇编中定位字符串 \cmd.exe /c, 它位于哪儿?
在这里插入图片描述

8.在引用 \cmd.exe /c的代码所在区域发生了什么?
在这里插入图片描述

点击上箭头进入引用部分
在这里插入图片描述

双击灰色字体

在这里插入图片描述
在这里插入图片描述

观察此处最后一行翻译出作用:为远程shell会话进行加密。
9.在同样的区域,在0x100101C8处,看起来dword_1008E5C4好像是一个全局变量,它帮助决定走哪条路径。那恶意代码是如何设置dword_1008E5C4的呢?(提示:使用交叉引用)
在这里插入图片描述

因为后面有DATA XREF字眼所以进行交叉引用
按ctrl+X查看交叉引用
在这里插入图片描述

这三条指令只有第一条会改变
双击进去查看
在这里插入图片描述

可见此命令上一条call指令中进入了子程序进出查看在这里插入图片描述

点开以后只有这两个函数或结构体具有观察价值
在这里插入图片描述

两者为均为win32中的函数而dwPlatformld函数的作用使用来判断此机器是什么系统
返回值即是操作系统的版本号
call执行完成将返回值存储到eax中所以dword_1008E5C4存储的值就是操作系统版本号
10.在位于0x1000FF58处的子过程中的几百行指令中,一系列使用memcmp来比较字符串的比较。如果对robotwork的字符串比较是成功的(当memcmp返回0),会发生什么?
在这里插入图片描述

找到robotwork
当对robowork的字符串比较是成功的话(memcmp返回0)显然结果为0,jnz为不为零转移直接执行下面的命令 查看下面call指令中的子程序
在这里插入图片描述

上网查看得知此命令是对注册表进行了修改
由此看不出什么太大的作用继续找一下call
在这里插入图片描述

只有此call当中有堆栈操作点进去查看
在这里插入图片描述
在这里插入图片描述

继续寻找call指令
Malloc进行动态内存分配 send进行发送 free进行释放
推断修改了注册表然后将修改的信息通过send函数发送出去
11.PSLIST导出函数做了什么?
在这里插入图片描述

双击点进去
在这里插入图片描述

先进入第一个call的子程序
在这里插入图片描述

这三个函数的作用跟上面的题相同都是要得到本机系统的版本号
分析第二个call子程序
在这里插入图片描述

同样找call的子程序查看作用
在这里插入图片描述

第一个显然没有明显的目的
显然第二个call调用了CreateToolhelp32Snapshot函数
上面第一步进入PSLIST时漏掉了一个call指令
在这里插入图片描述

点进入之后
在这里插入图片描述

都调用了这个函数
此函数的作用是通过获取进程信息为进程进行快照 实际是获取进程信息
所以推断PSLIST导出函数是针对不同的操作系统进行获取进程信息的操作但是因为引用了两次猜测可能针对不同的操作系统有不同的方式去获取进程信息
12.使用图模式来绘制出对sub_10004E79的交叉引用图。当进入这个函数时,哪个API函数可能被调用?仅仅基于这些API函数,你会如何重命名这个函数?
在这里插入图片描述

待函数执行作用后命名
13.DllMain直接调用了多少个Windows API?多少个在深度为2时被调用?
在这里插入图片描述

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

点击sleep在这里插入图片描述

这两次都是上述截图的汇编语段
因此sleep的返回值就是上述汇编代码中进栈的eax的值
在这里插入图片描述
在这里插入图片描述

可见将eax变成了现在的数据寄存器
更加证实上面sleep的返回值即求eax的值
Atoi的作用是将“30”转化为数值
Imull时30*3E8h最后结果为30000ms 最后得出30s
15.在0x10001701处是一个对socket的调用,它的3个参数是什么?
在这里插入图片描述

6、1、2;
16.使用MSDN页面的socket和IDA Pro中的命名符号常量,你能使参数更有意义吗?修改后,参数是什么?(不会查也不会)
在这里插入图片描述

点击use standard symbolic contant
查看MSDN可以发现2代表的是AF_INET可以在点击后的字符串中选择AF_INET
17.搜索in指令(opcode 0xED)的使用。这个指令和一个魔术字符串VMXh用来进行Vmware检测。在这个恶意代码中被使用了吗?使用对执行in指令函数的交叉引用,能发现进一步检测Vmware的证据吗?
在这里插入图片描述

双击点击点进去查看

在这里插入图片描述
发现右键‘564D5868h’可以转化为VMXh
在这里插入图片描述

在这里插入图片描述

执行交互
在这里插入图片描述

可见这段字符串代表的就是找到了虚拟机,取消安装
18.将你的光标跳转到0x1001D988处,你发现了什么?
在这里插入图片描述

发现了一堆乱码
19.如果你安装了IDA Python插件(包括IDA Pro的商业版本插件),运行Lab05-01.py,一个IDA Pro Python脚本(确定光标是在0x1001D988处),在运行该脚本后发生了什么?
转为IDC的源码

#include<idc.idc>
static main()
{
auto ea=ScreenEA(),b,i,decoded_byte;
for(i=0x0;i<0x50;i++)
{
b=Byte(ea+i);
decoded_byte=b*0x55;
PatchByte(ea+i,decoded_byte);
}
}

在这里插入图片描述

20.将光标放于同一位置,你如何将这个数据转成一个单一的ASCII字符串?
在这里插入图片描述

  1. 使用一个文本编辑器打开这个脚本。它是如何工作的?
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值