0. 从内存中dump libpoison.so文件

前文讲到绕过libneutil.so反调试后,接着就会加载libpoison.so文件

根据上图得到的so文件的基址和大小,执行IDA script(shift+F2)可获得so文件进行静态分析(注意需要进行一些修复,参考https://bbs.pediy.com/thread-192874.htm)

static main(void)
{
auto fp, SoAddress;
fp = fopen("D:\\debug.so", "wb");
for ( SoAddress=0x7614a000; SoAddress<= 0x7614a000+0x0001d000; SoAddress++ )
fputc(Byte(SoAddress), fp);
}
复制代码

1. 加密算法分析

从函数名来看,猜测是使用了AES加密方法,尝试下断动态调试

成功断下,已知AES算法需要输入待加密文本、密钥和填充模式

同时我们发现在AES解密也是使用加密时的密钥

从解密函数伪c代码中,找到其解密的主要函数

进去看看,发现有字符串

怀疑是AES加解密的密钥,尝试随便抓个包并解密params参数看看

# -*- coding:utf-8 -*-
#!/usr/bin/env pythonfrom binascii import a2b_hex
from Crypto.Cipher import AESdef aesDecrypt(text):encryptor = AES.new("e82ckenh8dichen8", 1)deText = encryptor.decrypt(text)return deTexttext = "8DC1BDC42724718D65298B7ED2FDA170E14D621EB896C63E8E0FBC1DFA867E565C8D35F127FBF70066280EE41ADA1B3797EA9214D0D0E5C57251274C872B60A767324A0FA640B95C78E004EA2CD369912376ECF26FE6D37DA7262AF3731586763600080B71393DF33876A75D4DFA602602A5EFFEAA7F138CCEE613E4A0C09FE6A450EF549E00536E78245BF989B670F529EA366BC32F056342F77F7F6DD2CCF3A9AF2FA85F2990E1A050C6B11378D5CE3306719CE0FBCFEC830C13CD81C684936EF06DFFD65D07544F078730A1669B1308B89F07913B9B7452B4B4E837872A49481EF62405520DC3443D738DDB8973CF5F0A8138A473A6F9FB4ED90C932B3B717111615FBFB6BB26379266041868838A10EEC26257E315BB92C5416825F0A02E65344BB8326481389DAFCCC7F868CABE415E4EA770879014A9DE64D5495D806E7D5EE3EEC5620D21762F458C273A476BE4C1F21AC0CD65E6ACB81C07931AC97EBA3A4572FFAF42E3C8C4D95D70CAC4E92F1C5DF3A912F43C1A891708BC8E48C2F53538FC0FE21DB4F4BED35FAE6CD679BF680DCA6136B4548C50C17C93D0AD5E7306A7DE3541B1F1B33A435133B21A7F10E21F34559BA1D77A65FD789DB94BEAE6B98BA9660A4B4CAB385948EC40DE7C8F607B27975C52DABDCDA88D6B4A0727FD3641F89CD1E040B7CDD9E6D131755CFEC46862AA1CD3FB4BA862301A2E916A9FE8DE0B646005B3711DB34F08724759B156143368D49AF7875094C41EF782119FD3951DA4EBDCB38BCC131B238BFCCAE979288FC0025406AF9CE4A07C4D4A2CE419B1DD25771DD1778A21357FB7E040A43379E9AEF94B9A2B4D88F20F52274E9EA57DEB4BBE7FD58266C38B25D50BC1EE4150D1AC9CE1E30536972AFD38A04CF16DE11F9972A7D2C8A6BB0788A28B1CB3588B2CDDF34518CB5D8F11CDDBED9E33DD0A566790A8416341132FC53904E48229E928C2D3F7C2A685F4EFA50D113B62102E69EE8D36DC4DB6D5D01B39E25F2A4DBB00732EC209CE4393981AA716D1BC2BCB0C4A7E53B249894EBF962CD6E6"print aesDecrypt(a2b_hex(text))复制代码

运行得到,

解密出来是ok的,那么我们可以猜测加密字段构成应该是URL路径+"-36cd479b6b5-"+相关参数dict+"-36cd479b6b5-"+一个字符串MD5加密

关于MD5加密请参考我另一篇文章,这里详细分析略过

根据MD5特征值,可以判断这里是MD5初始化的地方,通过IDA的xrefs功能往上找大概就可以找到MD5加密函数,在MD5Upate的地方下个断点即可

完整加密函数如下

# -*- coding:utf-8 -*-
#!/usr/bin/env pythonfrom binascii import b2a_hex
from Crypto.Cipher import AES
import hashlibdef md5encrypt(st):m1 = hashlib.md5()m1.update(st)return m1.hexdigest()def md5forencrypt(path,DICT):st = ("nobody"+path+"use"+DICT+"md5forencrypt")return md5encrypt(st)def aesEncrypt(path,DICT):sign = md5forencrypt(path,DICT)text = (path+"-36cd479b6b5-"+DICT+"-36cd479b6b5-"+sign)# 以<0x0f>填充text = text + ('' * (16 - (len(text) % 16)))encryptor = AES.new("e82ckenh8dichen8", 1)ciphertext = encryptor.encrypt(text)return b2a_hex(ciphertext).upper()param = aesEncrypt('/api/v3/playlist/detail','{"id":"3778678","n":"1000","t":"0","s":"5","header":{"os":"android","MUSIC_A":"47e30a9b79cacd303faa6206c9624f7af174fd4dc1e79a245ad0c89c6f02c047241e21fec819257d186cf6d47c5b59432be083a8be0029631345e5a25a2e07b6055ecea420ae497888b724f769023877e1aa0cbe6d8d955c7f5dbdeda01813d630f43bc9c81dbc26fc93e2ea9ac9a75a44dc3cd7eec60254bd74785bfe30031e5b60d04ec53518238328c980cd21a668","requestId":"1528527808788_249","mobilename":"Nexus5","osver":"4.4.4","__csrf":"36a9564495bf790cccb3c658339ac7fe","resolution":"1776x1080","channel":"tencent","appver":"3.1.2","deviceId":"MzUzNDkwMDY3NjU1MzA0CTg4OmM5OmQwOmZjOjMwOjBkCTU3ZGZmOThmYjUyNDBkMGUJMGEyYWZiMjcwMzM3ZGQ4MA%3D%3D"}}')print param
复制代码

运行

与发包参数一致,分析完成

后记

该文章仅用于分析学习,禁止用于违法用途,侵删!!!!

Android逆向——网易云音乐排行榜api(下)相关推荐

  1. Android逆向——网易云音乐排行榜api(上)

    1. 抓包分析 抓包可见,发送报文的body都是params=xxxxxxx这种格式的,于是可以判断params是个逆向的关键字 2. JEB反编译原包,Java层静态分析 反编译之后发现,几乎所有的 ...

  2. Android 仿网易云音乐App

    因为工作实在是有点忙,所以还没完成成品,就先挂到GitHub上.日后慢慢更新啦. 项目地址 GitHub地址,希望大佬们点个star GitHub仿网易云音乐App 效果展示 注:因为视频太模糊,每日 ...

  3. android仿网易云音乐、即时通讯、bilibili、沙漏动画等源码

    Android精选源码 android仿网易云音乐安卓版源码 android开源即时通讯,实时传讯IM源码 android类似淘宝的商品详情页源码 android面向.艺术家.设计师等创意类作品源码 ...

  4. Android版网易云音乐唱片机唱片磁盘旋转及唱片机机械臂动画关键代码实现思路...

     Android版网易云音乐唱片机唱片磁盘旋转及唱片机机械臂动画关键代码实现思路 先看一看我的代码运行结果. 代码运行起来初始化状态: 点击开始按钮,唱片机的机械臂匀速接近唱片磁盘,同时唱片磁盘也 ...

  5. Android获取网易云音乐歌曲详细信息

    Android获取网易云音乐歌曲详细信息 一.目标 二.实现方案 三.最终方案 四.遗留问题 五.接下来 六.Finally 在<Android获取歌曲详细信息>一文中,介绍了几种获取网易 ...

  6. android 音乐播放器专辑图片旋转,Android实现网易云音乐的旋转专辑View

    本文实例为大家分享了Android实现网易云音乐的旋转专辑View,供大家参考,具体内容如下 一.前言 最近做过 类似网易云音乐专辑唱片的效果,这里记录下开发思路,仅供参考.但需求不完全与网易云音乐一 ...

  7. 网易云音乐在 Ubuntu 下缩放的问题

    网易云音乐在 Ubuntu 下缩放的问题 方式1: 更改 /opt/netease/netease-cloud-music/netease-cloud-music.bash 文件,具体更改:添加 ex ...

  8. python爬取网易云音乐排行榜数据

    python爬取网易云音乐排行榜歌曲及评论 网易云音乐排行榜歌曲及评论爬取 主要注意问题:selenium 模拟登录.iframe标签定位.页面元素提取. 在利用selenium定位元素并取值的过程中 ...

  9. python3之Scrapy+Selenium切换iframe抓取网易云音乐排行榜

    Scrapy+Selenium切换iframe抓取网易云音乐排行榜 iframe标签 Selenium (WEB自动化工具) Scrapy 框架 iframe标签 了解一下iframe 百度百科介绍的 ...

最新文章

  1. iphone开发 NSURL中fileURLWithPath和URLWithString的区别
  2. [科普]浅入浅出Liunx Shellcode
  3. OAF在打开的新页面中添加按钮,功能是关闭当前页面
  4. java 容器 线程_JAVA多线程并发容器
  5. 2021中超1 1010 zoto
  6. php建站静态,php网站如何生成静态
  7. 第六十六期:软件架构之道的一次感悟
  8. qpsk的matlab平方根升余,【求助】求助:【QPSK功率谱密度的matlab的代码】 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
  9. springcloud2.0以上版本_eureka控制台显示_找不到${spring.cloud.client.ipAddress}_没有显示成IP地址---springcloud工作笔记165
  10. 计算机图形学_bresenham画线算法的最简洁实现(已验证)
  11. 仓库出租平台有哪些_日用品仓库出租哪家划算周到
  12. linux安装字体库(simSun为例)
  13. matlab进行复数计算
  14. 怎么连接vm的远程服务器,vm虚拟机连接远程服务器(vm虚拟机搭建服务器)
  15. la la love on my mind
  16. python15 文件操作
  17. ios虚拟服务器降级,升级了iOS 12很后悔,没关系手把手教你如何降级!
  18. 无所不能的Java系列文章
  19. 如何在Power BI Desktop中创建词云生成器
  20. lex生成lex.yy.c代码流程解析

热门文章

  1. 推荐:2014年中国政府投资项目工程建设代建单位管理中心工程项目管理信息化GOVPM解决方案
  2. 2020数学建模国赛(A)炉温曲线
  3. 【云原生】-Docker容器技术小结
  4. 如何实现产销平衡_做好生产计划和控制的核心步骤(8)产销协同
  5. mac在linux服务器上部署前端项目
  6. 为什么越来越多30多岁的程序员开始迷茫呢?
  7. 百度2014校园招聘笔试面试汇总
  8. 上传图片到七牛云(前端和后端)
  9. JUnit自动化单元测试
  10. Pandas-如何对指定某列的NaN值进行替换或填充