React Native Hermes 逆向

admin 2024年10月3日15:19:13评论22 views字数 1838阅读6分7秒阅读模式

本文只为了技术分享讨论,切勿使用技术进行非法用途。

apk拿过来先拖动到jadx查看:

React Native Hermes 逆向

loadAd大概率就是加载广告的地方,点到这个类中往下滑,发现有show方法,通过修改改对应dex的smail将show改为空,改好后将smail文件夹重新编译为dex,在放到jadx中验证是否错误。

React Native Hermes 逆向

上面这个是splash,然后依次将插屏,banner都像这样修改掉。

React Native Hermes 逆向

这都是基础的修改smail,不在本文中详细描述。

React native的代码打包都都放在assets下的index.android.bundle中,正常情况会将代码压缩,混淆,但是我这个apk中的index.android.bundle打开并未显示js代码,拖到notepad++中发现:

React Native Hermes 逆向

乱码显示,摸索了一下java代码发现:

React Native Hermes 逆向

这里比较可疑,应该是乱码的源头,然后搜索关键字Hermes,发现这是一个对于React native的JavaScript引擎,将js代码都编译为bytecode,Hermes引擎会优化React native应用的启动速度和文件大小。

React Native Hermes 逆向

本来想使用frida大法,将assets读取文件内容,执行Js引擎时将内容直接打印出来,无奈,找了半天源码没发现好的切入点,发现一个开源的反编译工具,hbctool,官方也有hbcdump提供反编译工具,使用hbcdump执行反编译提示:

Error: fail to deserializing bytecode: Wrong bytecode version. Expected 96 but got 90

看上去是我的index.android.bundle样本的hbc版本是90,我下载的最新版本hbcdump为96,找到hbcdump 90的工具后执行。

hbcdump.exe index.android.bundle -mode=hbc -out=myout.js
disassemble

在当前目录将会看到:

React Native Hermes 逆向

反编译的结果,但是但是,还没这么快结束。由于我的目的是需要去广告,解锁会员功能,所以修改js代码后还需要回编译,但是官方的这个工具找了半天也没发现有什么文档说明怎么编译回去。无奈切换为另外一个作者的hbctool工具
https://github.com/bongtrop/hbctool。

这个工具在pull request中有90和94的反编译源码提供,感谢每一个开源的作者。在文章末尾我也会将我使用到的代码上传提供下载使用。

React Native Hermes 逆向

将源码下载,在pycharm中打开,添加hbc90目录:

React Native Hermes 逆向

在__init__.py中添加90版本的处理,

React Native Hermes 逆向

执行disasm将会反编译文件,执行asm将会把反编译修改的的文件夹编译回index.android.bundle。

反编译后的文件夹内容:

React Native Hermes 逆向

instruction.hasm便是源码,string.json是字符表,metadata.json看上去是文件的描述符和完整性验证使用的文件,没有仔细研究这个文件。

按照我的目的我应该去修改instruction.hasm,打开instruction.hasm查看。

React Native Hermes 逆向

不认识这种代码,后来搜索到相关文章有描述操作符之类的说明,现在已经忘记了。仔细看代码,和汇编有些相似,但是看上去比汇编简单很多,都是左边一个指令右边操作数,例如:

LoadConstTrue       Reg8:22 将一个8位的寄存器22设置为true
Mov Reg8:22, Reg8:25 将25寄存器的值赋值給寄存器22
LoadConstString Reg8:39, UInt16:16781 加载一个字符到39寄存器,字符id为16781,查看string.json可以找到这个字符的值。
{
"id": 16781,
"isUTF16": false,
"value": "contain"
}
LoadConstTrue Reg8:4 将寄存器4设为true
LoadConstFalse Reg8:4 将寄存器4设为false

接下来只要找到Vip字样相关的地方,修改为true,将反编译后的文件夹重新编译为index.android.bundle,替换assets下面的index.android.bundle,使用apktool重新打包就完成了。

React Native Hermes 逆向

看雪ID:一棵小草

https://bbs.kanxue.com/user-home-973070.htm

*本文为看雪论坛优秀文章,由 一颗小草 原创,转载请注明来自看雪社区

React Native Hermes 逆向

原文始发于微信公众号(看雪学苑):React Native Hermes 逆向

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月3日15:19:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   React Native Hermes 逆向https://cn-sec.com/archives/3229255.html

发表评论

匿名网友 填写信息