退一步讲,即使我们的搞定了ARM指令关,要面对的坑还有很多。。
ノ┬─┬ノ ︵ ( \o°o)\
刚才写入Section之后,虽然是成功运行,没有任何报错,但是我还没有解释清楚那个谜之数据是怎么来的。
虽然在注释里写出了ASM,但是里面其实是有坑的。
拿到vmaddr和ASLR之后,就可以正确计算出Section的内存地址,然后重新写入数据。不过这里为了演示简便,我们直接把解密之后的数据放在了壳程序的代码中,其实这样调试起来也更方便。
在创建Section之后,我们需要获取该Section的vmaddr和这个外壳程序运行时的ASLR,然后才能正确跳转。
将加密的程序放在一个Section中,外壳运行时解密该Section,并执行解密后的程序。