Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
lazy_importer — 用于以隐藏且不利于逆向工程的方式从 DLL 导入函数的库 | Kitploit
工具/GitHubGitHub/justasmasiulis/lazy_importer
静态分析漏洞利用逆向工程恶意软件分析实用工具与框架二进制分析红队Payload 开发反机器人
GitHubjustasmasiulis/lazy_importer

lazy_importer

用于以隐藏且不利于逆向工程的方式从 DLL 导入函数的库

1.9k22763年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
查看仓库
分享

lazy importer

一个简单易用的仅头文件库,旨在让逆向工程师的工作变得更加困难。

小示例

LI_FN(OutputDebugStringA)("hello world");
LI_FN(VirtualProtect).in(LI_MODULE("kernel32.dll").cached());

编译第一行时的 IDA 输出

特性

  • 不在内存中留下任何字符串。
  • 不分配任何内存。
  • 可以轻松内联。
  • 不在可执行文件中留下任何导入。
  • 生成极其精简的汇编代码。
  • 非缓存函数不会在数据段中留下任何内容。
  • 每次编译时哈希值都会随机化,以抵御基本的哈希数据库攻击。

文档

  • LI_FN(function_pointer) -> lazy_function
  • LI_FN_DEF(function_type) -> lazy_function
  • LI_MODULE(module_name) -> lazy_module

  • safe 表示当函数无法成功完成其任务时,返回 0,而不是出现未定义行为。
  • cached 表示结果仅在第一次调用时计算,之后会被重用。
  • forwarded 表示导出转发将被正确解析。

lazy_module

function safe cached
尝试查找给定的模块并返回其地址
get<T = void*>() -> T :x: :x:
safe<T = void*>() -> T :white_check_mark: :x:
cached<T = void*>() -> T :x: :white_check_mark:
safe_cached<T = void*>() -> T :white_check_mark: :white_check_mark:
尝试使用给定的 LDR_DATA_TABLE_ENTRY 指针查找给定的模块
in<T = void*, Ldr>(Ldr ldr_entry) -> T :white_check_mark: :x:
in_cached<T = void*, Ldr>(Ldr ldr_entry) -> T :white_check_mark: :white_check_mark:

lazy_function<F>

function safe cached forwarded
使用给定参数调用已解析的导出函数
operator()(...) -> result_of<F, ...> :x: :x: :x:
尝试在所有已加载的模块中解析导出函数并返回函数地址
get<T = F>() -> T :x: :x: :x:
safe<T = F>() -> T :white_check_mark: :x: :x:
cached<T = F>() -> T :x: :white_check_mark: :x:
safe_cached<T = F>() -> T :white_check_mark: :white_check_mark: :x:
forwarded<T = F>() -> T :x: :x: :white_check_mark:
forwarded_safe<T = F>() -> T :white_check_mark: :x: :white_check_mark:
forwarded_cached<T = F>() -> T :x: :white_check_mark: :white_check_mark:
forwarded_safe_cached<T = F>() -> T :white_check_mark: :white_check_mark: :white_check_mark:
尝试在给定模块中解析导出函数并返回函数地址
in<T = F, A>(A module_address) -> T :x: :x: :x:
in_safe<T = F, A>(A module_address) -> T :white_check_mark: :x: :x:
in_cached<T = F, A>(A module_address) -> T :x: :white_check_mark: :x:
in_safe_cached<T = F, A>(A module_address) -> T :white_check_mark: :white_check_mark: :x:
尝试在 ntdll 中解析导出函数并返回函数地址
nt<T = F>() -> T :x: :x: :x:
nt_safe<T = F>() -> T :white_check_mark: :x: :x:
nt_cached<T = F>() -> T :x: :white_check_mark: :x:
nt_safe_cached<T = F>() -> T :white_check_mark: :white_check_mark: :x:

额外配置

#define效果
LAZY_IMPORTER_NO_FORCEINLINE禁用强制内联
LAZY_IMPORTER_CASE_INSENSITIVE启用不区分大小写的比较。解析转发导出时可能需要。
LAZY_IMPORTER_CACHE_OPERATOR_PARENS在 lazy_function 的 operator() 中使用 cached() 而不是 get()
LAZY_IMPORTER_RESOLVE_FORWARDED_EXPORTS在 get() 中使用 forwarded()。警告:不适用于 nt() 和 in()。
LAZY_IMPORTER_HARDENED_MODULE_CHECKS为模块枚举添加额外的健全性检查。
LAZY_IMPORTER_NO_CPP_FORWARD移除对 <utility> C++ 头文件的依赖。

示例输出

for ( i = *(_QWORD **)(*(_QWORD *)(__readgsqword(0x60u) + 24) + 16i64); ; i = (_QWORD *)*i )
  {
    v1 = i[6];
    v2 = *(unsigned int *)(*(signed int *)(v1 + 60) + v1 + 136);
    v3 = (_DWORD *)(v2 + v1);
    if ( v2 + v1 != v1 )
    {
      LODWORD(v4) = v3[6];
      if ( (_DWORD)v4 )
        break;
    }
LABEL_8:
    ;
  }
  while ( 1 )
  {
    v4 = (unsigned int)(v4 - 1);
    v5 = -2128831035;
    v6 = (char *)(v1 + *(unsigned int *)((unsigned int)v3[8] + 4 * v4 + v1));
    v7 = *v6;
    v8 = (signed __int64)(v6 + 1);
    if ( v7 )
    {
      do
      {
        ++v8;
        v5 = 16777619 * (v5 ^ v7);
        v7 = *(_BYTE *)(v8 - 1);
      }
      while ( v7 );
      if ( v5 == -973690651 )
        break;
    }
    if ( !(_DWORD)v4 )
      goto LABEL_8;
  }
  ((void (__fastcall *)(const char *))(v1
                                     + *(unsigned int *)(v1
                                                       + (unsigned int)v3[7]
                                                       + 4i64 * *(unsigned __int16 *)(v1 + (unsigned int)v3[9] + 2 * v4))))("hello world");

支持过本项目的人

我想感谢那些联系我并捐款支持我和我的项目的人

  • @DefCon42
  • @Mecanik
下载工具