DecoyMini 技术交流社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1573|回复: 0

[技术前沿] x64 WINAPI 递归加载程序

[复制链接]

15

主题

2

回帖

2

荣誉

Rank: 1

UID
1625
积分
34
精华
0
沃币
3 枚
注册时间
2024-3-8
发表于 2024-9-25 18:30:33 | 显示全部楼层 |阅读模式
本帖最后由 zer0daysec 于 2024-9-25 18:32 编辑

一、说明


今天在 GitHub 看到一个比较有意思的项目,通过递归的方式来调用 API,地址:https://github.com/Evi1Grey5/Recursive-Loader,根据项目描述说明,作者前前后后大概折腾了一年时间,思路来自于一款 Linux 下的 Kobalos 恶意软件,一年时间包括对该恶意软件进行的逆向工程,作者表示逆向工程是非常痛苦的,这一点非常同意,尤其是一个相对比较复杂的恶意软件。

受这款恶意软件启发,作者为此开发了适用于 Windows10 和 Windows11 的 x64 API 递归加载程序,编译后,IAT 中没有项,编译后的文件通过  NTDLL 解析所有 API,其它库通过 LdrLoadDll 加载。

程序采用递归的方式来实现,使用枚举确定要执行代码的哪一部分,每个函数封装在一个 switch 语句中,所有的变量使用 VARIABLE_TABLE 结构体递归传递。VARIABLE_TABLE 还包含其它嵌套的结构,用于处理 API 解析、初始化 COM 对象和关联类以及某些 switch 函数的数据结构,这些 switch 函数可能需要额外的任务变量,为了避免编译器优化代码并将函数引入 IAT,一些 STDIO 功能 (例如 ZeroMemory) 已用非正统的方法重写。

题外话,关于 ZeroMemory

之前看到过关于 ZeroMemory 函数安全使用说明,也与编译器优化有关



stackoverflow 上关于什么时候使用 https://stackoverflow.com/questi ... ezeromemory-be-used

HTTPS 请求由 COM 通过 WinHttpRequest 对象处理。

示例代码功能是从 vx-underground 下载文件并执行它,因为远程链接 vx-underground 的程序已不存在,所以示例代码会无法正常工作,只需要手动更改即可



可以通过在每个构建打乱 switch 语句和枚举值的顺序来引入伪多态性来改进它,以下为代码,代码非常多,关于 httprequest.h 文件,可通过 midl 对 httprequest.idl 进行生成 midl httprequest.idl /out [你的工程目录]

二、编译



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Hi, guys, This is My Blog -> https://ma1waresearch.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|DecoyMini 技术交流社区 (吉沃科技) ( 京ICP备2021005070号 )

GMT+8, 2024-12-22 09:28 , Processed in 0.293430 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表