willJ 发表于 2014-7-28 23:14

shellcode自定位方法

在编写shellcode中经常会遇见自定位代码,于是总结了一些方法。
1.CALL/POP型635D96F1      E8 00000000   call mshtml.635D96F6635D96F6      58            pop eax                            635D96F7      90            nopCALL指令做的操作是压栈下一个地址,跳向指定地址,利用这个特征可以利用CALL/POP操作定位当前位置。
2.CALL/POP改进型前一种好用但是有缺陷,比如会出现较多的00,可能造成截断,于是有了改进型。635D96F1    E8 FFFFFFFF   call mshtml.635D96F5635D96F6      C2 5890       retn 0x9058635D96F9      90            nop 跟进635D96F1这个CALL后代码将重新解释如下:635D96F5      FFC2          inc edx635D96F7      58            pop eax                                  位置保存于eax。
3.浮点运算型0013FED0   D9EE            fldz0013FED2   D97424 F4       fstenv (28-byte)ptr ss:0013FED6   5B            pop ebx浮点运算后位置保存在栈顶,通过POP操作可以获取其位置。我在我的shellcode中使用此参数常出现异常,所以用得较少,不过metasploit上面用得蛮多的。
4.中断型使用INT 2c或者INT 2e可以获取下一个执行地址,下一个执行地址将会保存于ebx。在调试状态无法达到预期的效果,如果想看见效果可以将调试器设置为默认调试器,执行以下代码看见效果:__asm{Int 3Int 2c}
5.异常处理型在shellcode代码中构建一个异常处理函数,再构造一个异常进入异常处理中获取EIP这种方法编写难度稍微大点,也是可行的。

hejie821 发表于 2014-7-28 23:51

学习下下

山顶的一棵草 发表于 2014-7-29 11:06

没抢到沙发,只能前排支持了{:301_1006:}

diaojianxiao 发表于 2014-7-29 21:42

膜拜。。。。。

zlf8331 发表于 2014-8-2 07:50

相互学习共同进步,谢谢分享!

Thend 发表于 2014-8-4 13:58

jj威武阿 , {:1_931:}

强攻 发表于 2014-8-26 02:10

来学习了

Allyvin 发表于 2014-9-2 15:10

强攻 发表于 2014-8-26 02:10
来学习了

{:1_937:}我也是我也是我也是我也是

icss123 发表于 2015-4-28 14:32

学习了,膜拜

iWarmThrush 发表于 2015-5-12 14:29

嘿嘿, 学习了....感谢分享
页: [1] 2
查看完整版本: shellcode自定位方法