如何查看加壳的恶意软件 Lab1-2 Lab1-3 恶意代码分析
Lab1-2
分析Lab1.2.exe文件
目录
4. 哪些基于主机或基于网络的迹象可以被用来确定被这个恶意代码所感染的机器?
2. 是否有这个文件被加壳或混淆的任何迹象?
利用PEID进行查看
普通扫描如下:
普通扫描没有发现加壳
然后看section,name是upx。
==》对比下脱壳后的效果:
但注意到了EP Section
中的标识为UPX1
,说明这个exe
文件很可能用了一个UPX
技术的变种
然后我们用Dependency Walker
,我们就会发现这个代码的导入表KERNEL32.DLL 中有两个函数LoadLibraryA
,GetProcAddress
.这两个函数都是加壳的迹象,因为加壳的程序运行时候脱壳是必须要这两个函数的.
首先该程序的节部分就非常的可疑,这里显示的是UPX0,UPX1,UPX2.
不是常见的.text .data .rdata .rsrc
,很明显这是UPX加壳后的表现.下面通过虚拟大小与原始数据大小的对比就可以实锤UPX加壳了.
分节 | 虚拟大小 | 原始数据大小 |
---|---|---|
UPX0 | 00004000 | 00000000 |
UPX1 | 00001000 | 00000600 |
UPX2 | 00001000 | 00000200 |
在IMAGE_SECTION_HEADER UPX0
中可得出Virtual Size
为00004000
Size of Raw Data
为00000000
, 所以Virtual Size 比Size of Raw Data大
且IMAGE_SECTION_HEADER UPX1
和IMAGE_SECTION_HEADER UPX2
中的也是Virtual Size
比Size of Raw Data
大,所以可以确定该程序被加壳了.
核心扫描如下:
核心扫描发现upx加壳
发现加壳后,要进行脱壳操作,可以利用ollydbg进行手动脱壳,具体操作在另篇博文,博文稍后会发。
或者进行upx自动脱壳
dos命令
图形窗口
用free upx也可以脱壳!
3. 有没有任何导入函数能够暗示出这个程序的功能?
利用studyPe进行查看脱壳后的upLad01-02.exe
或者使用微软的strings工具,我的输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | Practical Malware Analysis Labs\BinaryCollection\Chapter_1L>strings Lab01-02_2022-10-01@13_32_14.745.exe Strings v2.54 - Search for ANSI and Unicode strings in binary images. Copyright (C) 1999-2021 Mark Russinovich Sysinternals - www.sysinternals.com !This program cannot be run in DOS mode. e Rich .text `.rdata @.data @jj h(0@ @ Vh(0@ , @ @jjjj L$,j @jjj @jjj T$ $ @ ( @ u+W =0 @ jjj @jj VWj jjj hT0@ t @ =p @ jh h00@ SVW ` @ \ @ |0@ X @ x0@ T @ =l0@ P @ t0@ 5p0@ EPEPE H @ D @ @ @ 8 @ %< @ %L @ %d @ %h @ KERNEL32.DLL ADVAPI32.dll MSVCRT.dll WININET.dll SystemTimeToFileTime GetModuleFileNameA CreateWaitableTimerA ExitProcess OpenMutexA SetWaitableTimer WaitForSingleObject CreateMutexA CreateThread CreateServiceA StartServiceCtrlDispatcherA OpenSCManagerA _exit _XcptFilter exit __p___initenv __getmainargs _initterm __setusermatherr _adjust_fdiv __p__commode __p__fmode __set_app_type _except_handler3 _controlfp InternetOpenUrlA InternetOpenA MalService Malservice HGL345 http: //www.malwareanalysisbook.com Internet Explorer 8.0 |
或者使用PEID,当然dependency walker也是ok的:
有对互斥体进行操作的函数OpenMutexA、CreateMutexA函数;
有创建服务相关函数:CreateServiceA、StartServiceCtrlDispatcherA、OpenSCManagerA。
打开链接函数InternetOpenA和InternetOpenUrlA;
4. 哪些基于主机或基于网络的迹象可以被用来确定被这个恶意代码所感染的机器?
使用IDA进行分析upLad01-02.exe,Strings窗口中可以发现这个恶意代码的网络迹象。
一个Malservice服务名称(邮寄服务),一个链接,一个浏览器类型。
可以通过监视网络流量检查被恶意代码感染的主机。
Lab1-3
分析Lab1.3.exe文件
目录
3.有没有任何导入函数能够暗示出这个程序的功能?如果是,是哪些导入函数,它们会告诉你什么?
4.有哪些基于主机或基于网络的迹象,可以被用来确定被这个恶意代码所感染的机器?
2. 是否有这个文件被加壳或混淆的任何迹象?
利用PEiD进行分析
程序利用FSG1.0进行加壳操作
section异常也表明加壳!
strings看下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | strings Lab01-03.exe Strings v2.54 - Search for ANSI and Unicode strings in binary images. Copyright (C) 1999-2021 Mark Russinovich Sysinternals - www.sysinternals.com !Windows Program $PE b!@ `.rdata @.data $s! u? C ;Ot (Q@ KERNEL32.dll LoadLibraryA GetProcAddress H @ Ph8 0[X ":Ll 3Bt>O VQ(8 2]<,M :R, P@M^ 3 S>VW ey p1 AQ=h "Z, 5pg MNu 02 k ' ^J% I*G9> {*T p@l mal e%nN kQc H @ ole32.vd Init FoCr sc U!!C }OLEAUTLA IMSVCRTT"b _getmas yrcs |P2r3Us p|vuy fmod xF*l 9mV dj |
这两个,LoadLibraryA GetProcAddress 也表明了加壳!
利用ollybdg进行手动脱壳
在尝试了一番之后,我发现这个脱完壳后还得进行修复,就搁置在这里。
我又换了另一种脱壳方式,基于ollybdg的自动化脱壳,软件里面有自带的功能,很好,不用进行修复。
使用LinxerUnpacker 进行脱壳:
脱壳后看到的:
注意这个section也是怪怪的!
3.有没有任何导入函数能够暗示出这个程序的功能?如果是,是哪些导入函数,它们会告诉你什么?
查看导入表
好家伙,没见过的玩意。网上搜了话,也不是很懂。
VariantInit函数
Initializes a variant to VT_EMPTY
他的作用很简单,就是初期化为VT_EMPTY。其实这个VariantClear ()已经做了,如果如果调用了它,就可以不用VariantInit()了。
SysAllocString
是分配内存的. 一般用在 接口的 返回 BSTR 参数,不需要释放的. 释放 是 调用者要处理的。
CoCreateInstance
用指定的类标识符创建一个Com对象,用指定的类标识符创建一个未初始化的对象。当在本机中只创建一个对象时,可以调用CoCreateInstance;在远程系统中创建一个对象时,可以调用CoCreateInstanceEx;创建多个同一CLSID的对象时, 可以参考 CoGetClassObject 函数。
OleInitialize
它的作用是在当前单元(apartment)初始化组件对象模型(COM)库,将当前的并发模式标识为STA(single-thread apartment——单线程单元),并启用一些特别用于OLE技术的额外功能。除了CoGetMalloc和内存分配函数,应用程序必须在调用COM库函数之前初始化COM库
OleUninitialize
OleInitialize是一个Windows API函数。它的作用是在当前单元(apartment)初始化组件对象模型(COM)库,将当前的并发模式标识为STA(single-thread apartment——单线程单元),并启用一些特别用于OLE技术的额外功能。除了CoGetMalloc和内存分配函数,应用程序必须在调用COM库函数之前初始化COM库。
4.有哪些基于主机或基于网络的迹象,可以被用来确定被这个恶意代码所感染的机器?
将文件导入IDA,字符串里面没有发现关于网络的 ==》直接strings看:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | strings unpacked.exe Strings v2.54 - Search for ANSI and Unicode strings in binary images. Copyright (C) 1999-2021 Mark Russinovich Sysinternals - www.sysinternals.com !Windows Program $PE .linxer `.rdata @.data $s! u? C ;Ot (Q@ KERNEL32.dll LoadLibraryA GetProcAddress H @ Phh @ hX @ L @ 8 @ D$$ < @ L$$QVP R,V @ @ P @ U hx @ SVW |0@ x0@ 0 @ =h0@ , @ t0@ 5p0@ EPEPE $ @ @ %( @ H @ ole32.dll OleInitialize CoCreateInstance OleUninitialize 8 @ OLEAUT32.dll MSVCRT.dll __getmainargs _controlfp _except_handler3 __set_app_type __p__fmode __p__commode _exit _XcptFilter exit __p___initenv _initterm __setusermatherr _adjust_fdiv http: //www.malwareanalysisbook.com/ad.html H @ Ph8 0[X ":Ll 3Bt>O VQ(8 2]<,M :R, P@M^ 3 S>VW ey p1 AQ=h "Z, 5pg MNu 02 k ' ^J% I*G9> {*T p@l mal e%nN kQc H @ ole32.vd Init FoCr sc U!!C }OLEAUTLA IMSVCRTT"b _getmas yrcs |P2r3Us p|vuy fmod xF*l 9mV dj $s! u? C ;Ot (Q@ KERNEL32.dll LoadLibraryA GetProcAddress MSVCRT.dll _adjust_fdiv __setusermatherr _initterm __p___initenv exit _XcptFilter _exit __p__commode __p__fmode __set_app_type _except_handler3 _controlfp __getmainargs OLEAUT32.dll ole32.dll OleUninitialize CoCreateInstance OleInitialize |
然后对其names窗口进行分析,发现一个跟网址差不多的字符串。
双击跳转过去,发现了网址
Lab1-4
目录
2.是否有这个文件被加壳或混淆的任何迹象?如果是这样,这些迹象是什么?如果该文件被加壳,请进行脱壳,如果可能的话。
4.有没有任何导入函数能够暗示出这个程序的功能?如果是,是哪些导入函数,它们会告诉你什么?
5.有哪些基于主机或基于网络的迹象,可以被用来确定被这个恶意代码所感染的机器?
6. 这个文件在资源段中包含一个资源。使用Resource Hacker工具来检查资源,然后抽取资源。从资源中你能发现什么吗?依次分析
2.是否有这个文件被加壳或混淆的任何迹象?如果是这样,这些迹象是什么?如果该文件被加壳,请进行脱壳,如果可能的话。
利用PEiD发现无壳。
3.这个文件是什么时候被编译的?

4.有没有任何导入函数能够暗示出这个程序的功能?如果是,是哪些导入函数,它们会告诉你什么?
对资源节进行操作:LoadResource、FileResource、SizeofResource
从资源节中加载数据,写一个文件到磁盘上:CreateFile,WriteFile
执行磁盘上的文件:WinExec ==》这个是从资源文件中释放出恶意PE文件!!!
将文件写到系统目录:GetWindowsDirectory
获得进程的文件描述符,也是为了操作远程的进程:OpenProcess、GetCurrentProcess
可以运行另一个程序:WinExec
可以通过令牌的方式确保只运行一个进程在系统中:AdjustTokenPrivileges ==>提权相关!
可以去查找用户的登录信息等系统敏感信息:LookupPrigilegeValueA
resourcehacker看到的,然后我们导出为exe:
再用PEID打开导出的exe:
看看加载的api都有哪些:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | strings BIN101.exe Strings v2.54 - Search for ANSI and Unicode strings in binary images. Copyright (C) 1999-2021 Mark Russinovich Sysinternals - www.sysinternals.com !This program cannot be run in DOS mode. lftlb~lh}l l|l mll |lz}l Rich .text `.rdata @.data @ h$0@ Rh<0@ jj QhD0@ j %L @ hX @ SVW @ @ < @ 8 @ 4 @ =x0@ 0 @ EPEPE ( @ $ @ @ %, @ %D @ GetWindowsDirectoryA WinExec GetTempPathA KERNEL32.dll URLDownloadToFileA urlmon.dll _snprintf MSVCRT.dll _exit _XcptFilter exit __p___initenv __getmainargs _initterm __setusermatherr _adjust_fdiv __p__commode __p__fmode __set_app_type _except_handler3 _controlfp \winup.exe %s%s \system32\wupdmgrd.exe %s%s http: //www.practicalmalwareanalysis.com/updater.exe |
5.有哪些基于主机或基于网络的迹象,可以被用来确定被这个恶意代码所感染的机器?
利用ida来查看
\\system32\\wupdmgr.exe
、\\winup.exe
的程序
psapi.dll
、sfc_os.dll
的动态链接库
好的,我无法判断了。
6. 这个文件在资源段中包含一个资源。使用Resource Hacker工具来检查资源,然后抽取资源。从资源中你能发现什么吗?
依次分析
将文件导入进Resource Hacker中
然后将资源保存成二进制文件进行保存,保存成exe文件
导入进ida再进行分析
出现了一个网站www.practicalmalwareanalysis.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2020-10-01 gdb list命令查看源码 break设置断点可以通过源码也可以根据汇编代码地址设置
2020-10-01 Error disabling address space randomization: Operation not permitted