怎样制作一个防止重打包的APK【反脱壳反HOOK】

VSole2022-01-15 16:22:14

本文讨论的重打包,是指“破解版”,运行环境受(普通用户的手机)限制,毕竟你不能要求用户魔改刷机root才能使用“破解版”。另:没有永远的安全,全看cracker的水平有多高。

APK需要被重打包,势必是为了修改其中的代码,可能是dex,可能是so,可能是dll(unity3d),也可能是某个脚本等等,重打包后签名(未泄露)就会被改变。

不管怎样,可以确定的是签名和其中的某些文件会被修改。那么防止重打包的主要目标就是检测这些修改。

在保护之前,先来说说cracker可能会干的几件事:

1、爆破。直接修改代码,常见于纯java编写的或者简单的so校验。

2、脱壳。如果方法1不行,那可能是APK被加固了,所以可以考虑脱壳后再修改。局限性很大,困为很多壳脱出来没法直接打包运行。但是脱壳可以了解程序逻辑,为方法3做准备。

3、内存补丁。如果方法2不行,那就不脱壳了,根据程序逻辑,可以直接加载自己编写的so打内存补丁跳过检测。

4、hook。这可能是最近几年用得最多的方案了。上面所有方法试了不行(或者懒得试了),就要走上hook这条路了。

针对以上,可以做的事:

1、针对爆破。这没啥好说的,把校验写进so,复杂一点,花里胡哨一点,再弄个ollvm,或者加个壳。

2、针对脱壳。上文就说了,很多壳脱出来直接打包是不行的,也有些壳是脱不了的,比如java转c(保护java代码),vmp(保护so),加壳之后原指令彻底消失不见,也就不存在脱壳的说法了。

3、针对内存补丁。这个方法其实很冷门,因为内存补丁对逆向要求较高,有能力读懂ollvm和加壳后的so的逻辑的,基本很难阻止他做事了。

4、针对hook:作为最热门的方法,有必要单独拎出来多说几句。

a)检测hook。方法太多了,各种hook都有或多或少的特征,要注意的是,会有诸如《通过hook绕过hook检测》之类的文章……今天你hook我,明天我检测你,后天你跳过我的检测,大后天我检测你跳过我的检测……对抗永无止境。

b)不被hook。怎样不被hook?自己写函数。用java代码来举个例子,有一个bytes数据要计算它的md5,最简单的MessageDigest.getInstance("MD5").digest就完事了,如果调用了公共库,那么就容易被hook住,然后就bytes数据暴露了,计算结果也被修改了。所以多用原生类型自己写函数吧。

看了这么多文字,仿佛啥也没明白,没关系,下面说一下我做的事:

1、使用svc指令读取文件。能读取到真实的APK,就能检测APK的完整性。能读取到真实的maps就能检测到各种hook框架的特征。能读取到真实的/proc/下的各种文件,就能检测各种调试器,各种cracker留下的痕迹。

2、保护svc指令。svc指令只能通过inlinehook修改内存实现(内核hook不在本文讨论范围内,本文开头就说明了)。如果cracker在搜索内存时,没有搜索到svc指令,那么我们执行代码时,就不会被hook住。

下面才是真正做的事:

1、对某些关键的逻辑(如果逻辑是用java写的,可以先套java转C壳)加一个壳。

2、这个壳的静态代码中不存在任何svc特征,一旦加载so,先进行完整性校验,当校验需要读取APK时,释放svc代码执行读取操作,这样在内存搜索不到svc,也就无法被hook。如果要校验maps中是否有hook框架也在这里进行。

3、当校验通过,再执行真正的程序逻辑,并且此时原程序逻辑的so是碎片化的(就像java的指令抽取),此时从内存dump出来的so也是不完整的,所以无法脱壳出原so。

以上,实现了防爆破(加壳无法修改),防脱壳(so分解了,无法脱壳),防hook(svc即插即用,无法hook,除非改内核)。然后,就只有内存补丁一条路了,再想想魔改的ollvm规则,算了。

apkvmp脱壳
本作品采用《CC 协议》,转载必须注明作者和本文链接
本文讨论的重打包,是指“破解版”,运行环境受(普通用户的手机)限制,毕竟你不能要求用户魔改刷机root才能使用“破解版”。另:没有永远的安全,全看cracker的水平有多高。
对于当前的APP来说,基本都采用了加壳这一方式来对APP进行加固,这也是在算法分析上需要过的第一个点。在挖洞过程中,主要还是针对业务层逻辑进行分析处理,寻找漏洞点。因此本篇利用某园这一APP,侧重点在于对脱壳原理的介绍和一些脱壳工具的分享和使用。
一前言为了帮助更加方便的进行漏洞挖掘工作,前面我们通过了几篇文章详解的给大家介绍了动态调试技术、过反调试技术、Hook技术、过反Hook技术、抓包技术等,掌握了这些可以很方便的开展App漏洞挖掘工作,而最后我们还需要掌握一定的脱壳技巧,进行进一步助力我们漏洞挖掘的效率。本文第二节主要讲述Android启动流程和加壳原理。本文第三节主要介绍整体加壳的实现。本文第四节主要讲当下脱壳点的概念。
Android应用攻与防
2021-11-14 06:53:17
安卓系统是由谷歌推出的一款移动终端,由于开源,所以国内出现了许多使用相关系统的厂商,比如小米,oppo,vivo,魅族等。 在国内,这些系统的用户群体甚多。我们日常使用的社交、游戏、工作等应用,很多都装在安卓系统上。 由于安卓系统的开源性,很多安全问题也随之而来。那么,在安卓系统上运行的应用又是如何保证自身安全的呢? 本文通过实战挖洞,展现一下Android应用的防守与攻击方式。
写一个android中so文件反混淆的系列文章,目前这是第三篇。根据其他人的分析可知,libDexHelper.so是指令抽取的实现,libdexjni.so是VMP的实现。在android so文件攻防实战-百度加固免费版libbaiduprotect.so反混淆中我们是交叉引用拿到加密后的字符串和它对应的解密函数的表然后frida主动调用得到的解密后的字符串,但是在这里这个方法就不太好用了。
CPU性能严重溢出,可能就是这些厂商的想法吧,反正不用白不用,这些算力也不是自己的。?有图有真相 Unidbg的杀手锏 CPU指令级别Traceps:Unidbg跟010Editor更配哦!今天就来带大家以自身使用的经验去了解一下Unidbg!?当然Unidbg能做的远远不止这些,本文并不是一篇科普文,所以本文假定读者都是有一定基础的同学。
目标:请编写frida脚本,完成对该app通信的抓包
仅限安卓平台,测试安卓7、8、9、10、11、12、13 可用 ;无视所有证书校验或绑定,不用考虑任何证书的事情;通杀TCP/IP四层模型中的应用层中的全部协议;通杀协议包括:Http,WebSocket,Ftp,Xmpp,Imap,Smtp,Protobuf等等、以及它们的SSL版本;通杀所有应用层框架,包括HttpUrlConnection、Okhttp1/3/4、Retrofit/Volle
0x01 工具介绍APKLeaks 是一个开源的 apk 文件敏感信息扫描工具,通过扫描 APK 文件来获取 URI、端点和 secret 信息。0x02 安装与使用1、安装方式pip3 install apkleaks
apk分析入门从0到0.5
2022-01-05 14:55:43
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测及文章作者不为此承担任何责任。
VSole
网络安全专家