| 本帖最后由 666 于 2021-5-10 13:29 编辑 
 复制代码.版本 2
.程序集变量 函数句柄
.局部变量 name
.局部变量 namelen
.局部变量 Unicode
.局部变量 Unicodelen
.局部变量 pUnicodelen
.局部变量 h
.局部变量 punicode_string, 长整数型
.局部变量 ansi_string, 长整数型
.局部变量 SYSTEM_MODULE_INFORMATION
.局部变量 MODULE_
.局部变量 SYSTEM_MODULE
.局部变量 i
.局部变量 j
.局部变量 RequiredSize
.局部变量 zwzz, 字节集
name = Asm_GetDataH (“kernelbase.dll”)  ' 定义Ansi编码 取其指针 因为存在整体中无法释放
namelen = Asm_len (name)  ' 取A编码长度
Unicodelen = Asm_mul (Asm_len (name), 2)  ' 取A编码长度*2=Unicodelen
Unicode = Nt_Heap_RtlAllocateHeap (g_heap, 位或 (#HEAP_ZERO_MEMORY, #HEAP_GENERATE_EXCEPTIONS), Unicodelen)  ' 申请相应长度内存
Nt_Trans_RtlMultiByteToUnicodeN (Unicode, Unicodelen, Asm_GetH (pUnicodelen), name, namelen)  ' 传入地址转换编码
Asm_writeWord_1 (punicode_string, pUnicodelen)
Asm_writeWord__1 (punicode_string, 2, pUnicodelen)
Asm_writeDword__1 (punicode_string, 4, Unicode)
.如果真 (Nt_Executable_LdrLoadDll (#NULL, 0, Asm_GetH (punicode_string), Asm_GetH (h)) ≠ 0)  ' DONT_* & LOAD_*。
    输出调试文本 (“加载失败”)
.如果真结束
Nt_Executable_LdrGetDllHandle (#NULL, #NULL, Asm_GetH (punicode_string), Asm_GetH (h))
Nt_Heap_RtlFreeHeap (g_heap, 0, Unicode)  ' 释放掉内存
' ---------------------------------------------------------------------------------
name = Asm_GetDataH (“GetTickCount64”)  ' 定义Ansi编码 取其指针
Asm_writeWord_1 (ansi_string, Asm_len (name))
Asm_writeWord__1 (ansi_string, 2, Asm_len (name))
Asm_writeDword__1 (ansi_string, 4, name)
Nt_Executable_LdrGetProcedureAddress (h, Asm_GetH (ansi_string), 0, Asm_GetH (函数句柄))  ' 使用名称取其偏移指针
输出调试文本 (GetTickCount64 ())
' Nt_Executable_LdrGetProcedureAddress (h, 0, int 指定序号, 函数句柄)  ' 使用序号取其偏移指针,系统函数可能不一致
' ---------------------------------------------------------------------------------
SYSTEM_MODULE_INFORMATION = Nt_Heap_RtlAllocateHeap (g_heap, 位或 (#HEAP_ZERO_MEMORY, #HEAP_GENERATE_EXCEPTIONS), 4 + 284 × 256)
Nt_Executable_LdrQueryProcessModuleInformation (SYSTEM_MODULE_INFORMATION, 4 + 284 × 256, RequiredSize)  ' Ansi垃圾函数不推荐使用,建议遍历PEB
i = 4
.计次循环首 (Asm_readDword (SYSTEM_MODULE_INFORMATION), )
    ' 输出调试文本 (Asm_readDword_ (SYSTEM_MODULE_INFORMATION, Asm_add (8, i)))
    ' 输出调试文本 (到文本 (指针到字节集 (Asm_add (SYSTEM_MODULE_INFORMATION, Asm_add (28, i)), 256)))  ' 指针到字节集 只是为了切合 输出
    i = i + 284
.计次循环尾 ()
' Section, 整数型, , , 保留
' MappedBase, 整数型, , , 映射句柄
' ImageBase, 整数型, , , 模块句柄
' ImageSize, 整数型, , , 模块长度
' Flags, 整数型, , , 模块标志
' LoadOrderIndex, 短整数型, , , 装载顺序索引
' InitOrderIndex, 短整数型, , , 初始顺序索引
' LoadCount, 短整数型, , , 函数计数
' OffsetToFileName, 短整数型, , , 名称偏移
' ImageName, 字节型, , "256"
Nt_Heap_RtlFreeHeap (g_heap, 0, SYSTEM_MODULE_INFORMATION)  ' 释放掉内存
 |