linux 加密 解密函数,so文件函数的加密和解密学习笔记

SO文件中函数的加密和解密

简介

原理上来说,找到so文件函数的位置,对其二进制进行一定加密操作后即加密了,解密也是一样,找到函数的位置,对其二进制进行一定的解密操作即可,只不过前者是通过so文件格式,按照一定的索引一步一步找到函数位置;后者是在其运

行时,通过/proc/pid号/maps文件,找到so文件映射的内存虚拟地址,在根据so文件格式的索引一步一步找到函数位置,再进行解密工作;首先,从section角度来说:

+ .text 存放函数的具体实现

+ .dynstr 存放函数名字

+ .dynsym 相当于指针,存放每个函数实现代码(在.text)的地址

+ .hash 描述.dynsym如何存储的,根据一定的算法可以映射到dynsym

注意:文中的提到的偏移是指在so文件头开始到任意一个位置的偏移

section结构

.text和.dynstr没有固定的结构,存储的都是代码的值,.hash和.dynsym则是有固定的结构,后两者经过一定逻辑运算可以定位某个函数在前两者的具体的位置;还有一点,后面两个section从结构视图(section header)方面找到,需要从>执行视图(program header)方便的找到,所以这里需要了解program header中的一个段.dynmaic的结构

.dynmaic segemnet

这个段可以根据program header的type类型来确定,type为PT_DYNAMIC = 2

d_tag: 描述每个具体段的类型,如.has

你可能感兴趣的:(linux,加密,解密函数)