Android APK加壳技术方案【1】-程序员宅基地

技术标签: 汇编以及逆向工程  

本文章由Jack_Jia编写,转载请注明出处。  
文章链接:
http://blog.csdn.net/jiazhijun/article/details/8678399


一、什么是加壳?

       加壳是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,做一些额外的工作。大多数病毒就是基于此原理。PC EXE文件加壳的过程如下:


     


二、加壳作用

       加壳的程序可以有效阻止对程序的反汇编分析,以达到它不可告人的目的。这种技术也常用来保护软件版权,防止被软件破解。


三、Android Dex文件加壳原理

       PC平台现在已存在大量的标准的加壳和解壳工具,但是Android作为新兴平台还未出现APK加壳工具。Android Dex文件大量使用引用给加壳带来了一定的难度,但是从理论上讲,Android APK加壳也是可行的。

       在这个过程中,牵扯到三个角色:

           1、加壳程序:加密源程序为解壳数据、组装解壳程序和解壳数据

           2、解壳程序:解密解壳数据,并运行时通过DexClassLoader动态加载

           3、源程序:需要加壳处理的被保护代码

       阅读该文章,需要您对DEX文件结构有所了解,您可以通过以下网址了解相关信息:

        http://blog.csdn.net/jiazhijun/article/details/8664778


       根据解壳数据在解壳程序DEX文件中的不同分布,本文将提出两种Android Dex加壳的实现方案。


    (一)解壳数据位于解壳程序文件尾部


              该种方式简单实用,合并后的DEX文件结构如下。




          加壳程序工作流程:

                  1、加密源程序APK文件为解壳数据

                  2、把解壳数据写入解壳程序Dex文件末尾,并在文件尾部添加解壳数据的大小。

                  3、修改解壳程序DEX头中checksum、signature 和file_size头信息。

                  4、修改源程序AndroidMainfest.xml文件并覆盖解壳程序AndroidMainfest.xml文件。


          解壳DEX程序工作流程:

                  1、读取DEX文件末尾数据获取借壳数据长度。

                  2、从DEX文件读取解壳数据,解密解壳数据。以文件形式保存解密数据到a.APK文件

                  3、通过DexClassLoader动态加载a.apk。


