恶意代码分析实战7-9章课后题

第七章

第一题

首先先关注几个函数(积累)

 上述函数很可能是创建服务,有可能开机自启动服务

 上述函数有可能连接一个URL并进行下载

StartServiceCtrlDispatcherA函数中把sub_401040加入服务控制管理器会调用的服务控制函数

 

组合控制互斥量,没有就创建,有就打开

OpenSCManagerA:打开一个服务控制管理器的句柄,以便可以添加修改服务

GetModuleFileNameA:返回当前正在执行的可执行程序或一个被加载的Dll的全路径名,第一个参数是要获得路径名模块句柄,设置NULL来获取这个歌可执行的全路径名

CreateServiceA:创建新服务

注意划线参数

lpBinaryPathName就是获得可执行文件的路径名字,以便安装这个服务

dwStartType:设置服务的启动方式,有好几个值,本例子设置的是开机自启

 首先

xor edx , edx  把edx清零

然后所有值设置成0

然后再年(year)的位置设置成2100

然后调用函数在不同格式之间进行转换

注意lpDueTime参数

是上面SystemTimeToFileTime返回的Filename参数

然后使用waitForsingleObject进行等待

 esi循环体

Start表示启动函数

 注意无条件跳转,无条件请求URL进行下载

 总结:

1.创建互斥量,保证单独运行

2.创建一个服务保证自启运行

3.2100年1月1日

4.无限下载URL

第二题

首先注意以下函数

 

首先复习传递引用类型

很明显传递了ppv的地址,然后把经过函数改变的ppv的值传给了eax,判空eax

举例:ebp-4  为地址    [ebp-4] 为局部变量

 

首先初始化了一个COM对象,获得一个COM对象,对象存在局部变量中,标记为ppv,如果要判断COM功能,还需看iid与clsid参数

分别是IIDIWebBrowser2与Internet Explorer

 不理解哈哈哈!!!!!

第三题

先看字符串

 Lab07-03.dll告诉我们该exe可能访问dll

看导入表

注意函数

CreateFileA,CreateFileMappingA,MapViewOfFile

有可能打开文件并且映射到内存

FineNextFileA,FineFirstFileA

有可能搜索目录

CopyFileA有可能复制搜索到的文件

检查DLL的字符串

看到了一个ip,有可能连接到它

查看导入表,发现包含网络发送和接收的所有函数

技巧

函数图过于复杂我们可以线先只分析Call指令

View->OpenView->Function  CALL

 浏览函数大概

_alloca_probe:在空间分配一个巨大的栈空间

打开互斥体

scoket-------recv一定是要传输和接收数据,至于是什么不知道

首先检查connect窗口

一个固定的IP

一个80端口号

send函数

 传输了一个hello数据

发送hello给服务器

查看期望回复什么数据

首先eax存放指针,指向缓冲区buf的指针

 再次访问了缓冲区的指针,然后调用strncmp函数判断是否是sleep,如果是,则执行sleep函数,如果不是,则再次比较字符串是不是exec,通过strncmp的返回值来判定跳转

注意CommandLine参数

 不理解,时候再补充

分析exe

开始比较eax的值是否为2,如果不是那么跳转直接结束

如果是,往下执行 

发现了一个向上的循环代码

继续往下

  这些函数应该是创建一个文件

我们发现这些函数出奇的复杂,应该是文件内存的偏移计算,这时候不要把时间浪费在分析这种函数的上面,直接查看他们调用了什么函数,最后直接动态调试这些函数往往更具有明显的价值

查看sub_401140与sub_401170

发现也是一堆关于内存偏移计算的函数,先跳过


仍然是一堆关于内存偏移计算的函数

此时这些函数应该代表着一个文件已经被修改完毕得到的结果

我们现在查看sub_4011E0函数

发现这个FindFirstFileA应该是和前面字符串c:\\一起调用组成在C这个路径搜索文件的一个操作

接下来又是一些浪费时间的函数

接下来查看下面调用了哪些函数,首先sub_4011E0是一个递归自己的函数

调用了sub_4010A0,查看该函数

首先这些都是映射文件到内存

频繁调用IsBadReadPtr,目的是判断进程是否可以有权限访问指定内存块

 首先先对比字符串

然后注意几个函数    repne scasb和 rep movsd函数

这两个指令功能上与srtlen 与memcpy等价

继续观察主要部分,需要进行计算的部分

movsd与movsb是从esi指向的内存位置复制到edi指向的内存位置,预示我们要查看edi中是哪里

然后找到ebx和dword_403010

ebx出现在stricmp函数上面,我们发现下面的指令是把esi-----edi=ebx,也就是把esi的东西覆盖到ebx中,esi是dword_403010,查看一下

3,4,5,6,7开头的十六进制数字应该为ascii字符,按A键转换字符串之后

 那么就真相大白,先比较字符串,如果不是kernel123.dll,那么就替换成kernel132.dll

第九章

先牢记几个指令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值