android黑科技系列——获取加固后应用App的所有方法信息

一、前言

在逆向应用的时候,我们有时候希望能够快速定位到应用的关键方法,在之前我已经详细介绍了一个自己研发的代码动态注入工具icodetools,来进行动态注入日志信息到应用中,不了解的同学可以查看这里:icodetools动态注入代码解析,看完之后都会发现这个工具对于现在加固的应用是没有办法的,所以我们如何能够得到加固的应用的所有方法信息呢?再不用复杂的脱壳步骤也可以轻松的获取对应的方法信息。这个就是本文需要介绍的内容。

二、获取加固应用方法

在之前了解过加固应用原理的同学或者是弄过脱壳的同学都知道,加固其实就是对源apk进行加密,然后进行解密加载运行,所以在这个过程中如果我们想要得到应用的所有方法信息,必须是在解密加载运行之后进行操作了。这个我们就需要借助系统的一个重要类DexFile,下面可以查看他的源码:

看到这三个方法,而这三个方法是一个应用中类加载运行的最终点,不管你怎么加固,最终都会需要解密,加载dex,加载类然后运行。所以这三个地方是应用运行的必经之地。看到三个方法的参数信息,可以知道这个类的名称和类加载器,那么我们就可以利用这两个信息通过反射获取这个类的所有方法信息,这里依然需要借助神器Xposed来进行hook操作,hook的对象就是系统的dalvik.system.DexFile类的三个方法:

注意:为了防止多dex进行hook发生类找不到的错误,这里做一次attach操作!这里为了演示加固应用,就选择了之前我写过的一个下载今日头条视频的小工具,当时没有开源,并且进行了加固,选择的是梆梆加固。也有人找我要源代码。那么通过本文案例分析之后,就不需要源码了,你可以窥探这个小工具的所有方法信息了。这个工具的下载地址:https://pan.baidu.com/s/1eR56t94,使用教程在应用中也有。

下面继续来看看上面hook之后的处理类方法:

在这个方法中,首先我们通过类名和加载器信息,得到这个类所有的方法信息,然后开始构造这个方法的签名信息:

这个信息包括:方法的修饰符,返回类型,方法名,参数类型,大致最终的样式为:

public final native java.lang.String xxx(java.lang.String, int)

这样的信息就能够把一个方法的所有信息体现出来,后续如果我们想在外部利用反射调用这个方法来窥探信息就好办了,得到这些方法的签名信息之后,然后就开始进行每个方法的hook操作了:

在利用Xposed进行hook一个方法的时候,需要知道类名,类加载器,方法名,方法参数类型。正好这些信息在上面都可以知道,而这里之所以要进行hook是为了能够判断这个方法是否被调用了,方法在被调用的时候的参数值是什么。因为上面获取是这个类所有的方法,但是不代表这些方法就是被调用了。只有在次进行hook才可以判断当前方法被调用了。而这里有一个问题就是如果一个应用过于庞大,方法较多。在Xposed进行hook那么多方法就会出现OOM这样的错误。所以本文为了演示就没有做优化,我们可以先获取类的所有方法,然后分批进行hook操作即可。

三、运行效果

下面我们运行这个Xposed模块,然后重启设备运行即可,最后在运行上面已经安装加固的今日头条下载器工具,运行看效果日志:

看到了,我们把这个工具的所有方法都打印出来了,然后再来看看他的调用方法:

从这些信息可以看到,这些方法被实际调用了,再来看看那些方法被调用时的参数值:

看到了,方法调用的参数值我们也可以把它打印出来。

四、如何处理获取到的方法

到这里我们达到了我们的目的,可以dump出一个加固应用的所有方法,以及被实际调用方法,同时还可以把参数值打印处理,本文用的是梆梆加固的案例,其实其他家的加固都是可以的。感兴趣的同学可以尝试一下。下面继续来看,上面获取到了应用的所有方法信息,有的同学可以会想这么干,用反射调用某个可疑方法,看看方法的返回值是啥?所谓可以,可能需要通过经验,结合方法的参数信息类型得知这个方法的可疑程度,反射调用很简单:

可以自己随便写一个应用然后得到根据包名得到其对应的Context变量,然后得到其类加载器,开始加载这个可以方法,不过可惜的是,这个运行应该是报错的:

