您的位置:首页 > 移动开发 > IOS开发

iOS安全–使用static inline方式编译函数,防反编译

2017-08-14 11:15 281 查看
iOS安全–使用static inline方式编译函数,防止静态分析

标签:
static inline
2015-12-21 17:43
462人阅读 评论(0)收藏举报


分类:

小知识(159)




作者同类文章X

我们知道一般的函数调用都会通过call的方式来调用,这样让攻击很容易对一个函数做手脚,如果是以inline的方式编译的会,会把该函数的code拷贝到每次调用该函数的地方。而static会让生成的二进制文件中没有清晰的符号表,让逆向的人很难弄清楚逻辑。

下面我们来看看一个普通函数及其反汇编代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

int isValidate(int id){

    if(id > 5)

        return 1;

    else

        return 0;
}

int main(int argc, const char * argv[]) {

    int id = 3;

    int a=1,b=2,c=3;

    

    if(!isValidate(id))

        return 0;

    a = b + c;

    if(!isValidate(id))

        return 0;

    c = a/2 * b;

    if(!isValidate(id))

        return 0;

    b = c / a*2;

    return 1;
}
编译,反汇编结果如下:





这样可以很明显的看到isValidate的调用,而且很容易使用断点+commands的方法让其始终返回1.

下面使用inline的方式来编译:

1

int isValidate(int id) __attribute__ ((always_inline));
编译,反汇编结果如下:





在每次调用的时候都会把代码拷贝一次。

再来看看static inline的方式来编译的反汇编代码:

1

static int isValidate(int id) __attribute__ ((always_inline));




 

现在没有符号表了。

 

本文转载于:http://www.blogfshare.com/ioss-static-inline.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