恶意代码分析实战-启动一个恶意的DLL
2024-08-28 20:08:27
如果不能把恶意代码运行起来,那么动态分析基础技术没有什么用。
Windows版本中包含rundll32.exe程序,提供了一个运行DLL的平台。
rundll32.exe Dllname,Export arguments
Export值必须是一个DLL文件导出函数表中的函数名或者序号。
PEID可以看导出函数表。
图1
Install就像是启动rip.dll的一个入口,所以可以用rundll32启动该恶意代码
恶意的DLL在DLLMain(称作DLL函数入口点)执行它们的代码,因为无论DLL什么时候加载,DLLMain函数总会执行,这样就能通过rundll32.exe加载DLL。
方法1:
C:\>rundll32.exe rip.dll,Install
方法2:
恶意代码也可以通过序号来导出函数,也就是说,导出函数只有一个序号,而没有函数名。
在前面加#号字符即可实现。
C:\>rundll32.exe xyzzy.dll,#5
方法3:
从IMAGE_FILE_HEADER的特征域里擦除IMAGE_FILE_DLL(0x2000)标记。这样的改变不会执行任何输入函数,但它会调用DLLMain方法,而且有可能造成恶意代码意想不到的崩溃或者终止。这样做的目的是能使DLL执行恶意部分
PE结构位置:
struct IMAGE_NT_HEADERS NtHeader E8h F8h Fg: Bg:0xFFE0FF
struct IMAGE_FILE_HEADER FileHeader ECh 14h Fg: Bg:0xFFE0FF
struct FILE_CHARACTERISTICS Characteristics FEh 2h Fg: Bg:0xFFE0FF WORD
WORD IMAGE_FILE_DLL : 1 1 FEh 2h Fg: Bg:0xFFE0FF 0x2000 File is a DLL
有参数的情况
DLL形态的恶意代码也可能需要被安装成一个服务。比如ipr32x.dll中导出了InstallService函数。
C:\>rundll32.exe ipr32x.dll,InstallService ServiceName
C:\>net start ServiceName
ServiceName参数必须提供给恶意代码,让它能被安装并运行起来。而在Windows系统中启动指定的服务,可以使用Net Start命令。
动态调试单一的服务
新建快捷方式-然后拖进OD就可以正常单步调试了。
最新文章
- QuartZ Cron表达式
- SQL Azure (15) SQL Azure 新的规格
- HDU 4870Rating(推公式)
- 异常语句:try(尝试)-catch(抓取)-finally 跳转语句:break
- hadoop出现ava.lang.ClassNotFoundException: org.codehaus.jackson.map.JsonMappingException
- shell脚本 案例
- contain_of宏定义
- linux中编译安装Apache、PHP、MySQL(上)
- Linux 部署 xxl-job 注意问题
- 使用redis作为Return存储方式
- Python Excel 多sheet 多条数据 自定义写入
- 数据驱动-参数化(Parameters)
- ElasticSearch入门3: Spring Boot集成ElasticSearch
- Windows五种IO模型性能分析和Linux五种IO模型性能分析
- sqlserver profiler 抓出来作业的代码 SQLAgent - TSQL JobStep,二进制作业名字转化为字段串作业名字,job_id
- 【数据结构】【平衡树】treap
- zend studio配置调试(Xdebug方式)
- py基础2--列表,元祖,字典,集合,文件
- 题目1008:最短路径问题(SPFA算法)
- sublime text 2编辑器中文问题