解决APK伪加密技巧分享

admin 2024年6月23日00:34:17评论6 views字数 2293阅读7分38秒阅读模式
商业APP为了防止反编译、被篡改,往往会采用第三方的APP加固方案,通过对源代码的混淆、加固、加壳等技术手段,隐藏源APP的逻辑结构,大大提高了反编译的难度,达到保障APP的安全与稳定运行的目的。而网赌、电诈、色情等涉网犯罪APP,基于成本考虑,其幕后的开发者往往不会采用第三方加固方案,但有可能会采用一些无成本的对抗机制,基于APK文件格式的反编译对抗就是其中的一种。
A

PK简介

APK是Android application package的缩写,在PC上它被看成压缩格式的文件,在手机上才作为一个可执行格式文件,一个apk安装包主要是由编译代码,资源文件,签名文件,清单(manifest)文件、索引文件等等几部分文件组成。作为类似ZIP格式文件,我们可以使用解压软件来查看其内容,如下:

技术分享|解决APK伪加密技巧分享

解压软件打开apk

技术分享|解决APK伪加密技巧分享

apk组成文件功能简介


由于安卓平台的开源性,目前对apk的研究也火来了,伴随对apk的安全性问题也随之暴露,试想一下?开发者辛苦开发的软件肯定不希望被人随意的破解,那么对软件的保护必须重视起来。
APK软件保护技术
软件保护技术是伴随着软件破解技术一起发展起来的,目前常用的软件保护技术有:

技术分享|解决APK伪加密技巧分享

常用软件保护技术

技术手段虽然各种各样,但是最终的目前都是保护我们的apk不被轻易的破解反编译。

APK文件格式的反编译对抗
前文提到,基于成本考虑,对于诈骗apk其幕后的开发者往往不会采用第三方加固方案,基本上采用一些无成本的对抗机制,基于APK文件格式的反编译对抗就是其中的一种。


  • 基于ZIP文件格式的反编译对抗

为了不影响APK的正常安装和运行,幕后开发者不可能修改APK文件(ZIP包)的任意内容,而只能修改某些不会被Android包安装服务检测的特征数据,包括通用标记字段的加密标记位、磁盘编号、目录总数等等,达到的效果PC上无法解压,没办法轻易反编译,而手机上就能正常的安装与运行。如下所示:

技术分享|解决APK伪加密技巧分享

技术分享|解决APK伪加密技巧分享

解压软件解压失败


在举例之前我们需要探讨一下,zip文件的文件结构,一个标准的zip的文件的二进制数据由三部分组成:数据区、目录区、目录结束标志区组成,具体结构如下所示(使用010editorzip模板打开)
技术分享|解决APK伪加密技巧分享
zip文件二进制结构
各二进制数据组成含义如下:

技术分享|解决APK伪加密技巧分享
zip文件二进制结构简介
这里将数据区的通用标记位修改为奇数,即可达到伪加密的效果(这种办法慢慢被大众所熟知,效果已经不理想了)。

  • 基于AndroidManifest文件格式的反编译对抗

基于AndroidManifest文件格式的反编译对抗的原理和基于ZIP文件格式的反编译对抗原理是一样的,对AndroidManifest某些特征数据的修改可以欺骗反编译工具从而导致反编译失败,但在安卓系统上Android的包安装服务对该类欺骗免疫而不会影响APP的正常安装,主要有下面两种手段。

1、修改AndroidManifest文件的幻数(Magic Number)即文件头为0x00080003

2、修改字符串个数

而修改了Androidmanifest文件使用反编译工具会出现乱码的情况:

技术分享|解决APK伪加密技巧分享

Androidmanifest打开异常情况

AndroidManifest文件(AndroidManifest.xml)APK中的关键文件,记录了APP的包名、版本、权限信息、四大组件信息等信息。Android包安装服务通过解析该文件才能正常安装APKAndroidManifest文件有文本和二进制两种形式。APP开发阶段,开发者通过文本形式的AndroidManifest文件明文配置APP的各项信息;APP打包后,各项信息则被编译工具编译成二进制数据存储于AndroidManifest二进制文件中。

因此,未经反编译直接解压APK后,打开AndroidManifest文件,只能看到乱码. AndroidManifest文件结构较复杂,由文件头组块(Magic NumberFile Size)、字符串组块(String Chunk)、资源ID组块(Resourceid Chunk)和xml内容组块(xmlContent Chunk)组成。使用010editorAndroidmanifest模板打开如下:

技术分享|解决APK伪加密技巧分享

Androidmanifest文件结构

技术分享|解决APK伪加密技巧分享

Androidmanifes文件二进制简介
具体每个细节的分析可以参考网上公开的技术文章:https://bbs.kanxue.com/thread-194206.htm
如何破解伪加密
1、手工:按照加密原理逆向还原,难点:需要充分的了解apk的文件结构,上手难度大。
2、使用工具:
  • NP管理器:使用反伪加密,在使用银河进行分析。
技术分享|解决APK伪加密技巧分享

np管理器反解密

  • 第三方分析系统:不少平台已经支持伪加密apk的分析了

摸瓜——费APK反编译分析工具 (https://mogua.co/

南明离火——移动安全分析平台 (zhihuaspace.cn)

谷歌——( VirusTotalHome

  • aapt命令、adb命令查看androidmanifest文件信息

aapt(适用于静态分析)

说明:查看apk中的信息

用法:aapt dump xmltree 【apk名字】【需要查看的资源文件xml】

例子:aapt dump xmltree demo.apk AndroidManifest.xml

adb(适用于动态分析)

说明:可以查看指定包名应用的详细信息

用法:adb shell dumpsys package 【包名】

例子:adb shell dumpsys package com.tencent.mm

原文始发于微信公众号(网络安全与取证研究):技术分享|解决APK伪加密技巧分享

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年6月23日00:34:17
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   解决APK伪加密技巧分享https://cn-sec.com/archives/2873723.html

发表评论

匿名网友 填写信息