学徒浅析Android开发——SO文件的混淆

 

.so(SharedObject)作用等同于windows环境下的.dll(dynamic link library)文件,我们在引用第三方SDK时,也会遇到需要调用相应的.so文件的情况,.so文件本事更多的是集成公共处理方法,当然有事也会用来保存重要的数据信息。

对于应用的编译与反编译过程中,本地混淆一直是有效的方法。对于.so文件,同样也适用于混淆,.so文件虽然在使用破解工具IDA打开后看到的是汇编数据,但仍然存在着规律可循,不妨碍专业人员的阅读,所以掌握对.so文件的混淆也是必须的。

.so文件的混淆是从两方面入手:

1:方法名混淆

2:数据混淆

方法名混淆

我们在创建构建.so文件所需的.c和.h文件时,NDK会帮助我们自动生成native方法名,这个方法名是格式化,该方法名同时也是索引表中的索引名。因其特殊性,在IDA浏览时,可以通过索引表快速查看到。比如我们创建一个TestSimple,在里面声明一个native方法showDsc(),最终得到的方法名是:
      Java_com_example_xx_TestSimple_showDsc

生成的.so文件在经过IDA反编译后,可以在函数索引表中清楚的看到:

 

好在NDK提供了修改的方法,帮助我们隐藏掉这种显眼的名字。首先说一下两个基础方法:
1、简化方法名,该方法如下:

   继续以TestSimple为例,声明

#defineJNIFUNCTION_NATIVE(sig)  Java_com_example_xx_TestSimple_##sig

   将函数名前边的路径剔除掉,只显示函数名,避免显得直接。

  

 JNIEXPORT void JNICALL JNIFUCTION_NATIVE (showMath(JNIEnv *env, jobject obj));

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值