​最近重新燃起了运动的热情,经常使用到一款软件,里面有些内容需要付费观看,所以决定给它一些特殊的关爱。

重新打包是避不开的,现在大多app都会做防护,所以决定什么都不做只是反编译重打包试下,果然重打包之后登录不了。。。

我这里使用手机号+验证码的方式进行登录

接口请求分析

将apk反编译之后再重签名打包后,发现登录时会提示“非法的请求”,抓包发现登录接口返回码400

这种情况应该是服务端对请求做了校验,需要对请求参数进行分析。

这里使用的是手机号登录,请求body是包含手机号、验证码在内的几个参数

如果只是单单这几个参数,服务端肯定是没办法进行校验的,再看看header

果然,其中有个sign参数,服务端应该就是通过这个参数进行了校验,那么就需要了解这个值的生成逻辑。

代码逆向分析

1、首先选择了用jeb以sign为关键字全局字符串搜索,检索到了上百条结果,但是都没有定位到关键点,这里不再列出,看来只能换种方式去定位sign了。

2、因为已经知道登录接口/account/v3/login/sms,那就以它为入手点,同样先用jeb搜下,不幸的是可以检索到接口名称,但是无法直接定位到代码位置,那就反编译apk然后全局搜索吧,由于文件名已经混淆,最终定位到文件为smali_classes2/l/q/a/c0/c/q/a.smali

为了方便查看再用jeb定位到相应路径, 转换到java代码

从文件的内容可以看出这里是对各个接口的声明,追踪下调用关系,发现只有一处是在VerificationCodeLoginActivity中

可以看到在这个q1方法中,前面几行组装了LoginParams类型的请求参数,那最后一行应该就是发请求操作了,header参数也就是在最后一行的相关调用中生成的了。

最后一行连续调用了多个方法,不过可以先用排除法,从右向左看,匿名内部类看一下其中实现就知道是请求结束之后的回调,i(v0)调用的是上面的接口。

先看下getRestDataSource()方法得到的是什么,是个i类型的对象

看下Ll/q/a/c0/c/i类的实现, 其构造函数调用的a方法中,发现了interceptor,感觉离真相又近了一步,连续三个v0.b()方法,添加了三个拦截器,只是前两个被混淆了从名称看不出来(查看其实现,能看到intercept方法,也可进一步佐证)

逐一查看,在第二个拦截器intercept方法中发现了sign字样

毫无疑问需要看下sign是如何计算得到的,分析下intercept方法

如果对retrofit有一定了解,从这个if判断基本可以推断出v0是Request对象

sign的计算可以划分为三步:

1、拼接字符串

1)取出请求参数拼接成字符串

2)拼接v0.h().c()生成的字符串,这里不太好推断是什么,不过因为跟v0有关,应该也是请求相关的内容

3)追加了两个固定参数(这里暂时没想到这两个固定参数有什么用)

2、把拼接的字符串进行MD5运算

3、MD5值进行加密运算

为了验证推论对进行MD5运算、加密运算的两个方法进行了hook

可以看到拼接的字符串内容为请求参数+接口名+固定字符串,生成的MD5作为了加密方法的入参。参数拼接和生成MD5的运算都没有到什么特殊参数,那么应该是加密运算中有什么操作导致请求变成了非法请求。

加密方法最终调用的是一个native方法,该方法在libcryp.so中,ida查看方法实现

其中包含了签名校验,因为代码是使用“卫语句”进行判断的,所以比较简单的方法就是不等于改成等于,这样就可以绕过签名校验。

对应二进制如下图

beq: 数据跳转指令,标志寄存器中Z标志位等于零时, 跳转到BEQ后标签处,对应二进制0A

bne: 数据跳转指令,标志寄存器中Z标志位不等于零时, 跳转到BNE后标签处,对应二进制1A

解决问题

所以只需把对应位置二进制修改即可,使用010Editor打开文件定位到相应位置修改即可

然后重新打包验证,登录成功!!!


欢迎关注公众号:从技术到艺术

