android native hook框架

一、前言

在之前已经介绍过了 Android 中一款hook神器Xposed,那个框架使用非常简单,方法也就那几个,其实最主要的是我们如何找到一个想要hook的应用的那个突破点。需要逆向分析app即可。今天我们再来看另外一个hook神器Cydia Substrate,关于这个神器网上也已经介绍了,应该有的同学已经使用过了,因为最近在破解一个游戏,奈何想hook他的一个so中的一个方法,Xposed几乎没法用,所以得操刀这个框架了,所以就单独抽出来介绍这个框架。他的一个优点就在于Hook底层方法非常方便,对so中的方法hook操作非常便捷。

二、环境搭建

下面就来介绍这个框架如何安装使用,本文会介绍这个框架如何hook Java 层和Native层功能,首先我们来看一下如何安装这个框架,本人操作的环境:

设备系统:小米三+原生CM 4.4系统

框架版本:0.9.4010

是否root:必须root

关于这个环境,可能有的同学操作最大的问题就在于设备和系统,不同设备不同系统,这个框架或许安装会失败,具体问题可能需要你们自己去解决了。

三、Hook Java层功能

搭建好了环境,下面就直接操作了,首先来看看如何Hook Java层功能

第一步:导入jar包

android native hook框架图1

第二步:编写hook入口类

android native hook框架图2

527670726

具体api这里不多介绍了,就那么几个,没必要详细介绍,这里对系统的imei进行hook操作了。网上很多人都对系统颜色值进行了hook,这里也顺带操作一下:

android native hook框架图3

:527670726

第三步:配置xml信息

android native hook框架图4

:527670726

在AndroidManifest.xml中需要配置两个地方,一个是使用权限,一个是声明hook的入口类即可。

第四步:安装运行

代码编写完成之后,直接运行安装即可,前提是你需要正确安装Cydia框架apk,安装成功界面如下:

android native hook框架图5

:527670726

然后我们安装hook工程apk,会出现这个提示:

android native hook框架图6

527670726

点击,进入框架界面,点击重启即可。然后我们查看系统界面颜色以及返回的imei值:

android native hook框架图7

:527670726

查看颜色的确变成骚气的粉色了,再看看imei值的修改:

android native hook框架图8

QQ交流群:527670726

imei值也成功的hook成功了。到这里我们就用Substrate框架hook了Java层功能。当然这些功能Xposed也是可以做到的哦。

四、Hook Native层功能

那么下面继续来看如何hook native层的功能,也是本文的重点哦。

第一步:创建一个Native工程

android native hook框架图9

:527670726

这里用Eclipse操作,简单便捷,有很多人问我为什么不用AS,我想说在我心中Eclipse最好用,AS真心好丑,不想用而已。

第二步:导入Substrate的native功能包

上图可以看到,需要导入一个substrate.h头文件,和两个so功能包。native层应用都是这么干的,提供一个头文件告诉你api,具体实现在so包中。

第三步:寻找hook的函数名

这里网上没有好的hook代码,这里我们为了更好的查看这个工具的牛逼之处,弄一个比较实际的案例就是hook系统加载dex的函数,这样我们就可以获取到每个应用的dex文件了,这种方式对于早期加固是一个比较好的脱壳方案。在之前介绍脱壳我们会使用IDA在指定函数处下个断点,那么我们这里如果要hook的话,就需要找到这个加载dex的函数名称,这里一定要记的是导出的函数名,首先我们导出设备的libdvm.so文件: system/lib/libdvm.so

android native hook框架图10

:527670726

然后使用IDA打开,寻找加载dex函数:

android native hook框架图11

QQ交流群:527670726

切换到Exports视图页面,然后搜索dexFileParse函数,点进去:

android native hook框架图12

527670726

看到了,我们 需要得到的是EXPORT的函数名,需要hook的是他,这个一定要注意,不然hook没效果的 。找到函数之后还得获悉函数的参数类型和返回类型,这个也好办,因为我们有 android 源码,所以直接在源码中找这个函数参数说明已经返回值说明即可。因为Native层hook的其实是函数指针的替换,所以如果想hook原来的函数,必须新建一个和原来一样的函数功能,然后传递函数指针即可。这个函数的参数和返回值定义如下:

DexFile dexFileParse(const unsigned __int8 , unsigned int, int);

参数含义非常简单,第一个参数表示dex文件的起始地址,第二个参数是dex文件的长度,有这两个参数我们就可以写入文件了。这里我们需要获取DexFile类型,这个直接在Android源码目录下找到这个头文件DexFile.h即可。然后导入工程中。这样我们就找到了需要hook的函数已经说明了,下面就开始编写hook代码了。

第四步:编写hook代码

在编写hook代码之前,我们需要考虑这几件事:

第一件事:我们hook之后的dex存在哪?怎么存?我们这里直接通过当前的pid值获取进程名,然后将其凭借作为dex的文件名,这样每个进程的dex文件就不会冲突了。这里要理解一点:一个进程对应一个DVM,加载一个dex文件。所以这里hook其实就是注入每个进程,在每个进程中在hook每个函数功能。

第二件事:需要过滤系统进程,并不是所有的进程都是我们想要hook的,而且这些进程未必有dex文件,比如鼻祖进程zygote,而这些进程过滤规则,需要我们自己打印看结果。然后构造。

下面开始写代码了,首先定义我们想要hook的so文件:

MSConfig(MSFilterLibrary, “/system/lib/libdvm.so”);

主要是第二个参数,是需要hook的so路径。然后在入口处开始hook代码:

android native hook框架图13

527670726

这里首先找到so中需要hook函数符号,然后直接调用MSHookFunction传入符号,新函数地址,旧函数地址即可。这里可以看到在C中指针是多么强大,实现了函数的回调机制,而且非常方便。然后继续来看新定义的hook函数功能:

