PC端恶意代码分析Lab1.1-5.1,从零基础到精通,收藏这篇就够了!

点击蓝字 · 关注我们

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

前言

恶意代码分析是一个安全从业者非常重要的一个技能点。

参考书籍:<<恶意代码分析实战>>

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

相关知识

ZF 当一个运算的结果等于0时,ZF被置位,否则被清除

CF 当一个运算的结果相当于目标操作数太大或太小时,CF被置位,否则被清除

SF 当一个运算的结果为负数,SF被置位;若结果数为正数,SF被清除。对算术运算,当运算结果的最高位置为1时,SF也会被置位

TF TF用于调试,当它被置位时,x86处理器每次只执行一条指令

mov eax,ebx 将EBX中的内容复制至EAX寄存器

mov eax,0x42 将立即数0x42复制至EAX寄存器

mov eax,[0x4037C4] 将内存地址+0x4037C4的4个字节复制到EAX寄存器

mov eax,[ebx] 将EBX寄存器指向的内存地址处4个字节复制到EAX寄存器

mov eax,[ebx+esi*4] 将ebx+esi*4等式的结果指向的内存地址处4个字节复制至EAX

xor eax,eax 将EAX寄存器清零

or eax,0x7575 将EAX值进行与0x7575的or操作

mov eax,0xA 将EAX寄存器左移两位,这两个指令将导致EAX=0x28

shl eax,2

mov bl,0xA 将BL寄存器循环位移两位,这两条指令将导致BL=10000010,因为1010

ror bl,2

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Lab1-4

将文件放入PEid中查看。

将文件放入IDA中查看。F5查看伪代码

LoadLibraryA

装载指定的动态链接库。

GetProcAddress

检索指定的动态链接库(DLL)中的输出库函数地址

psapi.dll是Windows系统进程状态支持模块

winlogon

Windows NT 用户登陆程序,用于管理用户登录和退出。

EnumProcesses

检索进程中的每一个进程标识符.

EnumProcessModules

获得指定进程中所有模块的句柄。

GetModuleBaseNameA

获得进程的名字。

sfc_os.dll

用于保护 Windows 的系统文件。

GetWindowsDirectory

用于获取windows的完整目录。

FindResource

该函数确定指定模块中指定类型和名称的资源所在位置。

LoadResource

装载指定资源到全局存储器。

GetTempPath

获取为临时文件指定的路径。

可以看到先是加载了psapi.dll来进行进程相关的初始化操作。

然后用EnumProcesses枚举进程。

这里之后再进入401000,这里是判断是否是winlogon进程。

之后再通过这个进程加载sfc_os.dll,禁用了windows文件保护机制,为后续的文件操作提供机会。

接着再将wupdmgr.exe 移动到临时文件目录中。

这里再进入4011FC,接着再从资源文件中获得一个文件,这里用ResourceHacker查看,可以分离出一个exe文件,放到之前wupdmgr.exe的路径,进行一个伪装,之后再运行。

这里再接着查看分离出来的文件。

这里可以看到,从网站下载文件,然后再运行,根据名字,可以知道这应该是一个木马更新文件。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Lab1-1

用PEView打开文件,查看一下时间戳。

将文件用PEid查看有无加壳。

没有加壳,放入IDA中查看

从伪代码和导入表中可以看到进行了文件操作。

FindFirstFile

查找指定目录的第一个文件或目录并返回它的句柄

判断当前目录下是否有下一个目录或文件。

CopyFile

将一个或多个文件从一个位置复制到另一个位置。

CreateFile

打开或创建文件或者I/O设备,并返回可访问的句柄

CreateFileMapping

函数用于创建一个文件映射内核对象

可以通过kerne123.dll这个文件来判断机子有无受感染。

再对dll进行分析,这里查看伪代码、导入表和字符串,可以看到网络行为和外联ip.可以通过这个ip判断机子有无受感染。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Lab1-2

这里将第二个文件放到PEid中查看,可以看到进行了upx加壳。这里采用dump的方式进行脱壳。

将文件拖入Ollydbg,定位到

push ebp

mov ebp,esp

一般VS编译的OEP(原始程序入口点就是在这里).

这里再用LordPE进行dump内存。这里会发现还是不能使用,需要修复导入表。用ImportRexConstructor进行修补。这里需要加壳程序还在运行,进行一个附着,然后用Ollydbg得到的OEP地址输入。获取导入表,修正转储。