某K字头运动软件逆向分析-登录时非法的请求相关推荐

  1. 某K字头运动软件逆向分析-课程精讲

    本篇承接上一篇某K字头运动软件逆向分析-登录时非法的请求 在跟随视频训练时,很可能有些细节自己注意不到,以至于一些动作不规范,练习新动作时看一下讲解还是有必要的. 许多课程都是前面一两节可以免费观看讲 ...

  2. 关于学习软件逆向分析意义的阐述

    1对本课程教学地位的理解和想法(学习软件逆向分析的意义) 1.1逆向工程的起源 世界上最早的逆向工程其实来源于战争时期.在军事战争时期,各国之间常常存在水上作战,而船舶就成了运输和作战的重要工具.如下 ...

  3. 视频教程-x86/x64软件逆向分析入门-C/C++

    x86/x64软件逆向分析入门 成都理工大学优秀讲师,教授,二十年开发经验,和十六年一线教学工作经验,发表学术论文十余篇.参与包括863项目等多个国家级科研项目,参与包括微信机器人(WeChaty)等 ...

  4. 软件逆向分析系列教程

    笔者倾心打造的一款软件破解入门课程,为避免纠纷,本人编写了与本次内容相关的课程课件共各位逆向小白学习. 文章链接 文章标题 https://www.cnblogs.com/LyShark/p/1114 ...

  5. 考无忧2014职称计算机模拟考试题库软件 逆向分析研究:

    考无忧2014职称计算机模拟考试题库软件 这个软件是在非凡论坛看到的一款,有人求破就下载研究了下 用OD打开时发现这个软件有一定的反调试功能,你能看到反调试 字串XX 一路F8,不久看到如上字串, 这 ...

  6. linux软件逆向分析,详解对ELF64之手动脱壳的逆向分析

    应一位朋友之邀,对"吾爱论坛'ELF64手脱upx壳实战'一文"进行了再重现,考虑到朋友他对原文过程理解不深,特抽空行文,着重对每个步骤.每个知识点进行了分解,现共享出来以回馈社会 ...

  7. 在用autodock软件进行分析对接时,最后的分析相互作用报错,大家可以告诉一下是什么原因嘛

  8. 拿走不谢!固件逆向分析过程中的工具和技巧(上)

    将固件逆向分析,然后再将逆向分析后的内容转换为有用的东西,这个过程对于所有人来说都是一个耗时又耗力的过程.有时即使文件出现在你面前,你也无能为力,比如你可能会面临专有(几乎没有文档记录)的文件格式.奇 ...

  9. 第二届360杯全国大学生信息安全技术大赛部分解题思路(逆向分析)

    /* 逆向分析第一题解题攻略: 已限定为用户名为:strawberry 分析该程序算法,得出该用户名所对应的Key 正确答案:K$q*a_+@Xt 逆向分析第二题解题攻略: 已在压缩包中给定了一个用R ...

最新文章

  1. c语言交错级数前10项和,怎么求一个交错级数的和,谢谢
  2. servlet接收multipart/form-data表单数据
  3. 深度剖析目标检测算法YOLOV4
  4. 机器学习里面的树形模型
  5. 前端学习(2110):组件化得开发和实现步骤
  6. ehchache验证缓存过期的api_Ehcache缓存配置
  7. 15 - java 继承
  8. Vue小案例 之 商品管理------创建页面与部分数据
  9. qt设置顶层窗口_Python快速入门系列:PyQt5 快速开发GUI-窗口类型以及主窗口创建...
  10. mysql连表查询最大值_SQL 两个表联合查询记录中取最大值
  11. 博一结束后的一些反思 -- 该如何平衡科研与生活
  12. ros的插件库 pluginlib 的简介
  13. web性能压力测试工具http_load/webbench/ad
  14. vscode风格超酷个人主页源码
  15. 《概率论与数理统计》重学笔记
  16. vsto 批量删除列
  17. PCL八叉树的包围盒研究
  18. 【Linux服务器架设】搭建存储服务器-NFS
  19. 抢先看! Lumion 10 正式发布之核心功能预览
  20. 7款最流行的在线项目管理工具

热门文章

  1. VS2008安装失败解决案例一则
  2. 中软融鑫 java笔试题_中软融鑫2014校招java开发工程师笔试题
  3. 最后一次正确配置计算机,最后一次正确配置,win10恢复最近一次配置
  4. 《笑话大全》APP代码详解1
  5. 生活哲理故事系列之五(转贴)
  6. 64位 计算机 最大内存,64位操作系统能支持多大的内存?计算方法是什么?
  7. i.MX6UL -- 网络性能测试 iperf+jperf
  8. Linux 下 UltraEdit v15 破解 30 天试用限制
  9. VS2010调用Matlab 2010 引擎的相关设置及问题( error LNK2019: unresolved external symbol _engOpen referenced in )
  10. PSPad v4.5.3.2298