提示!本文章仅供学习交流,严禁用于任何商业和非法用途,如有侵权,可联系本文作者删除!


前言

最近初学app逆向,该文章仅用来记录学习分析的过程,如有不对的地方,希望各位大佬能不吝指点


下载地址:apk下载

案例分析

   安装好app之后的第一件事当然是打开app,然后开始抓包,具体如何抓包这里就不多说了,直接看抓包结果,如下:

这个就是抓列的表页数据,直接将请求拿下来本地跑一下,如下:

可以看是能直接拿到数据的,接下就是对请求参数的删减,先确定一下请求头中哪些参数是必须的,测试后发现该接口对请求参数不严格,所以大家象征性的模拟下请求头的参数就行了,之后看下请求携带的参数,下面的参数就先提前给大家备注了,如下:

userid   0          #未登录状态这个是0,写死即可
area_code   1      #写死
appid   1005       #写死
dopicfull   1      #写死
page    1          #列表页页码
token              #登录之后会有,这里置空
privilegefilter 0   #写死
requestid   6c95b8809382f60a7c326a0a8e580ff9_0   #多次测试会发现 "_" 后面的 "0" 代表着请求次数,这个可以写死
signature   3344d8f3b8db824a2d8e90cbf2b72fe9     #生成的加密参数
pagesize    30                                   #当前返回页最大数据条数
clienttime  1678353239                           #10位数时间戳
sec_aggre   1                                    # 写死
iscorrection    1                                #写死
uuid    71620acaced02a7d5fd6cfe785db0ba2         #根据设备生成的uuid
keyword 可能                                   #歌曲名称
mid 12804932379081176379687317521415026304       #根据uuid生成的mid
dfid    2ly9I64QC64Q2MLYrD1KrM6a                 #可以直接写成 "-",这个在研究网页版的时候可以知道其逻辑
clientver   11549                                #写死
platform    AndroidFilter                       #写死
tag em                                          #写死

接下来除了写死的部分不做分析,其余的参数一一来分析一下,首先是requestid,可以看到这个参数的格式是:
xxxx_0,直接在jadx里面搜索一下,如下:

可以看到只有16个结果,然后我圈出来的部分跟其结构很相似,随便找一个点进去,然后进入下图圈出来的方法中,如下:

跳转过去之后如下:

根据这里的逻辑可以看出,它有两种情况每一种是当b2有值的时候就返回b2b2没有值的时候就会生成a2,返回a2的值,这里直接使用firdaHook下,生成一下b2,如下:

可以看到这里直接就拿到值了,至于这个值怎么来的还是不太清楚,然后回到前面X方法这里,仔细看一下这段逻辑就可以大致的猜出其逻辑了,一开始b2应该是一个空值,之后获取到a2,然后将a2通过一个方法保存起来,之后每次就可以通过b.a().b(126, “”)方法来获取到该值,经过测试之后是可以确认这个逻辑的,所以该值如何来的就看下a2是如何生成的,前面可以知道生成a2的逻辑如下:

String a2 = d.a(KGCommonApplication.getContext())

直接看一下d.a方法的逻辑,如下:

 public static String a(Context context) {ba baVar = new ba();return baVar.a(br.l(context) + System.currentTimeMillis());
}

接下来就不一一讲解了,继续看下去可以知道baVar.a是一个md5br.l(context)可以通过Hook来看下返回结果,
System.currentTimeMillis()是获取当前时间戳,接下来通过frida来实现一下这个过程,如下:

71620acaced02a7d5fd6cfe785db0ba2这一串字符有没有很熟悉,如果够仔细的话,可以知道这个值就是前面请求时携带的uid参数,所以到这里requestid的生成逻辑就很明确了,用python实现后来对比下结果,首先将Hook生成的包含时间戳的结果记录下,如下:

在看来看看python生成的结果,如下:

接下来分析Signature,还是一样搜索一下,如下:

发现结果很多,然后我选择了一个迂回点方式,搜索url中的参数,搜索结果如下:

可以发现圈出来的地方和请求的列表url有着相识的地方,抱着试一试的心态,之后点击跳转来到如下位置:

接下来干什么就不用多说了吧,还是使用fridaHookHook啥不必多说了吧,算了,还是多说一点,看一下上图中的b4,可以发现是一个Map,这里先说一下到v.a方法的逻辑:

1.将请求时携带的参数都放进这个map中,也就是得到了这个被b4
2.将b4传进v.a方法中进行处理,b4不为空的前提下,将其所有的参数和值拼接成一个字符串
3.将拼接成的字符串传入v.c方法中

之后进入v.c方法中可以看到如下:

这部分的分析方式和前面讲的requestid的分析方式一致,先获取一下b2,然后看一下ba.c方法,简单记录一下:

b2="OIlwieks28dk2k092lksi2UIkp"  固定值
ba.c方法就是个md5
所以具体逻辑就是:
md5(b2+sr+b2)

到这里Signature的生成逻辑就分析结束了,只需要搞定v.a方法是如何将参数拼接成字符串的就行了,具体如何操作就不说了,整个过程全都可以用python直接还原出来,最后测试下结果:


欢迎关注公众号:【时光python之旅】 (在这里你能学到我的所见、所闻、所思、所学)

