笔记
启动器 Launcher
用来加载恶意代码使用,通常在资源中包含一个exe或dll,在运行的时候,把PE文件从资源中取出来,然后执行,常见API:FindResource、LoadResource、SizeOfResource等
恶意代码启动器通常需要管理员权限运行,或提权来得到权限,恶意代码启动器可能会包含一些提权代码
进程注入 Process Injector
把恶意代码注入到别的进程中去执行,常用API:VirtualAllocEx,WriteProcessMemory函数等
-
DLL注入:写一个DLL加载到目标进程中会自动执行dllmain函数
-
代码注入:注入shellcode
进程替换 Puppet process
创建一个合法进程,然后在其内存空间写入恶意程序,最后通过SetThreadContext函数来让入口点指向恶意代码进行执行,也叫傀儡进程
Hook注入 Hook Injector
使用SetWindowsHookEx来设置消息Hook
APC注入 APC Injector
每个线程都有一个附加的APC队列,在线程处于可警告状态的时候被处理,在这个状态的时候会一次调用APC队列中的所有函数,可通过编写代码用APC抢占可警告状态的线程
用户模式的APC使用API:QueueUserAPC,一般会注入目标进程的所有线程,以确保APC很快会被执行
内核模式的APC使用API:KeInitializeAPC,KeInsertQueueApc,一般来注入用户层shellcode到用户空间去执行
作业
Lab 12-1
分析目标:Lab12-01.exe,Lab12-01.dll
查看程序:无壳,导入表导入了CreateRemoteThread函数,有点可疑的字符串:
这里看到了导入表没有的LoadLibraryA函数,这里大概率是个DLL注入
-
在你运行恶意代码时,发生了什么?
无限弹窗:一关掉就弹出来,无穷无尽
-
哪个进程会被注入?
explorer.exe进程会被注入:
静态分析:exe程序首先动态获取几个函数地址:
然后进入for循环进行遍历获取到的进程句柄:
这里对每个进程句柄都调用了一下sub_401000函数:这个函数的功能是打开进程遍历模块看有没有名字是explorer.exe的模块在,如果有就返回1,然后主程序就会打开进程,跳出循环进入下一步:
经典的DLL注入流程
-
你如何能够让恶意代码停止弹出窗口?
重启该进程即可,重启电脑也行。
-
这个恶意代码样本时如何工作的?
dllmain函数里直接创建了线程:
线程里是个死循环:不断执行弹窗函数
Lab 12-2
分析目标:Lab12-02.exe
-
这个程序的目的是什么?
这个程序的目的是键盘记录器,会把在某个窗口下按键的内容记录在exe目录下的:
practicalmalwareanalysis.log
里: -
启动器恶意代码是如何隐蔽执行的?
程序exe是个启动器,负责启动svchost.exe,然后修改其内存为资源文件的内容,创建傀儡进程来隐蔽执行,资源中的PE文件才是真正功能模块,提取内存中解密后的资源文件拖入IDA,分析:
主函数首先获取两样东西:svchost.exe的绝对路径,资源头里解密后的PE文件,然后就进去函数创建傀儡进程了
函数sub_4010EA:先判断缓冲区是不是PE文件,是的话,就创建进程svchost,启动标识为启动后挂起
接下来的操作就是加载PE文件到内存展开,然后设置线程上下文到PE入口点,然后恢复线程开始执行,具体操作就不细看了
-
恶意代码负载存储在哪里?
加密存储在资源里:
-
恶意负载是如何被保护的?
通过加密存储来进行保护,解密程序:
-
字符串列表是如何被保护的?
通过异或进行保护,代码同题4
Lab 12-3
分析目标:Lab12-03.exe(Lab12-02.exe中抽取出来的资源PE文件)
-
这个恶意负载的目的是什么?
按键记录器:设置键盘钩子,监听键盘输入事件
hook函数:向指定文件写入内容,然后继续传递消息
-
恶意负载是如何注入自身的?
通过SetWindowsHookEx函数设置全局消息钩子来注入自身
-
程序还创建了哪些其他文件?
键盘记录器把在某个窗口下按键的内容记录在当前目录下的:
practicalmalwareanalysis.log
里了
Lab 12-4
分析目标:Lab12-04.exe
主函数:首先动态获取几个函数
接下来进入for循环遍历进程:找到winlogon.exe进程,具体sub_401000函数分析见题1,后面的分析写题里了就
-
位置0x401000代码完成了什么功能?
这里代码的功能是找到winlogon.exe模块,分析:首先填充两个字符串
接下来通过3个call来获取第一个模块的名称,然后通过字符串对比函数进行判断,对比成功则返回1:
-
代码注入了哪个进程?
根据题1的分析,注入winlogon.exe进程
-
使用LoadLibraryA加载了哪个DLL?
加载了:sfc_os.dll
紧接着循环遍历进程之后,立马调用了sub_401174函数:找到sfc.os.dll的2号函数,然后远程线程到目标进程中执行
2号函数是SfcTerminateWacherThread,在下次启动之前禁用windows文件保护机制
-
传入给CreateRemoteThread调用的第四个参数是什么?
如题3:是从dll中找到的函数地址
-
二进制主程序释放出了哪个恶意代码?
这里先把原本的wupdmgr.exe给移动到临时目录下了,然后调用函数sub_4011FC进行资源释放,释放假的wupdmgr.exe到原位置
-
释放出恶意代码的目的是什么?
找到存起来的资源文件进行分析:执行真正的wupdmgr.exe程序,然后下载更新exe程序并执行,用来特洛伊木马化wupdmgr.exe文件,并通过下载更新文件来更新恶意代码