使用 inline 内联函数对抗逆向分析

本文探讨了如何利用inline内联函数来对抗iOS应用的逆向分析。通过将敏感函数如加密函数设置为内联,可以避免在汇编层面上出现明显的函数调用,增加攻击者分析参数和返回值的难度,从而提高代码的安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在 ARM 汇编里函数调用是使用 bl 指令跳转到函数地址,攻击者逆向分析很容易找到调用过程,分析参数和返回值。

可以将一些敏感的函数,比如将加密函数写成 inline 内联,无论代码里调用了多少次函数,编译器会将整个函数代码拷贝到需要调用的地方,而不会使用 bl 指令跳转,不能明显的看出函数参数传递和返回值,大大增加了分析的难度。
以下是一个简单的异或加密函数:

char* xor_encrypt (char *inbuf, int len){
 
    char *outbuf = malloc(len);
    for (int i=0; i <= len; i++) {
        
        outbuf[i] = inbuf[i] ^ 0x33;
    }
    
    return outbuf;
}
 
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    char *str1 = xor_encrypt("123", 3);
    char *str2 = xor_encrypt("456", 3);
    char *str3 = xor_encrypt("789", 3);
       
}

反汇编的效果如下:

xor_encrypt 函数的反汇编代码如下:

inlineTest`xor_encrypt:
    0x7b3f0 <+0>:  push   {r7, lr}
    0x7b3f2 <+2>:  mov    r7, sp
    0x7b3f4 <+4>:  sub    sp, #0x10
    0x7b3f6 <+6>:  str    r0, [sp, #0xc]
    0x7b3f8 <+8>:  str    r1, [sp, #0x8]
->  0x7b3fa <+10>: ldr    r0, [sp, #0x8]
    0x7b3fc <+12>: blx    0x7efd8                   ; symbol stub for: malloc
    0x7b400 <+16>: movs   r1, #0x0
    0x7b402 <+18>: str    r0, [sp, #0x4]
    0x7b404 <+20>: str    r1, [sp]
    0x7b406 <+22>: ldr    r0, [sp]
    0x7b408 <+24>: ldr    r1, [sp, #0x8]
    0x7b40a <+26>: cmp    r0, r1
    0x7b40c <+28>: bgt    0x7b42c                   ; <+60> at ViewController.m:324
    0x7b40e <+30>: ldr    r0, [sp]
    0x7b410 <+32>: ldr    r1, [sp, #0xc]
    0x7b412 <+34>: add    r0, r1
    0x7b414 <+36>: 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值