Dex加固与反编译

article/2025/10/1 12:20:58

编译与反编译

编译

将java代码转换为Dalvik字节码
将res资源文件、AndroidManifest.xml等配置文件编译为二进制文件

反编译

将DEX文件转换为jar包或者Smali文件
将二进制资源文件还原为资源源码文件

编译与反编译是相对的过程,转换过程分别由编译器和反编译器实现。

反编译工具

  • ApkTool
  • dex2jar
  • jd-gui

ApkTool

  • 反编译Dex为smali文件
  • 反编译资源文件
  • 支持重打包

ApkTool命令使用:
执行java -jar apktool.jar d demo.apk 命令,会生成以下文件和目录。
在这里插入图片描述

dex2jar

dex2jar命令使用:
执行d2j-dex2jar.bat demo.apk 命令,生成jar包。
在这里插入图片描述

jd-gui

jd-gui配合dex2jar使用,用来查看dex2jar生成的jar包
在这里插入图片描述

Android应用反编译威胁

逆向分析:漏洞挖掘、协议分析
二次打包:盗版、破解。

保护方案

代码混淆:Java代码、C/C++代码、JS/HTML代码
应用加固:Dex文件、SO文件、资源文件。

Dex加固方案原理

Dex加固方案演进
动态加载–>dex内存加载–>dex指令抽取–>虚拟机加固–>java2c>

  • 动态加载:从服务器动态加载业务的DEX
  • DEX内存加载:模拟App启动的时候,将我们的壳、将业务DEX文件加载到内存中,然后通过一些处理方式,让DEX文件把Application启动起来,让应用认为和普通的启动方式是一样的 (缺点:DEX会暴露在内存中)
  • DEX指令抽取:把DEX文件中的一些方法的指令抽取出来,然后在内存中开辟一段区域,然后将我们内存加载的DEX解析到相应的方法指令偏移的地方,方法指令的偏移指向我们开辟的一段内存里面。(缺点:不彻底)
  • 虚拟机加固:我们通过自己实现一套虚拟机,将DEX方法的指令抽取出来,在运行的时候,我们的虚拟机里面就运行被抽取的一段指令。这样攻击者想要破解,首先必须要找到我们虚拟机的入口,将虚拟机整个逻辑还原出来,这样攻击成本相对比较高 (缺点:本身Android应用就运行在虚拟机里面,不论是Dalvik还是ART,增加个虚拟机,就会增加一层对应用运行时代码的解释执行操作,那么解释执行的效率会大大下降)
  • JAVA2C:提升应用运行时的效率,我们的方法会转换为一层在Native(JNI)上实现的逻辑,最终通过JNI编译成so,这样的话在本地执行,而不是在虚拟机执行,执行效率会大大提升。

整个演进方向是从Java到C/C++,本地方法的安全性大于Java。 粒度也由方法缩小到指令。
壳和被加固的dex耦合性增加,增大脱壳难度。

Dex内存加载实现原理

Android加壳框架原理为Proxy/Delegate Application,即使用自定义的代理Application类作为程序入口(修改AndroidMani.xml),在代理Application中完成壳的解密操作,最后启动原来的Application。

ProxyApplication:框架会提供一个ProxyApplication的抽象基类(abstract class),使用者需要继承这个类,并重载其initProxyApplication()方法,在其中改编surrounding,入替换ClassLoader等。

DelegateApplication:即应用原有的Application,应用从getApplication()等方法中取的的都是DelegateApplication。

修改入口

在这里插入图片描述

代理Application.

在这里插入图片描述
在ProxyApplication中实现如下内容

  • 内存加载DEX:加载原Application
  • ClassLoader设置
  • Application引用替换

壳启动流程

在这里插入图片描述

  • 内存加载DEX文件:通过Dalvik、ART虚拟机JNI接口内存加载被加密隐藏的DEX文件
  • 设置ClassLoader:将DEX文件内存加载产生的mCookie放入ClassLoader中(MutiDex)
  • 加载原Application:基于替换后的ClassLoader查找原始Application类并生成实例
  • Application还原:将API层的所有Application引用替换为原始Application
    在这里插入图片描述

http://chatgpt.dhexx.cn/article/6KyajvWA.shtml

相关文章

编译与反编译

编译:高级语言转换成计算机认识的低级语言 编译的主要的目的是将便于人编写、阅读、维护的高级语言所写作的源代码程序,翻译为计算机能解读、运行的低级语言的程序,也就是可执行文件。 反编译:Java的反编译,一般是将…

反编译网站

最近帮一个公司反编译了一个他们在用的网站,是一个印照片,然后群(384389229)里面的伙伴们(专指:魂牵悲梦),叫我写个反编译的教程出来,由于前面时间很忙,一拖再拖到了现在终于有空就写…

编译/反编译

1.Android APK 1.软件 1.apktool 1.作用:反编译apk或重新打包apk 2.dex2jar 1.作用:将Android的可执行文件.dex转换为.jar 3.jd-gui 1.作用:方便阅读jar文件的代码工具 2.步骤 1.通过apktool将apk软件反编译2.使用dex2jar将classes.dex文件转…

反编译(Decompilers)

工具下载 调试工具反汇编工具反编译工具PE相关工具编译工具编辑工具.NET工具脱壳工具加壳工具补丁工具监视软件代码计算 密码学工具其它 反编译(Decompilers) VFP程序 UnFoxAll 3.0专业增强版  优点:界面和功能较实用缺点:支持到…

