【声明】
本文仅供学习用途,不接受商业合作,本代码不再做开源 文字为本人NORTH原创,若转载,请备注来源。因为之前网页端会出现app版本问题,这次直接安装最新版5.5.9!
【目录】
1.绕过代理检测与frida检测
2.逆向接口&算法分析
3.验证成果
一.绕过代理检测与frida检测
通过开启代理,可以发现x动app是做了代理检测,通过开启fiddler抓包是抓不了的。
【图片】
看过几篇文章所提到的解决办法,都是通过frida hook找到代理检测位置,通过hook 检测方法im【方法名】进行绕过,但是我觉得太繁琐了,第一步开始就上神器,有点大题小做了。
我的办法是通过编写代理脚本,抓取通过andirod发出去的请求包,得到返回response,在其返回的途中截获TCP流量,我们都知道HTTP连接的时候,tcp会经过三次握手,TCP的三次握手(Three-Way Handshake)是建立TCP连接的一种过程
过程1:客户端向服务器发送一个SYN(同步)报文段,表示希望建立连接。这个报文中包含一个初始序列号(ISN)。
过程2:SYN-ACK 这个是通过服务端返回客户端的,可以看到确认号和自己的序列号。
在服务器向客户端返回确认号时,我会伪装成中间人截获流量。之所以选择在这里截获,是因为当数据到达应用层的HTTP请求时,已经被app内部的某个类监测过了。
因此我的思路是:
通过截获流量包,进行转发到抓包工具。
因此原理弄明白了,直接编写代理转发流量机制的脚本,进行监听转发。效果如下:
这样,我们可以看到fiddler,能够成功抓到包。下面我们就来分析吧。
二.逆向接口&算法
首先,下单的话,我们需要登录,看过我之前的网页端的文章,都知道秀动它加密的地方就那几处。通过分析headers,我们可以知道:
首先,请求头里面的crisign参数,这个参数不用说的,每个请求头都是用这个参数去请求。这时候光分析不行了,现在得上科技:
1.jadx反编译
不用看,这个app一定是被加固了,直接拖到jadx反编译可能不行,我们得解决这个问题
解决这个问题,我们得知道问题是什么。我们应该先看他是被什么加固的。通过市面上的软件分析
里面是:某讯的加固方式(函数抽取加固)。(这里不详细说,网上很多教程)
既然知道是什么加固,那我们就想办法脱壳。
如何脱壳呢?我这里采用的方法是,通过过修改apk的dex文件,进行修改dex文件的签名来解决这个问题,目前,有人提出使用现在fidx的方式,或者FART工具进行脱壳,但是我觉得太麻烦了,我还是喜欢使用原生的办法(你在哪里加固,我就在哪里给你解除)。
因为apk就是个压缩包,直接解压,您就可以看到里面的打包文件。来吧,一起看看里面有些什么东西:
我们发现里面dex文件的话,就那几个,我们可以打开进行分析,分析他是从哪里进行加固函数,在此,我想提示下,因为在apk启动时候,会加载
Application类:当APK首次启动时,系统会创建Application对象,并调用其onCreate()
方法。这是应用程序的入口点,通常在这里进行全局初始化
Activity组件:如果APK包含Activity,系统会加载指定的Activity,并调用其onCreate()
、onStart()
、onResume()
等生命周期方法。
通过我得分析:
- Application类的
onCreate()
:在这个阶段,秀动执行初始化操作,包括加载加固库或进行自定义的安全检查。 - 秀动使用的动态加载的形式进行加固
于是,我找到该dex进行修改其中的函数逻辑,在加载时候防止改代码的执行。
具体的方式不公布!
接下来,通过我的修改,我进行了jadx的脱壳:
好了,现在重点分析crisign参数,因为你拿到这个参数了,基本上就逆向成功了。
我直接告诉大家加密位置
hook结果:
就在com.showstart.net.NetEngine类中的signature_v3函数!!!
我们发现这个参数是通过.so文件调用内部的函数。需要注意的是,.so文件(共享对象文件)是Linux系统中的动态链接库,通常用于存放可由多个程序共享的代码和数据。
逆向它可能需要一点反编译基础。
这里我直接告诉大家加密函数的位置:上神器:ida分析汇编代码
1.通过我的分析,已经还原了其算法,但是这个难度是很大,这个也花费我很多时间(暂不公布)。
2.因此我提供的第二种方式:
通过搭建linux arm平台将其放在arm环境下运行。我在本机通过wsl 下载了ubuntu虚拟环境。通过桥接宿主机的网络,接收宿主机网络的转发包。
我们知道他之所以能够调用so文件就是因为其在linux-arm环境下实现的调用,那就将计就计,我再本地也搭建个linux-arm环境baolu端口,通过RPC方式实现自由调用。
1.先拉取linux-arm64镜像;
2.搭建时候把自己的rpc脚本目录映射到docker容器
至于我为什么选择用docker,因为liunx-arm搭建在windows 很恶心的做法。
三.验证
我们看看效果
【成功案例】
哈哈 不出所料成功了!果然有想法就要去尝试。
好了,现在进行下一个恶心的加密,q的解密算法的解密
通过jadx的分析,我们可以知道其加密函数很容易被找到,同样的方法,通过RPC脚本,进行暴漏服务。这里不多说,感兴趣的可以自己去试试。
最后来看下效果验证下吧。
先随便选一个演出发送请求 订单id是一样的
最后试试go协程调度后的抢票
这里涉及go脚本的编写打印的日志,不公示其他参数。
三.小程序端
因为小程序端并比较简单,是熟悉的js调试,这个就简单的说下
1.首先开启devtools调试小程序的工具(网上有教程)
这里就不浪费口舌了 这种js逆向和之前网页的一模一样。。。
【写在最后】
大家遇到什么问题可以在评论区留言,我看到会尽快回复。该教程未公布任何代码信息...本文未有涉违规的信息,请官方手下留情!!!!
希望大家点赞支持下,后续继续更其他的apk逆向。