|
原理解释:
通过CreateRemoteThread创建一条线程,该函数需要传入一个子程序指针。
步骤:
1、向被操作进程申请一块内存(0x41000),用来存储我们的shellcode。
2、向被操作进程申请一块内存(0x41000),用来存储返回值。
2、编写shellcode(汇编指令),写入我们申请到的内存中。
3、调用CreateRemoteThread调用0x41000来执行shellcode。
4、等待线程 WaitForSingleObject (, )
5、关闭打开的句柄
变量名 | 类 型 | 静态 | 数组 | 备 注 | PID | 整数型 | | | 子程序指针 | 整数型 | | | 返回值 | 整数型 | | | shellcode | 字节集 | | | hProcess | 整数型 | | | hThread | 整数型 | | |
PID = 进程_名取ID (“加法运算.exe”, )hProcess = 进程_ID取句柄 (PID )子程序指针 = 内存_申请内存2 (hProcess, 2048 )返回值 = 内存_申请内存2 (hProcess, 4 ) shellcode = pushad ()shellcode = shellcode + push_常数 (33 ) shellcode = shellcode + push_常数 (22 ) shellcode = shellcode + mov_eax_常数 (十六到十 (“004012C5”)) shellcode = shellcode + call_eax ()shellcode = shellcode + mov_dword_ptr_eax (返回值 )shellcode = shellcode + popad ()shellcode = shellcode + ret () 内存_写字节集2 (hProcess, 子程序指针, shellcode ) hThread = CreateRemoteThread (hProcess, 0, 0, 子程序指针, 0, 0, 0 ) WaitForSingleObject (hThread, -1 )调试输出 (内存_读整数2 (hProcess, 返回值 )) CloseHandle (hThread )内存_释放2 (hProcess, 子程序指针 )内存_释放2 (hProcess, 返回值 )
变量名 | 类 型 | 静态 | 数组 | 备 注 | PID | 整数型 | | | 子程序指针 | 整数型 | | | 返回值 | 整数型 | | | shellcode | 字节集 | | | hProcess | 整数型 | | | hThread | 整数型 | | | _CallWindowProcA | 整数型 | | |
PID = 进程_名取ID (“加法运算.exe”, )hProcess = 进程_ID取句柄 (PID )子程序指针 = 内存_申请内存2 (hProcess, 2048 )返回值 = 内存_申请内存2 (hProcess, 4 )_CallWindowProcA = 取系统API地址 (“CallWindowProcA”) shellcode = pushad ()shellcode = shellcode + push_常数 (33 ) shellcode = shellcode + push_常数 (22 ) shellcode = shellcode + mov_eax_常数 (十六到十 (“004012C5”)) shellcode = shellcode + call_eax ()shellcode = shellcode + mov_dword_ptr_eax (返回值 )shellcode = shellcode + popad ()shellcode = shellcode + ret () 内存_写字节集2 (hProcess, 子程序指针, shellcode ) hThread = CreateRemoteThread (hProcess, 0, 0, _CallWindowProcA, 子程序指针, 0, 0 ) WaitForSingleObject (hThread, -1 )调试输出 (内存_读整数2 (hProcess, 返回值 )) CloseHandle (hThread )内存_释放2 (hProcess, 子程序指针 )内存_释放2 (hProcess, 返回值 )
被操作的测试程序
|
|