点击蓝字 · 关注我们
前言
恶意代码分析是一个安全从业者非常重要的一个技能点。
参考书籍:<<恶意代码分析实战>>
相关知识
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 版权协议,转载请附上原文出处链接和本声明。