app逆向入门分析——APP登陆请求参数

环境配置:

Pyhton
Java
dex2jar(将apk反编译成java源码)
jd_gui(源码查看)
jadx
已root的手机或者安卓模拟器
fiddler

分析:

首先我们用fiddler抓包工具对app的登陆进行抓包,这个app抓包需要开启全局代理,不然会抓不到数据。

如果还不会使用全局代理抓包的朋友,可以看下前面一篇文章,里面有详细的抓包教程。

抓包的数据如下:
               <ignore_js_op>

发送验证码请求参数

我们可以看到有个 token 的参数,有经验的朋友知道,这是服务器后台生成的,而且在发送登陆验证码请求之前并没有其它的数据交换!

<ignore_js_op>

登录请求参数

这时候我们就要去看 app 源码找到这个参数的加密方式,然后用转换成 Python 代码生成。

接下来就带大家就一步一步来破解这个参数。

破解过程:

我们要获取app源码,就要对app进行反编译,反编译方式很简单,直接用工具搞定。
有两种反编译方式可供选择,反编译过程如下:

1.将安卓app的后缀更改为可解密的包,并解压
<ignore_js_op>

2.将解压后生成的后缀为 .dex 复制到 dex2jar 安装目录中
<ignore_js_op>

3.DOS命令行进入此文件夹,然后执行命令:dex2jar.bat   classes.dex

这个app有两个 *.dex *文件,所以两个* .dex* 文件都需要执行

执行完之后会生成两个对应的  .jar 文件,效果如下:

<ignore_js_op>

4. 生成.jar文件就是apk的源码了,我们使用 jd_gui 来查看源码 <ignore_js_op>

幸运的是这个app并没有加固,有app进行了加固,像腾讯乐固,360加固等等
<ignore_js_op> 
<ignore_js_op>

对于这种我们不能直接反编译,首先需要脱壳,然后再反编译

5.第二种反编译的方法是直接使用工具 jadx 打开 .apk 文件

剩下的事就是仔细阅读代码,分析其中的逻辑了。

6.根据请求或响应的参数去源码中搜索加密方式

需要注意的是,反编译的代码非常混乱,错误很多,并且apk经过混淆,变量名都消失了,这时一定要有有耐心,仔细研究代码。
根据前面请求、响应参数去搜索,或者请求的 url 地址去搜索,而且经验很重要

<ignore_js_op>

搜索结果

然后根据这些搜索到的结果慢慢去找。我们主要找到发送请求的时候定义参数的代码,然后往上追溯,
在查找的过程中要尽可能的多尝试,大胆猜测

最后我根据 keycode 找到了登录响应参数的生成函数

<ignore_js_op>

登录响应参数

其中有下划线的地方,我们可以直接点进去

<ignore_js_op>

加密方法

这部分代码就是加密的方法!

验证我们把源码拷贝出来,分析加密参数
private String c(String paramString)
  {
    Date localDate = new Date();
    Locale localLocale1 = Locale.CHINA;
    String str1 = new SimpleDateFormat("yyyyMMdd", localLocale1).format(localDate);
    Locale localLocale2 = Locale.CHINA;
    String str2 = new SimpleDateFormat("MMdd", localLocale2).format(localDate);
    StringBuilder localStringBuilder1 = new StringBuilder();
    String str3 = paramString.substring(7);
    StringBuilder localStringBuilder2 = localStringBuilder1.append(str3);
    StringBuilder localStringBuilder3 = localStringBuilder1.append(str2);
    String str4 = localStringBuilder1.toString();
    StringBuilder localStringBuilder4 = new StringBuilder();
    StringBuilder localStringBuilder5 = localStringBuilder4.append(paramString);
    StringBuilder localStringBuilder6 = localStringBuilder4.append("|");
    StringBuilder localStringBuilder7 = localStringBuilder4.append(str1);
    String str5 = localStringBuilder4.toString();
    try
    {
      str5 = zxw.data.c.b.a(str5, str4);
    }
    catch (Exception localException)
    {
      localException.printStackTrace();
      str5 = null;
    }
    return c.a(str5);
  }
