前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >移动安全(七)|实战获取某APP登陆算法

移动安全(七)|实战获取某APP登陆算法

作者头像
Power7089
发布2020-07-27 16:53:58
1K0
发布2020-07-27 16:53:58
举报
文章被收录于专栏:闪石星曜CyberSecurity

0x00背景

本文依然是团队大佬 非尘 学习逆向的学习笔记,这一系列都将以实验的方式进行知识点学习和总结,后续将持续更新,不喜勿喷~

本文及后续文章中使用到的靶场地址:

https://adworld.xctf.org.cn/task/task_list?type=mobile&number=6&grade=0。

0x01实验目的

获取xxxAPP的登录加密算法。

0x02实验工具

Jeb,Fiddler,雷电模拟器,真机nexus5,spyder(hook用的,也可以notpad++)

0x03实验分析

1)首先将app安装到雷电模拟器中,打开运行,点击登录,使用Fiddler抓取登录包:

2)通过抓包分析发现,该app请求登录的时候,传递的数据只有sign加密未知,剩下几个参数都是已知的,因此破解加密算法的关键就在sign这个参上。使用jeb搜索字符串”sign”,发现多处存sign,然后可以通过别的字段来进行定位,通过分析登录包和代码可得知,多处存在sign区别在system_name,然后在我们初步断定的地方下断点来动态调试(在所有你认为可疑的地方下断点是非常必要的,定位关键代码往往是我们破解的关键),下断点的快捷键是ctrl+b。

3)然后使用jeb开始动态调试,发现成功断在刚刚的位置,然后分析此处的代码逻辑。通过代码可知,sign的取值为b.a()的返回值,传递进去两个参数,一个为请求参数的hashMap值,注意,此时参数params这个集合中是没有将time添加进去的,另一个为时间戳,跟进b.a(),发现params.getURLHashMap是HashMap类型的(HashMap中存储的是键值对方式),详细代码分析如图所示:

4)通过分析可知,sign的值是将如下图所示的几个参数排序后,取其值然后进行某些字符的替换,然后进行MD5处理,然后拼接上一固定字符串和时间戳进行二次md5操作即为最终的sign值。

5)为了验证我们的逻辑是否正确,我们可以采用多种方式来进行验证,如动态调试获取相应的返回值,hook获取返回值,匿名管道(哈哈,也称log日志打印,smali插桩)方式验证。在这里我使用动态调试和hook的方式来进行验证(由于不会将java中hashmap类型转为js中的hashmap类型,由此借助动态调试观察一下加密前的参数值)。首先在tostring处下断点,然后启动调试到此处,查看对应寄存器的值v9,可发现为其值为account=18434366456&clientid=1&device_id=865166020016286&ip=172.16.2.12&modules=cloudlogin%3A1&password=qwerasdf&siteid=10001&system_name=android&type=android,和我们分析的完全一样

6)然后使用Friday的hook查看两次md5的值,发现最后一次hook的值和我们抓包获取的值完全一样,验证了我们的分析没有错误。

7)hook的代码如图

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员阿甘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档