查看导入表和Strings

CreateService

一个创建一个服务对象,并将其添加到指定的服务控制管理器数据库的函数

InternetOpenW

初始化一个应用程序,以使用 WinINet 函数

InternetOpenUrlW

通过一个完整的FTP,Gopher或HTTP网址打开一个资源。

OpenSCManager

函数建立了一个到服务控制管理器的连接,并打开指定的数据库。

这里可以通过外联主机作为一个网络痕迹判断有无感染。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Lab1-3

这里看到也加壳了,这里尝试了两种。第一种用的是手动调试,先用F9,然后ALT+F9,然后F2设置断点。

接着调试窗口,选择执行到返回,一直到返回,然后再按F8,要多执行几次。

这里按F7,然后发现还是不能进入OEP,需要继续返回刚才的步骤,才能进入。这个地方要有点耐心,需要重复很多次。

到了这里,感觉还没到真正的OEP,但是调试了差不多四五个小时也没找到,打算等之后再回来看看,这里先dump一下。

放入depends,已经可以看到导入了,可以满足初步的分析了,但是放到IDA中效果还是很差,之后得再补一下这一块的知识。

第二种用的是WSUpacker自动化脚本,自动脱壳。

但是也没有达到特别好的效果感觉,不过比我手动脱壳的效果好一些了

这里在用Ollydbg的时候,发现自动打开了一个网站,这里可以作为一个感染的标志。

导入表:

OleInitialize

在当前单元(apartment)初始化组件对象模型(COM)库,将当前的并发模式标识为STA(single-thread apartment——单线程单元),并启用一些特别用于OLE技术的额外功能。除了CoGetMalloc和内存分配函数,应用程序必须在调用COM库函数之前初始化COM库。

CoCreateInstance

用指定的类标识符创建一个Com对象,用指定的类标识符创建一个未初始化的对象。

OleInitialize

在当前单元(apartment)初始化组件对象模型(COM)库,将当前的并发模式标识为STA(single-thread apartment——单线程单元),并启用一些特别用于OLE技术的额外功能。

这里看出文件应该操作了com组件。

点击蓝字 · 关注我们

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Lab3-1

这一节lab主要用动态分析技术进行排查。这里不再用之前的win7(因为运行不起来,动态分析不了),这里重新装一个win xp

用ProcessExplorer对文件进行一个监控和查看信息。

再用procmon进行一个进程监控。设置监控的动作和进程名。

这里监控到就跟操作,但是其中的几个跟seed有关操作是用来迷惑的。

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\VideoDriver

这里的注册表可以当作一个感染的标志。

写在这里的都会开机自己启动。

还进行了一个写入文件的操作。

这里的文件名+文件路径可以当作一个感染标志。

这里再用regshot对注册表进行一个快照,可以看到对HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\VideoDriver也进行了一个写入操作。

用wireshark进行抓包,可以看到进行了DNS请求解析,请求解析的域名也能看到,这里可以当作一个感染的标志。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Lab3-2

这里继续动态调试的内容。放到IDA中查看,可以看到有一个install函数和installA函数,因此可以用rundll32.exe启动。

继续查看导入表。

HttpSendRequest

函数发送HTTP请求到指定的服务器。

InternetReadFile

从一个由InternetOpenUrl, FtpOpenFile, 或 HttpOpenRequest 函数打开的句柄中读取数据。

HttpOpenRequest

创建个请求句柄并且把参数存储在句柄中。

OpenService

打开一个已经存在的服务

DeleteService

删除服务

OpenSCManager

建立了一个到服务控制管理器的连接,并打开指定的数据库。

CreateService

创建一个服务对象,并将其添加到指定的服务控制管理器数据库。

RegOpenKeyEx

打开一个指定的注册表键

RegQueryValueEx

检索与开放注册表键关联的指定值名称的类型和数据。

RegCreateKey

创建或打开注册表项。

RegSetValueEx

在注册表项下设置指定值的数据和类型。

InternetOpen

初始化一个应用程序,以使用 WinINet 函数。

InertnetConnect

WinInet函数系列,建立 Internet 的连接。

这里再用Regshot对运行前后对比注册表

这里可以看到注册了一个服务。还看到了里面的一个svchost.exe,将原来的dll作为也写入了进去。

这里用wireshark抓到了一个DNS包,包中的域名可以作为一个网络痕迹。而注册表的操作可以作为一个主机的操作。

