易语言远程汇编-跨进程操作之shellcode操作方法
原理解释:通过CreateRemoteThread创建一条线程,该函数需要传入一个子程序指针。
步骤:
1、向被操作进程申请一块内存(0x41000),用来存储我们的shellcode。
2、向被操作进程申请一块内存(0x41000),用来存储返回值。
2、编写shellcode(汇编指令),写入我们申请到的内存中。
3、调用CreateRemoteThread调用0x41000来执行shellcode。
4、等待线程 WaitForSingleObject (, )
5、关闭打开的句柄
.版本 2
.支持库 spec
.子程序 shellcode方式一
.局部变量 PID, 整数型
.局部变量 子程序指针, 整数型
.局部变量 返回值, 整数型, , , 保存返回结果
.局部变量 shellcode, 字节集
.局部变量 hProcess, 整数型
.局部变量 hThread, 整数型
' 1、申请一个内存(0x41000),用来不存我们的shellcode。
PID = 进程_名取ID (“加法运算.exe”, )
hProcess = 进程_ID取句柄 (PID)
子程序指针 = 内存_申请内存2 (hProcess, 2048)
返回值 = 内存_申请内存2 (hProcess, 4)
' 2、编写shellcode(汇编指令).
shellcode = pushad ()
shellcode = shellcode + push_常数 (33)' 参数2
shellcode = shellcode + push_常数 (22)' 参数1
shellcode = shellcode + mov_eax_常数 (十六到十 (“004012C5”))' 寄存器只要不影响你的传参即可,建议少用ecx
shellcode = shellcode + call_eax ()
shellcode = shellcode + mov_dword_ptr_eax (返回值)
shellcode = shellcode + popad ()
shellcode = shellcode + ret ()
' 3、写入我们申请到的内存中。
内存_写字节集2 (hProcess, 子程序指针, shellcode)
' 4、CreateRemoteThread调用内存段来执行shellcode。
hThread = CreateRemoteThread (hProcess, 0, 0, 子程序指针, 0, 0, 0)
' 5、等待线程 WaitForSingleObject (, )
WaitForSingleObject (hThread, -1)
调试输出 (内存_读整数2 (hProcess, 返回值))
' 6、关闭打开的句柄
CloseHandle (hThread)
内存_释放2 (hProcess, 子程序指针)
内存_释放2 (hProcess, 返回值)
.版本 2
.支持库 spec
.子程序 shellcode方式二
.局部变量 PID, 整数型
.局部变量 子程序指针, 整数型
.局部变量 返回值, 整数型, , , 保存返回结果
.局部变量 shellcode, 字节集
.局部变量 hProcess, 整数型
.局部变量 hThread, 整数型
.局部变量 _CallWindowProcA, 整数型
' 用CreateRemoteThread调用CallWindowProcA,CallWindowProcA再调用子程序指针
' 1、申请一个内存(0x41000),用来不存我们的shellcode。
PID = 进程_名取ID (“加法运算.exe”, )
hProcess = 进程_ID取句柄 (PID)
子程序指针 = 内存_申请内存2 (hProcess, 2048)
返回值 = 内存_申请内存2 (hProcess, 4)
_CallWindowProcA = 取系统API地址 (“CallWindowProcA”)
' 2、编写shellcode(汇编指令).
shellcode = pushad ()
shellcode = shellcode + push_常数 (33)' 参数2
shellcode = shellcode + push_常数 (22)' 参数1
shellcode = shellcode + mov_eax_常数 (十六到十 (“004012C5”))' 寄存器只要不影响你的传参即可,建议少用ecx
shellcode = shellcode + call_eax ()
shellcode = shellcode + mov_dword_ptr_eax (返回值)
shellcode = shellcode + popad ()
shellcode = shellcode + ret ()
' 3、写入我们申请到的内存中。
内存_写字节集2 (hProcess, 子程序指针, shellcode)
' 4、CreateRemoteThread调用内存段来执行shellcode。
hThread = CreateRemoteThread (hProcess, 0, 0, _CallWindowProcA, 子程序指针, 0, 0)
' hThread = RtlCreateUserThread (hProcess, 0, 0, 0, 0, 0, 子程序指针, 0, 0, 0)
' 5、等待线程 WaitForSingleObject (, )
WaitForSingleObject (hThread, -1)
调试输出 (内存_读整数2 (hProcess, 返回值))
' 6、关闭打开的句柄
CloseHandle (hThread)
内存_释放2 (hProcess, 子程序指针)
内存_释放2 (hProcess, 返回值)
被操作的测试程序
是呀也许这就是中国教育饿偏差吧?非常感谢上文的作者的经验之谈,对于我们这些还没有出炉的是一笔宝贵的财富!!!! 非常感谢您的提醒,让我认识到我的具体位置,以及我下一步该干什么,谢谢! ^我看了.我知道了一个程序员不容易谢谢,前辈指点!学习了~~~~~~~~~~~~~~~~谢谢指点,收益很深 看到这些还真是有点兴奋啊。。我想快点学。。可是不知道哪有得教啊 受益非浅 很好,感觉现在在学校的计算机课太没质量了!!我是新手,希望多点交流啊 写得太好了我是一个在大学里不学无术的家伙跟很多人一样不知道自己在学什么不知道自己学得有什么用多说无意这张帖子也许会让我受益终生的谢谢分享 学习了但是我更加差哦 学海无崖