位置: 编程技术 - 正文

爱加密Android APk 原理解析(爱加密企业版)

编辑:rootadmin
爱加密Android APK加壳原理解析

推荐整理分享爱加密Android APk 原理解析(爱加密企业版),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:爱加密企业版,爱加密企业版破解,爱加密官网,爱加密公司怎么样,爱加密脱壳,爱加密公司怎么样,爱加密脱壳,爱加密公司怎么样,内容如对您有帮助,希望把文章链接给更多的朋友!

一、什么是加壳?

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

二、加壳作用

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

三、Android Dex文件加壳原理

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

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

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

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

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

根据解壳数据在解壳程序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文件头末尾,并继续解壳数据到文件头末尾。

(插入数据的位置为0x处)

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、从0x处读取解壳数据长度。

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

爱加密Android  APk 原理解析(爱加密企业版)

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

爱加密实现步骤:

1.把原来的classex.dex 用未知的加密算法实现加密成assets/ijiami.dat

2.把事先写好的jni代码和相应的classex.dex替换到原有的位置

3.程序安装完运行起来以后,先运行爱加密的加壳程序,在jni里面动态加载原 来的classex.dex代码,从而达到加壳保护的目的.

4.源classex.dex 隐藏起来了,在静态的时候就没有办法对其破解。

5.至于动态运行,最好还是在自己代码里面下工夫了。比如内存加密啦。

APK高级保护的方法(一)

运行时验证运行时验证,主要是指在代码启动的时候本地获取签名信息,然后对签名信息进行检验来判断自己的应用是否是正版,如果签名信息不是正版则提示盗版或者直接崩溃。

它的原理:APK的唯一识别是根据包名&#;签名,包名信息是写死在Android Manifest.xml里面的,但是签名则是与APK绑定的,一旦APK被反编译后签名会自动消失。APK的签名需要签名文件,签名文件的md5&#;基本上是无法伪造成一样的。

签名验证的方法也可以细分为3种:

1) Java 层验证

获取签名信息和验证的方法都写在android 的java层。这种保护方法保护的意义并不大,因为反编译出源码后通过关键字搜索很快就能够找到验证的代码块,稍微一修改这验证保护就完全无效了。

2) 服务器验证

在android 的java层获取签名信息,上传服务器在服务端进行签名然后返回验证结果。这种保护还不如在纯java层验证有用,一旦没有网络验证保护就无效了。用android方法获取的签名信息用java方法也可以获取,验证存放在服务器上也是为了把保护正确的签名信息&#;,但是保护的意义其实没有任何作用,同样破解后全局搜索关键字然后伪造一个正确的签名信息就可完美破解了。

3) NDK技术底层获取签名和验证

通过把Context,Activity,PackageManager,PackageInfo四个对象中的一个作为参数参入底层,在底层获取签名信息并验证。因为获取和验证的方法都封闭在更安全的so库里面,能够起到一定意义上的保护作用。不过通过java层的hook技术一样可以把这种保护完美破解。但是相比于前两种,此保护的意义和价&#;就更大了。

4)爱加密APP安全保护

它采用指纹校验保护APK中的文件,加密后APK中所有的文件都对应一个唯一的指纹。每次运行时,APK内部会再次进行指纹生成,如果生成的指纹和原本指纹不相同,则判断为被二次打包过的APK,程序就会自动退出或直接崩溃。该方法可以防止资源文件、主配置文件被修改或删除等操作,完全保证APK的安全。

APK高级保护的第二种方法——文件夹混淆(二)

文件夹混淆主要指的是利用Windows,Linux,Android 三个系统环境下的文件夹名的特殊性来对源码文件夹进行混淆,让混淆后的文件夹在Window看起来失去原有的逻辑性,但是完全不影响其在Android系统上的运行。

它的原理是:在Windows和Linux下文件夹的名字是不区分大小写的,但是在Android环境下它却要区分大小写。.2在Linux算一个特殊符号,所以文件夹名字里面添加的.2会被忽略,但是windows下.2却是一个很普通的字符串。

具体方法:反编译开发完成的APK,找到包目录下的最后一层文件夹(例如:包名是com.example.test,找到test所在的文件夹),修改test文件夹名字为test.2并创建文件夹Test,然后随意存放一个有效的smali文件在Test里面,然后重新重写打包成APK签名。 如下图:

这种方法可以达到不错的保护效果,但是开发者一般都没有额外的时间和精力做加固保护。基本时间、技术等原因,爱加密为APK开发者提供免费的技术支持,对APK加壳隐藏源代码,从而防止反编译。它可以对XML 主配文件进行二次签名保护,保护SO文件不被破解和应用,同时可以保护APK不被二次打包!

第三种方式——花指令

花指令是程序中有一些指令,由设计者特别构思,希望使反汇编的时候出错,让破解者无法清楚正确地反汇编程序的内容,迷失方向。“花指令”这个词来源于汇编语言,它的思想是非常不错的,它的另一个目的就是利用反编译工具漏洞,来使工具无法使用。

