开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 20655|回复: 8
收起左侧

[交流] so中加盐md5 简单分析过程

[复制链接]
发表于 2018-6-2 21:55:57 | 显示全部楼层 |阅读模式   重庆市重庆市
拿到app,无壳,国际贯例,抓包分析:
GET https://**********/api/app/user/getVcode?
mark=0
&medalState=0
&phone=13094613288
&type=0
&timestamp=1527586894475
&version=4.8
&version_code=480
&platform=android
&sys_version=6.0
&cid=10301
&partner_id=10002
&deviceId=3de9bd99a03eddfe427b1249148019dcc
&sign=de40fb6853879865e5b6fd89bd02fd4f HTTP/1.1
Host: ********
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/2.6.0

可以看到get请求中,有sign校验。既然它没有壳,直接拖入jadx中查找关键处

查找过程就不去截图了,直接来看调用加密语句的地方



可以看到sign是调用了EpUtils.getEpStr方法


到这里可以请晰地看出,getEpStr方法是GetEp 这个so文件中的本地方法
参数分别是上下文和需要加密的原文

按照安卓的规定,so文件名会在前面加上lib,后面加上.so后缀
我们在app的lib\armeabi-v7a文件夹中,找到libGetEp.so文件,拖入IDA中查看它的导出函数表

函数不多,直接双击,查看getEpStr函数



为了方便看查看,还是导入jni头文件,F5看下伪C吧

为了方便查看,适当改了些变量名。
逻辑很清晰明了,走了关键的函数

  1. <DIV class=blockcode>
  2. <BLOCKQUOTE>javaStr = ((*a1)->GetStringUTFChars)(a1, a4, 0);
  3. constStr = j_StringSub("803D35E66F721EB889446877F5ED051D", 3, 20);
  4. v9 = j_join4(javaStr, constStr, 2);
复制代码
就进行md5了。我们来看看这三名函数
由于java与C语言字符所占宽度不一样,
第一个函数:GetStringUTFChars将传入的原文,jstring格式转换成为UTF-8格式的char*
第二个函数:j_StringSub从字面意思,看起来是把字符串"803D35E66F721EB889446877F5ED051D"截取部分,做md5盐用,我们跟进去看看

除了前面部分的判断,关键的就是memcpy函数
函数原型:void *memcpy(void *dest, void *src, unsigned int count);
memcpy 函数用于 把资源内存(src所指向的内存区域) 拷贝到目标内存(dest所指向的内存区域)拷贝数量由count控制

根据调用这个函数时传入的参数("803D35E66F721EB889446877F5ED051D", 3, 20),可以看出,它是用为了把传入的字符串
从下标2开始,截取20个字符,也就是 "3D35E66F721EB8894468"

第三个函数:j_join4


可以看到把传入的char* (包括盐)进行了,排序,strcat重新拼接。

再把拼接的结果通过md5计算,return回去。

最后通过IDA动态调试这个方法,得到的结果与静态分析一致。分析结束。

抛砖引玉,还请高手勿喷。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

签到天数: 5 天

发表于 2023-5-13 15:52:03 | 显示全部楼层   湖北省武汉市
感谢分享
回复 支持 反对

使用道具 举报

签到天数: 5 天

发表于 2023-5-10 15:36:23 | 显示全部楼层   湖北省武汉市
感谢分享
回复 支持 反对

使用道具 举报

发表于 2020-3-29 14:16:38 | 显示全部楼层   广东省揭阳市
学到了学习到了
回复 支持 反对

使用道具 举报

结帖率:100% (5/5)
发表于 2020-3-15 18:23:00 | 显示全部楼层   山东省枣庄市
等更新 字数补丁
回复 支持 反对

使用道具 举报

发表于 2020-2-23 12:35:37 | 显示全部楼层   山东省济南市
6666666666666
回复 支持 反对

使用道具 举报

结帖率:89% (16/18)

签到天数: 9 天

发表于 2018-6-3 09:14:41 | 显示全部楼层   广东省惠州市
rcbing 发表于 2018-6-3 02:16
就是在md5的原文中,按某种规律加一串固定值进去,防止别人把请求的字段拼接起来猜sign啊。

哦,知道; 。这叫法真有意思..
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-3 02:16:07 | 显示全部楼层   重庆市重庆市

就是在md5的原文中,按某种规律加一串固定值进去,防止别人把请求的字段拼接起来猜sign啊。
回复 支持 反对

使用道具 举报

结帖率:89% (16/18)

签到天数: 9 天

发表于 2018-6-2 23:56:51 | 显示全部楼层   广东省惠州市
加盐什么意思..
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表