本帖最后由 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) ' 释放掉内存
复制代码
|