|
远程注入_调用函数 | 逻辑型 | |
|
进程ID | 整数型 | | | |
函数名 | 文本型 | | | | 参数一 | 字节集 | | | | 参数二 | 字节集 | | | | 参数三 | 字节集 | | | | 参数四 | 字节集 | | | | 参数五 | 字节集 | | | | 参数六 | 字节集 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 |
临时内存地址1 | 整数型 | | |
临时内存地址2 | 整数型 | | |
GetProcAddress地址 | 整数型 | | |
汇编代码1 | 字节集 | | |
汇编代码2 | 字节集 | | |
函数地址 | 整数型 | | |
长度 | 整数型 | | |
指针地址 | 整数型 | | |
参数 | 整数型 | | 0 |
i | 整数型 | | |
返回值 | 整数型 | | |
进程句柄 =
OpenProcess ( #PROCESS_ALL_ACCESS, 假, 进程ID
) 临时内存地址1 =
VirtualAllocEx (进程句柄, 0,
取文本长度 (函数名
),
#MEM_COMMIT, #PAGE_READWRITE )
如果真 (临时内存地址1 = 0
)
CloseHandle (进程句柄
)
返回 (假)
WriteProcessMemory (进程句柄, 临时内存地址1,
到字节集 (函数名
),
取文本长度 (函数名
), 0
) GetProcAddress地址 =
GetProcAddress (GetModuleHandleA (“Kernel32.dll”),
“GetProcAddress”)调试输出 (DLL句柄
) 汇编代码1 =
{ 184
} +
到字节集 (GetProcAddress地址
) +
{ 104
} +
到字节集 (临时内存地址1
) +
{ 104
} +
到字节集 (DLL句柄
) +
{ 255, 208, 195, 144
} 临时内存地址2 =
VirtualAllocEx (进程句柄, 0,
取字节集长度 (汇编代码1
),
#MEM_COMMIT, #PAGE_READWRITE )
如果真 (临时内存地址1 = 0
)
VirtualFreeEx (进程句柄, 临时内存地址1, 0,
#MEM_RELEASE )
CloseHandle (进程句柄
)
返回 (假)
WriteProcessMemory (进程句柄, 临时内存地址2, 汇编代码1,
取字节集长度 (汇编代码1
), 0
) 线程句柄 =
CreateRemoteThread (进程句柄, 0, 0, 临时内存地址2, 0, 0, 0
)
如果真 (线程句柄 = 0
)
VirtualFreeEx (进程句柄, 临时内存地址1, 0,
#MEM_RELEASE )
VirtualFreeEx (进程句柄, 临时内存地址2, 0,
#MEM_RELEASE )
CloseHandle (进程句柄
)
返回 (假)WaitForSingleObject (线程句柄, #DMUS_SEG_REPEAT_INFINITE ) GetExitCodeThread (线程句柄, 函数地址
) VirtualFreeEx (进程句柄, 临时内存地址1, 0,
#MEM_RELEASE )VirtualFreeEx (进程句柄, 临时内存地址2, 0,
#MEM_RELEASE )CloseHandle (线程句柄
)
如果真 (函数地址 = 0
)
CloseHandle (进程句柄
)
返回 (假)
如果真 (参数一 ≠
{ })
长度 =
取字节集长度 (参数一
)
如果 (长度 = 4
)

指针地址 =
取字节集数据 (参数一,
#整数型, )

指针地址 =
VirtualAllocEx (进程句柄, 0, 长度,
#MEM_COMMIT, #PAGE_READWRITE )
WriteProcessMemory (进程句柄, 指针地址, 参数一, 长度, 0
)
加入成员 (参数, 指针地址)
如果真 (参数二 ≠
{ })

长度 =
取字节集长度 (参数二
)

如果 (长度 = 4
)


指针地址 =
取字节集数据 (参数二,
#整数型, )


指针地址 =
VirtualAllocEx (进程句柄, 0, 长度,
#MEM_COMMIT, #PAGE_READWRITE )

WriteProcessMemory (进程句柄, 指针地址, 参数二, 长度, 0
)
加入成员 (参数, 指针地址)

如果真 (参数三 ≠
{ })


长度 =
取字节集长度 (参数三
)


如果 (长度 = 4
)



指针地址 =
取字节集数据 (参数三,
#整数型, )



指针地址 =
VirtualAllocEx (进程句柄, 0, 长度,
#MEM_COMMIT, #PAGE_READWRITE )


WriteProcessMemory (进程句柄, 指针地址, 参数三, 长度, 0
)

加入成员 (参数, 指针地址)


如果真 (参数四 ≠
{ })



长度 =
取字节集长度 (参数四
)



如果 (长度 = 4
)




指针地址 =
取字节集数据 (参数四,
#整数型, )




指针地址 =
VirtualAllocEx (进程句柄, 0, 长度,
#MEM_COMMIT, #PAGE_READWRITE )



WriteProcessMemory (进程句柄, 指针地址, 参数四, 长度, 0
)


加入成员 (参数, 指针地址)



如果真 (参数五 ≠
{ })




长度 =
取字节集长度 (参数五
)




如果 (长度 = 4
)





指针地址 =
取字节集数据 (参数五,
#整数型, )





指针地址 =
VirtualAllocEx (进程句柄, 0, 长度,
#MEM_COMMIT, #PAGE_READWRITE )




WriteProcessMemory (进程句柄, 指针地址, 参数五, 长度, 0
)



加入成员 (参数, 指针地址)




如果真 (参数六 ≠
{ })





长度 =
取字节集长度 (参数六
)





如果 (长度 = 4
)






指针地址 =
取字节集数据 (参数六,
#整数型, )






指针地址 =
VirtualAllocEx (进程句柄, 0, 长度,
#MEM_COMMIT, #PAGE_READWRITE )





WriteProcessMemory (进程句柄, 指针地址, 参数六, 长度, 0
)




加入成员 (参数, 指针地址)




















汇编代码2 =
{ 184
} +
到字节集 (函数地址
)
变量循环首 (取数组成员数 (参数
), 1, -1, i
) 
汇编代码2 = 汇编代码2 +
{ 104
} +
到字节集 (参数
[i
])
变量循环尾 ()汇编代码2 = 汇编代码2 +
{ 255, 208, 195, 144
} 指针地址 =
VirtualAllocEx (进程句柄, 0,
取字节集长度 (汇编代码2
),
#MEM_COMMIT, #PAGE_READWRITE ) WriteProcessMemory (进程句柄, 指针地址, 汇编代码2,
取字节集长度 (汇编代码2
), 0
) 加入成员 (参数, 指针地址
) 线程句柄 =
CreateRemoteThread (进程句柄, 0, 0, 指针地址, 0, 0, 0
)
如果真 (线程句柄 = 0
)
计次循环首 (取数组成员数 (参数
), i
)

如果真 (参数
[i
] ≠ 0
)

VirtualFreeEx (进程句柄, 参数
[i
], 0,
#MEM_RELEASE )



计次循环尾 ()
清除数组 (参数
)
CloseHandle (进程句柄
)
返回 (假)
WaitForSingleObject (线程句柄,
#DMUS_SEG_REPEAT_INFINITE ) GetExitCodeThread (线程句柄, 返回值
)
计次循环首 (取数组成员数 (参数
), i
)
如果真 (参数
[i
] ≠ 0
)
VirtualFreeEx (进程句柄, 参数
[i
], 0,
#MEM_RELEASE )

计次循环尾 ()清除数组 (参数
)CloseHandle (线程句柄
)CloseHandle (进程句柄
)返回 (真)