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

公众号: 奋飞安全
• 阅读 543

一、目标

稼轩长短句有云:宝马雕车香满路。从此香车美女就成了标配。这不李老板还没聊几个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 讨论下。

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

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
另一个生鲜App 抓包和mfsig签名分析(一)
一、目标市面上生鲜App一大堆,买菜也确实是高频次的刚需,这些生鲜App还都有一些有意思的共性:大都加壳了大都不好抓包今天我们分析的是某生鲜Appv9.9.59的mfsig签名。二、步骤上jadx看看这么少的包名和类名,基本可以断定是加壳了。那就先复习下BlackDex脱壳脱完壳的结果拖到PC上,赶紧jadx一下,搜一搜"mfsig"
某酒店App sign、appcode签名解析(二) 脱壳分析
一、目标之前我们介绍过。带壳分析也是迫不得已,谁不希望零距离接触呀。App升级了5.3.3,我们的工具也升级了。今天的新朋友是BlackDex脱壳延时Hook二、步骤BlackDex脱壳安装BlackDex在显示的进程列表中选择com.platexx.boxxoota是的,壳已经脱好了,脱壳后的文件在/sdcard/Android/d
Peter20 Peter20
3年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
公众号:  奋飞安全
公众号: 奋飞安全
Lv1
奋飞,国家高级信息系统项目管理师,独立安全研究员。 http://91fans.com.cn/
文章
59
粉丝
4
获赞
44