刚准备发本文时看到已经有一篇《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查看寄存器的值,也挺方便的。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)