APP加壳原理及常用脱壳方法介绍

这篇具有很好参考价值的文章主要介绍了APP加壳原理及常用脱壳方法介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

app安卓加壳原理及常用脱壳方法介绍

前言

目前针对移动应用市场上安卓APP被破解、反编译、盗版丛生的现象,很多APP开发人员已经意识到保护APP的重要性。而对于移动应用APP加密保护的问题,如何对DEX文件加密尤为重要。对APP进行加壳能有效地遏制APP被反编译破解的行为。

1 加壳

1.1 什么是加壳

加壳是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,做一些额外的工作。大多数病毒就是基于此原理。是应用加固的一种手法对原始二进制原文进行加密/隐藏/混淆。

1.2 加壳作用

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

1.3 加壳原理

APP加壳原理及常用脱壳方法介绍

市面上主要的加壳原理:将原Dex文件加密,加密后的Dex文件和壳Dex文件一起重新打包,产生新的Dex文件。安卓虚拟机加载的时候,会从壳Dex文件的ProxyApplication类开始,执行attachBaseContext方法和onCreate方法。而壳Dex文件会在这两个方法里面实现原Dex文件的还原和加载,让虚拟机顺利启动APP。

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

1、加壳程序:加密源程序为解壳数据、组装解壳程序和解壳数据
2、解壳程序:解密解壳数据,并运行时通过DexClassLoader动态加载
3、源程序:需要加壳处理的被保护代码

1.4 加壳后的利与弊

优势:

①、保护自己核心代码算法,提高破解/盗版/二次打包的难度

②、还可以缓解代码注入/动态调试/内存注入攻击

劣势:

①、影响兼容性

②、影响程序运行效率

1.5 如何辨别是否加壳

目前分辨加壳主要有以下两种方法:

一、使用加固检测软件检测,如:ApkScan-PKID
二、使用代码查看工具查看apk的目录结构,如:jadx

1、ApkScan-PKID

ApkScan-PKID使用非常简单,直接把我们的Apk文件拉到软件界面内即可,这里用安居客-15.5.2为例

APP加壳原理及常用脱壳方法介绍

2、反编译apk查看包结构

这里直接将apk文件拉入jadx中,查看包目录结构十分简洁,且有一些与加载原Dex相关的方法

APP加壳原理及常用脱壳方法介绍

2 脱壳

2.1 脱壳原理

跟java类似,安卓的class都是由Classloader的loadClass方法加载的。跟java不同的是,每一个class对象都会有对应的dex对象属性跟相应的dex文件关联起来。利用xposed,将loadClass方法劫持住,每当loadClass方法调用完成后,用xposed执行后置方法。获取方法加载的class对象,然后调用getDex方法。拿到对应的dex文件引用,最后将dex文件序列成byte数据,写到自定义保存文件里面去。就能拿到脱壳后的dex文件。

2.2 常用脱壳软件

这里列举三个常用的脱壳软件:

一、反射大师 (需要搭建xposed环境)
二、DumpDex (需要搭建xposed环境且在真机下运行)
三、FRIDA-DEXDump(需要搭建frida环境)

下面介绍一下反射大师的使用方法。

2.2.1 反射大师

介绍

反射大师,一个 脱壳插件工具,需要在 Xposed 环境中使用,支持市面上大多数加密壳。

使用方法

一、手机或模拟器安装xposed环境
二、安装反射大师,xposed内部勾选反射大师模块,重启模拟器
三、打开反射大师选择目标app
四、打开目标app进入到主界面
五、选择当前ACTIVITY
六、长按写出Dex约两秒后释放,然后点击确定
七、dex文件可以直接拉到jadx查看源码
APP加壳原理及常用脱壳方法介绍APP加壳原理及常用脱壳方法介绍APP加壳原理及常用脱壳方法介绍APP加壳原理及常用脱壳方法介绍APP加壳原理及常用脱壳方法介绍APP加壳原理及常用脱壳方法介绍APP加壳原理及常用脱壳方法介绍APP加壳原理及常用脱壳方法介绍

2.3 脱壳后分析

经过上一步的脱壳操作,我们获取到了多个dex文件,接下来这些dex文件我们可以直接一个一个拖入jadx进行分析,在jadx中可以直接看到其内部的java代码。但是这样对于我们而言太麻烦了,像上面安居客的例子,我们获得了 16个dex,假如我们一个一个拖进jadx中分析,将会耗费我们大量的精力,因此我们需要对这些dex文件进行二次加工,加工细分为以下两个方向:

一、将多个dex使用jadx合并为单个sources文件,然后使用IDE软件进行查看(java层代码静态分析)

二、将多个dex使用baksmali.jar转为smali代码,结合apktool得到项目文件,替换相关smali文件后可用于动态调试
2.3.1 Dex2Java