反编译器

转自:https://blog.csdn.net/kongwei521/article/details/54927689 在项目开发过程中,估计也有人和我遇到过同样的经历:运行环境出现了重大Bug亟需解决、或者由于电脑挂了、旧代码覆盖新代码,而在这种情况下,我们不能…

如何构建反汇编代码?

大型的非结构化反汇编指令堆几乎不可能被分析,所以大多数反汇编工具都会以某种简单的分析方法来构造反汇编代码。在本节中,我们将会讨论通过反汇编工具恢复的通用代码和数据结构,以及这些通用代码和数据结构会如何帮助我们进行二进制分析。 …

反编译

反编译 我们都知道,Android程序打完包之后得到的是一个APK文件,这个文件是可以直接安装到任何Android手机上的,我们反编译其实也就是对这个APK文件进行反编译。Android的反编译主要又分为两个部分,一个是对代码的反编译&#xff…

解决openai.error.APIConnectionError: Error communicating with OpenAI

一、问题描述 可以fanqiang,但是使用openai的接口还是报错如下的openai.error.APIConnectionError: Error communicating with OpenAI问题: File "D:\Anaconda3\envs\gms\lib\site-packages\openai\api_resources\abstract\engine_api_resource.py…

【Nginx应用】1.理解正、反向代理和负载均衡

在讲解Nginx之前,我们首先要理解什么是正向代理和反向代理。因为Nginx作为负载均衡的作用时,扮演的就是一个代理的角色,理解了正反向代理,对我们接下来学习Nginx会很有帮助1.正向代理 在我们的日常生活中其实就已经使用到了正向代…

软件安全实验——局域网DDoS攻击

文章目录 实验任务实验过程DoS攻击与DDoS攻击ping命令参数实施DDoS攻击 实验任务 对局域网内IP地址为10.12.186.186的主机(已关闭防火墙)发起基于网络流量的DDoS攻击。 实验过程 DoS攻击与DDoS攻击 DoS是Denial of Service的简称,即拒绝服务…

kali局域网攻击(一)

前言 很久以前的博客才发现,发布一下。 这个系列以后有时间再做。 arp攻击 arp路由链表,感兴趣的自行百度,我的博客我的笔记. 路由指向 介绍两个东西. echo 0 >/proc/sys/net/ipv4/ip_forward #让经过的数据不留通 echo 1 >/proc/sys/net/ipv4/ip_forward…

嗅探欺骗之Ettercap局域网攻击

嗅探欺骗 ——Ettercap局域网攻击 最近在练习使用ettercap工具,下面来介绍一下用ettercap实施嗅探以及欺骗的实验过程。 嗅探: 首先,我们把虚拟机作为攻击者,物理机作为受害者。①在虚拟机中打开一个终端,输入命令ett…

当代局域网攻击软件到底带来了什么

20世纪00年代晚期21世纪初,计算机网络技术及其安全技术得到了迅速发展,出现了一系列新的局域网攻击工具,如Metasploit,它是一款强大的局域网渗透测试开发框架;NetWox,它可以扫描网络中的漏洞;Wi…

局域网arp攻击_ARP局域网攻防浅析

ARP官方释意:地址解析协议,即ARP(Address Resolution Protocol),是根据获取的一个。发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址(MAC);收到返回…

局域网断网攻击 (arp攻击)

ARP攻击能够实现的技术前提有两个,一是作为攻击者的计算机需要和被攻击者的计算机在一个局域网中,二是作为攻击者的计算机需要知道被攻击者计算机的局域网IP。 环境:安装在VMware Workstation中的Kali Linux,我们需要在VMware的设…

局域网arp攻击_如何排查ARP网络攻击

ARP攻击危害:众所周知,ARP攻击变得日益猖狂,局域网内频繁性区域或整体掉线、IP地址冲突;网速时快时慢。极其不稳定,严重影响了网络的正常通讯。 那么如何排查ARP网络攻击呢? 首先诊断是否为ARP病毒攻击 1、当发现上网明显变慢,或者突然掉线时,我们可以用arp -a命令来检…

从交换机安全配置,看常见局域网攻击

前言 构建零信任网络,自然离不开网络准入(NAC),这就涉及到交换机的一些安全测试,于是有了此文《从交换机安全配置看常见局域网攻击》。 交换机安全配置 如本文标题所说从交换机安全配置看常见的局域网攻击,那么下面提到的各种攻…

Kali linux 局域网arp断网攻击

Kali linux 局域网arp断网攻击 什么是arp断网攻击: ARP断网攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目&…

局域网攻击——基于kali的arp欺骗

大致原理: 大家都知道,在一个局域网中,主机是通过路由器向公网进行发送信息,而路由器则是通过主机的MAC地址来给主机传递信息。 每一个主机都有一个arp缓存表来记录ip地址与对应mac地址, 如果我们的攻击机伪造成别的MAC地址,即可欺骗主机或者局域网网关的arp缓存表,他…

局域网攻击之ARP网关欺骗

目录 1、工具2、原理3、实验4、总结 1、工具 IPOP(仅能指定某一台主机攻击)、科来 2、原理 恶意用户仿冒网关发出ARP报文,导致网络中其他用户学习到错误的网关ARP表项。 3、实验 第一步:选择网卡,查看网关IP 第…