iOS逆向安防从入门到秃头--汇编看逻辑

881 阅读3分钟

小谷秃头合集

  • 小谷又来了~ 今天我们主要看下ifdo-whilewhilefor等逻辑(switch后面的博客分析,这个有点特殊~)

  • 这一次就不一直看源码了,引进个逆向是常用的工具————Hopper

1. Hopper的使用

这个兄弟们用免费的~,毕竟能省点是省点~哈哈哈

    1. 这个工具就很智能和简单、首先看下他的图标。(下载的时候不要下载错了)

1.png

    1. 打开、然后把二进制文件拖进去。就OK了~
    1. 我直接在网上下载了ipa(也不知道是谁的~),如下图

2.png

2. 判断

2.1. 全局变量

    1. 准备工作已经做完了~,咱们先了解下全局变量(这个用到的地方还是挺多的~)
    1. 老规矩了~
int g = 10;

int funcIfLogic(int a, int b){
    return a+b+g;
}

int main(int argc, char * argv[]) {
    int c = funcIfLogic(1,2);
    printf("%d",c);
}
    1. 汇编、分析逻辑

3-1.png

从分析中可以看到,全局函数的取值通过地址偏移

0x104b1e1f8—(右移三位,其实就是后3位抹零)—>0x104b1e—(加上偏移值(7),在左移三位)—>0x104b25000—(加上偏移地址0x554)—>0x104b25554

2.2. if判断

  • 稍微改下代码(加个if
int g = 10;

int funcIfLogic(int a, int b){
    if (a > b) {
        return a+g;
    }else{
        return b+g;
    }
}

int main(int argc, char * argv[]) {
    
    int c = funcIfLogic(1,2);
    printf("%d",c);
}
  • 感觉汇编多了点东西:

4.png

2.2.1. 判断扩展(b指令)

  • 上面,看到了b.le小于等于的意思。我把常用的命令和意思给兄弟们列一下子~

5-1.png

2.3. 汇编转高级伪代码~

既然我们上面已经介绍了工具,那我们用工具写下逻辑伪代码~

    1. 首先把二进制文件拖到hopper,然后找到方法~

6.png

    1. 然后兄弟们看我分析流程

7.png

我感觉汇编难的原因就是因为它枯燥,所以兄弟们要提起裤子来(不对、提起精神来~)

3. 循环

  • 接下来,兄弟们一起看下循环~

3.1. do-while循环

  • 老规矩了~,研究这个东西,我就看看他是如何实现的~
void funcLoop(){
    
    int i = 1;
    do {
        i++;
    } while (i<10);
    printf("i==%d",i);
    
}
int main(int argc, char * argv[]) {
    funcLoop();
}
  • 汇编分析

8.png

这个是先加,然后判断,然后跳转

这次就和兄弟们一行一行的读了,都差不多。(我把关键的地方拿出来了~)

3.2. while循环

  • 我们看下while
void funcLoop2(){
    int i = 1;
    
    while (i<10) {
        i++;
    }
    printf("i==%d",i);
    
}

我们看看他们之间有什么异同~

9.png

while循环是先判断,后加值,在跳转

3.3. for循环

  • for循环看起来有有点高端的样子。我们看下~
void funcLoop3(){
    int i;
    for (i = 1; i < 10; i++) {
        
    }
    printf("i==%d",i);
}
  • 继续汇编

10.png

这个逻辑和while循环一样啊,看起来都这么相同。都是,先判断,后加值,在跳转~

4. 总结

又到了总结的时候了

    1. 这次没有弄清楚switch语句,我弄明白了必须搞一篇博客,让兄弟们指指点点😆
    1. 这次研究这个还原伪代码,的确会下点功夫,主要还是比较枯燥,我给兄弟们加油
    1. 最后,希望跟兄弟们共同进步。⛽️(这个是加油站😆)