位置: 编程技术 - 正文

爱加密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)

  • 往年有亏损本年没有亏损
  • 稽查局和税务局的关系
  • 税率开错了影响征税吗
  • 自然人独资是小规模纳税人吗
  • 公司报销房租还能扣税吗
  • 现金日记账1月怎么算
  • 发出商品和委托代销商品科目的区别
  • 税费漏报
  • 贷款逾期的本金怎么计算
  • 当月进项税额大于销项税额
  • 建筑行业未收款先开发票如何做账?
  • 固定资产抵扣对账怎么算
  • 企业停产或停业期间的费用包括
  • 公司补贴为什么要交税
  • 纳税人涉税信息查询
  • 增值税零税率发票开具条件
  • 开具发票超出企业经营范围属于虚开发票吗??
  • 旅游业差额开票税率
  • 金融性负债总额是什么
  • 暂估发票未到年报怎么调
  • 以前年度少计收入怎么办
  • 所得税不退税怎么写情况说明
  • 合同取得成本与销售费用
  • 装饰公司收到客户工程款做分录
  • 企业医保分几种
  • 批量获取文件信息
  • 计提的社保费如何做账
  • 代理进口合同如何签署
  • 冲办公费会计分录
  • php的数组函数
  • wordpress功能介绍
  • 准备动作怎么做
  • 路由配置中network怎么用
  • vue计算属性和监听属性的区别
  • php session用法
  • php上传照片
  • 以小物件为话题写出背后的故事
  • 公司从银行提取现金4000元备作零星开支
  • 企业所得税退税如何进行账务处理
  • 人力资源公司的招聘专员怎么样
  • 租金计入主营业务成本吗
  • 销售商品的折扣
  • 金税盘 解锁
  • php引用类型
  • 技术转让和技术开发区别
  • 资产负债表日后事项是指资产负债表日之后至审计报告
  • 固定资产分期付款会计处理?
  • mysql数据类型char
  • 数据库系统中,用户通过什么访问数据
  • 短期借款的账务处理例题
  • 坏账准备计提要求
  • 出口退税进项发票会计分录
  • 代理公司代缴社保违法吗
  • 应收账款有什么
  • 利润表里公允价值变动损益怎么算
  • 明细分类账的格式与登记方法
  • 销售废旧物资如何入账
  • 企业风险管理有哪些方面
  • 支票有效期过期了怎么办
  • 会计及库管岗位职责(要求)
  • sql server 3417错误
  • 电脑怎么改xp系统
  • w10英雄联盟老是崩溃
  • yum providers命令
  • windows8.1使用指南
  • win7如何删除系统启动项
  • windows8任务管理器在哪
  • windows10窗口设置在哪
  • 简述opengl的编程步骤
  • 电脑windows自动关闭
  • cocos2dx-js
  • unity3d入门视频教程
  • 杀掉进程windows
  • js中日期格式转换
  • javascript教程
  • [置顶]马粥街残酷史
  • 技术总结2000字
  • 面向对象的三大特征
  • 特斯拉购车补贴2023苏州
  • 企微宝破解
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设