linux反编译so文件(linux so文件编译)

本篇文章给大家谈谈linux反编译so文件,以及linux so文件编译对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

linux 怎么编译.so文件

.so是linux用的 所以 要生成so 需要用gcc 和生成可执行文件类似,只是增加一些编译选项 命令如下 gcc SOURCE_FILES -fPIC -shared -o TARGET SOURCE_FILES可以是.c文件,也可以是经过-c编译出来的.o文件 TARGET为so文件。

【安全与逆向】- so文件格式分析

为了增加反编译难度,保护应用安全,现在越来越多的应用把一些重要的逻辑,加密,重要信息用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必须以空字符结束,从起始地址一直找到为空字符的地方即可。

更多请参考文档: 链接: 

   密码:zmac

参考: 

如何在linux下把.so文件反汇编

和反汇编其他程序一样,用 objdump 或其他你喜欢的反汇编工具都可以的

linux 下如何将动态链接库.so进行反编译后,换编译器重新编译?

程序能不能正常运行取决于程序和动态库之间的ABI是否兼容。只要ABI兼容那么编译器版本就没有影响。高版本的编译器同样可以使用低版本的ABI来生成目标代码,但这个问题要具体分析。你解决问题的思路完全不对。

linux反编译so文件的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux so文件编译、linux反编译so文件的信息别忘了在本站进行查找喔。


【免责声明】:

本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

【关于转载】:

本站尊重互联网版权体系,本站部分图片、文章大部分转载于互联网、所有内容不代表本站观点、不对文章中的任何观点负责、转载的目的只用于给网民提供信息阅读,无任何商业用途,所有内容版权归原作者所有
如本站(文章、内容、图片、视频)任何资料有侵权,先说声抱歉;麻烦您请联系请后台提交工单,我们会立即删除、维护您的权益。非常感谢您的理解。

【附】:

二○○二年一月一日《计算机软件保护条例》第十七条规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬!鉴于此,也希望大家按此说明研究软件!

注:本站资源来自网络转载,版权归原作者和公司所有,如果有侵犯到您的权益,请第一时间联系我们处理!

-----------------------------------------------------------------------------------------------------------

【版权声明】:

一、本站致力于为源码爱好者提供国内外软件开发技术和软件共享,着力为用户提供优资资源。
二、本站提供的源码下载文件为网络共享资源,请于下载后的24小时内删除。如需体验更多乐趣,还请支持正版。
三、如有内容侵犯您的版权或其他利益的,请编辑邮件并加以说明发送到站长邮箱。站长会进行审查之后,情况属实的会在三个工作日内为您删除。
-----------------------------------------------------------------------------------------------------------


内容投诉
源码村资源网 » linux反编译so文件(linux so文件编译)
您需要 登录账户 后才能发表评论

发表评论

欢迎 访客 发表评论