一、逆向分析
本文继续来看最后一篇介绍ARM指令,之前的两篇文章已经详细介绍了ARM指令的基础知识,本文继续把剩下来的所有都介绍完了,首先一定要去看前面的基础篇和进阶篇,不然我都很难保证你看这篇文章会不会懵逼!我们还是IDA动态调试到我们想要的地方:
在这里看到和进阶篇很类似,初始化一个数值然后减去一个值在和另一个值进行与操作,这里有了一个新指令就是EOR,就是异或操作,而这里的R0,R1,R3还是之前介绍的四个常量值:
这里看到依然是利用左移获取地址,然后在用LDMDB命令获取内存中连续的数据,这个指令在进阶篇中已经介绍了,这时候我们可以看一下R5的内存数据:
这里发现了又是一个密钥库,我们还是把这个库数据弄出来:
那么这一段代码翻译之后的C代码就是:
然后就是后面的ROR操作了,我们直接打印结果看看:
动态调试看看结果:
看到这里的动态调试结果一致,说明翻译的C代码没问题,这里也发现了两条穿插指令,在之前的进阶篇介绍了穿插指令辨别方法就是看看指令操作后的结果是否参与了后面指令的操作,这里看到操作后的R4并没有参与后面的ROR操作,继续往下走,看到穿插指令操作的R4就用到了地方了:
看到动态调试的结果:
看到结果是一致的,继续往下走:
中间没啥可说的,和之前类似就略过了,直接看最后的ROR操作结果,这里也是一样轮训四次: