后门程序分析1

临时补充一个内容,这是一个后门程序,通过IDA分析,之后把里面收集的信息点全部整理出来(包括:反虚拟机,系统信息等等)pass:guet

用IDA打开先看看主函数的样子
后门程序分析1_第1张图片
后门程序分析1_第2张图片
查阅一些这些API



    InternetOpenA:
        参数:
            lpszAgent: [输入] 指定用户代理名称的字符串。
            dwAccessType: [输入] 指定访问类型的标志。例如,使用 INTERNET_OPEN_TYPE_DIRECT 直接连接到互联网。
            lpszProxyName: [输入] 指定代理服务器名称的字符串。
            lpszProxyBypass: [输入] 指定应绕过的代理服务器的主机名的字符串。
            dwFlags: [输入] 附加选项标志。
        返回值:返回一个有效的句柄,表示打开的 Internet 会话;如果失败,则返回 NULL。

    InternetOpenUrlA:
        参数:
            hInternet: [输入] 用于请求的 Internet 连接句柄。
            lpszUrl: [输入] 指向包含 URL 的 null 结尾字符串的指针。
            lpszHeaders: [输入] 指向包含 HTTP 请求标头的可选 null 结尾字符串的指针。
            dwHeadersLength: [输入] 指定标头字符串的长度(以字节为单位)。
            dwFlags: [输入] 附加选项标志。
            dwContext: [输入] 用户定义的上下文值。
        返回值:如果成功,则返回一个有效的句柄,表示在指定的 Internet 会话中打开的 URL;如果失败,则返回 NULL。

    InternetCloseHandle:
        参数:
            hInternet: [输入] 打开的 Internet 句柄。
        返回值:如果成功,返回 TRUE;如果失败,返回 FALSE。

    GetLastError:
        参数:无
        返回值:返回最近发生的错误代码。

    FormatMessageA:
        参数:
            dwFlags: [输入] 格式化选项标志。
            lpSource: [输入] 指向包含消息定义的可执行模块或 DLL 的指针。
            dwMessageId: [输入] 错误消息标识符。
            dwLanguageId: [输入] 语言标识符。
            lpBuffer: [输出] 接收格式化消息文本的缓冲区。
            nSize: [输入] 缓冲区的大小(以字符为单位)。
            Arguments: [输入] 指向一个数组,其中包含要插入格式化消息的参数的地址。
        返回值:如果成功,则返回写入缓冲区的字符数,不包括 null 终止字符;如果失败,则返回 0。

    LocalFree:
        参数:
            hMem: [输入] 要释放的内存句柄。
        返回值:如果成功,返回 NULL;如果失败,返回非空值。

也就是说上面这段代码就是传输在你本机上读取的信息

看到sub_1400010D0这个函数这个函数有点长,我们慢慢分析
后门程序分析1_第3张图片
后门程序分析1_第4张图片
后门程序分析1_第5张图片
后门程序分析1_第6张图片
后门程序分析1_第7张图片
后门程序分析1_第8张图片
后门程序分析1_第9张图片
后门程序分析1_第10张图片
后门程序分析1_第11张图片
后门程序分析1_第12张图片
后门程序分析1_第13张图片
后门程序分析1_第14张图片
后门程序分析1_第15张图片
先查阅一下函数



    RegOpenKeyExW:
        参数:
            hKey: [输入] 要打开的注册表项的父键句柄。
            lpSubKey: [输入] 指向要打开的子键名称的字符串指针。
            ulOptions: [输入] 注册表项打开选项,例如 REG_OPTION_OPEN_LINK。
            samDesired: [输入] 访问注册表项的安全性和访问权限。
            phkResult: [输出] 接收打开的注册表项句柄。

    RegQueryValueExW:
        参数:
            hKey: [输入] 打开的注册表项句柄。
            lpValueName: [输入] 指向要查询的值的名称的字符串指针。
            lpReserved: [保留] 保留参数,必须设置为 NULL。
            lpType: [输出] 接收值的类型。
            lpData: [输出] 接收查询到的值的缓冲区。
            lpcbData: [输入/输出] 指定 lpData 缓冲区大小的指针。

    RegCloseKey:
        参数:
            hKey: [输入] 要关闭的注册表项句柄。

    SLIsGenuineLocal:
        参数:
            pComponent: [输入] 保留参数,必须设置为 NULL。

    SysAllocString:
        参数:
            psz: [输入] 指向以 null 结尾的字符串的指针。

    CoUninitialize:
        参数:无

    SysFreeString:
        参数:
            bstrString: [输入] 要释放的 BSTR 字符串。

    GetPwrCapabilities:
        参数:
            pSystemPowerCapabilities: [输出] 接收系统电源功能信息的结构体指针。

    MultiByteToWideChar:
        参数:
            CodePage: [输入] 指定要使用的代码页。
            dwFlags: [输入] 附加选项标志。
            lpMultiByteStr: [输入] 指向多字节字符的字符串指针。
            cbMultiByte: [输入] 多字节字符的长度(以字节为单位)。
            lpWideCharStr: [输出] 接收宽字符的缓冲区。
            cchWideChar: [输入] 缓冲区的大小(以字符为单位)。

    GetDiskFreeSpaceExW:
        参数:
            lpDirectoryName: [输入] 要查询的目录的路径。
            lpFreeBytesAvailable: [输出] 接收可用空间的指针。
            lpTotalNumberOfBytes: [输出] 接收总空间的指针。
            lpTotalNumberOfFreeBytes: [输出] 接收总可用空间的指针。

    GlobalMemoryStatusEx:
        参数:
            lpBuffer: [输入/输出] 指向接收内存信息的结构体指针。

    Sleep:

    参数:
        dwMilliseconds: [输入] 线程挂起的时间,以毫秒为单位。

    GetLastInputInfo:
        参数:
            plii: [输入/输出] 指向 LASTINPUTINFO 结构体的指针,用于接收最后输入信息。

    GetTickCount:
        参数:无

    VariantClear:
        参数:
            pvarg: [输入/输出] 要清除的 VARIANT 变量。


    RegOpenKeyExW:如果成功,返回 ERROR_SUCCESS;如果失败,返回错误代码。
    RegQueryValueExW:如果成功,返回 ERROR_SUCCESS;如果失败,返回错误代码。
    RegCloseKey:如果成功,返回 ERROR_SUCCESS;如果失败,返回错误代码。
    SLIsGenuineLocal:如果操作系统是正版的,返回非零值;否则返回零。
    SysAllocString:如果成功,返回分配的 BSTR 字符串;如果失败,返回 NULL。
    CoUninitialize:无返回值。
    SysFreeString:无返回值。
    GetPwrCapabilities:如果成功,返回非零值;如果失败,返回零。
    MultiByteToWideChar:如果成功,返回转换后的宽字符数;如果失败,返回零。
    GetDiskFreeSpaceExW:如果成功,返回非零值;如果失败,返回零。
    GlobalMemoryStatusEx:无返回值。
    Sleep:无返回值。
    GetLastInputInfo:如果成功,返回非零值;如果失败,返回零。
    GetTickCount:返回从系统启动到当前经过的毫秒数。
    VariantClear:如果成功,返回 S_OK;如果失败,返回错误代码。

后续我们分析一下代码逻辑

你可能感兴趣的:(上课内容,学习)