arm64汇编篇-10IF代码的识别

本篇主要介绍通过汇编代码逆向还原带if条件的高级代码。

1.创建工程文件在main函数页面写一个带if判断语句的方法如下:

int less = 10;   //全局变量

void func(int a, int b){

    if (a < b) {     

        less  = a; 

   }    else    {   

        less = b; 

  }

}

2.真机编译找到Mach - O 文件拖进ida,具体操作方法及ida工具下载见https://www.jianshu.com/p/7f007bdd1108  效果如下图

arm64汇编篇-10IF代码的识别

3.根据main函数x0(w0)判断是否有返回参数。这边简单解析,func如果有返回参数其结果默认在x0中当x0被赋值其他值时候会进行内存保护操作,而这边没有进行此操作故没有返回值。

mian函数 x0 x1进行了内存保护后赋值0xA (10)  0x14(20)结合后面可以得出其为(int double float 等数据类型 暂时可以定位 int类型)。

4.解析func方法:

arm64汇编篇-10IF代码的识别
arm64汇编篇-10IF代码的识别

注:这边adrp add 最终得到的是物理地址而不是具体的值所以取值的时候要加*;

逆推不会百分百还原代码尤其是复杂的代码所以这边逆推的时候结合上下文即嵌套关系可以推测出个大概。

5.自下而上逐个替换其中初始x0-x7为参数段。最终可推出跟源代码大体相似的代码。