提示找不到这个类,原因想一下就通了:因为现在的应用是加固的,加固最终解密dex运行肯定用的是自己的类加载器,而上面的这种方式获取到的Context只是外层壳的类加载器也就是应用默认的PathClassLoader加载器,所以理论上肯定是找不到这个类的,所以如果想不报错,就需要找到这个类加载器。但是这个因为没有源码所以很难找到。所以通过这个简单的代码想告诉一些同学,这种想法是好的,但是其实是错误的。

取而代之的是我们可以利用Xposed来进行hook这个方法,因为Xposed中我们可以解决类加载器的问题:

先hook系统的Application类的attach方法,然后在获取他的Context值,得到类加载器,来加载指定类,如果加载成功了,所以找到了对应的类加载器,那么就可以进行后续的hook操作了。这种方法和思想是对的。

五、解答疑惑

有的同学又好奇了,上面我们在进行获取类的所有方法信息的同时不是已经进行hook方法了,还得到方法运行时的参数值了,的确那里是做了,但是我也说了,Xposed一次性hook太多方法是会报错的,因为本文案例的应用方法数不是很多,所以看起来很正常,如果进行hook大的应用的时候会出现问题的。所以为了解决这样的问题,我们可以先获取应用的所有方法,此时可以不进行hook操作,然后有了类的所有方法信息之后,在进行方法分析,然后对可以方法单独进行hook操作来进行验证即可。

有的同学又有疑问了?这个对于大型的app来说感觉没什么用?的确,比如像WX这样的应用,如果用作本文案例,可以看到日志刷屏了,没有一会就出现ANR了,这个问题在之前说到用icodetools工具进行操作的时候也出现过。当时的解决方案是通过开关进行控制,这里其实也可以用开关进行控制的。但是这里想说的是,现在加固的应用并不是大型应用,原因很简单,因为加固是有崩溃率的,现在没有任何一个加固平台可以保证零崩溃率的,因为加固现在都涉及到了native层,而Android机型复杂,兼容性肯定不好。所以对于那些用户量非常庞大的应用是不会进行加固的,比如BAT的主流产品都没有进行加固。但是有的应用必须进行加固,那就是涉及到金融方面的,对于他们来说安全比崩溃率更重要。也有的大部分收费和内购的游戏也是选择加固的。而这种应用现在大部分属于中型应用,本文还是可以进行操作的。

项目下载地址:https://github.com/fourbrother/XposedHookAllMethod

六、总结

本文主要讲解了如何hook系统类信息,然后获取到加固应用之后的所有方法信息,同时还可以获取到哪些方法被执行了,以及执行的过程中参数信息,而这些信息是分析一个应用最为重要的信息。当然我们也可以通过分析方法的参数信息来判断这个方法的可以程度,然后在用Xposed进一步进行hook来验证结果都是可以的。

时间: 2024-10-11 03:56:02

android黑科技系列——获取加固后应用App的所有方法信息的相关文章

Android逆向之旅---获取加固后应用App的所有方法信息

一.前言 在逆向应用的时候,我们有时候希望能够快速定位到应用的关键方法,在之前我已经详细介绍了一个自己研发的代码动态注入工具icodetools,来进行动态注入日志信息到应用中,不了解的同学可以查看这里:icodetools动态注入代码解析,看完之后都会发现这个工具对于现在加固的应用是没有办法的,所以我们如何能够得到加固的应用的所有方法信息呢?再不用复杂的脱壳步骤也可以轻松的获取对应的方法信息.这个就是本文需要介绍的内容. 二.获取加固应用方法 在之前了解过加固应用原理的同学或者是弄过脱壳的同学

android黑科技系列——自动注入代码工具icodetools

一.前言 在前面已经介绍完了 自动给apk中注入日志代码工具icodetools原理了,在那里我们曾经说过其实离真正的可使用价值有点距离,本篇就对这个工具进行一些优化,让其真正意义上开始能工作量产.当时在前面一篇文章中说到遗留的三个主要问题: 第一个问题:对每个类中都添加一个静态打印方法堆栈信息的方法,这样会导致有些应用的dex过大,方法数超了问题 第二个问题:在从输入一个apk到给每个类中的每个方法添加日志代码然后在签名输出最终的apk,这个过程其实很多步,但是我们之前都是手动的去进行操作,非

android黑科技系列——实现静态的默认安装和卸载应用

