学习安卓逆向分析的一个小菜鸟,记录分析的“快乐时光”,小白图个乐,大佬乎喷

分析的APP

英语配音狂包名:com.zhuoyue.peiyinkuang版本号:5.2.5模拟器安装最低版本:Android 4.4  (KITKAT)

抓包分析

1、安装到模拟器之前  首先通过普通的查壳工具查一下壳,显示没有壳然后用GDA 反编译后 显示出 有腾讯的Bugly服务打包 这个貌似不是加固在apk上面的 那就不管了

2、开始抓包输入随便输入手机号:13888888888 和密码:a12345678 抓到一个登陆包 ;:method: POST
:path: /api/app/v1/quickLogin
:authority: api.engdub.com
:scheme: https
content-type: application/x-www-form-urlencoded
content-length: 245
accept-encoding: gzip
user-agent: okhttp/3.12.0json=HAVQesRr7f7Hq7zeuzJ3FaRi9cXCixVlEfoCh4Yeq8nbxkmM1YhJVQpwCR%2FVnLZaRfkdREkUS8QclJZqiTDb%2BqcAKIbtxt1YkDbAqmU2UYW1pU%2FHOz1oc017bdKdTm8ZF%2FXjzxPFr5HfUnzubGWvyEiBVQjfRzHFhbyuh1LuaasWNHYAlWzVZ6%2BuK6bB9FTE&sign=FF0489EEEF0066729122226D6BD48D84是一个post请求包form 表单传了 两个参数 一个是 json  一个是  sign 那么 这个json 就一定是  手机号和密码的加密  的 sign 是加盐验证json数据的

3、GDA 反编译现在对GDA 真的是吹爆! 好用  反编译的数据也是比jadx的数据更加的容易看懂这个登陆数据包,因为关键词 json 和 sign 都是常用的参数关键词所以这次搜索定位的关键词 我选择了  URL的部分参数  quickLogin 为关键词搜索

通过 quickLogin 字符串搜索 可以搜索到 几条数据可以看到第一条 是完全匹配 登陆发送的URL的 直接双击点击进入

可以看到 这个 login 的方法中 传入了 四个参数 String p0,String p1,Handler p2,int p3通过上下文判断  可以知道  p0 就是 手机号码p1 就是密码 并且进行了 md5 的加密 然后 是 a uoa = new a()  新建了一个 uoa的a对象盲猜 应该是 进行 手机号码 密码 时间戳的 json 形式的键值对组合拼接=======================================然后 双击跳转到  sendPostEncodeAndResultDecode 方法里面去

通过层层的跳转,最终跳转到 sendPostEncodeAndResultDecode 定义的地方 也可以清楚的看到 json 和  sign 的 键值信息定义的地方了========================================================可以很明显的发现 是 AESUtil.aesEncode() 是 AES加密 双击进入方法 查看 

可以看到 "AES/ECB/PKCS7Padding", "BC"加密模式  和调用的 是 BC 的加密库然后 找一下 AES的密钥双击  AESUtil.encryptKey  进入查看密钥

发现了  AES 的密钥   是在 静态注册在 SO 层的 这不禁让我 有点慌 因为so 才刚刚触碰,并不是很懂。。。。。===================================硬着头皮 把 apk 文件 下面的lib 目录 打开,找到 libaescheck.so 后用 ida 打开  加载完后,打开 exports 导出表 查看,还好 只有一个导出函数   而且就是 这个 AES的密钥 

然后 双击进入函数后,是汇编代码,根本看不懂,就直接按F5 转成伪C代码转完以后,然后惊喜的是  这个函数的代码 非常的简单

int a1 是 env加载器 没有什么参数传入这个函数并且 直接就是 return 返回 字符串而已AES 的 字符串密钥 直接就 显示在我的面前  "wetnojaw6hkjas92"=======================================================喜出望外啊,那么 AES 的 加密模式 我知道了AES 的加密密钥我也知道了AES 的最终加密值 json  我也抓到了那么不就可以 解密了嘛

json AES加密数据HAVQesRr7f7Hq7zeuzJ3FaRi9cXCixVlEfoCh4Yeq8nbxkmM1YhJVQpwCR/VnLZaRfkdREkUS8QclJZqiTDb+qcAKIbtxt1YkDbAqmU2UYW1pU/HOz1oc017bdKdTm8ZF/XjzxPFr5HfUnzubGWvyEiBVQjfRzHFhbyuh1LuaasWNHYAlWzVZ6+uK6bB9FTEjson AES解密数据{"rs":[{"data":{"in":{"pojo":{"currentTime":1640162532804,"password":"e9bc0e13a8a16cbb07b175d92a113126","userName":"13888888888"}}}}],"id":"0"}可以看到的是除了 之前的 手机号码 MD5的密码 和 时间戳之外 还有几个参数 另外的几个参数 一看就可以固定不变

"sign", MD5Util.getSign(p0, Check.getKey())然后就是对 sign 这个值进行解密可以看到的是 通过 getSign  这个方法进行md5 加密的加密了 p0 和 Check.getKey()

双击 进入 这个getsign 方法后可以看到p0+"&key="+p1 的字符串 被 MD5加密 并且到 toUpperCase()  到大写p0 是 就是刚才AES 解密的数据{"rs":[{"data":{"in":{"pojo":{"currentTime":1640162532804,"password":"e9bc0e13a8a16cbb07b175d92a113126","userName":"13888888888"}}}}],"id":"0"}p1 就是  AES的密钥  wetnojaw6hkjas92那么 拼接起来就是 {"rs":[{"data":{"in":{"pojo":{"currentTime":1640162532804,"password":"e9bc0e13a8a16cbb07b175d92a113126","userName":"13888888888"}}}}],"id":"0"}&key=wetnojaw6hkjas92通过MD5 加密 就是  FF0489EEEF0066729122226D6BD48D84