其中生成了两个参数 str5str4 传到加密函数。
下面是 str5 的生成代码
String str1 = new SimpleDateFormat("yyyyMMdd", localLocale1).format(localDate);
StringBuilder localStringBuilder4 = new StringBuilder();
StringBuilder localStringBuilder5 = localStringBuilder4.append(paramString);
StringBuilder localStringBuilder6 = localStringBuilder4.append("|");
StringBuilder localStringBuilder7 = localStringBuilder4.append(str1);
String str5 = localStringBuilder4.toString();
str1 = 20190319,也就是今天的日期
str5 = 传过来的参数 + ‘|‘ + ‘20190319‘
那么 str4 呢
String str2 = new SimpleDateFormat("MMdd", localLocale2).format(localDate);
StringBuilder localStringBuilder1 = new StringBuilder();
String str3 = paramString.substring(7);
StringBuilder localStringBuilder2 = localStringBuilder1.append(str3);
StringBuilder localStringBuilder3 = localStringBuilder1.append(str2);
String str4 = localStringBuilder1.toString();

java的 substring() 方法类似 python中的字符串切片,只是 substring() 方法返回字符串的子字符串。

那么我们可以推测,paramString 是一个长度大于7的字符串。这里大胆的猜测是我们提交的那个手机号码,因为我们请求的时候只提交了这个参数。

所以 str4 = ‘手机号码后四位‘ + 0319
如果不知道生成的方式,就用 java运行一波,将这两个参数打印出来,是最方便快捷的方法~~

既然知道加密参数了,接下来就是验证了
源码加密的方法如下:

<ignore_js_op>

下面是用 python 代码改造后的加密

<ignore_js_op>

运行之后的结果为 False,仔细看两者字母,数字基本都是一样的,感觉应该是对了,但还是有点差异!
再返回去看看源码,源码中最后将生成的加密数据再传给了某个函数再返回

return c.a(str5);

下面是这个 *c.a *的函数:

public class c
{
  public static String a(String paramString)
  {
    return paramString.replaceAll("\\+", "!");
  }
}

原来是将 "+" 替换成了 "!"
所以我们将之前运行出来的结果中的 "+"  替换成  "!" 就是完全正确了!
so, 我们就将这个 token 参数给破解了!

总结

1.对于app加密的要有耐心,尤其是在根据参数在源码中寻找加密方式的时候,更加需要耐心。
2.善于利用搜索引擎,碰到看不懂的方法,就去网上多搜索。
3.如果认识大佬,当然是要抱紧大佬的大腿啊,多问问大佬,会让你事半功倍!

当你解决的问题那一刻,你就会发现之前受的苦都是值得的!

更多技术资讯可关注:gzitcast

原文地址:https://www.cnblogs.com/heimaguangzhou/p/11572323.html

时间: 2024-10-30 10:11:53

app逆向入门分析——APP登陆请求参数的相关文章

Android无需权限显示悬浮窗, 兼谈逆向分析app

最近UC浏览器中文版出了一个快速搜索的功能, 在使用其他app的时候, 如果复制了一些内容, 屏幕顶部会弹一个窗口, 提示一些操作, 点击后跳转到UC, 显示这个悬浮窗不需要申请android.permission.SYSTEM_ALERT_WINDOW权限. 如下图, 截图是在使用Chrome时截的, 但是屏幕顶部却有UC的view浮在屏幕上. 我使用的是小米, 我并没有给UC授悬浮窗权限, 所以我看到这个悬浮窗时是很震惊的. 截图 悬浮窗原理 做过悬浮窗功能的人都知道, 要想显示悬浮窗, 要

一文了解安卓APP逆向分析与保护机制

