专栏首页小白帽学习之路移动安全(七)|实战获取某APP登陆算法

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

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的代码如图

本文分享自微信公众号 - 程序员阿甘(gh_a2e36d69d566),作者:辞令WhITECat

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python与安全(二)格式化字符串和Flask session

    2008发布的Python2.6开始有新的格式化字符串数str.format()。

    7089bAt@PowerLi
  • Linux常见的持久化后门汇总

    持久化后门是指当入侵者通过某种手段拿到服务器的控制权之后,通过在服务器上放置一些后门(脚本、进程、连接之类),来方便他以后持久性的入侵,简单梳理一下日常...

    7089bAt@PowerLi
  • ThinkCMF框架任意内容包含漏洞与MongoDB未授权访问漏洞复现的分析与复现

    ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建。ThinkCMF提出灵活的应用机制,框架自身提供基础...

    7089bAt@PowerLi
  • react-router之onEnter和onLeave

    在之前介绍过react-router的使用,在这里我们介绍一下路由的onEnter和onLeave,顾名思义,分别是路由进入之前和路由离开之前,我们可以在这段时...

    无邪Z
  • jQuery 事件对象,拷贝对象,多库共存

    jQuery 对DOM中的事件对象 event 进行了封装,兼容性更好,获取更方便,使用变化不大。事件被触发,就会有事件对象的产生。

    星辰_大海
  • 你用.NET开发APP时,在云平台打包APP要填个“包名”的含义

    在ios平台,包名有它专有的名词:bundle ID.bundle ID可以翻译成包ID,也可以叫APP ID或者应用ID,他是每一个ios应用的全球唯一标识,...

    Amanda.li
  • 7.6 最短路径

    1、假若要在计算机上建立一个交通资讯系统则可以采用图的结构来表示实际的交通网络。

    闫小林
  • 设计模式-单例模式

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。

    Anymarvel
  • 【PostgreSQL 架构】PostgreSQL 11和即时编译查询

    PostgreSQL 11正在酝酿之中,即将发布。同时,使用您自己的应用程序对其进行测试是确保社区在零点发行之前捕获所有剩余错误的好方法。

    首席架构师智库
  • 你用.NET开发APP时,在云平台打包APP要填个“包名”的含义

    在ios平台,包名有它专有的名词:bundle ID.bundle ID可以翻译成包ID,也可以叫APP ID或者应用ID,他是每一个ios应用的全球唯一标识,...

    Amanda.li

扫码关注云+社区

领取腾讯云代金券