准备工作

1、jadx文件

jadx文件我们可以通过直接在github项目中下载,如图下载最新版本的jadx-x.x.x.zip,解压后的bin目录中即可看到
APP加壳原理及常用脱壳方法介绍
APP加壳原理及常用脱壳方法介绍

2、Dex2Java脚本

该脚本用于将多个dex合并为单个sources文件

自编写如下:

Dex2Java.py

import os, sys

if __name__ == "__main__":
    if len(sys.argv) < 2 :
        print("start error!start need 2 arguments!")
        sys.exit()

print(sys.argv[1])
path = os.path.split(__file__)[0] + '\\'
print(path)
files= os.listdir(path) 
for file in files: 
    if file.find(".dex") > 0: 
        sh = sys.argv[1] + ' -j 1 -r -d ' + path + " " + path + file
        print(sh)
        os.system(sh)

ps:该python脚本执行时需要传入jadx文件的绝对路径

具体使用

1、通过2.2.1章节我们使用反射大师获取了多个dex文件,我们将Dex2Java.py放入这些dex文件的同一个文件夹中

APP加壳原理及常用脱壳方法介绍

2、该目录下执行Dex2Java.py并传入jadx的绝对路径,我这里为C:\Users\admin\Desktop\jadx\bin\jadx

Dex2Java.py C:\Users\admin\Desktop\jadx\bin\jadx

APP加壳原理及常用脱壳方法介绍

3、执行完毕后,相同目录下将会得到一个sources文件夹,该文件夹能直接用IDE工具打开查看其java代码
APP加壳原理及常用脱壳方法介绍
APP加壳原理及常用脱壳方法介绍

2.3.2 Dex2Smali

准备工作

1、apktool

apktool用于将apk文件反编译为项目文件,下载地址:https://www.pcsoft.com.cn/soft/57847.html

2、baksmali.jar文件

basksmali.jar文件用于将dex文件转为smali代码,下载地址:https://bitbucket.org/JesusFreke/smali/downloads/

3、Dex2Smali脚本

该脚本用于将dex文件转为smali代码

自编写如下:

Dex2Smali.py

import os, sys

if __name__ == "__main__":
    if len(sys.argv) < 2 :
        print("start error!start need 2 arguments!")
        sys.exit()

path = os.path.split(__file__)[0] + '\\'
files= os.listdir(path) 
for file in files: 
    if file.find(".dex") > 0: 
        prefix = file.split('.')[0]
        print(prefix)
        sh = 'java -jar ' + sys.argv[1] + ' disassemble -o smali_' + ('' if 'classes'==prefix else prefix) + ' ' + file
        print(sh)
        os.system(sh)

ps:该python脚本执行时需要传入baksmali.jar文件的绝对路径

具体使用

1、通过2.2.1章节我们使用反射大师获取了多个dex文件,我们将Dex2Smali.py放入这些dex文件的同一个文件夹中

APP加壳原理及常用脱壳方法介绍

2、该目录下执行Dex2Smali.py并传入baksmali.jar的绝对路径,我这里为E:\mobileAppCrawler\dump\安居客dump\dump\baksmali.jar

Dex2Smali.py E:\mobileAppCrawler\dump\安居客dump\dump\baksmali.jar

APP加壳原理及常用脱壳方法介绍

3、执行完毕后得到多个classes文件
APP加壳原理及常用脱壳方法介绍

4、使用apktool反编译目标apk,得到apk同名项目文件夹

将apk拖入apktool脚本所在文件夹,cmd执行以下命令

apktool -r d anjuke.apk -only-main-classes

APP加壳原理及常用脱壳方法介绍
APP加壳原理及常用脱壳方法介绍APP加壳原理及常用脱壳方法介绍
5、进入同名项目文件夹中可以看到存在多个classes文件,我们将其删除,然后将执行Dex2Smali.py脚本后得到多个classes文件复制到该文件夹中
APP加壳原理及常用脱壳方法介绍
APP加壳原理及常用脱壳方法介绍

6、使用Android Studio打开该项目文件,可以查看smali以及动态调试
APP加壳原理及常用脱壳方法介绍
APP加壳原理及常用脱壳方法介绍

最后,关于app的动态调试有不明白的可以参考这里:https://blog.csdn.net/weixin_43900244/article/details/114007059,结合本文可以从2.2章节开始看起。

3 总结

最后总结一下,目前碰到的加壳还处在一代壳阶段(dex加密),现在有些APP已经用上了二、三代壳对于代码解密以及调试难度越来越大,一些常用的脱壳手段会被逐步淘汰,遇到问题可以多去看看吾爱破解和看雪上的帖子~文章来源地址https://www.toymoban.com/news/detail-465321.html

