WEB开发网
开发学院软件开发VC 导入表内注入代码(二) 阅读

导入表内注入代码(二)

 2007-03-17 21:59:50 来源:WEB开发网   
核心提示: 1.检查DLL名称是否是"Shell32.DLL",2.检查Function名称是否是"ShellAboutW",导入表内注入代码(二)(2),3.如果条件1和2均正确,重定向ShellAbout()的thunk到新的函数,你将看到它对目标CALC.

1.检查DLL名称是否是"Shell32.DLL"。

2.检查Function名称是否是"ShellAboutW"。

3.如果条件1和2均正确,重定向ShellAbout()的thunk到新的函数。

这个新的函数是一个简单的消息框:

_ShellAbout_NewCode:
_local_0:
pushad// save the registers context in stack
call _local_1
_local_1:
pop ebp
sub ebp,offset _local_1 // get base ebp
push MB_OK | MB_ICONINFORMATION
lea eax,[ebp+_p_szCaption]
push eax
lea eax,[ebp+_p_szText]
push eax
push NULL
call _jmp_MessageBox
// MessageBox(NULL, szText, szCaption, MB_OK | MB_ICONINFORMATION) ;
popad// restore the first registers context from stack
ret 10h

当你计划用一个新的函数取代一个API时,你应该考虑一些要点:

不能用missing the stack point 破坏Stack memory。因此,需要用ADD ESP,xxx或RET xxx恢复最后的原始栈指向(original stack point)。

为了保持除EAX外线寄存器的大多数安全,要用PUSHAD和POPAD捕获和恢复它们。

正如你看到的,我已经用了PUSHAD和POPAD来回收线程寄存器。对于此情况,ShellAbout(),它有4个DWORD成员因此栈指针在返回时被增加0x10。在重定向ShellAbout()后,你可以尝试从Help(帮助)菜单点击About Calculator(关于计算器),你将看到它对目标CALC.EXE做了什么。

图 9 – 重定向About Calculator(关于计算器)到一个消息对话框

EXE protectors用此方法操作目标;它们建立重定向到它们附加的存储空间,下一节将讨论。

上一页  1 2 3 4 5 6 7  下一页

Tags:导入 注入 代码

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接