接下来,我们就在JAVA代码处制“花指令”,让反编译工具(jd-gui)无法反编译查询你的JAVA代码。jd-gui的bug其实挺多了,很多特殊代码块或者字段集都能够让其崩溃无法反编译出源码。

比如:

private static final char[] wJ = "abcdef".toCharArray();

public static String imsi = "";

public static String p = "0";

public static String keyword = "电话";public static String tranlateKeyword = "%E7%%B5%E8%AF%9D";

在每个类里面加入如上字段,你会发现反编译的类通过jd-gui查看后的结果如下:

我们再来看一下爱加密的三层保护技术,即DEX加壳保护、DEX指令动态加载保护、高级混淆保护,可以保证APP的动态安全和静态安全,黑客将没有机会进行任何破解。

经过加密的APK我们反编译依稀看看是否有效果!

Android自定义无下划线ClickableSapn超链接文本样式 最近在做评论的时候需要实现这种效果网上百度了一下,就是自定义一个类继承4ClickableSpan,然后在updateDrawState方法中设置是否下划线为false,但是看了一

安装AndroidStdio时出现“could not find main class com/intelligi/idea/Main”错误 出现这个错误的原因是环境变量没有配好,使用Androidstdio时需要jdk1.7版本及以上,所以请确保自己的jdk版本正确且环境变量调好再者,如果安装时没有

Android学习笔记(1) Android的学习刚刚起步,这几天都在学习界面编程的一些基础内容。今天学习的是时钟(AnalogClock和DigitalClock),此外还学习了一个计时器组件:Chronometer

标签: 爱加密企业版

本文链接地址:https://www.jiuchutong.com/biancheng/384225.html 转载请保留说明!

上一篇:Android-->回调(interface/abstract)的用法(通俗易懂)(安卓回调接口怎么写)

下一篇:Android自定义无下划线ClickableSapn超链接文本样式(android自定义ui)

  • 进口关税计算公式 案例
  • 缴纳个税会计分录是什么
  • 收到货款发货了没开发票怎么入账
  • 润滑油怎么做账务处理
  • 资产负债表存货怎么填列
  • 通过应交税费核算的
  • 进出口代理公司哪家好
  • 存货盘盈涉税问题
  • 增值税进项税转出所得税调整吗
  • 现金支付用什么科目
  • 已确认并转销的应收账款会计分录
  • 新公司领取营业执照后的流程
  • 年终奖专项扣除
  • 年终奖需要计入工资交社保吗
  • 贸易公司购入商品会计分录
  • 实收资本不是股东打来的怎么调帐
  • 增值税发票和电子发票都可以报销吗
  • 应收和预收可以抵消吗
  • 出口退税进口免税
  • 小规模企业低值易耗品摊销方法
  • 百旺发票修复怎么弄
  • 合伙企业对外投资
  • 华为折叠手机mateXs3
  • 清除不必要的内存
  • linux中tomcat如何启动
  • php部署在什么服务器
  • ae应用程序无法启动
  • 增加办税人员需要带什么材料
  • 财务费用核算的内容没有
  • 喉咙有异物怎么咳出来
  • 解决本地浏览器的方法
  • three.js入门指南
  • 公司交纳社会保险多少钱
  • vite vuex
  • yolov1训练过程
  • 会计账目和账户的区别
  • php字符串的三种定义方式
  • 资产处置损益计算公式
  • 简单的css特效
  • 滨州高新技术企业名单
  • 核心书评价格
  • 软考软件设计师考试时间
  • python 批量
  • 三维点云识别
  • php7匿名函数
  • 单位收到投标保证金会计分录
  • 承兑汇票贴现会计分录怎么做
  • 企业所得税退税申请理由怎么写
  • 试生产期间发生事故后重新
  • 购进交通运输服务可以抵扣
  • 营业外收入如何纳税
  • 存货核算科目设置
  • 以前年度的销售退回能否直接冲减销售收入
  • 购礼品送客户分账务处理怎么做
  • 税务开票系统怎么开票
  • 旅游服务小规模差额税率
  • 哪些发票能做公章
  • 未完施工是存货吗
  • 营业外收入属于借方还是贷方
  • sqlserver2012安装失败原因
  • mysql数据库无法连接到服务器怎么办
  • sql语句的优化方式
  • 苹果序列号查询
  • 如何启动vmware authorization service
  • win8.1开机进入桌面
  • nvidia发布了G6X
  • ubuntu 125%
  • win10字体边缘模糊
  • win7系统删除文件夹怎么恢复
  • win7系统如何修改锁屏密码
  • linux a
  • opengl画实体
  • js的正则表达式
  • android的ui组件有哪些
  • css网页布局中注释是什么
  • js alert()
  • 512到底是什么意思
  • 中国海关化妆品关税
  • 陕西省电子税务局官网登录入口网址
  • 单位自有住房免增值税吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设