(二)解壳数据位于解壳程序文件头


          该种方式相对比较复杂, 合并后DEX文件结构如下:




          加壳程序工作流程:

                  1、加密源程序APK文件为解壳数据

                  2、计算解壳数据长度,并添加该长度到解壳DEX文件头末尾,并继续解壳数据到文件头末尾。

                       (插入数据的位置为0x70处

                  3、修改解壳程序DEX头中checksum、signature、file_size、header_size、string_ids_off、type_ids_off、proto_ids_off、field_ids_off、

              method_ids_off、class_defs_off和data_off相关项。  分析map_off 数据,修改相关的数据偏移量。  

                  4、修改源程序AndroidMainfest.xml文件并覆盖解壳程序AndroidMainfest.xml文件。


          解壳DEX程序工作流程:

                  1、从0x70处读取解壳数据长度。

                  2、从DEX文件读取解壳数据,解密解壳数据。以文件形式保存解密数据到a.APK

                  3、通过DexClassLoader动态加载a.APK。


   四、加壳及脱壳代码实现


          http://blog.csdn.net/jiazhijun/article/details/8809542

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jackxinxu2100/article/details/78763020

智能推荐

ES全文检索支持拼音和繁简检索

介绍了在 Elasticsearch 中实现全文检索支持拼音和繁简检索的步骤。首先,介绍了如何引入 pinyin 插件和 ik 分词器插件,包括编译和安装的过程。然后,讲解了建立索引的步骤,包括设置文件和字段映射文件的配置。接着,提供了测试检索的方法和结果展示,包括中文简体、繁体查询以及拼音全拼和简拼查询。最后,还介绍了繁简转换功能的配置。整篇文档详细说明了每个步骤的操作,为实现全文检索功能提供了指导。

使用xshell工具连接ubuntu的root账户被拒绝的解决方法

详细介绍了使用xshell工具连接ubuntu系统的root用户时,被拒绝的问题。

golang学习之gin(二):模板渲染、数据渲染_engine.loadhtmlglob 多级目录-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏16次。文章目录一、模板渲染:1. 一级模板:2. 多级模板:2.1 多级目录模板指定:二、静态文件的使用:三、数据渲染:1. 字符串渲染:2.结构体渲染:3. 数组渲染:4. 结构体数组渲染:5. map渲染:6. map+struct渲染:7. 切片渲染:一、模板渲染:1. 一级模板:./main.gopackage mainimport ( "github.com/gin-gonic/gin")func index(ctx *gin.Context) { // HTML(code _engine.loadhtmlglob 多级目录

Harmonyos快步前行,华为HarmonyOS 2.0正式发布,共赢移动终端产业的下一个十年-程序员宅基地

文章浏览阅读403次。2020年9月10日,华为消费者业务软件部总裁王成录又一次站在了松山湖华为开发者大会的主舞台上。今年,他带来了万众瞩目的华为鸿蒙HarmonyOS 2.0。此次HarmonyOS的升级,不仅仅带来了分布式能力的全面提升,还为开发者提供了完整的分布式设备与应用开发生态,全面使能全场景智慧生态,共赢移动终端产业的下一个十年。三大核心能力升级,HarmonyOS 2.0为开发者掌灯去年推出的Harmo...

Windows10删除蓝牙设备_此项不起作用请确保你的蓝牙设备仍可检测到-程序员宅基地

文章浏览阅读9.6k次。突然发现自己的蓝牙耳机连不上电脑,点击“连接”一直显示“此项不起作用请确保你的蓝牙设备仍可检测到”。想要删除设备重新连接,但是最后总是显示“删除失败”。(问题已解决,当时对故障情况进行截图保存)上图来自于他人的帖子尝试了网上很多帖子的方法:用修复工具删除设备、设备管理器中删除蓝牙设备、升级蓝牙驱动,但是始终无法删除蓝牙设备。最后,在控制面板-硬件和声音-设备和打印机-设备 中看到了我的蓝牙耳机。果断选中它,删除设备。当时耳机连着我的手机正在播放音乐,删除设备时发现音乐突然卡顿了一下,心想有戏!_此项不起作用请确保你的蓝牙设备仍可检测到

C++ libxl库读写Excel_libxl writeformula-程序员宅基地

文章浏览阅读1k次。#include<iostream>#include<stdio.h>#include <windows.h>#include "libxl.h"using namespace std;using namespace libxl;#pragma comment(lib,"libxl.lib")int main(){ Book* bo..._libxl writeformula

随便推点

Stable Diffusion一键安装包启动疑难报错解析:Python 无法找到模块‘urlib’以及其他报错的解决方法

如果您遇到 ModuleNotFoundError: No module named ‘_socket’ 错误,这可能意味着您的 Python 安装存在问题或缺少了某些核心组件。对于不熟悉SD内部工作原理的用户来说,这无疑增加了解决问题的难度。(简称SD)这一强大技术的旅程中,我们有时可能会遇到一些始料未及的问题。其中,启动一键安装包时遭遇的“Python 无法找到模块‘urlib’”的报错,就是许多新手用户可能会碰到的一个挑战。在使用图生图功能时遇到错误提示,显示为“'Image'对象不支持下标操作”。

【随想录】Day34—第八章 贪心算法 part03

每到一个站点后,此时是有补充有消耗的,关注点:当前还剩余多少油。

influx 操作_Influxdb简单实用操作-程序员宅基地

文章浏览阅读650次。新的infludb版本已经取消了页面的访问方式,只能使用客户端来查看数据一、influxdb与传统数据库的比较库、表等比较:influxDB传统数据库中的概念database数据库measurement数据库中的表points表里面的一行数据influxdb数据的构成:Point由时间戳(time)、数据(field)、标签(tags)组成。Point属性传统数据库中的概念time每个数据记录时间...

增加PyQt5界面的交通流量预测(模型为CNN_GRU,CNN_BiGRU_ATTENTION,LSTM,Python代码)

对代码和数据集压缩包,感兴趣的可以关注最后一行。3.增加 PyQt5界面效果。2.三个模型和数据集的介绍。展示不同算法的对比指标。

【Hadoop】-Hive客户端:HiveServer2 & Beeline 与DataGrip & DBeaver[14]

DataGrip是由JetBrains公司推出的数据库管理软件,DataGrip支持几乎所有主流的关系数据库产品,如DB2、Derby、MySQL、Oracle、SQL Server等,也支持几乎所有主流的大数据生态圈SQL软件,并且提供了简单易用的界面,开发者上手几乎不会遇到任何困难。3、连接成功,在里面我们可以看到我们前面章节所创建的表,这样子就可以在里面操作我们的sql语句的。5、连接成功,在里面我们可以看到我们前面章节所创建的表,这样子就可以在里面操作我们的sql语句的。

推荐文章

热门文章

相关标签