能力值:
( LV9,RANK:850 )
|
-
-
2 楼
OD里敲进机器码就能看到对应的汇编了
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
lea eax,shellcode
call eax
--------
OD加载,进入这个call
|
能力值:
(RANK:300 )
|
-
-
4 楼
shellcode
复制到PE程序的入口。把text段改为可写。可以调试
复制到其他地方也可以。你记得要修改可写。和更改EIP到你shellcode的开始处。可以调试。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
不太明白,例如shellcode[]={"\xEB\x10\x5B\x4B\x33"}.
就这么一段,我怎么翻译成汇编?
怎么用od修改,请DX据个例子说明一下。。。
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
/*
cl test.c
*/
char shellcode[] = "\xEB\x10\x5B\x4B\x33";
int main(int argc, char **argv)
{
__asm
{
lea eax,shellcode
call eax
}
return 0;
}
用OD加载你编译好的exe文件,通常VC的入口点是00401000,你断在这里,进去后,就看得到你的这个call eax,F7进去,就是shellcode的汇编操作了
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
多谢toplcj,的确可以看到。
由于这个shellcode是我自己弄来测试的所以知道这段汇编到哪结束,但如果是别人写的shell。怎么知道到哪里结束,OD中显示下面的许多语句为"未知命令"
许多这样的语句:
add byte ptr ds:[eax] ,al
。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
看一下地址,算一下字节不就行了,而且很明显add byte ptr ds:[eax] ,al已经是00 00了,这不就是结束了么?
|
能力值:
( LV4,RANK:50 )
|
-
-
9 楼
[QUOTE=人族;537297]多谢toplcj,的确可以看到。
由于这个shellcode是我自己弄来测试的所以知道这段汇编到哪结束,但如果是别人写的shell。怎么知道到哪里结束,OD中显示下面的许多语句为"未知命令"
许多这样的语句:
add byte ptr ds:[eax] ,al
。。。[/QUOTE]
可以像icersg说的那样算一下shellcode的字节数,也可以在shellcode前前后后填充点nop即"\x90\x90\x90....", 这样也比较直观
|
|
|