使用 IDA Pro 分析 Lab05-01.dll

1、DllMain的地址是什么?

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

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

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

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

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

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

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

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

10、在位于0x1009FF58处的子过程中的几百行指令中,一系列使用memcmp来比较字符串的比较。如果对robotwork的字符串比较是成功的(当memcmp返回0) ,会发生什么?
11、PSLIST导出函数做了什么?
12、使用图模式来绘制出对sub_10004E79的交叉引用图。当进入这个函数时,哪个API函数可能被调用?仅仅基于这些API函数,你会如何重命名这个函数?
13、D11Main直接调用了多少个Windows API?多少个在深度为2时被调用?
14、在0x10001358处,有一个对Sleep (一个使用一个包含要睡眠的毫秒数的参数的API函数)的调用。顺着代码向后看,如果这段代码执行,这个程序会睡眠多久?
15、在0x10001701处是一个对socket的调用。它的3个参数是什么?
16、使用MSDN页面的socket和IDA Pro中的命名符号常量,你能使参数更加有意义吗?在你应用了修改以后,参数是什么?
17、搜索in指令(opcode 0xED)的使用。这个指令和一个魔术字符串VMXh用来进行VMware检测。这在这个恶意代码中被使用了吗?使用对执行in指令函数的交叉引用,能发现进一步检测VMware的证据吗?


1.分析DllMain地址

设置图像显示地址位置:Options->General->选择Line Prefixex(内存位置显示)并设置Number of Opcode Bytes为6(显示代码清单中每条指令的操作码值)
DllMain地址如图。


2.查看导入表

view -> Open Subviews -> Imports
使用Imports窗口并浏览到的gethostbyname,导入函数定位到函数地址


3.交叉引用 - 查看谁调用了这个函数

X - 查看交叉引用

Type:p代表的被调用的引用,r代表的是“读取”引用(因为是对一个导入项call dword ptr[...],所以CPU必须先读取这个导入项,再调用它)

这里9个p并不能代码是9个函数调用了,我们在仔细来看图2,其中他有很多地址重复的,所以我们按照地址来分一共可以分析出是5处函数调用了gethostbyname。


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

G(Jump to address)输入0x10001757地址

F5 反汇编(Tab切换回汇编)


对于参数off_10019040 + 13,即 pics.praticalmalwareanalys,这个域名将被解析。


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

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

G跳转到 0x10001656,
带符号的都是局部变量,共有23个。
带正好的是参数,这里只有lpThreadParameter


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

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

View -> Open SubView -> String
找到\cmd.exe /c后,双击查看,X交叉引用

在调用这个字符串的函数中,发现了这样的一个字符Remote Shell Session,所以这个程序应该是一个恶意远程Shell程序。

详细过程:


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

交叉引用 dword_1008E5C4 变量发现有读、写,因为这个变量的比较涉及到走哪条路径,因此我们看写的就好。

看到是eax赋值给了 dword_1008E5C4 变量,eax一般是上个函数的返回值。

sub_10003695函数获取系统版本信息,之后判断是否为NT系统,是返回true,否返回false。


因此,dword_1008E5C4 就是指示了系统版本是否是NT系统,如果是,不会跳转,会去执行之后"\cmd.exe /c",也就是上面我们分析的流程。


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

对比成功,会调用sub_100052a2函数


sub_100052a2函数详细如下:查询了两个注册表值,并调用加密和发送的函数sub_100038EE


sub_100038EE函数详细如下,将字符串中每个字符+一个全局变量值,可能是加密操作,并进行发送


而这个全局变量通过交叉引用,可以看到是在这里进行赋值的


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

打开导出函数


导出函数如下
一开始不知道PName_Str是什么,后面函数调用,发现用于对比枚举出进程的名称,才知道PName_Str是传入用对比的进程名


sub_1000664函数如下:
进行目标进程信息的枚举,并写入到xinstall.dll中,还进行数据的send发送
(另一个sub_10006518函数也差不,只不过是枚举所有进程的信息,且最后没有发送数据)


数据发送:


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

选中函数名称,如下操作打开交叉引用图


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

选中DllMain名称,如下操作打开交叉引用图


设置递归深度Recursion depth为1时:


Cross references to:显示被那些函数调用,相当于Xrefs to
Cross references from:显示调用那些函数,相当于Xrefs from
Recursive:递归显示, 若取消则仅显示上下直接调用函数
Follow only current direction:仅当前函数,若取消就变成了显示全部的函数调用
Recursion depth:显示调用的深度
Externals:是否忽略外部Windows API函数
Data:是否忽略数据
From Library Functions:是否忽略库函数内部的交叉参考
To Library functions:是否忽略外部的交叉参考
Print Comment:是否对外部函数打印注释

设置递归深度为2时,会看到是一个非常大的图:


15、在0x10001701处是一个对socket的调用。它的3个参数是什么?
16、使用MSDN页面的socket和IDA Pro中的命名符号常量,你能使参数更加有意义吗?在你应用了修改以后,参数是什么?

查询MSDN发现,三参数对应IPPROTO_TCP、SOCK_STREAM、AF_INET

选中数字,右键使用符号常量

搜索上面查询出的符号常量,选择


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

我们需要搜索in指令,这可以通过选择菜单的Search→Text,然后输入in来做到(还可以选择Search→Sequence of Bytes,然后搜索in指令的opcode,也就是ED),这里选择Find All Occurrences,搜索所有。



这段代码有VMXh字样,表明这段恶意代码可能会有反虚拟机的技巧,在17章我们会详细讨论。