app逆向篇之实战案例-某音乐app相关推荐

  1. app逆向篇之常用命令及刷机

    前言 之前刷机的时候记录的,刚好今天发一下,这篇仅用来记录学习及实践过程中的一些知识点,如有错误或不足之处,望大佬们不吝指教 ADB命令 1.连接设备adb connect 192.168.127.5 ...

  2. python爬虫实战案例-Python爬虫实战案例:手机APP抓包爬虫

    1. items.pyclass DouyuspiderItem(scrapy.Item): name = scrapy.Field()# 存储照⽚的名字 imagesUrls = scrapy.Fi ...

  3. 【APP逆向-入门级】某直播APP逆向过程

    原文章逆向思路 重点:先向CSDN审核客服声明一下:本文仅仅是用于技术交流,甚至可以都算不上APP逆向,文章提到的截图已经全部打码.也没有提及是什么APP,希望审核人员可以通过本文章,谢谢. 这是一篇 ...

  4. App逆向案例 X嘟牛 - Frida监听 WT-JS工具还原(一)

    App逆向案例 X嘟牛 - Frida监听 & WT-JS工具还原(一) 提示:文章仅供参考,禁止用于非法途径: 文章目录 App逆向案例 X嘟牛 - Frida监听 & WT-JS工 ...

  5. Kotlin实战案例:实现RecyclerView分页查询功能(仿照主流电商APP,可切换列表)

    n实战案例:带你实现RecyclerView分页查询功能(仿照主流电商APP,可切换列表和网格效果) 随着Kotlin的推广,一些国内公司的安卓项目开发,已经从Java完全切成Kotlin了.虽然Ko ...

  6. AXURE RP8实战手册 网站和APP原型制作案例精粹pdf

    下载地址:网盘下载 编辑推荐 小楼老师继上一本畅销书后倾情打造: 从基础到实战,共166个实例完全讲解: 每个案例可实时查看演示效果: 从APP到网站,全面覆盖各个典型案例的原型讲解,助你快速掌握.  ...

  7. 以某乎为实战案例,教你用Python爬取手机App数据

    1 前言 最近爬取的数据都是网页端,今天来教大家如何爬取手机端app数据(本文以ios苹果手机为例,其实安卓跟ios差不多)! 本文将以『某乎』为实战案例,手把手教你从配置到代码一步一步的爬取App数 ...

  8. Axure 9 实战案例,母版的应用 1,使用母版绘制APP导航菜单

    前言 Hello!欢迎来到Axure 9 实战案例教程专栏.点击了解课程简介>> 前几章我们分别讲解了Axure基本元件.动态面板.交互事件的应用,相信同学们的Axure实战能力已经有了一 ...

  9. 自然语言处理NLP-100例 | 第二篇:在线课程评论情感分析-本科毕设实战案例

    大家好,我是K同学啊~ 春去秋来,时间就这样嘀嗒嘀嗒的过去,不知道大家的毕设做得怎么样了呢 K同学就今天和大家分享一篇关于在线课程评论情感分析的实战案例,帮助大家找找灵感. 数据用的是一份公开的在线课 ...

最新文章

  1. 人工智能在未来将要经历的七个阶段
  2. 机房收费系统=三层+设计模式
  3. python编程思维导图_用来梳理 Python 编程核心知识15张思维导图
  4. 前端vue适配不同的分辨率_浅析 React / Vue 跨端渲染原理与实现
  5. 《当90后遇上创业》导读
  6. 玩了一把WOW,贴几张图上来,当然只是私服哈!
  7. 【Python可视化】Windows 10系统上Pyecharts安装教程
  8. robot:循环遍历数据库查询结果是否满足要求
  9. TextView的一些高级应用(自定义字体、显示多种颜色、添加阴影)
  10. linux系统安装wine关关采集,在Ubuntu 20.04系统上安装和使用Wine 5的方法
  11. 手机端网页-微信授权登录
  12. html标签设计视频音量,如何在HTML5视频标签只添加音量控制
  13. mysql 索引间隙锁_关于mysql innodb间隙锁的一些思考
  14. 希望各位dalao不吝赐教
  15. 给我5分钟,手把手带你学会定时任务!
  16. jenkins安装下载
  17. jquery 动态添加div元素(两种方式)
  18. Java多线程不会的看这里,阿里第三版核心技术手册PDF全彩版
  19. 正则表达式在shell中使用的方法与案例
  20. 计算数据的经验分布函数与MATLAB作图

热门文章

  1. 《炬丰科技-半导体工艺》 用ZnO基透明导电氧化物电极的应用研究湿法蚀刻特性
  2. 住房贷款、消费贷款计算器代码--拷贝下来就能用
  3. Linux内存管理之SLAB分配器
  4. 【数学】【2017.7.7普及】串
  5. 快速打开打印OFD电子发票
  6. 合成海报的小程序插件-票圈海报
  7. 控制空间光调制器(SLM)的不同控制方法小结作者来源lvmeng987
  8. 基于神经网络MPPT的PV光伏阵列控制系统simulink仿真
  9. BootLoader的解锁方法
  10. 关于远程服务器如果连接断开的话,服务器上运行的程序会被杀死的问题