简单粗暴的so加解密实现

本文介绍了如何对安卓动态链接库(so文件)进行简单粗暴的加解密实现,主要探讨了有源码情况下的加密方法。内容包括ELF头分析、基于特定section和函数的加解密实现,以及解密流程的详细步骤。通过对.so文件的ELF头字段的修改和特定section的加密,实现了在内存中动态解密.so文件中敏感代码的目的。
摘要由CSDN通过智能技术生成

从现在起,养成写BLOG的好习惯。。。

CSDN博客地址: http://blog.csdn.net/thomasking2014/article/details/38941541

作者:ThomasKing

时间:2014.8.30

简单粗暴的so加解密实现

一、概述

利用动态链接库实现安卓应用的核心部分,能一定程度的对抗逆向。由于ida等神器的存在,还需要对核心部分进行加密。动态链接库的加密,在我看来,有两种实现方式:1. 有源码; 2、无源码。无源码的加密,类似window平台的加壳和对.dex文件的加壳,需要对文件进行分析,在合适的地方插入解密代码,并修正一些参数。而如果有源码,则可以构造解密代码,并让解密过程在.so被加载时完成。(当然,应用程序加载了.so文件后,内存中.so数据已经被解密,可直接dump分析。同时,也有一些对抗dump的方法,这里就不展开了)。

下文只针对有源码这种方式进行讨论,分析一些可行的实现方法。主要是包含对ELF header的分析(不是讨论各个字段含义); 基于特定section和特定函数的加解密实现(不讨论复杂的加密算法)。

 二、针对动态链接库的ELF头分析

网上有很多资料介绍ELF文件格式,而且写得很好很详细。我这里就不重复,不太了解的朋友,建议先看看。以下内容,我主要从链接视图和装载视图来分析ELF头的各个字段,希望能为读者提供一些ELF文件头的修正思路。

这里,我再罗嗦列出ELF头的各个字段:

typedef struct {

      unsignedchar     e_ident[EI_NIDENT];  /* File identification. */

      Elf32_Half    e_type;         /*File type. */

      Elf32_Half    e_machine;  /*Machine architecture. */

      Elf32_Word  e_version;    /*ELF format version. */

      Elf32_Addr   e_entry; /*Entry point. */

      Elf32_Off      e_phoff; /*Program header file offset. */

      Elf32_Off      e_shoff; /*Section header file offset. */

      Elf32_Word  e_flags; /*Architecture-specific flags. */

      Elf32_Half    e_ehsize;      /*Size of ELF header in bytes. */

      Elf32_Half    e_phentsize; /*Size of program header entry. */

      Elf32_Half    e_phnum;     /*Number of program header entries. */

      Elf32_Half    e_shentsize; /*Size of section header entry. */

      Elf32_Half    e_shnum;     /*Number of section header entries. */

      Elf32_Half    e_shstrndx;   /*Section name strings section. */

} Elf32_Ehdr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值