4.2使用IDA Pro分析实战--《恶意代码分析实战》的更多相关文章

  1. 2018-2019-2 网络对抗技术 20165333 Exp4 恶意代码分析

    2018-2019-2 网络对抗技术 20165333 Exp4 恶意代码分析 原理与实践说明 1.实践目标 监控你自己系统的运行状态,看有没有可疑的程序在运行. 分析一个恶意软件,就分析Exp2或E ...

  2. 恶意代码分析实战四:IDA Pro神器的使用

    目录 恶意代码分析实战四:IDA Pro神器的使用 实验: 题目1:利用IDA Pro分析dll的入口点并显示地址 空格切换文本视图: 带地址显示图形界面 题目2:IDA Pro导入表窗口 题目3:交 ...

  3. 恶意代码分析实战五:OllyDebug动态结合

    目录 恶意代码分析实战五:OllyDebug动态结合 OllyDebug界面介绍 OllyDebug载入程序方法 OllyDebug地址跳转 OllyDebug下断点 OllyDebug单步执行 Ol ...

  4. Exp4 恶意代码分析 20154320 李超

    恶意代码 概述 恶意代码是指故意编制或设置的.对网络或系统会产生威胁或潜在威胁的计算机代码.最常见的恶意代码有计算机病毒(简称病毒).特洛伊木马(简称木马).计算机蠕虫(简称蠕虫).后门.逻辑炸弹等. ...

  5. 2017-2018-2 20155314《网络对抗技术》Exp4 恶意代码分析

    2017-2018-2 20155314<网络对抗技术>Exp4 恶意代码分析 目录 实验要求 实验内容 实验环境 基础问题回答 预备知识 实验步骤 1 静态分析 1.1 使用virsca ...

  6. 20165310 NetSec2019 Week6 Exp4 恶意代码分析

    20165310 NetSec2019 Week6 Exp4 恶意代码分析 一.实验要求 1.系统运行监控 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里.运行一段时间 ...

  7. 《网络对抗》Exp4 恶意代码分析

    20155336<网络对抗>Exp4 恶意代码分析 问题回答 实验后回答问题 (1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监 ...

  8. 2015306 白皎 《网络攻防》Exp4 恶意代码分析

    2015306 白皎 <网络攻防>Exp4 恶意代码分析 netstat [Mac.Linux.Win] sysinteral [MS]:1 2 3 一.系统监控--Windows计划任务 ...

  9. 20165223《网络对抗技术》Exp4 恶意代码分析

    目录 -- 恶意代码分析 恶意代码分析说明 实验任务目标 实验内容概述 schtasks命令使用 实验内容 系统运行监控 恶意软件分析 静态分析 virscan分析和VirusTotal分析 PEiD ...

  10. Exp4 恶意代码分析

    一.原理与实践说明 1. 实践目标 1.1 监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2 分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysin ...

随机推荐

  1. 即学即会 Serverless | 如何解决 Serverless 应用开发部署的难题?

    本文节选自<Serverless 开发速查手册>,关注Serverless 公众回复 手册 即可获得下载链接 作者 | 江昱(阿里云 Serverless 产品经理) 破局:工具链体系匮乏 ...

  2. 终于!我们把 CEO 炒了,让 ChatGPT 出任 CEO

    ️ FBI Warning:本文纯属作者自娱自乐,数字人的观点不代表 CEO 本人的观点,请大家不要上当受骗!! 哪个公司的 CEO 不想拥有一个自己的数字克隆? 想象一下,如果 CEO 数字克隆上线 ...

  3. zzuli 1023

    java 读入单个字符 import java.util.Scanner; public class Main{ public static void main(String args[]){ Sca ...

  4. 如何将接口的返回值中所需信息提取出来作为其他接口的入参使用(postman与jmeter的使用)

    一.背景: 偶尔会用到一个场景,两个接口之前的调用有依赖关系,将其中一个的返回参数中的部分信息取出来作为入参在第二个接口中使用,代码内是比较好实现,只要定义一个变量,用于参数传递. 如果是测试过程中使 ...

  5. TOEFL | Reading · 题型总结

    目录 直接引用 - 直译题(不要读文章) 直接引用 - why 题(需要细读题干) 直接引用 - 其他(需要细读题干) 理解题(出现最多,需要细读题干) 转义题(不要读题干) 添加句子题(不要读题干) ...

  6. zookeeper 集群环境搭建及集群选举及数据同步机制

    本文为博主原创,未经允许不得转载: 目录: 1. 分别创建3个data目录用于存储各节点数据 2. 编写myid文件 3. 编写配置文件     4.分别启动 5.分别查看状态 6. 检查集群复制情况 ...

  7. 【MicroPython】生成模块表py\objmodule.c中结构mp_rom_map_elem_t - py\makemoduledefs.py

    查找文件中的模块注册标记MP_REGISTER_MODULE pattern = re.compile(r"[\n;]\s*MP_REGISTER_MODULE\((.*?),\s*(.*? ...

  8. 【C++】const 常类型

    常引用 格式:const 类型说明符 &引用名 注意:常引用所引用的对象不能修改 常对象 格式:类名 const 对象名 或 const 类名 对象名 注意:常对象其数据成员在生存期内不能修改 ...

  9. Java - 输出空心菱形

    1. 思路:发现菱形的规律 ,定义三个变量,左边距和右边距,中间的边距 .   具体规律观察上图  . 2.上代码: //输出空心菱形 public class ForToLingXing { pub ...

  10. [转帖]Linux系统管理-crond、chkconfig、systemd、unit、target

    https://cloud.tencent.com/developer/article/1409845 10.23 linux任务计划cron crontab命令被用来提交和管理用户的需要周期性执行的 ...