首页
社区
课程
招聘
[原创]我的答案
发表于: 2008-10-3 12:40 2348

[原创]我的答案

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的入口不一样外,其他完全是一样。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 264
活跃值: (30)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
2
函数地址为 00DA10D0
开始计算函数长度...
OpenUrlA 函数大小 =20 字节
附件提交次数 = 1
得分 = min[1.0, 13/20]x100 - (1 -1 )x5 = 65
2008-10-14 17:30
0
游客
登录 | 注册 方可回帖
返回
//