zoukankan      html  css  js  c++  java
  • 恶意代码分析实战-启动一个恶意的DLL

    如果不能把恶意代码运行起来,那么动态分析基础技术没有什么用。

    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就可以正常单步调试了。

  • 相关阅读:
    Git——快速安装Git及初始化配置【二】
    Git——Git的简单介绍【一】
    web scraper——简单的爬取数据【二】
    web scraper——安装【一】
    PHP——实现随机打乱一个二维数组
    Vue——显示微信用户名称中enjoin表情
    Vue——轻松实现vue底部点击加载更多
    微信报错——10003
    Java_myBatis_逆向工程
    Java_myBatis_XML代理_动态SQL
  • 原文地址:https://www.cnblogs.com/17bdw/p/10255390.html
Copyright © 2011-2022 走看看