通过反编译查看App的逻辑流程和代码

逆向App之脱壳、反编译

上一篇介绍了如何抓包App的网络请求,但是发现很多请求返回响应的是加密的,部分请求是下载了些文件,猜测电视直播App大致逻辑应该是先向服务器发送请求将直播源保存到本地,再进行请求对应的直播源,但是实际上App逻辑如何呢?这时候就需要通过反编译App来看下大概流程和加密逻辑。

image-20260529173730801

脱壳

一上来,我就直接通过jadx来反编译了,但是搜索抓包相关的关键字都没找到,com.dsdqjx.tvhd.activity.StartActivity相关的类也找不到,当时就特别困惑,后面通过找资料才发现有保护源码的加固技术,看了个寂寞。加固本质上就是对dex文件进行加壳处理,让一些反编译工具反编译到的是dex壳,而不是dex文件本身,具体的实现方式是,将原dex文件进行加密,再合成到dex壳中,而系统运行应用的时候,会加载dex壳文件,而dex壳里面有一个自定义的ClassLoader类,它会将原有dex文件进行解密,然后再加载到dex数组中。

通过mt管理器可以查看到该App使用了百度加固,后面再回头看直接反编译的App时,发现其实有百度相关的文件在里面,而且启动类com.sagittarius.v6.StubApplication也反应了该启动类有点与众不同。

image-20260529175654921

image-20260529174835434

上面讲到了加固的原理,它本质的原理就是加壳,而脱壳就对应着加壳,我们要对这层壳脱掉,漏出它原本的样子,再简单点讲就是破解加固,市面上比较常见的脱壳手段就是内存dump,刚刚我们讲到的,系统会加载壳dex,壳dex才会加载原dex,那这个时候原dex已经被加载到内存中了,我们只需要从内存中把它dump出来就可以了。

简单点通过在线脱壳工具来脱壳,后面发现在线网站脱的少了点东西,后面是通过BlackDex App来实现的脱壳,然后找到目录,将脱壳后的dex文件复制到雷电模拟器的共享安卓目录,最后会同步到雷电模拟器的共享电脑目录。

image-20260529181036618

image-20260529181415901

反编译

此时,再通过jadx打开脱壳后的dex,豁然开朗,找到抓包中测试Ipv6网络的逻辑。

image-20260529181721668