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

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

一、目标


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


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


二、步骤

脱个壳


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


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


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

29.png


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


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


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


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

30.png


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


抓个包

31.png

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

不管了,先搜搜哦32.png


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

感觉上应该是这个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 傻傻的分不清楚。居然犯这种低级错误。千万不能让


李老板知道,不然快年底了,他肯定以这个为理由不给我加工资。34.png

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


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

这里看上去有戏。

36.png


进去看看,我们看到了亲爱的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


可以收工了。37.png


返回数据加解密


38.png


我们从抓包结果来看,请求包和结果里面都有一组 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来跑这个算法。顺便尝试还原它39.png


金屑虽贵,落眼成翳


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


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


相关文章
|
5月前
|
小程序 前端开发
汽车报价资讯app小程序模板源码
汽车报价资讯app小程序模板源码
39 4
|
27天前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
3月前
|
安全
【Azure App Service】App service无法使用的情况分析
App Service集成子网后,如果子网网段中的剩余IP地址非常少的情况下,会在App Service实例升级时( 先加入新实例,然后在移除老实例 )。新加入的实例不能被分配到正确的内网IP地址,无法成功的访问内网资源。 解决方法就是为App Service增加子网地址, 最少需要/26 子网网段地址。
|
4月前
【Azure Function App】本地运行的Function发布到Azure上无法运行的错误分析
【Azure Function App】本地运行的Function发布到Azure上无法运行的错误分析
|
4月前
|
开发框架 缓存 .NET
【App Service】在Azure App Service中分析.NET应用程序的性能的好帮手(Review Stack Traces)
【App Service】在Azure App Service中分析.NET应用程序的性能的好帮手(Review Stack Traces)
|
4月前
|
C# 开发工具
【Azure 应用服务】Azure Function App使用SendGrid发送邮件遇见异常消息The operation was canceled,分析源码渐入最源端
【Azure 应用服务】Azure Function App使用SendGrid发送邮件遇见异常消息The operation was canceled,分析源码渐入最源端
|
4月前
|
网络协议 NoSQL 网络安全
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
|
6月前
|
移动开发 小程序 开发工具
微信支付的类型分析(JSAPI+APP+H5+NATIVE+付款码+合单)
微信支付的类型分析(JSAPI+APP+H5+NATIVE+付款码+合单)
579 1
|
6月前
|
数据采集 JSON 算法
使用Python爬取华为市场APP应用进行分析
这个网站也是作者最近接触到的一个APP应用市场类网站。讲实话,还是蛮适合新手朋友去动手学习的。毕竟爬虫领域要想进步,还是需要多实战、多分析!该网站中的一些小细节也是能够锻炼分析能力的,也有反爬虫处理。甚至是下载APP的话在Web端是无法拿到APK下载的直链,需要去APP端接口数据获取
|
7月前
|
移动开发 JavaScript 前端开发
APP的HTML5页面经过运营商网络被植入手机管家问题及分析,解决方案见新文章
APP的HTML5页面经过运营商网络被植入手机管家问题及分析,解决方案见新文章
61 0