Shell 更多无空外壳代码
我需要找到以下指令的无空替换,以便将以下代码放入外壳代码中 我需要转换为无空的第一条指令是:Shell 更多无空外壳代码,shell,assembly,shellcode,Shell,Assembly,Shellcode,我需要找到以下指令的无空替换,以便将以下代码放入外壳代码中 我需要转换为无空的第一条指令是: mov ebx, str ; the string containing /dev/zero 字符串str在my.data部分中定义。 二是: mov eax,0x5a 谢谢 您通过xor提到恒定负载,以清除plusinc和shl以获得所需的任何一组位 我能想到的加载未知常量(您的未知str)的最简单的方法是加载带有0xaaaaaa等值的常量xor,然后在后续指令中返回。例如加载0x12
mov ebx, str ; the string containing /dev/zero
字符串str在my.data部分中定义。
二是:
mov eax,0x5a
谢谢 您通过
xor
提到恒定负载,以清除plusinc
和shl
以获得所需的任何一组位
我能想到的加载未知常量(您的未知str
)的最简单的方法是加载带有0xaaaaaa
等值的常量xor
,然后在后续指令中返回。例如加载0x1234
:
0: 89 1d 9e b8 aa aa mov %ebx,0xaaaab89e
6: 31 1d aa aa aa aa xor %ebx,0xaaaaaaaa
您甚至可以选择
0xaaaaaa
作为一些有趣的ascii 假设您想了解的是汇编代码是如何组成的,什么类型的指令选择最终会出现在具有特定属性的汇编代码中,然后(在x86/x64上)执行以下操作:
让自己熟悉它们,并在心里将它们分为两组-那些符合您期望的属性(例如,不包含“x”字符…或任何其他特定字符)的组,和那些不包含的组。如果存在第二类代码,则需要从代码中删除它们
objdump
的反汇编输出将包含二进制指令(操作码)以及指令名(助记符),即,您将确切地看到选择了哪种操作码格式。现在,您可以根据1检查其中是否有第二组操作码。上面从上面返回编译中间过程,找到
csource.s
程序集,进行更改、重新组装/重新链接、测试for()
循环,相当于一个给定的while()
循环,不要期望有太多帮助。这里需要的是指令集参考手册和(dis)汇编程序实验
此外,如果您正在学习,请参加有关编译器如何工作/如何编写编译器的课程-这些课程确实涵盖了编译器如何选择汇编指令,我可以很好地想象,编写一个编译器,其输出保证包含字符“
?
”是一个有趣的/具有挑战性的学期项目(0x3f
)但绝不是“!
”(0x21
)。你明白了。听起来,呃,可疑-这是干什么用的?mov ebx,str用于打开/dev/zero,这样我就可以将内存初始化为0s。mov eax,0x90正在为linux系统CALL设置操作码。我想问题更像是“你打算做什么?”。寻求外壳代码建议的人往往没有什么好处。而且很多人不想参与其中。第一个是,根据您给出的约束条件(字符串位于.data
部分),在您试图创建的代码类型中不太可能-自包含且完全独立于位置。这意味着您无法了解特定数据/代码位置。要解决此问题,请发挥创意…不要坚持字符串位于。data
。