某小说App返回数据 解密分析

简介: 某小说App返回数据 解密分析

一、目标


李老板:奋飞呀,最近被隔离在小区里,没啥可干的呀。


奋飞:看小说呀,量大管饱。


我们今天的目标就是某小说App v2021_09_53


二、步骤

搜索url字符串


App请求小说内容的时候没有加签名,但是返回的数据是加密的。

224.png

那么我们先去jadx搜索一下这个url(novel-content),看看有没有发现。


结果是没有收获。


那么很有可能这个url不是在apk中写死的,而是某个请求返回的。


Charles可以搜索数据包,我们从返回包里面找到了这个url。225.png


那就好办了,看看是哪块代码去解析了这个 content_url ,我们在jadx中搜索

"content_url"


这次倒是有收获,但是看不出来这个变量再哪里用了。


插播一个屏蔽登录


只能再想想别的办法了,办法还没想出来,又遇到了新的问题。


第二次启动app的时候,就不让我看书了。一定要我登录,一怒之下登录了,居然还不让我看。还要买VIP。


这下忍不了了,我不过是想写个分析教程,何必这么为难我。


先从提示入手, 搜索 "登录" 来到这里334334.png


理论上说干掉这两个函数应该就可以了,写代码

var CacheUtilsCls =  Java.use('com.xxoo.net.net.CacheUtils');
    CacheUtilsCls.isVip.implementation = function(){
            return true;
    };
    CacheUtilsCls.isLogin.implementation = function(){
            return true;
    };


作者这个类名起的好风趣呀,我都不忍心打码了。


过滤url


既然知道请求小说内容的url了,我在url这里做一次过滤,应该就可以定位了吧

var URL = Java.use('java.net.URL');
    URL.openConnection.overload().implementation = function() {
        var retval = this.openConnection();
        console.log('URL openConnection' + retval);
        return retval;
    };
    var OkHttpClient = Java.use("okhttp3.OkHttpClient");
    OkHttpClient.newCall.implementation = function (request) {
        var result = this.newCall(request);
        console.log(request.toString());
        var stack = threadinstance.currentThread().getStackTrace();
        console.log("http >>> Full call stack:" + Where(stack));
        return result;
    };


url和返回数据我都hook了。木有逮住。


大海捞针大法


下面就试试咱们老用的字符串匹配大法了。不管你怎么玩,解密之后的数据大概率是要赋值给字符串的。我们先把字符串赋值来捞一遍。

var strCls = Java.use("java.lang.StringBuilder");
    strCls.toString.implementation = function(){
        var result = this.toString();
        console.log(result.toString());
        return result;
    }


这次就比较幸运了,我们不仅捞到了明文,还捞到了重要提示226.png


大海告诉我们,大概率是AES CBC算法做的解密。


字符串匹配定位


有了重要提示,我们就依据这个提示来定位

var strCls = Java.use("java.lang.StringBuilder");
    strCls.toString.implementation = function(){
        var result = this.toString();
        // console.log(result.toString());
        if(result.toString().indexOf("AES/CBC/PKCS5Padding") >= 0 )
        {
            console.log(result.toString());
            var stack = threadinstance.currentThread().getStackTrace();
            console.log("Rc Full call stack:" + Where(stack));
        }
        return result;
    }


跑一下,漂亮的堆栈就出来


漂亮的堆栈会说话

446.png


这个堆栈告诉我们,重点怀疑对象是 NativeBds.dae1

,

从名字和外形上看,它大概率是个Native函数。


但是后面的堆栈告诉我们一个好消息,虽然运算过程在Native里面,但是它居然回调了javax.crypto来做加解密,也太敷衍老板了,这在我司是要被扣工资的。


先不管了,终于找到你了,hook之

