博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android逆向——网易云音乐排行榜api(上)
阅读量:5746 次
发布时间:2019-06-18

本文共 2079 字,大约阅读时间需要 6 分钟。

1. 抓包分析

抓包可见,发送报文的body都是params=xxxxxxx这种格式的,于是可以判断params是个逆向的关键字

2. JEB反编译原包,Java层静态分析

反编译之后发现,几乎所有的字符串都被加密了

但是,是通过了a.auu.a.c这个方法进行了解密操作,跟进去

获得解密流程,先用base64解码字符串,然后遍历字符串与关键字进行异或

用python写之,同时逆向能获取加密方式,

from binascii import b2a_hexfrom base64 import b64decode,b64encodedef decrypt_string(d):	v0 = b64decode(d)	v5 = len(v0)	v4 = "Encrypt"	v2 = 0	v3 = 0	result = ""	while v2 
= len(v4): v3 = 0 result += chr(ord(v0[v2])^ord(v4[v3])) v2+=1 v3+=1 return resultdef encrypt_string(e): v0 = e v5 = len(v0) v4 = "Encrypt" v2 = 0 v3 = 0 result = "" while v2
= len(v4): v3 = 0 result += chr(ord(v0[v2])^ord(v4[v3])) v2+=1 v3+=1 return b64encode(result)# print decrypt_string("ZQcNBhwCAiQCWQ==")print encrypt_string("params")复制代码

可得params加密后是NQ8RExQD,搜索NQ8RExQD,找到

解密,agsCAhBf对应/eapi/,ag8TG1Y=对应/api/,对比我们抓到的包url为/eapi/batch,怀疑是NeteaseMusicUtils.serialdata这个方法进行的加密,跟进去查看,发现调用了一个叫poison.so的native函数

3. Ida动静态分析so中加密函数

ida打开poison.so发现函数识别不正常,需要修复

由于试过在程序启动后附加ida并不能正常调试,我们要在程序启动的时候进入,看看是否有反调试

惯例,先开启android server

adb push android_server /data/local/tmp #将android server push到手机上adb shell su # 登录手机cd /data/local/tmp mv android_server as # 未免有检测android_server这个文件名的反调试,因此先改名chmod 777 as # 赋予android server权限./as -p221 # 未免有检测23946默认端口的反调试,因此改端口adb forward tcp:221 tcp:221  # 转发端口到本地am  start -D -n  com.netease.cloudmusic/.activity.LoadingActivity #将程序断在程序入口处,等待附加复制代码

部分手机(比如小米)可能会出现防火墙权限问题,如不行请执行setenforce 0这一句

打开IDA -> Debugger -> Attach -> Remote ARMLinux/Android debugger

把断点下在linker,等到poison.so加载到内存之后下断在poison.so的JNI_OnLoad(没啥理由,就是想让程序停下来,可以把poison.so从内存中dump下来)

开启DDMS,转发端口,然后jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700

发现在libneutil.so在加载之后调试器被断掉了,没有执行到poison.so里面,判断应该是先在libneutil.so有反调试(旧版的做了check_android_server、bsd_signal单步调试陷阱)

由于之前改了android_server,所以实际上只有一个单步调试陷阱

int handler()  {      return bsd_signal(5, 0);  }  int set_SIGTRAP()  {      int result;      bsd_signal(5, (int)handler);      result = raise(5);      return result;  }  复制代码

这时候只要运行到BLX raise的时候把R0置0即可过掉反调试进入到poison.so里面

待续....

转载请注明出处*IC*,不然嘿嘿嘿....

你可能感兴趣的文章
nova分析(7)—— nova-scheduler
查看>>
Entity Framework 实体框架的形成之旅--Code First模式中使用 Fluent API 配置(6)
查看>>
OpenMediaVault 搭建git,ssh无法连接问题
查看>>
java多线程之:Java中的ReentrantLock和synchronized两种锁定机制的对比 (转载)
查看>>
mysql性能优化学习笔记-参数介绍及优化建议
查看>>
【Web动画】SVG 实现复杂线条动画
查看>>
使用Wireshark捕捉USB通信数据
查看>>
《树莓派渗透测试实战》——1.1 购买树莓派
查看>>
Apache Storm 官方文档 —— FAQ
查看>>
iOS 高性能异构滚动视图构建方案 —— LazyScrollView
查看>>
Java 重载、重写、构造函数详解
查看>>
【Best Practice】基于阿里云数加·StreamCompute快速构建网站日志实时分析大屏
查看>>
【云栖大会】探索商业升级之路
查看>>
HybridDB实例新购指南
查看>>
C语言及程序设计提高例程-35 使用指针操作二维数组
查看>>
华大基因BGI Online的云计算实践
查看>>
深入理解自定义Annotation,实现ButterKnif小原理
查看>>
排序高级之交换排序_冒泡排序
查看>>
Cocos2d-x3.2 Ease加速度
查看>>
[EntLib]关于SR.Strings的使用办法[加了下载地址]
查看>>