安卓安装包lib里的.so文件怎么打开进行修改破解

安卓安装包lib里的.so文件怎么打开进行修改破解,第1张

(1).AndroidManifest.xml

文件是每个应用都必须定义和包含的,它描述了应用的名字、版本、权限、引用的库文件等等信息,如要把apk上传到Google Market上,也要对这个xml做一些配置。在apk中的AndroidManifest.xml是经过压缩的,可以通过AXMLPrinter2工具解开,具体命令为:java -jar AXMLPrinter2.jar AndroidManifest.xml

(2).META-INF目录

META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。在eclipse编译生成一个apk包时,会对所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下。这就保证了apk包里的文件不能被随意替换。比如拿到一个apk包后,如果想要替换里面的一幅图片,一段代码, 或一段版权信息,想直接解压缩、替换再重新打包,基本是不可能的。如此一来就给病毒感染和恶意修改增加了难度,有助于保护系统的安全。软件修改后需要将里面的证书文件删除(***.RSA、***.SF、***.MF三个文件)再重新签名,否则软件无法安装。

.so文件可以使用记事本编辑修改。打开app,找出相应的so库,获取当前程序的包名。

1、so使用IDA打开,然后进入options?|?General。

2、随便点击左侧的函数,按Ctrl+F输入java这里是找jni接口。

3、找到接口单击,双击可以看到汇编源码,按F5可以找到C代码。

4、看到和上面源码基本一样,很多算法库都要加壳,否则会容易被破解。

5、把if(v5==10000)取反,就可以成功。

为了增加反编译难度,保护应用安全,现在越来越多的应用把一些重要的逻辑,加密,重要信息用so库存储。如果想反编译so,那么我们就需要了解so文件格式。这样有助于帮助我分析so文件内容和加固so,防止自己的so被别人轻易破解。

so文件使用的是elf格式来存在信息,所以,我们需要了解elf文件格式。这样就可以读取到我们需要的数据。

这篇文章不会把基本的东西讲太多,网上关于so文件格式也有讲解,本文会把自己分析过程遇到的问题,网上查不到,或者你们在学习过程可能会产生的疑问一一列举出来。

对于基础的东西请自己百度或者看下面给出的ELF文件格式文档。

ELF文件由4部分组成,分别是ELF头(ELF header)、程序头表(Program header table)、节(Section)和节头表(Section header table)。实际上,一个文件中不一定包含全部内容,而且它们的位置也未必如同所示这样安排,只有ELF头的位置是固定的,其余各部分的位置、大小等信息由ELF头中的各项值来决定。

在Linux用该命令可以直接查看so相关信息,mac可以百度,查看替代方案。

so文件二进制数据图

接下来就以ELF头来做分析

看一下ELF头在elf.h中的定义,如果没有源码,可以参考上面的ELF文件格式文档。

e_ident[EI_NIDENT]这16个字节代表数据如下:

EI_NIDENT :e_ident数组的大小。

剩余字节,可对照数据结构查看,我们用命令看一下ELF头信息

从ELF信息里面可以拿到:

通过e_phoff和e_phnum,e_phentsize可以找到程序头部表的在文件中的起始地址和个数以及单个程序头部表的大小。

同理,可以找到节点表的起始地址和个数以及单个表的大小。

010editor工具左边显示了二进制文件的地址,很方便查看。

通过命令看看具体数据

第一列就是Section表索引,还记得上面的e_shstrndx字段吧,它表示节区字符串表在节区头部表格中索引。由上面的数据图可以看出e_shstrndx是0x25,即37,对于图中的.shstrtab这个正是节区字符串表的名字,具体这些名字代表什么,请查看文档。

从二进制数据看到只是一个数字,并不是像.shstrtab的字符串,那么又是怎么回事呢?

在Section表数据结构中的一个字段是:sh_name 表示节区名称,表示在节区字符串表中的索引,即信息很可能存储在.shstrtab这个字符串表中。根据上面图中的Off得到起始地址。

Section表数据结构索引为1的sh_name值为3A,即58。而节区字符串表的起始地址是E9F4a,即图中为红色00的位置,然后从这个位置往后数58个字节,刚好是图中蓝色部分的数据,是不是Section节区表格中的第二行的名字(图中少了nt字符,我怀疑是长度过长,没有显示出来,经验证短一点的,完全一只)。

知道了sh_name起始地址,那怎么知道到哪里结束呢,sh_name必须以空字符结束,从起始地址一直找到为空字符的地方即可。

更多请参考文档: 链接: https://pan.baidu.com/s/1GgUqFF1dJ9sbCoSU3XzElw

   密码:zmac

参考: https://www.cnblogs.com/1024Planet/p/6272620.html


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12098004.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存