有没有对Android、linux动态链接库熟悉的同学,帮忙看一下这个问题如何解决,多谢了!
时间:2011-07-17
来源:互联网
背景:
Android工程里使用了从别处购买的动态库so文件,但是担心程序发布的时候so文件被其他人获取到,并且非法使用库中的函数接口,因此需要制定一套保护机制。
思路:
1)对发布的apk做特殊处理,使别人无法通过解压apk获取so文件。或者:
2)在程序中对所有调用so中函数接口进行“认证”,非法用户即使得到so文件,也无法正确调用。
第一种方案请对android编程熟悉的同学帮忙看看,是否可行?这个网上我没有看到相关的文章,也没有试过,所以拜托各位了!
第二种方案我的设想是:
1、对so中所有的函数进行“二次封装”,增加一个参数用来校验函数调用者是否合法。
2、对封装后的代码,重新编译一个新的so文件,发布的时候将新的so文件打包进去,旧的so文件不打包。
3、程序中使用新的so文件,调用新的函数接口,把校验参数传进去。由于校验方法是我们自己做的,因此即使新的so文件被非法获取,他们不知道这个校验值如何计算,调用函数接口时会失效。
实验过程:
1、目前购买了 liba.so 和 a.h 文件,a.h中有函数声明:void func(int i);
2、编写mya.c 和 mya.h,创建新的函数:
#include "a.h"
void myfunc(int i, int key)
{
if(key!=123456)
{
return;
}
func(i); // 调用了购买的函数
}
3、将mya.c 和 liba.so 编译成新的so文件 libmya.so
gcc mya.c -L. -la -shared -o libmya .so
4、创建我的应用myapp.c,在应用程序里调用myfunc接口
#include "mya.h"
int main(int args, char ** argv)
{
int i=1;
int key=123456;
myfunc(i,key);
return 0;
}
5、将myapp编译成可执行程序
gcc -o myapp myapp.c -L. -lmya
6、ldd测试myapp动态链接情况,发现myapp同时依赖于 liba.so 和 libmya.so 文件,这样的话,发布的时候必须要 liba.so 和 libmya.so 一起打包。
有没有办法让 myapp 只依赖于 libmya.so 文件啊?我试了一下编译libmya.so的时候,加上了 -static 选项,ldd 结果还是一样。
另外,除了上面2种思路外,还有没有其他比较便宜、可行的方法?
Android工程里使用了从别处购买的动态库so文件,但是担心程序发布的时候so文件被其他人获取到,并且非法使用库中的函数接口,因此需要制定一套保护机制。
思路:
1)对发布的apk做特殊处理,使别人无法通过解压apk获取so文件。或者:
2)在程序中对所有调用so中函数接口进行“认证”,非法用户即使得到so文件,也无法正确调用。
第一种方案请对android编程熟悉的同学帮忙看看,是否可行?这个网上我没有看到相关的文章,也没有试过,所以拜托各位了!
第二种方案我的设想是:
1、对so中所有的函数进行“二次封装”,增加一个参数用来校验函数调用者是否合法。
2、对封装后的代码,重新编译一个新的so文件,发布的时候将新的so文件打包进去,旧的so文件不打包。
3、程序中使用新的so文件,调用新的函数接口,把校验参数传进去。由于校验方法是我们自己做的,因此即使新的so文件被非法获取,他们不知道这个校验值如何计算,调用函数接口时会失效。
实验过程:
1、目前购买了 liba.so 和 a.h 文件,a.h中有函数声明:void func(int i);
2、编写mya.c 和 mya.h,创建新的函数:
#include "a.h"
void myfunc(int i, int key)
{
if(key!=123456)
{
return;
}
func(i); // 调用了购买的函数
}
3、将mya.c 和 liba.so 编译成新的so文件 libmya.so
gcc mya.c -L. -la -shared -o libmya .so
4、创建我的应用myapp.c,在应用程序里调用myfunc接口
#include "mya.h"
int main(int args, char ** argv)
{
int i=1;
int key=123456;
myfunc(i,key);
return 0;
}
5、将myapp编译成可执行程序
gcc -o myapp myapp.c -L. -lmya
6、ldd测试myapp动态链接情况,发现myapp同时依赖于 liba.so 和 libmya.so 文件,这样的话,发布的时候必须要 liba.so 和 libmya.so 一起打包。
有没有办法让 myapp 只依赖于 libmya.so 文件啊?我试了一下编译libmya.so的时候,加上了 -static 选项,ldd 结果还是一样。
另外,除了上面2种思路外,还有没有其他比较便宜、可行的方法?
作者: Walkac 发布时间: 2011-07-17
so本来就是动态运行的,所以要都存在才可以,除非楼主从他们公司购买的是.a文件,这样才可以达到楼主要求的效果。
作者: jernymy 发布时间: 2011-07-17
安全问题,不好处理啊,加密处理下。
作者: lyzzzwx 发布时间: 2011-07-17
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28