shellcode 求解 !!

bulerain 2011-05-19 12:15:41
一小段shellcode ,用来调用MessageBox的,本来显示的文本(第二个参数)是固定的,现在想改为“可在外面修改的”字符串
本来显示的是“oldtext”,现在想改为“this is a test”
下面是代码
int main(){
goto _l2;
_l1:
__asm{



mov eax,_THEL


push 0
push 0
push eax
push 0
call DWORD ptr [MessageBoxA]
ret

_THEL:
bb('o') bb('l') bb('d') bb('t') bb('e') bb('x') bb('t') bb(0) bb(0) bb(0) bb(0) bb(0) bb(0) bb(0) bb(0) bb(0) bb(0)
bb(0) bb(0) bb(0) bb(0) bb(0) bb(0) bb(0) bb(0) bb(0) bb(0) bb(0) bb(0) bb(0) bb(0) bb(0) bb(0) bb(0) bb(0)

}

_l2:
PSTR pcode;
ULONG clen=0;
ULONG uoffset=0;

__asm{
mov eax,_l1
mov ebx,_l2
mov ecx,_THEL
mov pcode,eax
sub ebx,eax
mov clen,ebx
sub ecx,eax
mov uoffset,ecx
}
PSTR pnew=(PSTR)malloc(clen);
memcpy(pnew,pcode,clen);
PSTR pstr="this is a test !\0";
memcpy((PSTR)(pnew+uoffset),pstr,lstrlenA(pstr)+1);/*就是在这里修改 this is a test !但是在下面的call 调用的却是原来的shellcode,好像内存修改没有作用*/

__asm {
mov eax,pnew
call eax
}

free(pnew);
return 0;
}

上面的call eax 调用却是原来编码时的代码,内存修改后的却没有调用,请问这是为什么,怎么修改?
或者是否还有更好的办法,我的用意就是修改shellcode内包含字符缓冲区,在这里就是用来输出指定的字符串。
...全文
89 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bulerain 2011-05-31
  • 打赏
  • 举报
回复
非常感谢7楼。
_THEL确实是静态地址,没有考虑到,再次感谢
其实这小段汇编 是用来注入正在运行的程序的,关于API函数地址的获取, 可以在本地程序通过
DWORD dwfun = GetProcAddress(..) ; HMODULE hmod = LoadLibrary(..);
DWORD dwtemp=dwfun-(DWORD)hmod; //这里得到导出函数的RVA
然后在 进程快照 得到某个进程的 指定的模块的基地址,利用这个基地+dwtemp 即可得到函数在那个进程中的实际地址,然后在本地编码的时候 利用预先定义的宏,修改这些宏 为 这个实际的函数地址,那么这段汇编代码就可以调用真实的函数了。
因为是注入已存在的进程,因此我觉得 没必要使用FS:30H 之类的,那样 增加了代码量
大熊猫侯佩 2011-05-30
  • 打赏
  • 举报
回复
最好你直接看bin中的dasm,否则就会云里雾里
sunlin7 2011-05-30
  • 打赏
  • 举报
回复
mov eax,_THEL
这一句,在编译期间,_THEL是个静态地址,所以你的修改并没有修改messagebox实际引用的字符串。

在masm里面的话,应该使用类似下面的代码来获取当前地址,然后所有的寻址都根据当前地址来进行。
base:
call @F
@@:
pop ebp
push 0
push 0
push ebp
lea eax, _THEL
sub eax, base
add eax, ebp
push eax // 当前的msg字符串地址
push 0
call msgbox...

VS的cl.exe编译器对汇编的支持限制甚多,不推荐在其中进行汇编。可以使用使用masm32, nasm, fasm等专门的汇编编译器。

做shell code要对汇编非常熟悉,并且知道如何编写“完全重定位”的代码,如何取得系统函数地址。关于“完全重定位”的代码,可以参考罗云赋的win32汇编教程里面的几个例子(其中一个是在pe上面附加代码)。
bulerain 2011-05-23
  • 打赏
  • 举报
回复
Y的别跑题了。。。
jamseyang 2011-05-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mszjk 的回复:]
花10块钱到淘宝上买一个就有了.
lz代码像神马一样的...
[/Quote]
下次去看看,哈哈
mszjk 2011-05-22
  • 打赏
  • 举报
回复
花10块钱到淘宝上买一个就有了.
lz代码像神马一样的...
__lhy 2011-05-21
  • 打赏
  • 举报
回复
关于LZ的问题 建议到看雪问
bulerain 2011-05-21
  • 打赏
  • 举报
回复
没有帐号
bulerain 2011-05-20
  • 打赏
  • 举报
回复
有人会吗?
希望高手请教一下

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