某汽车社区App 签名和加解密分析

公众号: 奋飞安全 等级 58 0 0
标签: httpsbase64png

一、目标

稼轩长短句有云:宝马雕车香满路。从此香车美女就成了标配。这不李老板还没聊几个mm,又开始准备换车了。

今天我们的目标是 某汽车社区App v8.0.1。

二、步骤

脱个壳

李老板说这个App很拽,貌似是某个企业版的壳,连 Xcube都不好使,调试不了。

我们先不管他拽不拽,先用 BlackDex 把壳脱了先。

BlackDex提示脱壳成功,但是对应的目录下只有一个dex文件,明显不对

某汽车社区App 签名和加解密分析

还好我们有备用方案,据说 FDex2 脱壳也不错,搞起来。

忧伤的是,FDex2说不支持我的手机。 原因是我的系统版本太高 Android 10。

罢了,手机咱还是有好多部的。当年找李老板申请从Android 4 - Android 10 都买了一部,测试用嘛。

先找了一台Android 8.1 。正好这台机器上也有 BlackDex。顺手试试吧。

某汽车社区App 签名和加解密分析

难道脱壳还和系统有关系? 正告各位兄弟: 高低版本的Android都备着,哪个能脱用哪个

抓个包

某汽车社区App 签名和加解密分析

数了数signature,还是32位,这就尴尬了,难道还是MD5。

不管了,先搜搜哦

某汽车社区App 签名和加解密分析

结果不多,这个 Map.put 太赤果果了,盘它。

某汽车社区App 签名和加解密分析

感觉上应该是这个sign了。

上Frida

var utilCls = Java.use("com.alibaba.sdk.android.oss.common.utils.OSSUtils");
utilCls.sign.implementation = function(a,b,c){
    console.log(TAG + "a = " + a);
    console.log(TAG + "b = " + b);
    console.log(TAG + "c = " + c);
    var rc = this.sign(a,b,c);
    console.log(TAG + "sign = " + rc);
    return rc;
}

跑起来。

TIP: 忘了插播一下,这个App没有那么拽,手机里面跑葫芦娃 hluda-server-15.xx,然后就可以跑起来。

忧伤的是,木反应。 不科学呀。

仔细看看 Signaturesignature 傻傻的分不清楚。居然犯这种低级错误。千万不能让李老板知道,不然快年底了,他肯定以这个为理由不给我加工资。

某汽车社区App 签名和加解密分析

把忽略大小写勾掉。再搜一遍,这次只有两个结果了,但是这两个结果看上去都不咋地。

这时需要祭出 找朋友 大法了。从同一个请求包里面另外找一个看上去比较稀有的参数来搜。这次我们看上了 nonce

某汽车社区App 签名和加解密分析

这里看上去有戏。

某汽车社区App 签名和加解密分析

进去看看,我们看到了亲爱的MD5。毫不犹豫的Hook之。

var utilsExCls =  Java.use("com.aliyun.common.utils.MD5Util");
utilsExCls.getMD5.implementation = function(a){
    console.log(TAG + "a = " + a);
    var rc = this.getMD5(a);
    console.log(TAG + "Md5 sign = " + rc);
    return rc;            
}

这次逮住了

Md5 sign = 35c40cb2b0fcf2a61ad316be7e912370

可以收工了。

某汽车社区App 签名和加解密分析

返回数据加解密

某汽车社区App 签名和加解密分析

我们从抓包结果来看,请求包和结果里面都有一组 sd= 开头的加密数据。 看上去像是详情页面的数据。

如何定位呢?我们先分析下特征,这组数据有三个特征:

1、sd= 开头

2、数据都是大写的M开头

3、== 结尾,那大概率是Base64

先从Base64入手

var Base64Class = Java.use("android.util.Base64");
Base64Class.encodeToString.overload("[B", "int").implementation = function(a,b){
    var rc =  this.encodeToString(a,b);        
    console.log(">>> Base64 " + rc);
    return rc;
}

跑起来,忧伤的是,木有结果。(可能是Base64在so层做或者干脆自己实现Base64算法)

那就换个方法,搜索 sd= 或者 "sd"

轻松定位到了 CheckCodeUtils 这个类

var CheckCodeUtils = Java.use("com.cloudy.lxxxlxxxbang.model.request.retrofit2.CheckCodeUtils");
var encrypt = CheckCodeUtils.encrypt.implementation = function (paramString, paramInt) {
    console.log(TAG + 'aaa encrypt paramString:' + paramString);
    console.log(TAG + 'aaa encrypt paramInt:' + paramInt);
    var result = this.encrypt(paramString, paramInt);
    console.log(TAG + 'aaa encrypt result:' + result);
    return result;
}

var decrypt = CheckCodeUtils.decrypt.implementation = function (paramString) {
    console.log(TAG + 'aaa decrypt paramString:' + paramString);
    var result = this.decrypt(paramString);
    console.log(TAG + 'aaa decrypt result:' + result);
    return result;
}

完美,结果就不截图了。

三、总结

关键字符串搜不到的时候,可以考虑考虑找找他们的朋友。

逆向分析是实践课,没有定法。不要纠结细枝末节,也不要探究方法是否正统。能抓到老鼠就行。

预告一下,下节课咱们用 unidbg来跑这个算法。顺便尝试还原它

某汽车社区App 签名和加解密分析

金屑虽贵,落眼成翳

TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一起学习探讨技术。有问题可以加我wx: fenfei331 讨论下。