这里我下载的process Explorer在xp下面没有查找dll的功能,所以我用netsat -ano.发现一个外联ip.然后这里跟我之前wireshark抓到的dns解析包对应的ip一样,因此确定这个进程是目标进程。因此在procmon中用这个pid设置即可。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Lab3-3

接着来动态分析第三个文件。

这里用process Explorer监视这个文件,会发现创建进程之后,还会创建一个svchost.exe,然后自身进程就消失了。

这里再右键svchost.exe的属性,点击字符串,映像和内存都看一遍。

这里可以看到log文件,还有一些和键盘相关的。

这里利用进程号,在procmon中对其进行监控。

因为刚才出现了一些和键盘相关的,这里先创建一个txt,对其进行输入,发现出现了WriteFile写入log中,这里去查看log,发现就是写入的内容。

Lab3-4动态分析太简短了,静态分析有点长,放到后面再写。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Lab5-1

这一章书上讲的主要是IDA的操作

将文件导入IDA,进入点击DllMain进入Text View就可以查看地址。

这里通过ALT+T快捷键,搜索gethost

这里点进去CTRL+X,就可以查看,注意,这里有很多函数是一样的。

到这里的地址,即可查看。

这里在strings搜索cmd,然后ctrl+x,跳转到。

这里根据上下文可以推断是一个远程shell.

这里进入,然后ctrl+x

其他两个都是cmp,所以这里进入第一个查看。

OVERSIONINFOA数据结构中包含操作系统系统版本信息,dwPlatformId标识操作系统,这里的eax作为返回值,先清除。然后通过置位,根据不同操作系统设置返回值。

这里回到strings列表搜索robot

ctrl+x搜索调用

这里两个相同,JNZ不跳转。

接下来,进入call,可以看到进行了读取键值,这里把键值进行了一个socket传输。

这里进入Export,进入查看,这里可以看到100036C3是关键的,因为其他跳转都到了结束的位置。

而这里就和之前一样了,主要是判断版本,版本过低则结束。

这里进入4E79,用user xrefs

send:socket相关

malloc:分配堆栈

free:释放堆栈

GetSystemDefaultLangID:获取系统默认语言

这里继续用user xrefs,设置深度为1.

可以看到直接调用了strncpy、_strnicmp、CreateThread、strlen.

这里用2,可以发现有很多,这里就直接看图。

这里来到1358,sleep的参数是eax,eax是atoi的返回值乘以3E8H(十进制的1000)

继续往前看,可以看到19020,这里的值,然后通过add eax,0Dh,定位到3以后,所以此时eax是’30’,然后aoti就是将char转换成int,所以此时eax是30,然后乘以1000到达sleep.

这里来到1701。

修改后。

这里通过search-text,find all查看in,定位。

这里通过右键,查看到了VMXH。

这里再通过交叉引用函数,查找到了一个vmware相关的字符串。

这里来到1D988

这里没有python插件,写一个IDC脚本作为替代,可以看到结果是一样的。

粉丝福利

抽奖规则:本次抽奖共抽出5名中奖者。以下书籍14种,每个获奖人员可以任选其中一本书籍(详情见活动奖品处)

参与方式:公众号后台回复:抽奖

开奖时间:4.15号18:00

活动奖品

本期奖品为下列图书,由机械工业出版社赞助提供。

题外话

黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

在这里插入图片描述

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。

2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我们和网安大厂360共同研发的网安视频教程,之前都是内部资源,专业方面绝对可以秒杀国内99%的机构和个人教学!全网独一份,你不可能在网上找到这么专业的教程。

内容涵盖了入门必备的操作系统、计算机网络和编程语言等初级知识,而且包含了中级的各种渗透技术,并且还有后期的CTF对抗、区块链安全等高阶技术。总共200多节视频,200多G的资源,不用担心学不全。
在这里插入图片描述
因篇幅有限,仅展示部分资料,需要见下图即可前往获取
在这里插入图片描述

🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源

3.技术文档和电子书
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。

在这里插入图片描述

因篇幅有限,仅展示部分资料,需要见下图即可前往获取
在这里插入图片描述

🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源

4.工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

还有我视频里讲的案例源码和对应的工具包,需要的话见下图即可前往获取
在这里插入图片描述

🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

在这里插入图片描述

因篇幅有限,仅展示部分资料,需要见下图即可前往获取
在这里插入图片描述

🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值