android native hook框架图14

:527670726

这里先获取当前进程名称,然后构造dex文件名,保存dex文件,最后一定要记得返回原始的函数,不能影响正常的流程。这里还要记得过滤规则,不要对每个进程都进行操作,并不是每个进程都是有效的。而这些过滤规则是根据自己打印进程名来自行添加即可。

第五步:编写MK文件

上面代码已经编写完成了,下面来编写编译脚本吧,主要 注意编译之后的文件名一定要有cy结尾,不然是hook失败的 ,然后就是需要导入substrate的so库文件:

android native hook框架图15

:527670726

第六步:安装并运行

和之前一样,运行之后,需要重启设备,然后先看看native层的log信息:

android native hook框架图16

527670726

然后再去目录中查看保存的dex文件信息:

android native hook框架图17

527670726

dex文件都保存成功了,这样会发现如果对于早期的加壳,可以采用这种方式进行脱壳操作的。也不需要用IDA进行调试dump出dex文件了。

五、说明

关于native层hook就介绍完了,这里还是需要说明几点:

第一点:hook之前需要分析so获取需要hook的函数名称,参数返回值定义,这个和hook Java层一样,必须先找到突破点才能进行下一步。

第二点:hook可能会有一些错误,因为是native层比java层错误信息难发现,所以最好是在某些地方加一些日志观察结果。

如果在使用过程中发现hook失败,注意检查这几个条件:

第一个:xml中是否配置了权限和入口

第二个:编译脚本MK中的后缀名是否为cy

项目下载地址: ***/fourbrother/CydiaSubstrateHook

六、总结

关于CydiaSubstrate框架就介绍到这里了,后面会分析如何hook游戏的so文件来进行破解工作,有了这个框架再也不怕hook难了,native层代码也可以一览无余了。

(0)
上一篇 2023年4月20日 下午3:04
下一篇 2023年4月20日 下午3:08

相关推荐

  • 至上励合新歌获封神曲,至上励合新歌推荐

    至上励合新唱片主打歌《鸭梨大》自上月月底全网曝光后,首播短短三天播放点击量便飚破千万,占据了各大新歌点击率排行榜榜首。并因其十分洗脑的副歌旋律被网友评为“十大神曲”之一。截至今日,…

    生活百科 2023年4月22日
    0
  • 夏天穿这5个极简色显贵又显白,夏天照着这些配色方案穿美到开挂

    夏季,越来越多的时髦精们腻了华丽繁复的设计与艳丽的色彩,选择了简洁舒适的极简风格穿搭,看起来很冷淡,却充满了高级感,衣品变得不俗。 这个夏天,如果你厌倦了绚烂的颜色,那么选择一抹沉…

    2023年2月8日
    0
  • 婚纱里面怎么穿才好看,什么星座穿婚纱最好看

    结婚的仪式服有很多种,婚纱作为最受新娘喜爱的礼服一直备受追捧。婚纱一般作为结婚的主礼服,它的款式和穿法也不尽相同。今天小编就来给大家介绍绑带婚纱究竟该怎么穿。 一.绑带婚纱怎么穿 …

    2023年3月11日
    0
  • 梭子蟹什么季节吃最好

    梭子蟹是中国南方地区著名的美食之一,它的肉质鲜美、营养丰富,深受广大人民群众的喜爱。那么,梭子蟹什么季节吃最好呢? 根据专家的研究,梭子蟹最好的食用季节是秋季。秋季气温适宜,且降雨…

    生活百科 2023年7月11日
    0
  • 乒乓球大满贯是哪三个比赛,2022乒乓球大满贯赛事樊振东

    在乒乓球这项运动中,能拿到奥运会单打冠军,世乒赛单打冠军,世界杯单打冠军,拿到这三项冠军的人,就可以成为乒乓球大满贯选手。 喜欢乒乓球的球迷粉丝们都知道,在乒乓球中,奥运会,世乒赛…

    2023年1月13日
    0
  • 煮梨水用热水还是凉水

    煮梨水是一种常见的中医疗法,可以用于治疗咳嗽、喉咙痛等症状。但是,许多人对于煮梨水的热水和凉水有不同的看法。 有些人认为,用热水煮梨水可以更好地释放梨子的营养成分,有助于清热解毒。…

    生活百科 2023年6月22日
    0
  • 健全人格首在体育议论作文800字

    人格,在心理学上是指人的性格、气质、能力等,指个人特定的行为模式表达出来的关于自身精神价值的自觉意识,也就是一个人做人的资格和人品的总和,它是在社会生活中产生和形成的。人类在认识世…

    生活百科 2023年2月14日
    0
  • 金花茶的禁忌

    本文目录 1.孕妇和哺乳期妇女 2.低血压患者 3.药物过敏者 4.肝肾功能不全者 金花茶是一种常见的中草药茶,许多人认为它对身体有益。然而,对于一些人来说,金花茶可能会有一些禁忌…

    生活百科 2023年8月10日
    0
  • 12999元终身学习跆拳道 学了5个月就停课?经营者:场地调整,尽量在寒假复课

    视频加载中… 2019年7月,位于内江市东兴区艾林商场内的“搏纳·有志青年”培训机构推出了一则“黑带终身卡 仅限前10名12999元”的广告标语,吸引了市民黄女士,她随…

    2023年1月2日
    0
  • 非主流三巨头许嵩徐良汪苏泷,许嵩平凡之路

    有这样一位歌手,经常被人调侃过气歌手,却每场演唱会一票难求,且央视花了足足13分钟来捧他,他有何德何能,可以让网红圈薅成了免费素材库,今天我们来介绍下不一样的许嵩。 许嵩1986年…

    2023年4月19日
    0

发表评论

登录后才能评论