的Shellcode:呼叫+空
问题描述:
我有以下片组件的用于x86_64的shellcode的:的Shellcode:呼叫+空
call writer
writestring db "ABCD",0x0d0a
writer:
pop rsi
当这个被编译,objdump的-d显示(剪断一些为了简洁):
4000a4: e8 06 00 00 00 callq 4000af <writer>
00000000004000a9 <writestr>:
4000a9: 42 rex.X
4000aa: 42 rex.X
4000ab: 42 rex.X
4000ac: 42 0a 0d 5e 48 31 d2 rex.X
00000000004000af <writer>:
4000af: 5e pop %rsi
我想要从callq后面删除三个空值。打近,打电话等等都没有做到。任何人都可以提供建议吗?
对不起,我不是很清楚。我正在使用调用,以便它可以保存writetr的地址,以便我可以立即弹出到rsi中。我无法访问rip(或者我能吗?)来手动计算偏移量。
答
您应该能够通过使用JMP
(或类似的)指令来消除空字节。比如像:
jmp $+8
writestring db "BBBB",0x0d, 0x0a
writer:
pop rsi
生产使用nasm -f elf64
以下的机器代码:
0000000000000000 <writestring-0x2>:
0: eb 06 jmp 8 <writer>
0000000000000002 <writestring>:
2: 42 rex.X
3: 42 rex.X
4: 42 rex.X
5: 42 rex.X
6: 0d .byte 0xd
7: 0a .byte 0xa
0000000000000008 <writer>:
8: 5e pop %rsi
你可能注意到,我没有为RET
指令设置任何东西。但是,如果你需要这样的指导,你可以轻松地自己做程序序言。
其实你提醒我/给了我测试@dna的感谢,我可以在shellcode中多次jmp/call/ret。 谢谢! – user2585837
很高兴我能帮上忙。有创意!干杯 – dna