一.访问隐藏的API方式进行静态的默认安装和卸载 1.系统安装程序 android自带了一个安装程序—/system/app/PackageInstaller.apk.大多数情况下,我们手机上安装应用都是通过这个apk来安装 的.代码使用也非常简单: /* 安装apk */ public static void installApk(Context context, String fileName) { Intent intent = new Intent(); intent.setAction

android黑科技系列——Wireshark和Fiddler分析Android中的TLS协议包数据(附带案例样本)

一.前言 在之前一篇文章已经介绍了一款网络访问软件的破解教程,当时采用的突破口是应用程序本身的一个漏洞,就是没有关闭日志信息,我们通过抓取日志获取到关键信息来找到突破口进行破解的.那篇文章也说到了,如果这个app应用没有日志信息,我们该怎么办呢?那么这时候就需要采用抓包来寻找突破口了. 二.安装Fiddler证书 我们通过Fiddler连接手机进行抓包查看,应用访问数据信息都是用的HTTPS协议,也就是加密的数据,我们可能无法查看,比较麻烦,本文就来讲解如何查看这些加密数据了. 首先我们知道Fi

android黑科技系列——Xposed框架实现拦截系统方法详解

一.前言 关于Xposed框架相信大家应该不陌生了,他是Android中Hook技术的一个著名的框架,还有一个框架是CydiaSubstrate,但是这个框架是收费的,而且个人觉得不怎么好用,而Xposed框架是免费的而且还是开源的,网上也有很多文章介绍了Xposed框架的原理实现,不了解的同学可以自行查阅即可,本文主要介绍如何通过这个框架来进行系统方法的拦截功能,比如我们开发过程中,对于一些测试环境很难模拟,特别是测试同学有时候像随机改变设备的imei,mcc等信息用来模拟不同测试场景,这时候

android黑科技系列——静态分析技术来破解Apk

一.前言 从这篇文章开始我们开始我们的破解之路,之前的几篇文章中我们是如何讲解怎么加固我们的Apk,防止被别人破解,那么现在我们要开始破解我们的Apk,针对于之前的加密方式采用相对应的破解技术,Android中的破解其实大体上可以分为静态分析和动态分析,对于这两种方式又可以细分为Java层(smail和dex)和native层(so).所以我们今天主要来讲解如何通过静态分析来破解我们的apk,这篇文章我们会通过破解Java层和native层的例子来讲解. 二.准备工作 在开始今天的文章之前,我们

android黑科技系列——破解游戏之修改金币数

我们在玩游戏的时候总是会遇到一些东东需要进行购买的,但是我们可能又舍不得花钱,那么我们该怎么办呢?那就是用游戏外挂吧!我们这里说的是Android中的游戏,在网上搜索一下移动端游戏外挂,可能会找到一款叫做:八门神器.apk 其实这个软件我下载安装了,但是没有什么效果,不知道是不是我哪里设置的有问题,但是我们这个应用也是有很多限制的,他必须要让手机进行root(说实话,现在获取root是很方便的一件事,如果你想玩游戏,并且想得到更多的东西,手机root是必须的,但是这个可能也可能会失去很多). 我

android黑科技系列——爆破一款应用的签名验证问题

一.前言 在之前的文章中说过Android中的安全和破解是相辅相成的,为了防止被破解,很多应用做了一些防护策略,但是防护策略也是分等级,一般简单的策略就是混淆代码和签名校验,而对于签名校验很多应用都是会做的,一般现在就两种方式: 第一种:签名校验不通过直接退出程序,也就是你会发现回编译二次打包运行失败的现象 第二种:签名校验不通过不触发程序指定逻辑,导致没有错误信息,也进不了应用的现象 关于Android中应用防护策略的文章可以看这里:Android中应用的攻防之战 今天我们就来看一下签名校验的

android黑科技系列——手机端破解神器MT的内购VIP功能破解教程

一.前言 在破解app的时候,我们现在几乎都是在PC端进行操作,但是之前bin神的MT管理器,可以在手机端直接破解,不过也有很大的局限性,但是对于一些简单的app破解没问题的.这个工具其实原理也很简单,就是解析apk中的dex,arsc等文件,然后支持修改其中的类方法信息和资源信息,然后在二次打包签名即可.其实把这部分功能移到了移动端做了,不过值得佩服的是这个app从整体效果来说,非常的赞,非常佩服这个工具的作者. 二.逆向分析 但是今天我们的主题是破解这个工具内部的收费功能,而用这个工具进行破