和 转包数据中的 sign 值 是一模一样的 至此 该APP的 登陆算法协议分析完成PS:其实有时候在分析 算法和协议的时候,我觉得并不需要 全部按照逆向分析的流程去做比方就像刚才的p0的数据,其实在分析login方法的时候,只是发现了手机号 密码 和时间戳进行了键值对的拼接组合成json数据。但是,后续就不在继续往下分析了,关键是找到是什么算法加密的,那么后续就可以通过抓到包的数据进行解密,这样加密值里面有其他什么数据就一清二楚了。提升整体算法分析的效率!

3、xx配音狂app登陆算法分析【Android逆向分析学习】相关推荐

  1. 4、某手游app登陆算法分析【Android逆向分析学习】

    学习安卓逆向分析的一个小菜鸟,记录分析的"快乐时光",小白图个乐,大佬乎喷 分析的APP 泡泡手游包名:com.zqhy.xiaomashouyou版本号:8.3.7最小安装版本: ...

  2. Android逆向分析案例——某点评APP登陆请求数据解密

    今天,七夕,单身23载的程序汪,默默地写着博客~ 上一次的逆向分析案例中讲了如何去分析某酒店的APP登陆请求,为了进一步学习如何逆向分析以及学习其他公司的网络传输加解密,本次案例将继续就登陆请求的数据 ...

  3. 【Android 逆向】Android 进程代码注入原理 ( 注入本质 | 静态注入和动态注入 | 静态注入两种方式 | 修改动态库重打包 | 修改 /data/app/xx/libs 动态库 )

    文章目录 一.注入本质 二.静态注入和动态注入 三.静态注入两种方式 ( 修改动态库重打包 | 修改 /data/app/packageName/libs/ 下的动态库 ) 一.注入本质 进程注入本质 ...

  4. android app 自动登录,Android APP首次登录和之后自动登录流程

    Android APP首次登录和之后自动登录流程 Android APP首次登录和之后自动登录流程 App登陆保存数据流程 App因为要实现自动登陆功能,所以必然要保存一些凭据,所以比较复杂. App ...

  5. cocos creator接入微信登陆sdk android篇

    cocos creator接入微信登陆sdk 背景 项目引擎使用cocos creator,使用android studio集成开发工具,在开发之前先做好准备工作 在微信开放平台上创建好移动应用,拿到 ...

  6. Android学习--02(猜猜我的星座App源码+Android常用控件TextView+EditText+Button+ImangeView+DatePicker+App间通信+跳转页面)

    猜猜我的星座App 1 Android常用控件 1.1 TextView控件 1.1.1 简介 1.1.2属性 1.1.3 扩展属性 1.1.4 TextView的使用方法 1.1.5总结 1.2 E ...

  7. 微信登陆接入(Android/IOS(swift)/Java后台)

    本文章仅作为个人笔记 微信Android接入指南,需要登陆后查看(开放平台->资源中心->开发资源->移动应用->接入指南) 微信IOS接入指南,需要登陆后查看(开放平台-&g ...

  8. android开发课程表app数据库,基于Android studio 的课程表增删查改功能(基于sqlite)

    [实例简介]Android studio 用SQLite实现课程表的增删查改功能,:实现详情浏览.编辑.及新增功能.课程编号可以实现正则检查(编号规则XX00000,XX表示两位大写的字母,00000 ...

  9. Error:Execution failed for task ':app:dexDebug'. com.android.ide.common.process.ProcessException

    异常Log: Error:Execution failed for task ':app:dexDebug'.  > com.android.ide.common.process.Process ...

最新文章

  1. 算法设计与分析第1章 算法概述
  2. linux基本命令之rsync
  3. MNIST机器学习入门(学习记录)——1
  4. 在ABAP XSLT中调用ABAP类的方法
  5. Microsoft Lync
  6. 启航篇——四旋翼飞行器之入坑两年心路历程和毕设总结
  7. ts获取服务器数据_在 Angular6 中使用 HTTP 请求服务端数据
  8. 8255控制交通灯c语言源码,单片机程序 8255控制交通灯程序
  9. PL/SQL中导出整个表、表结构、部分数据、以及导入整个表
  10. 串口ISP方式下载单片机程序设计
  11. php 网页qq一键登录,给网站添加一键qq登录的功能
  12. 将文件打成压缩包下载(OSS或FASTDFS)
  13. flowable-ui(v6.7.2)简单的请假流程审批操作(二)
  14. freeRTOS 时间管理
  15. pyqt5出现 -1073741515 (0xC0000135) 错误的一个解决办法
  16. 【Joshua B. Tenenbaum】非线性降维的全局几何框架
  17. 编译原理实验四:验证Yacc的使用
  18. 极品鸿蒙系统 心月文谛,第五章:分身系统开启
  19. Fully-Convolutional Siamese Networks for Object Tracking全文翻译
  20. 项目时间管理(IT项目版)

热门文章

  1. 天嵌i.mx6q--2
  2. 苹果6s系统更新无服务器,我的iPhone6s国行 系统更新一直显示“正在检查更新”,无法更新是为什么?...
  3. 大数据24小时:地质局发布地质大数据共享平台,科大讯飞将语音识别植入腾讯小Q机器人
  4. 2022.01.02 Acwing寒假每日一题 笨拙的手指
  5. LEFT JOIN条件在on后面和在where后面的区别
  6. 28 关于 Finalizer
  7. Circular-Circular 和 Circular-Linear Regression
  8. /etc/security/limits.conf 控制文件描述符,进程数,栈大小等
  9. [读书笔记]《一本书读懂财报》
  10. 在设计条形音箱时,确保您的无线技术能够提供最高质量的、可靠的音频