开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 48514|回复: 6
收起左侧

[android教程] Frida实战hook某app native层sign加密算法

[复制链接]
发表于 2019-7-4 21:17:52 | 显示全部楼层 |阅读模式   安徽省合肥市
本帖最后由 yshell 于 2019-7-4 21:23 编辑

目标APP:淘最热点 2.3.3
之前看v2ex上有人提问这个app抓不到新闻列表数据包,随之分析一波
抓到包后看到些数据加密,首先hookjava层算法,很轻松几个md5,这里就不说了,就sign没有找到
jadx打开apk 轻松找到关键位置

点进去看到加载了名为tre的SO,调用其中的sign函数进行加密

解开apk把libtre.so拉到ida分析一波,找到导出函数sign,点进去

然后F5查看代码
我们发现一处关键字符串,以及使用base64编码,然后SHA1进行哈希算法,由于抓包看到sign的长度是固定40位,这里确定最终使用sha1算法,所有直接hook这个sha1input方法。


写个frida脚本,hook非导出函数,需要拿到so的例子与方法偏移


执行结果 soAddr: 0xd93a1000 sha1InputAddr: 0xd93a2745
明文 YXBwX3Zlcj01MyZjaGFubmVsPXNvdWdvdSZjb2RlPTExMTEmZGV2aWNlX2lkPTQ1YjhkMDFkOGZiZDVkYTYzOGVlM2ZkMjE2MmE1NjQxJmRldmljZV9uYW1lPWdvb2dsZSBOZXh1cyA1WCZkZXZpY2VfdWRpZD1lMDY1Yjk0NzhmMWU1NGIyY2QyZmZiNzg2NDU2NjNjMyZmcm9tPWFwcCZnZXR1aV9wdXNoX2lkPTZkYmE2N2VkYWQ5YjdkNmE4NDg5MzkzMzBmNzc3NzAwJmltZWkxPTM1MzYyNzA3MDMxNjcwMSZpbWVpMj1udWxsJm1hYz02NDpCQzowQzoyRDo4QTo3MSZub25jZT1hZG96cmMxNTYyMjQ0NTc1NTc0Jm9zX3Zlcl9jb2RlPTIzJnBob25lPTE5OTY1MDEzNjY1JnN5c3RlbT0xJnRpbWVzdGFtcD0xNTYyMjQ0NTc1YjJxS2d0YVc0LDl6OURgRm1zdD9LNUpaYkxZT1ldTlA2c3NHZjJVfjt6azlvQ05nb3l0ViF9d1c3aWErYHc5Zw==

上面的base64经过sha1后 de4973f9c3a5fc0a7acabb0aa1e93632ddde1ee3 正好是抓包的sign
base64前为

app_ver=53&channel=sougou&code=1111&device_id=45b8d01d8fbd5da638ee3fd2162a5641&device_name=google Nexus 5X&device_udid=e065b9478f1e54b2cd2ffb78645663c3&from=app&getui_push_id=6dba67edad9b7d6a848939330f777700&imei1=353627070316701&imei2=null&mac=64:BC:0C:2D:8A:71&nonce=e9ya841562244165987&os_ver_code=23&phone=19965013665&system=1×tamp=1562244165b2qKgtaW4,9z9D`Fmst?K5JZbLYOY]NP6ssGf2U~;zk9oCNgoytV!}wW7ia+`w9g
b2qKgtaW4,9z9D`Fmst?K5JZbLYOY]NP6ssGf2U~;zk9oCNgoytV!}wW7ia+`w9g为SO里面的盐
至此我们就完成了sign的加密分析
下面附上hook脚本最后hook的 SHA1Input是导出函数,没有注意,脚本可以更简单的,只说个分析过程,勿较真
  1. # -*- coding: UTF-8 -*-
  2. import frida, sys

  3. jsCode = """
  4. function ab2str(buf) {
  5.   return String.fromCharCode.apply(null, new Uint8Array(buf));
  6. }
  7. function str2ab(str) {
  8.   var buf = new ArrayBuffer(str.length * 2); // 每个字符占用2个字节
  9.   var bufView = new Uint16Array(buf);
  10.   for (var i = 0, strLen = str.length; i < strLen; i++) {
  11.     bufView[i] = str.charCodeAt(i);
  12.   }
  13.   return buf;
  14. }


  15. Java.perform(function(){
  16.     var soAddr = Module.findBaseAddress("libtre.so");
  17.     send('soAddr: ' + soAddr);
  18.     var sha1InputAddr = soAddr.add(0x1744 + 1);
  19.     var resultPtr="";
  20.     send('sha1InputAddr: ' + sha1InputAddr);
  21.     Interceptor.attach(sha1InputAddr, {
  22.         onEnter: function(args){
  23.             var buffer = Memory.readByteArray(args[1], 1000);
  24.             console.log("明文",ab2str(buffer));
  25.         }
  26.     });
  27. });

  28. """;

  29. def message(message, data):
  30.     if message["type"] == 'send':
  31.         print(u"[*] {0}".format(message['payload']))
  32.     else:
  33.         print(message)

  34. process = frida.get_remote_device().attach('com.maihan.tredian')
  35. script= process.create_script(jsCode)
  36. script.on("message", message)
  37. script.load()
  38. sys.stdin.read()
复制代码





本帖子中包含更多资源

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

x

评分

参与人数 1好评 +1 精币 +3 收起 理由
iock + 1 + 3 感谢分享,很给力!~

查看全部评分

结帖率:60% (15/25)

签到天数: 28 天

发表于 2021-5-9 09:44:25 | 显示全部楼层   江苏省苏州市
你是用模拟器还是真机啊?
回复 支持 反对

使用道具 举报

结帖率:100% (19/19)

签到天数: 2 天

发表于 2020-12-5 16:18:20 | 显示全部楼层   湖南省长沙市
为什么地址需要加 1 呢  有点疑问
回复 支持 反对

使用道具 举报

签到天数: 4 天

 楼主| 发表于 2019-8-1 16:08:19 | 显示全部楼层   安徽省合肥市
[quote][url=forum.php?mod=redirect

可以,但是不能修复
回复 支持 反对

使用道具 举报

结帖率:60% (3/5)
发表于 2019-8-1 15:49:25 | 显示全部楼层   辽宁省鞍山市
360加固的壳 哥们能脱吗?
回复 支持 反对

使用道具 举报

发表于 2019-7-28 12:34:18 | 显示全部楼层   广东省广州市
666666666666666666666666666666666666666666666666
回复 支持 反对

使用道具 举报

签到天数: 3 天

发表于 2019-7-4 22:26:06 | 显示全部楼层   河南省洛阳市
即使再见  偶像  大神
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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