|
发表于 2021-3-7 18:03:45
|
显示全部楼层
保留地址
|
进程_取函数入口 | 整数型 | | |
进程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, 内存地址 ) |
|