var  DecodeCls = Java.use('com.baidu.searchbox.NativeBds');
    DecodeCls.dae1.implementation = function(a,b){
        var rc = this.dae1(a,b);
        var StrCls = Java.use('java.lang.String');
        var inStr = StrCls.$new(rc);
        console.log(inStr);
        return rc;
    }


跑一下,没问题,明文出来了,收工,下雨了,没法上鲜啤了。


三、总结


不要嫌打印的数据太多,大海捞针也是考验你火眼金睛的时候。


对常见加解密算法要敏感,要成为条件反射。看到iv就要想到aes,看到32位就要想到md5,看到64位就要怀疑sha256。看到太阳就要想到鲜啤,看到飞哥的文章就要想到转发556.png


新一代的财富都是通过代码或者媒体创造的 --- 纳瓦尔


TIPS:


本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一起学习探讨技术。有问题可以加我wx: fenfei331 讨论下。


关注微信公众号: 奋飞安全,最新技术干货实时推送

相关文章
|
3月前
|
JSON 监控 数据格式
1688 item_search_app 关键字搜索商品接口深度分析及 Python 实现
1688开放平台item_search_app接口专为移动端优化,支持关键词搜索、多维度筛选与排序,可获取商品详情及供应商信息,适用于货源采集、价格监控与竞品分析,助力采购决策。
|
3月前
|
缓存 监控 Android开发
京东 item_get_app 接口深度分析及 Python 实现
京东item_get_app接口可获取商品原始详情数据,包含更丰富的字段和细节,适用于电商分析、价格追踪等场景。需通过认证获取权限,支持字段筛选和区域化数据查询。
|
4月前
|
缓存 数据挖掘 API
淘宝 item_get_app 接口深度分析及 Python 实现
淘宝item_get_app接口是淘宝开放平台提供的移动端商品详情数据获取接口,相较PC端更贴近APP展示效果,支持获取APP专属价格、促销活动及详情页结构,适用于电商导购、比价工具、数据分析等场景。接口采用appkey+appsecret+session认证机制,需申请相应权限。本文提供Python调用示例及使用注意事项,帮助开发者高效对接移动端商品数据。
|
6月前
《仿盒马》app开发技术分享-- 确认订单页(数据展示)(29)
上一节我们实现了地址的添加,那么有了地址之后我们接下来的重点就可以放到订单生成上了,我们在购物车页面,点击结算会跳转到一个 订单确认页面,在这个页面我们需要有地址选择、加购列表展示、价格计算、优惠计算、商品数量展示等信息。
195 3
|
6月前
|
JavaScript
TypeOrmModule 从 app.module.ts 抽离到 database.module.ts 后出现错误的原因分析
本文分析了TypeORM实体元数据错误的成因,主要涉及实体注册方式、路径解析差异及模块结构变化导致的关系解析问题,并提供了具体解决方案和最佳实践建议。
182 56
|
3月前
|
缓存 供应链 开发者
1688 item_get_app 接口深度分析及 Python 实现
1688平台item_get_app接口专为移动端设计,提供商品原始详情数据,包含批发价格、起订量、供应商信息等B2B特有字段,适用于采购决策、供应链分析等场景。接口需通过appkey+access_token认证,并支持字段筛选,返回结构化数据,助力企业实现智能采购与供应商评估。
|
4月前
|
数据采集 数据可视化 API
驱动业务决策:基于Python的App用户行为分析与可视化方案
驱动业务决策:基于Python的App用户行为分析与可视化方案
|
6月前
|
BI 开发工具 开发者
App全渠道统计方案:如何用一个工具整合所有获客渠道数据?
还在为地推、社群、广告等不同获客渠道的数据分散而烦恼吗?本文将教您如何用一个工具整合所有渠道数据,实现精准的渠道归因与效果分析。
221 0
|
8月前
|
数据采集 数据可视化 数据挖掘
基于Python的App流量大数据分析与可视化方案
基于Python的App流量大数据分析与可视化方案
|
10月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
684 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex

热门文章

最新文章