位置: 编程技术 - 正文

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

  • 合伙企业如何纳入合并报表
  • 发票多开了,要求退回重开,如何处理
  • 特许权使用费收入
  • 怎么知道对方的支付宝账号
  • 软件企业的工资怎么样
  • 劳务报酬所得怎么扣税
  • 用现金购买办公设备会计分录
  • 免税农产品如何填报企业所得税季报
  • 政府项目的代建方案
  • 不是公司车可以报销油费吗
  • 发票对方认证不了怎么回事
  • 生产药酒的厂家
  • 母子公司间的借款现金流计入哪里
  • 股票红利税如何征收
  • 金融企业的成本核算方法
  • 外币报表折算差额在会计报表中应作为( )
  • 预缴企业所得税分录
  • 应税劳务、服务清单
  • 非正常损失进项税额转出计算
  • win11怎么把默认c盘改到d盘
  • 电脑有些进程关不掉
  • 所得税退税会计分录为啥要借贷所得税费用
  • 如何在excel中链接图片对方能显示
  • 增值税发票认证操作流程
  • 除了个税还有什么税
  • PHP:session_cache_limiter()的用法_Session函数
  • 境外佣金支付所需要征收的税
  • php实战
  • 商业企业会计科目表
  • 企业规模扩大后更易于管理吗
  • redistemplate获取value
  • php提取字符串中某个字符
  • 增值税加计抵减申报表怎么填
  • 收车船税是什么
  • 体验了才明白的作文范文
  • javafiles
  • 神经网络模型python
  • php数组处理函数array_push会影响源数组的元素吗
  • 营业税差额计税
  • 条形码费用属于哪个科目
  • 上一年度的费用退回清算表怎么填
  • mysql从一张表更新到另一张表
  • mongodb cond
  • mongodb reactive
  • 当月收入未开票怎么入账
  • 参加会计专业技术资格考试的人员,应具备那些条件
  • 坏账损失的定义
  • 缴纳社保公积金的会计分录
  • 个体工商户不经营需要税务登记吗
  • 研发支出放在报表哪里
  • 公司银行开户费用怎么报销
  • 银行存款会计分录需要输入哪些内容
  • 购买原材料例题
  • 银行贷款利息支出税前扣除标准
  • 固定资产更换配件 资本化标准
  • 基本账户可以转私人账户吗
  • 工程预缴税款流程
  • 应付账款怎么入账
  • 在途物资材料采购原材料的区别
  • 去年的进项发票今年怎么入账
  • 新单位怎么建账
  • 怎么样创建
  • Mysql使用教程
  • mysql挂了怎么排查
  • mysql免安装版下载
  • mac设置多个桌面
  • win7怎么设置麦克风权限
  • 让windows server 2003 32位支持8G内存大内存
  • freebsd安装pkg
  • windowsxp资源管理器在哪里
  • 远程桌面的文件怎么无法复制到本地桌面
  • win10开始菜单样式
  • /etc/init.d/rcs
  • python利用format方法保留三位小数
  • linux怎样添加用户
  • unity3d特效教程
  • 完美世界3v3
  • 陕西电子税务局新版
  • 国税局登录密码修改
  • 四川企业退休人员80岁高龄补贴
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设