-
-
[原创]我的答案
-
发表于:
2008-10-3 12:40
2348
-
因为要通过IE打开http://bbs.pediy.com,用WinExec,ShellExecute,CreateProcess都可以实现,不知道还有没有其他的函数也可以。CreateProcess参数太多,就不考虑了,WinExec只有两个参数,但不指定全路径无法启动IE,但指定死了也不行,所以只好用
ShellExecute 了,ShellExecute 有6个参数,弄了半天,也没有实现在13个字节实现调用该函数,很多人都说几个字节就可以实现,以后得好好拜读一下各位的答案。因此只好另走捷径了,既然PUSH只算代码本身字节,不计算内容,那我只好用shellcode来实现了,呵呵。
我的OpenUrlA函数就成了如下这个了。
push offset shellcode
retn
只有6个字节,不知道用shellcode符合要求不,shellcode是真正要执行的代码,其实就是调用ShellExecute。
主要修改位置:
1、文件偏移0X4D0处增加OpenUrlA函数的代码;
2、修改输入表(Import Table),增加从SHELL32.dll中导入函数ShellExecute;
3、增加输出表(Export Table),导出OpenUrlA函数;
4、在.reloc节中增加重定位项,用于对OpenUrlA函数涉及到ImageBase的进行重定位;
5、因为打开IE后不能有其他操作,顺便把MessageBox对话框也去掉了
没有添加节,也没有修改文件大小。
没有添加节,也没有修改文件大小。
在Windows2000/XP下测试通过,以下是测试程序(test.cpp,附件:test.rar)。
#include <windows.h>
void main(void)
{
HINSTANCE hModule=LoadLibrary("pediy.dll");
if(hModule!=NULL)
{
FARPROC proc;
proc=GetProcAddress(hModule,"OpenUrlA");
proc();
FreeLibrary(hModule);
}
}
因为不知道shellcode算不算,因此pediy.dll提交了两个附件。
pediy.dll附件1:pediy_by_aprice_6bytes.rar,6bytes的,用shellcode实现的。
pediy.dll附件2:如果上面用shellcode不算的话,那就是20bytes,附件pediy_by_aprice_20bytes.rar,两个除了OpenUrlA的入口不一样外,其他完全是一样。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!