安卓程序防止反编译的方式

1. 加壳

apk的加壳:在程序外面再包裹一层代码,保护里面的代码不被非法修改或者反编译。

被保护的程序用加密算法加密,解密逻辑写在作为壳的APK中,实际执行的是被保护的程序。

大多是通过DexClassLoader或者隐藏的函数openDexFile将源dex(即被保护的app)加载进来,然后动态替换Application来启动源程序。跟Windows上传统的PE文件加壳有一定区别。

要破解传统的壳,需要跟踪控制流找到OEP,然后把源程序从内存中dump下来,重建输入表,最困难的就是要跟着外壳的控制流走,安全工程师为了加大破解难度,使用了很多技术来让破解者走得更艰难。安全工程师与破解者对抗的关键点就在寻找OEP的困难性上。
在Android平台上,正因为新兴的dex加壳技术不成熟,导致有些另类的脱壳方法可以绕过分析算法,直接将源程序dump下来。举个例子,安卓在4.0版本以后提供openDexFile这个函数来从内存中加载dex,所需要提供的参数是源dex在内存中的地址,所以只要对这个函数下断,然后从寄存器里找到内存地址,就能将解密后的源dex从内存中dump下来,直接对其反编译就能获得源代码了。更进一步,关于openDexFile这个函数,其实它与libdvm.so这个库有密不可分的关系,这个库里提供大量操作dex文件的函数,如果对这个库里的相关函数下断,然后从内存中暴力dump一大块内存区域,经常能直接将内存中的源dex给抓下来。

http://taoyuanxiaoqi.com/2015/01/12/apkshell1/

2.加密APK

APK实际是zip格式的压缩包,在压缩时将是否加密的位置为1。而android的包安装服务(PackageManagerService)在进行apk安装时并不关心这个加密位(暂时我们就这么叫它吧)可以进行正常的安装并且也不会影响apk的运行。但android 4.2.x版本及以后系统会拒绝这种加密apk的安装。

3.运行时修改字节码   

http://my.oschina.net/u/2323218/blog/396203

dalvik虚拟机运行dex文件执行的字节码就存在method_ids区域里面,需要找到在优化后的odex文件中dex的偏移,以及感兴趣的字节码,来进行替换。

由于是在运行时修改的dalvik指令,这是进程的内存映射为只读的,所以需要调用mprotect函数将只读改为读写才能进行指令的修改。

问题:如果采用了禁止写指令区域(防止ROP或栈溢出攻击的措施)的保护措施,还可以成功吗?

时间: 2024-10-06 14:44:57

安卓程序防止反编译的方式的相关文章

反编译Android APK及防止APK程序被反编译

原文出处 反编译Android APK及防止APK程序被反编译 怎么逆向工程对Android Apk 进行反编译 google Android开发是开源的,开发过程中有些时候会遇到一些功能,自己不知道该怎么做,然而别的软件里面已经有了,这个时候可以采用反编译的方式,解开其他的程序,来了解一些它 的做法,同时啊,还可以借鉴别人的软件结构,资源文件:作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用的APK进行反编译查看.此方式主要目的是为了促进开发者学习,借鉴好的代

AutoHotKey程序防止反编译的简单手段

可以使用AutoHotKey自带的工具. AutoHotKey安装完成后(我使用的是1.1.0.0),找到安装所在目录下的文件:\Compiler\Ahk2Exe.exe. 程序界面如下: 简单使用: 1.选择源文件(script file) 2.选择目标文件(.exe file).不选择时,默认在源文件目录下生成同名的exe文件. 3.选择程序图标.不选择时,将是默认的autohotkey图标. [关键]4.输入密码及验证密码(Passphrase/ Verify passphrase).这步

Android程序apk反编译破解方法

简短不割了,我们直接奔主题吧. 把apktool-install-windows-r05-ibot文件里的两个文件剪切到apktool1.5.1目录. 新建一个文件夹把需要破解的apk应用程序放进去. 在此文件夹下打开cmd 输入apktool 显示如下信息方可使用. apktool d 应用程序路径 解压路径 反编译后代码如下. Res是一些图片文件可以修改,程序代码修改在smali 文件里,接下来需要提取classes.dex文件出来,直接用360压缩打开提取出来破解源代码. 接下里打开de

Android应用程序破解(反编译)

一.apktools进行反编译 1.首先安装需要JAVA环境(JDK和JRE) 设置JAVA环境变量 CLASSPATH       %JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar JAVA_HOME     C:\Program Files\Java\jdk1.8.0_20 Path    %JAVA_HOME%\bin;C:\Program Files\Java\jre1.8.0_20\bin 2.下载apktools并解压 (1)下载apk

一个VB程序的反编译

下载地址 在程序中输入大于1.17或小于2.9的数字,点击计算. 反编译源程序,查看算法.

Android如何防止apk程序被反编译

转自:http://blog.csdn.net/vipzjyno1/article/details/21042823 作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来. Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹 proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让

【转】反编译获取任何微信小程序源码(完)

一.前言最近在学习微信小程序开发,半个月学习下来,很想实战一下踩踩坑,于是就仿写了一个阿里妈妈淘宝客小程序的前端实现,过程一言难尽,差不多两周时间过去了,发现小程序的坑远比想象的要多的多!!在实际练手中,完全是黑盒的,看到人家上线的小程序的效果,纯靠推测,部分效果在绞尽脑汁后能做出大致的实现,但是有些细节,费劲全力都没能做出来.很想一窥源码,查看究竟,看看大厂的前端大神们是如何规避了小程序的各种奇葩的坑. 于是就想到获取到小程序地源文件,然后再对其进行反编译还原为源代码,来作为学习参考.我百度了

安卓App安全保护,如何防止app反编译!

先进的移动设备具有各种奇妙的功能,从长远来看可以节省大量的时间和金钱.但这些设备真是太新了,所以他们具有"不可预料的弱点和保护不当的价值." 手机方面,恶意软件大约99%的目标是针对Android的,而Java编程语言里的漏洞被人利用的机会最高.文章出处!www.ijiami.cn 基于可理解的原因,尽管中国已是智能手机生产大国和消费大国,但智能手机的"大脑"即操作系统还全靠"外援",目前主要有谷歌的安卓系统和苹果的IOS系统.两者中,开放的安卓

如何保护java程序不被反编译

Java是一种 跨平台的.解释型语言 Java 源代码编译中间“字节码”存储于class文件中.Class文件是一种字节码形式的中间代码,该字节码中包括了很多源代码的信息,例如变量名.方法名 等.因此,Java中间代码的反编译就变得非常容易.目前市场上有许多免费的.商用的反编译软件,都能够生成高质量的反编译后的源代码.所以,对开发人员 来说,如何保护Java程序就变成了一个非常重要的挑战.下面我们就结合实例讨论 保护Java程序的基本方法然后对代码混淆问题进行深入研究,最后结合一个实际的应用程序