某试用版so保护函数混淆分析

发布时间 2023-08-29 00:41:57作者: 怎么可以吃突突

so加固前后的格式变化和之前分析反调试类似,都是增加第一个PT_LOAD代码段的大小,并在原始so代码部分的最前面嵌入自己的代码,包括受保护函数混淆的后的代码。

函数混淆思路分析

函数受保护前如下

函数被混淆保护后发现代码头部首先会调转到嵌入代码中

查看嵌入代码自然是全都是花指令,老办法用unicorn跑一下被保护的函数。可以看到首先函数头部会跳转到嵌入代码中。

接着执行了大量等效的花指令后从嵌入代码中跳转回原函数体范围内(0x54a0c),原始指令(0x54a0c)被修改为了一条跳转指令继续跳转到下一个嵌入代码块。

看一下上面代码位置对应的原始代码,(0x54a0c)地址处实际是一个基本块的起始位置,后面分析情况大概类似,也就是说其会将被保护函数以基本块为单位进行划分,然后每一个基本块头部原始指令修改为b跳转指令,跳转到嵌入代码中执行等效花指令

继续往下看一下函数调用部分,嵌入代码会执行bl指令等效花指令并跳转到plt条目中,plt条目执行完后会返回到原始函数bl调用指令的下一条指令处,但是下一条指令已经被修改为一条跳转指令并跳转到嵌入代码中。这说明bl跳转指令也作为划分基本块的标准。

然后看一下全局数据访问部分,嵌入代码跳转到访问got表的指令后再跳转回嵌入代码中,这就说明访问got表的指令也作为函数基本块划分的标准。

最后总结一下就是函数混淆思路是将一个函数以跳转指令(包含bl指令)和got表访问指令作为基准划分若干个基本块,然后每个基本块头部都修改为跳转指令跳转到嵌入代码执行代码块的等效花指令。