关注微信公众号:奋飞安全,最新技术干货实时推送

收藏
评论区

相关推荐

爬虫入门经典(二十二) | 破解base64加密之爬取安居客
大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行
某站App签名算法解析(一)
一、目标我们来分析某站 App的sign签名算法,先搜索一下 游戏 ,抓包结果: 二、步骤 这个sign依然是32位的字符串都9020年了,这种规模用户的App应该是不会裸奔在java层了,我们就直接一点,在so里面搜索 sign可惜没有结果…… 藏起来的东西一定是重要的东西so层导出函数给java层调用,有两种方法,一种是静态注册,直接会体现在so的导出表
JDK8之新特性扩展篇
![](https://oscimg.oschina.net/oscnet/fc290278-6ac4-488e-a315-6bb4ef7c4bbf.gif) ![](https://oscimg.oschina.net/oscnet/6d0298a9-a88c-466d-86cd-a7c4f7516073.jpg) 之前分篇章讲了一些JKD8中
Java Web 实现 HTTP Basic
Basic 认证是一种较为简单的 HTTP 认证方式,客户端通过明文(Base64 编码格式)传输用户名和密码到服务端进行认证,通常需要配合 HTTPS 来保证信息传输的安全。界面如下。 ![](https://oscimg.oschina.net/oscnet/up-94d8097b336216fe118be732975765663a7.png) 下面
Java base64编码解码工具类
前几天无意中看到Java中有Base64编码,不解的我去百科了一下,了解了Base64的基本使用和实现原理,于是在空暇时自己手动写了一个,这个类可以完成对字母数字的编码和解码工作,但是对于中文,还没有仔细研究其编码的实现过程。至于什么是Base64,用它来干什么,请移步到:[http://zh.wikipedia.org/zh-cn/Base64](http
PHP 开发 APP 接口
APP 版本升级以及 APP 演示 ① 版本升级分析以及数据表设计 ② **版本升级接口开发**以及 APP 演示 ![](https://oscimg.oschina.net/oscnet/e2bbac4a62f67997e4684c8ad4485029fd5.png) ![](https://oscimg.oschina.net/oscnet/8
Html5 FileReader 对文件进行Base64编码
以Base64进行编码的数据Url开始越来越广泛的被应用起来,原来做Base64转换要自己写一个小程序来转,其实Html5的FileReader的readAsDataURL方法读取出的数据就已经是Base64数据格式的Url了,利用FileReader实现一个对本地文件进行读取并且转换为Base64 Url的页面也非常简单。 页面地址: [http://z
1. 容器化部署一套云服务 第一讲 Jenkins(Docker + Jenkins + Yii2 + 云服务器))
容器化部署一套云服务系列 [1\. 容器化部署一套云服务之Jenkins](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.cnblogs.com%2Fjackson0714%2Fp%2Fdeploy1.html) 一、购买服务器 ======= 服务器 ![caeef00
App安全“红宝书”来了~~
![](https://oscimg.oschina.net/oscnet/707e5d76313311e40d640cf116b01405508.png) 我们接触Android App安全测试最早还是在2014年初,当年移动互联网产业快速发展,App井喷式爆发,绝大多数使用的是Android系统。那时大多数开发者没有做好App的安全防护措施,面对移动互
Base64编码
###Base64的来源 Base64的主要用途是将不可打印字符转换成可打印字符,而什么需要这样转换呢?因为有些网络传输渠道并不能支持传输所有字节,一些不可见字符(如控制字符)在传统的邮件系统中就无法传输,而例如图片文件不可能每个字节都是可见字符,这样就导致用途这些渠道的用途受到很大限制。Base64正是解决这一问题,通过64个可见字符来编码各种字符,使得数
PHP+jQuery寥寥几行代码轻松实现百度搜索那样的无刷新PJAX的分页列表和导航链接
![](https://static.oschina.net/uploads/space/2016/1208/171419_U00R_561214.png) PHP寥寥几行代码轻松实现百度搜索那样的分页列表和导航链接,某些语言的拥趸哭晕在厕所. <?php $app = array( 'db_prefix' => '
React学习笔记一 ,初始环境搭建
全局安装create-react-app :cnpm install -g create-react-app 创建一个自己的项目my-app: create-react-app my-app 进入项目my-app: cd my-app 运行项目:cnpm start 目录结构如下图: ![](https://static.oschina.net/u
SVG背景图笔记
url引用格式:url('data:image/svg+xml;base64') ---------------------------------------- 实例: 准备好SVG文件 ![](https://oscimg.oschina.net/oscnet/fafa7d14c2450cb3b4cd6cb9734da838a57.png) 源码
SVG背景图笔记
url引用格式:url('data:image/svg+xml;base64') ---------------------------------------- 实例: 准备好SVG文件 ![](https://oscimg.oschina.net/oscnet/fafa7d14c2450cb3b4cd6cb9734da838a57.png) 源码
某婚恋App _t 签名分析
一、目标最近也不让加班了,李老板每天早早的就回家,小视频也刷的没意思了。还是好好找个mm正经聊聊吧。今天我们的目标是 某婚恋App的 v11.3.2。 二、步骤 抓个包\t 参数,看上去像是时间戳加上一个md5(掰指头数了数,一共32位)。jadx搜一搜 \t , 我去,10几万条结果。一时激动,都忘了我的独门秘籍了。这种签名一般会以字符串的方式存入一个m