某汽车社区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 讨论下。


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


相关文章
|
19天前
|
存储 Java API
Android 浅度解析:mk预置AAR、SO文件、APP包和签名
Android 浅度解析:mk预置AAR、SO文件、APP包和签名
76 0
|
1月前
|
数据采集 小程序 网络安全
云擎技术---分析工信部APP备案的“传闻”
APP备案并非新事物,自2005年起已有非经营性互联网信息服务备案制度。备案针对的是网站主办者,而非用户,不涉及个人用户网络访问。网络接入服务提供者包括ISP和IDC,不限于三大运营商。通知要求不为未备案网站提供接入,但不影响国外软件使用。个人开发者不能涉及经营性内容,备案审核时长1-20个工作日。境内服务器和国内应用商店需备案,境外则无需。手机厂商不会开启白名单制,仅实行黑名单制。APP备案与民营经济发展壮大意见不冲突,工信部有权颁布相关规定。该政策不存在逐步试探底线情况,所有解读均有法律依据。
31 3
云擎技术---分析工信部APP备案的“传闻”
|
2月前
|
Java 关系型数据库 MySQL
社区便利店销售微信APP的设计与实现(源码+论文)_kaic
社区便利店销售微信APP的设计与实现(源码+论文)_kaic
|
3月前
|
网络协议 算法 Android开发
安卓逆向 -- 实战某峰窝APP(动态分析)
安卓逆向 -- 实战某峰窝APP(动态分析)
42 4
|
3月前
|
算法
某圈app算法分析
某圈app算法分析
19 0
|
3月前
|
算法 安全 数据安全/隐私保护
某影视APP算法逆向分析
某影视APP算法逆向分析
20 0
|
3月前
|
算法 Java
某江app算法分析
某江app算法分析
17 0
|
3月前
|
算法 数据挖掘 数据安全/隐私保护
某合伙人app算法分析
某合伙人app算法分析
15 0
|
3月前
|
移动开发 小程序 搜索推荐
【社区每周】“app_logo”提审接口logo大小升至2MB(2022年7月第一期)
【社区每周】“app_logo”提审接口logo大小升至2MB(2022年7月第一期)
24 0
|
1月前
|
移动开发 小程序
如何让uni-app开发的H5页面顶部原生标题和小程序的顶部标题不一致?
如何让uni-app开发的H5页面顶部原生标题和小程序的顶部标题不一致?