shellcode 求解 !!
一小段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内包含字符缓冲区,在这里就是用来输出指定的字符串。