某电商App 返回数据加密解密分析(四)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 某电商App 返回数据加密解密分析(四)

一、目标


最近在抓包某电商App的时候发现一个加密数据,它在做通讯地址请求的时候,请求数据做了加密。返回数据中的地址信息也是密文。62.png


今天我们的目标就是这个数据的加密解密。


App版本: v10.3.0


二、步骤

分析一下

1、数据的结尾是"==",说明是Base64编码,那么我们可以尝试去Hook Base64相关函数,然后打印堆栈。


2、返回数据格式是 json,那么我们可以尝试去Hook json相关的解析函数。


3、还一个方法就是尝试去搜索 CityNameCountryNameWhere 这几个关键字符串了。


先搜字符串吧


搜这个最长的 "Where"

63.png

发现了加密的函数 encrypt3DESECB ,没有搜到解密的函数。不过加密和解密大概率是在同一个类文件里面。64.png


顺着线索,我们找到了这里。


啥也别说了,Hook之。


上Frida

var utilsCls = Java.use('com.xx.lib.productdetail.core.utils.PDUtils');
utilsCls.encrypt.overload('java.lang.String', 'boolean', 'java.lang.String').implementation = function(a,b,c){
        var result = this.encrypt(a,b,c);
        console.log(">>> encrypt a=" + a + ",b=" + b + ",c=" + c);
        console.log("rc=" + result);
        return result;
}
utilsCls.decrypt.overload('java.lang.String', 'boolean', 'java.lang.String').implementation = function(a,b,c){
        var result = this.decrypt(a,b,c);
        console.log(">>> decrypt a=" + a + ",b=" + b + ",c=" + c);
        console.log("rc=" + result);
        return result;
}


跑一下,这次用的是Attach模式,有可能会提示包名找不到,我试了下使用App的中文名,居然可以Attach上,很神奇。


TIP: 记得参考之前的文章 91fans.com.cn/post/ldqsig… 把frida端口号改改


我们点一下"地址管理", 遗憾的是,木有输出。 看来找到不对呀。


再来一次


这下扩大点范围,搜索 where

65.png


结果不是很多 200来项,细细看来, 这个大兄弟最为可疑。


1、类名AddressSelectView,看上去像是给地址页赋值。

2、函数setWhere,看上去像是给地址变量赋值。


点进去看看吧

optString = optBoolean ? DesCbcCrypto.decrypt(optString, generateKey, (byte[]) null) : DesCommonUtils.decryptThreeDESECB(optString, generateKey);


又找到了两个解密函数,先把他俩都Hook一下。

var StrCls = Java.use('java.lang.String');
var desCbcCls = Java.use('com.xx.xxsdk.security.DesCbcCrypto');
desCbcCls.encrypt.overload('java.lang.String','java.lang.String','[B','java.lang.String').implementation = function(a,b,c,d){
        var result = this.encrypt(a,b,c);
        console.log("### encrypt  原文=" + a + ",密钥=" + b + ",d=" + d);
        console.log("rc=" + bytesToBase64(result));
        return result;
}
desCbcCls.decrypt.overload('java.lang.String','java.lang.String','[B').implementation = function(a,b,c){
        var result = this.decrypt(a,b,c);
        console.log("### decrypt  密文=" + a + ",密钥=" + b);
        console.log("rc=" + StrCls.$new(result));
        return result;
}
var desCommonCls =  Java.use('com.xxngxxng.common.entity.DesCommonUtils');
desCommonCls.encryptThreeDESECB.implementation = function(a,b){
        var result = this.encryptThreeDESECB(a,b);
        console.log("### encryptThreeDESECB a=" + a + ",b=" + b ) ;
        console.log("rc=" + result);
        return result;
}
desCommonCls.decryptThreeDESECB.implementation = function(a,b){
        var result = this.decryptThreeDESECB(a,b);
        console.log("### decryptThreeDESECB a=" + a + ",b=" + b ) ;
        console.log("rc=" + result);
        return result;
}


好了,这次双手合十,再跑一下。

66.png


没毛病,收工。


三、总结


字符串搜索可以适当的扩大范围。


Base64算法太容易实现了,所以Hook标准的Base64算法可能不好使。这时候可以尝试在代码里面搜一下 Base64 这个字符串,运气好的话可以把App里面自己实现的Base64算法找出来。


通常App经过好几轮的版本迭代,加解密算法说不定也升级了好几轮,所以不要钻牛角尖,你第一眼看到的算法也许是老算法,不要气馁,还可以继续寻觅。67.png


黑夜从来不会亏待晚睡的人,它会赐予你黑眼圈,和即将猝死的身体。


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


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


相关文章
|
4月前
【Azure 应用服务】App Service频繁出现 Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener 异常分析
【Azure 应用服务】App Service频繁出现 Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener 异常分析
|
29天前
|
安全 网络协议 网络安全
【Azure 环境】从网络包中分析出TLS加密套件信息
An TLS 1.2 connection request was received from a remote client application, but non of the cipher suites supported by the client application are supported by the server. The connection request has failed. 从远程客户端应用程序收到 TLS 1.2 连接请求,但服务器不支持客户端应用程序支持的任何密码套件。连接请求失败。
|
1月前
|
开发框架 监控 .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
|
2月前
|
JSON API 网络安全
App数据的爬取
App数据的爬取
43 3
|
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月前
|
存储 SQL JSON
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
|
4月前
|
缓存
【Azure Function】Function App代码中使用Managed Identity认证获取Blob数据时遇见400报错
【Azure Function】Function App代码中使用Managed Identity认证获取Blob数据时遇见400报错
【Azure Function】Function App代码中使用Managed Identity认证获取Blob数据时遇见400报错
|
4月前
|
开发框架 缓存 .NET
【App Service】在Azure App Service中分析.NET应用程序的性能的好帮手(Review Stack Traces)
【App Service】在Azure App Service中分析.NET应用程序的性能的好帮手(Review Stack Traces)
|
4月前
【Azure 事件中心】在Azure Function App中消费Event Hub数据,时常出现EventReceiveError
【Azure 事件中心】在Azure Function App中消费Event Hub数据,时常出现EventReceiveError