|
进程_取函数入口 | 整数型 | |
|
进程ID | 整数型 | | | |
模块名 | 文本型 | | | | 函数名 | 文本型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 |
pModeName | 整数型 | | |
Fun_GetModuleHandleA | 整数型 | | |
pFunName | 整数型 | | |
Fun_GetProcAddress | 整数型 | | |
pRes | 整数型 | | |
ShellCode | 字节集 | | |
pModeName = 内存.
申请文本内存 (进程ID, 模块名
)Fun_GetModuleHandleA =
GetProcAddress_汇编 (GetModuleHandle_汇编 (“kernel32.dll”),
“GetModuleHandleA”) pFunName = 内存.
申请文本内存 (进程ID, 函数名
)Fun_GetProcAddress =
GetProcAddress_汇编 (GetModuleHandle_汇编 (“kernel32.dll”),
“GetProcAddress”) pRes = 内存.
申请内存 (进程ID, 4
)ShellCode =
{ 96, 104
} +
到字节集 (pModeName
) +
{ 185
} +
到字节集 (Fun_GetModuleHandleA
) +
{ 255, 209, 104
} +
到字节集 (pFunName
) +
{ 80, 185
} +
到字节集 (Fun_GetProcAddress
) +
{ 255, 209, 163
} +
到字节集 (pRes
) +
{ 97, 195
} 进程一调用汇编代码 (进程ID, ShellCode,
)pRes = 内存.
读整数 (进程ID, pRes
)内存.
释放 (进程ID, pRes
)内存.
释放 (进程ID, pFunName
)内存.
释放 (进程ID, pModeName
)返回 (pRes
)|
进程一调用汇编代码 | 逻辑型 | |
|
进程ID | 整数型 | | | |
汇编字节集 | 字节集 | | | | 是否等待远程线程 | 逻辑型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 |
内存地址 | 整数型 | | |
远程线程句柄 | 整数型 | | |
进程句柄 | 整数型 | | |
j | 整数型 | | |
如果真 (进程ID = 0
)
进程ID =
进程一取自身进程ID ()进程句柄 = OpenProcess (2035711, 0, 进程ID)内存地址 = 内存.
申请内存2 (进程句柄,
取字节集长度 (汇编字节集
))
如果真 (内存地址 = 0
)
返回 (假)
如果真 (WriteProcessMemory_字节集 (进程句柄, 内存地址, 汇编字节集,
取字节集长度 (汇编字节集
), 0
) =
假)
输出调试文本 (“写内存失败”)
返回 (假)远程线程句柄 = CreateRemoteThread (进程句柄, 0, 0, 内存地址, 0, 0, 0)
如果真 (远程线程句柄 = 0
)
输出调试文本 (“远程线程创建失败”)
返回 (假)
判断 (是否等待远程线程 =
假)
WaitForSingleObject (远程线程句柄, -1
)
CloseHandle (远程线程句柄
)
内存.
释放 (进程ID, 内存地址
)
返回 (真)

j =
VirtualAlloc (0, 12,
#MEM_COMMIT, #PAGE_READWRITE )
写到内存 (到字节集 (远程线程句柄
) +
到字节集 (内存地址
) +
到字节集 (进程句柄
), j, 12
)
CloseHandle (CreateThread (0, 0, &内部等待线程, j, 0, 0
))
返回 (真)变量名 | 类 型 | 静态 | 数组 | 备 注 |
字节集 | 字节集 | | |
远程线程句柄 | 整数型 | | |
内存地址 | 整数型 | | |
进程PID | 整数型 | | |
字节集 =
指针到字节集 (参数地址, 12
) VirtualFree (参数地址, 0,
#MEM_RELEASE )远程线程句柄 =
取字节集数据 (字节集,
#整数型, )内存地址 =
取字节集数据 (字节集,
#整数型, 5
)进程PID =
取字节集数据 (字节集,
#整数型, 9
)WaitForSingleObject (远程线程句柄, -1
)CloseHandle (远程线程句柄
)内存.
释放 (进程PID, 内存地址
)