猿人学安卓逆向第十题
声明
写这篇文章的时候,作者还是个逆向小白,而且是边学这道题边做逆向顺便写下这篇文章做记录。
抓包分析
首先打开小黄鸟进行抓包分析,发现app上没有数据返回
暂时不知道什么原因,那就抓包套餐给他上一遍呗,先导入一个JustTrustMe模块,发现可以正常抓包了。
我这里用的是平头哥的JustTrustMe模块,用xposed的JustTrustMe模块也行,再或者是Java层通杀抓包脚本也能完成数据的抓取。
目标数据包的请求信息:
代码分析
打开jadx导入要逆向的app,搜索关键词“api/app10”,并没有返回数据。所幸,这道题给了提示信息"rn"
那rn是啥呢,因为之前我也没接触过,所以百度了一下,发现有一个帖子对这篇文章有描述,如果你们没听过React Native,可以看一下这个大佬的帖子。
http://davidblus.top/wordpress/index.php/2018/10/08/android_react_native_ying_yong_ni_xiang_fen_xi_chu_tan/
我简单的用自己的大白话讲一下,就是一段js代码,通过c++层时翻译成native代码,最终被安卓所使用,而这段js代码保存在Apk文件中assets目录中的index.android.bundle文件。
这是第一种确定方法,靠练习平台给提示,才能意识到。
还有一种办法就是通过获取当前活动界面入手。q佬教的是用adb命令获取安卓中当前的活动界面,我看网上也是那么弄的,命令是这个
adb shell dumpsys activity | findstr "mCurrentFocus"
但是我属于非洲人,脸黑的一批,死活没有这个显示,还有其他的版本,但是不放心,怕取错了。
所以下载一个autojs,用autojs来取当前活动activity,发现是这个com.yuanrenxue.challenge.activity.RNActivity。
通过jadx,根据这个活动目录,跟进一下。
咋判断这是用了React Native技术嘞,这技术由facebook开发的,所以导包环节肯定有facebook和react关键字
既然确认了是用了这门技术,那就去找Apk文件中assets目录中的index.android.bundle文件。
直接在电脑上把app解压即可,顺着目录找即可找到加密文件
因为他里面只是js代码,所以你咋打开就行,我这里直接在pycharm中打开,因为代码是压缩的,所以找个工具格式化一下即可。
我这里常用的是这个工具网站:https://spidertools.cn/#/formatJS
搜索关键词 “api/app10”,定位到了,皆大欢喜,接下来的操作就是扣js加密代码了
扣扣js
因为这一段代码没有啥混淆,各个参数的作用很明确,所以看起来比实际见的app要简单的多。
有一句话将正向开发的高度决定逆向开发的高度,我觉得说的也不赖,就比如这段js如果不是看视频,我很难能扣出来。
原方法入口是这样的
我的想法是把他简化成我能理解的一个函数去调用,最后变成了这样。
然后就是构建网络请求,本题完。