"知物由学"是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道."知物由学"希望通过一篇篇技术干货.趋势解读.人物思考和沉淀给你带来收获的同时,也希望打开你的眼界,成就不一样的你. 以下为文章正文: 想知道Android App常见的保护方法及其对应的逆向分析方法吗? 网易云易盾资深安全工程师 钟亚平 3月17日,安卓巴士全球开发者论坛在重庆举办,网易资深安全工程师钟

HTML5 Plus移动App(5+App)开发入门指南

HTML5 Plus移动App,简称5+App,是一种基于HTML.JS.CSS编写的运行于手机端的App,这种App可以通过扩展的JS API任意调用手机的原生能力,实现与原生App同样强大的功能和性能. HTML5 Plus规范 通过HTML5开发移动App时,会发现HTML5很多能力不具备.为弥补HTML5能力的不足,在W3C中国的指导下成立了www.html5plus.org组织,推出HTML5+规范.HTML5+规范是一个开放规范,允许三方浏览器厂商或其他手机runtime制造商实现.

Hybrid APP基础篇(二)-&gt;Native、Hybrid、React Native、Web App方案的分析比较

说明 Native.Hybrid.React.Web App方案的分析比较 目录 前言 参考来源 前置技术要求 楔子 几种APP开发模式 概述 Native App Web App Hybrid App React Native App 分析 各大开发模式直观对比 如何选择开发模式 另类的app方案 微网页 微信小程序 其它 前言 参考来源 前人栽树,后台乘凉,本文参考了以下来源 对当前主流hybrid app.web app与native app工具的初步比较与分析 H5.React Nati

一个App完成入门篇-搭建主框架

通过第一课的学习,你已经掌握了如何通过debug调试器来跟PC上的设计器联调来实时查看UI设计效果.调试代码了,接下来通过一系列的demo开发教学你将很快上手学习到如何开发一个真正的App. 要开发App,最重要的就是确定主框架,好的主框架能起到减少工作量.简化代码的作用,而页面通常需要产品人员的UE设计和美工人员的UI设计,如下图所示,这两个步骤完成后才开始实现功能,由于篇幅限制,本教程不再赘述如何设计UI和UE,直接通过开发一个仿微信主页面的页面来做示范. 完整的demo请参考下载地址,可以

一个App架构例子分析--使用MVP模式;使用Otto实现模块通信

一.这个App整体的架构划分: 分为四大模块: 1.app模块 2.common模块 3.domain模块 4.model模块 app模块的依赖: dependencies {     compile fileTree(dir: 'libs', include: ['*.jar'])     compile project(':domain') ... } 它依赖domain,领域层模块.在app模块中,应用了MVP模式,把一个activity中的View和Presenter划分掉. domai

黑马day04 表单请求参数&amp;中文乱码分析

实验: 1.获取post以及get请求方式的参数 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>param.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"

【转帖】H5 手机 App 开发入门:概念篇

H5 手机 App 开发入门:概念篇 http://www.ruanyifeng.com/blog/2019/12/hybrid-app-concepts.html 作者: 阮一峰 日期: 2019年12月10日 感谢 腾讯课堂NEXT学院 赞助本站,腾讯官方的前端课程 免费试学. 手机现在是互联网的最大入口.根据<中国互联网报告>,手机网民已经超过8亿,人均每天上网三个多小时. 毫不奇怪,手机应用软件(mobile application,简称 mobile App)的开发工程师供不应求,一

史上最简单的个人移动APP开发入门--jQuery Mobile版跨平台APP开发

书是人类进步的阶梯. ——高尔基 习大大要求新新人类要有中国梦,鼓励大学生们一毕业就创业.那最好的创业途径是什么呢?就是APP.<构建跨平台APP-jQuery Mobile移动应用实战>就是一本写给没钱没身份没资历的创业小白看的APP书,看完这本书你可以拥有自己的一个APP,不用花钱就能移植到其他移动平台,支持iOS,Android,Windows Phone!!!!!!!!找个最便宜的来练手吧!  小白APP交流Q群:  348632872 清华大学出版社推出的<构建跨平台APP:j