Android逆向之旅---Android中分析某短视频的数据请求加密协议(IDA动态调试SO)第二篇

本文介绍了如何通过IDA动态调试Android SO文件,分析某拍视频的数据请求加密协议。作者首先通过抓包发现请求参数中没有签名,但返回数据是加密的字节数组。通过JADX全局搜索找到相关方法,发现解密工作在native层。通过IDA动态调试SO,发现在JNI中存在包名验证,通过修改指令绕过这一防护。最终,作者成功解密并获取到视频数据,同时总结了从中学到的技术和知识,包括签名信息的位置、SO文件防护机制等。
摘要由CSDN通过智能技术生成
一、逆向分析

年前必须搞定短视频四小龙,之前已经搞定某音和某山小视频了,那么今天继续来搞下一个,在之前一篇文章中已经详细分析了不了解的同学,可以点击详情:某音和某山小视频的数据请求加密协议,通过IDA动态调试so来解决一些问题,本文我们继续来看另外一个短视频的数据请求加密协议,这个就是传说中的某拍视频,不多说找到突破口还是抓包:


我们通过下拉一次数据,看到这个请求url发现请求中的参数信息没有携带签名信息,但是返回的数据确实加密的字节数组了。所以得先搞定这个字节数组了。直接用Jadx打开应用,然后全局搜索url字符串信息:


很容易就找到了这个,直接点击进入即可:


这里看到调用一个方法之后拿到字符串就开始直接解析json了,看看这个返回字符串方法:


看到,Jadx中解析失败,不过没关系,还是smali代码,大致能看懂,继续往下看:


这里需要你用过okhttp框架了,一看就知道这里用到这个框架,而且最终通过bytes来获取字节数组,我们看到这里又调用了一个方法,然后直接返回字符串了,去查看这个方法实现:


继续往下看,应该是个解密方法:


看到,这里依然把加密工作放到了native层了,我们操作依然很简单,直接把这个libte.so拷贝到我们的demo工程中,然后构造这个native类,直接调用native方法进行解密即可:


我们通过之前抓包看到,他的请求参数都是一些常规的信息,没有签名信息,为了简单,这里直接把这些参数拷贝出来写死利用okhttp框架进行数据请求:


当然这些参数后续肯定需要优化,实现动态获取最靠谱:


拿到请求之后的字节数据之后,然后调用native方法进行解密,我们直接运行看看日志信息:


可惜的是,发现了尽然解密失败。那么就要怀疑so中是否有判断逻辑了,直接使用IDA打开so查看:


直接F5查看对应的C代码,看到一个tinydecode函数的返回值,然后有一个判断,进入这个函数看看:


这里调用了strstr系统函数,这个函数主要用来判断第二个参数是不是第一个参数的字串,如果是就返回字串的指针,如果不是就返回空指针NULL;看到这里有个包名字段值,感觉应该和包名有关系,双击这个g_packagename字段,然后点击X键,查看调用的地方:


在JNI_OnLoad中进行赋值的,依然查看JNI_OnLoad函数代码:


这里开始进行赋值了,看看上面这里的sub_43B0函数怎么获取字符串信息的:


好吧,尽然是通过读取系统的这个文件来获取包名值,而不是通过全局的Context变量了。这个文件是很奇特的,只要在本应用中读这个文件就是当前应用包名,而是用命令行去查看这个文件是没任何内容的。这个知识点大家就记住一下就好了。


那么这个到底用当前应用包名和哪个包名进行比较呢?看上面的strstr函数的第二个参数是:


依然双击这个变量,然后点击X键查看赋值地方:


还是在JNI_OnLoad函数中,点击进入赋值代码:


看到一个特别的字符串信息和一个循环指令,可以猜想应该是通过这个字符串信息来获取最后的信息赋值给g_me变量,其实这里我们可以才想到这个值应该是应用的包名:com.yixia.xxxxxx;这样就可以理解为只有当前应用的包名正确才能正确调用逻辑,这个是一层简单的防护而已。就是为了防止自己的so文件被其他恶意程序调用的。


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值