到了这里,关于APP加壳原理及常用脱壳方法介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 安卓Frida hook脱壳环境配置过程

    本文记录开始于22/7/22/16:50 目的是记录安卓Android脱壳过程 使用Frida对360加固的apk进行脱壳 操作环境:win10+Android雷神模拟器 (1)Java JDK (2) Android SDK 平台工具软件包 下载:https://developer.android.com/studio/releases/platform-tools 配置:参考教程: http://t.csdn.cn/qXGXi (3)安卓模拟器

    2024年02月06日
    浏览(58)
  • web自动化测试系列之selenium的运行原理和常用方法介绍(二)

    在上文中我们编写了一段简单的代码 ,可以驱动浏览器访问百度并搜索 。这里我们再把这段代码再拿来加以说明 。 如果你是初次接触它 ,你可能会想 ,这段代码是怎么驱动浏览器运行的了 ?要知道这个问题的答案 ,就必须搞清楚以下3个问题 。 它(selenium)的运行原

    2024年04月11日
    浏览(43)
  • APP渗透—查脱壳、反编译、重打包签名

      在之前的文章都主要都是对APK文件进行信息收集,而信息收集后就需要对APP漏洞进行挖掘,但是从本质上来看,APP其实就是将原先应该部署在网站上的页面塞入APP中,所有的调用都是给予服务器,而且在对WEB漏洞进行挖掘的时候,除了部分漏洞是基于本地页面所导致的,

    2024年02月03日
    浏览(37)
  • 逆向破解思路和获取app的代码,脱壳操作(四)

    加壳 什么是加壳? 我们的ipa文件上传appstore,苹果会给我们做一个加密,其实我们运行在内存中的过程是一个加密的壳程序,当然在手机中我们会对他进行解密壳程序,来直接运行可执行的文件,当然苹果这样做的目的是为了保护我们的程序。 脱壳 脱壳的方式 1.硬脱壳:

    2024年02月15日
    浏览(34)
  • .net C#反编译及脱壳常用工具--小结

    1、Reflector --微软自家工具--推荐        Reflector是 最为流行的.Net反编译工具 。Reflector是由微软员工Lutz Roeder编写的免费程序。Reflector的出现使·NET程序员眼前豁然开朗,因为这个免费工具可以将·NET程序集中的中间语言反编译成C#或者Visual Basic代码。除了能将IL转换为C#或

    2024年02月04日
    浏览(36)
  • 安卓app报毒的原因与解决方法

    解决安卓app被报毒 1.安卓系统本身存在漏洞,比如:权限管理机制不完善; 2.恶意程序在安装过程中,利用手机权限了root等敏感数据。 安卓app报毒的原因及解决方式 安卓系统本身存在漏洞(比如权限问题、安全机制不健全等),被黑客入侵后进行恶意攻击; 2.安卓应用商店

    2024年02月09日
    浏览(30)
  • uni-app--》常用组件的相关介绍

    🏍️作者简介:大家好,我是亦世凡华、渴望知识储备自己的一名在校大学生 🛵个人主页:亦世凡华、 🛺系列专栏:uni-app 🚲座右铭:人生亦可燃烧,亦可腐败,我愿燃烧,耗尽所有光芒。 👀引言         ⚓经过web前端的学习,相信大家对于前端开发有了一定深入的

    2023年04月17日
    浏览(37)
  • APP备案,最新获取安卓签名文件中MD5等信息方法

    直接通过cmd执行命令 输入后回车会提示输入密码库口令,直接输入Keystore密码(输入过程中终端上不会显示,输完回车就行) 由于上述以前这种方式是可以打印出MD5,现在这种方式却没把MD5值打印出来,处理办法如下 直接在as中的Terminal工具在命令行中输入gradle命令: 1.导出

    2024年01月21日
    浏览(42)
  • uni-app小程序:文件下载打开文件方法苹果安卓都适用

    encodeURI函数将URI中的 特殊字符转换为它们的UTF-8编码表示形式 ,以确保它们在传输和处理过程中不会被误解或错误解析。这样可以避免因特殊字符导致的错误或安全问题。 源码: 运行效果: 点击文件1就可以下载打开文件预览了

    2024年01月21日
    浏览(50)
  • UNIAPP中IOS和安卓应用热更新和整包更新app的方法

    公司有一个项目《配送APP》是用uniapp开发的,用于公司几百号骑士员工使用,功能已经很完备,具有分配配送任务,接单,取餐,完成,打卡等功能,用得一直很好,但唯一一个缺点是,当APP功能上有升级时需要通知全体骑手手动把旧版本卸载了,再手工下载新版本安装,更

    2023年04月08日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包