首页
社区
课程
招聘
[原创]编写二进制的shellcode
2013-12-9 18:13 6105

[原创]编写二进制的shellcode

2013-12-9 18:13
6105
刚准备发本文时看到已经有一篇《Android系统shellcode编写》,拜读了一下,与我的需求还是不一样的。

我是想写一段二进制的shellcode,目标是构造一段nop-slide,然后让它调用目标函数。因此这段shellcode的功能很简单,就是调用用c写的函数。

已经有x86下的参考了,怎么把它变成arm却花了我一周的时间,因为我完全是个汇编新手。我还发了一篇贴子求助:http://bbs.pediy.com/showthread.php?t=182086

其实很简单,下面这小段就可以搞定了(当然可以在前面填充任意的nop指令):
char shellcode[] = "x08\x40\x2d\xe9\xeb\xff\xfd\x06\x08\x80\xbd\xe8";

其中,x08\x40\x2d\xe9即e92d4008,其实就是push    {r3, lr},x08\x80\xbd\xe8是e8bd8008,也就是pop     {r3, pc}

中间4个字节就是BLX指令(0xfa),其中的偏移地址是需要计算的,计算公式如下:
0xfa000000 | (target -  shellcode - 12)>>2

我之前之所以写错了,是因为发现调用我的shellcode用的是BLX,而调用者是thumb指令,所以我的shellcode必须用arm指令来写,而我之前也是用thumb来写的。

关于调试:
我看大家都是用IDA啊,我没有IDA,用gdb调试也可以的,可以使用disass来查看反汇编代码,info registers查看寄存器的值,也挺方便的。

阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

收藏
点赞1
打赏
分享
最新回复 (1)
雪    币: 14
活跃值: (83)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
乐乐侠 2013-12-9 19:17
2
0
看不懂术语名词,不过膜拜ing
游客
登录 | 注册 方可回帖
返回