大家好,我是TheWeiJun,不知不觉已经来到了2022年底。回顾这一年,发生了太多事迹;有挫折、有喜悦、其中最开心的是结交了许多志同道合的朋友。本文将是笔者2022年最后一篇文章收官之战,全程高能,在阅读的同时不要忘记点赞+关注哦⛽️

特别声明:本公众号文章只作为学术研究,不用于其它不法用途;如有侵权请联系作者删除。

目录

一、抓包分析

二、Jadx反编译

三、frida hook调试

四、ida动态注册分析

五、算法还原

六、思路总结

趣味模块

新年新气象,永远行大运。2022年的最后一战由小军出场!小军的职业是一名计算机高级开发工程师,小军的爱好是喜欢玩游戏。他特别喜欢玩一些新游,然后关注下大家对新游的一些体验和看法。于是小军找到了某游戏社区,在小军想时刻关注游戏社区更新动态时,他遇到了难题,通过jadx定位到加密参数后,遇到了So层文件。今天我们将与小军并肩作战去探索我们未知的领域,感兴趣的读者记得给我一个star!

公众号:逆向与爬虫的故事

专注于网络爬虫、JS逆向、APP逆向、安全攻防实战经验分享及总结。

一、抓包分析

1、打开我们本次需要抓取的App,使用charles设置代理进行抓包,抓包截图如下所示:

说明:之所以进行打码处理,也是为了避免不必要的麻烦,希望大家能理解。我们的目的是要学习别人的加固思路而非破解!

2、搜索指定关键字,定位我们想要获取的数据包,然后截图如下所示:

总结:观察上图,确定我们本次需要还原的参数authorization后,初步判断该参数后,无法确定使用的什么加密手段;接下来让我们进入反编译调试环节吧!

二、Jadx反编译

1、使用Fart对指定App的apk脱壳后,直接使用jadx打开脱壳后保存的zip包,截图如下所示:

2、等待jadx反编译完毕后,我们使用查找参数名和关键字的方法进行加密位置定位,截图如下所示:

温馨提示:此刻如果你电脑内存不够16个G,介意还是换个电脑再来操作,相信我绝对没有错。

3、经过分析及追踪java源代码,最后定位到authorization参数加密的位置如下图所示:

总结:分析上面authorization的加密逻辑,我们需要确定return返回值中包含的多个参数的初始值即可完成对该参数的算法还原,接下来我们一起进入hook调试环节分析一下该算法吧。

三、frida hook调试

1、想要获取加密逻辑,我们首先需要先拿到str、e3、d2、f2的初始值,先hook一下c方法,构建frida代码如下所示:

2、启动frida脚本,执行刚刚写好的hook代码后,刷新手机界面,分析截图如下所示:

此刻,我们将charles中的该请求包也截图,进行对比分析,截图如下:

总结:观察上面两张图的参数值,我们可以清楚地看到入参、出参和charles中的参数一一对应,接下来我们只需要还原每一个参数算法即可。

3、各个参数hook调试分析后,所有参数初判断总结如下:

  • e3  当前unix时间戳,10位

  • d2  五位随机字符,由字母和数字组合。

  • str 40位长度,初步怀疑为sha1加密 待定分析

  • str2 40位长度,初步怀疑为sha1加密 待定分析

  • f2  hmac sha1加密,通过分析java源码得出

3.1  f2 参数 hook代码如下所示:

3.2  终端打印入参及出参输出如下所示:

4、接下来我们分析下str、str2两个参数的生成规则,只要解决掉这两个参数,我们就可以实现authorization参数的算法还原。经过多次hook,我们发现str、str2的值好像是固定不变的,截图如下所示:

结论:由于没有突破口,进行app卸载后重新安装,使用frida脚本重新hook,将hook到的str、str2的值进行查找,发现了该值是有新的接口返回的,截图如下所示:

frida hook界面截图如下:

charles定位截图如下:

总结:此刻我们已经知道了str、str2的生成规律,我们只需要还原该接口请求就能实现str、str2的参数生成,接下来我们需要对sign参数进行解密分析。

5、使用jadx查找sign参数,最后定位到该参数位置截图如下所示:

5.1  编写frida脚本进行函数hook,代码截图如下:

5.2  启动刚刚编写的hook脚本,终端输出截图如下:

5.3  此刻我们查看charles中的数据包sign截图如下:

总结:sign参数生成方法定位后,我们只需要还原sign加密方法即可完成所有代码闭环。

6、sign加密方法定位后,我们追踪java代码,最后确定到native层路径,截图如下:

总结:加载so、通过native关键字定义了需要调用的方法getSign,也就是说,它这里调用的是so层的加密算法,so是什么?简单来说,它是c/c++编译后的产物。context、bArr变量我们都已经知道明文信息,接下来,我们需要用ida打开so文件,去探索so层对该方法做了哪些加密操作吧。

四、ida动态注册分析

1、两个参数值确定了,下面要做的工作就是分析so层的加密算法获取sign值。我们通过压缩软件打开apk,因为我手机的cpu类型是arm64-v8a, 是向下兼容的,选择使用armeabi-v7a中的so文件是可以的。找到目标文件,使用ida打开后截图如下所示:

2、使用ctrl+F查找静态注册的指定方法名,结果无法搜寻到,这个时候可以肯定java调用的方法名在so文件中是动态注册的。找到JNI_Onload,点击该方法,使用F5打开该方法,截图如下所示:

3、点击v4后面的地址off_5004[0]进入指定代码块进行分析,截图如下所示:

总结:这个时候我们看到了java层的getSign方法和java层该方法的两个参数类型,接下来我们继续追踪分析so层是如何加密的。

4、点击sub_131c+1地址,然后按F5进入指定代码块,截图如下所示:

说明:这个地方会有签名校验,判断我们是否重新打包。如果为true,则直接返回0,否则执行下面的操作。

5、继续点击sub_1094地址方法,进入新的代码块,最新截图如下图所示:

总结:这个代码逻辑是拿我们在java native接口函数中传递的字符串与So中的字符串进行比较,然后给v8变量赋值,之后的加密逻辑会使用到v8变量。

6、点击sub_1B04地址进入到最新代码块区域,截图如下所示:

7、点击上图四个常量,然后点击按键H格式化常量值转为16进制,截图如下所示:

总结:看过md5源码的同学,应该对这个四个常量比较熟悉吧,这不就是A、B、C、D四个常量值吗?到这里,我们可以肯定,sign的加密算法就是md5加密;sign值的生成规则其实是指定参数拼接不同包名对应的salt进行md5加密即可。接下来,让我们进入算法还原环节吧!

五、算法还原

1、sign参数算法还原如下:

import hashlib
def get_sign():salt = "PeCkE6Fu0B10Vm9BKfPfANwCUAn5POcs"data = f'X-UA=V=1&PN=xxx&VN_CODE=224003000&LOC=CN&LANG=zh_CN&CH=seo-baidu&UID=07e90f02-7def-4f28-a0b4-70098396e1df&NT=1&SR=1080x1794&DEB=Google&DEM=Pixel+2&OSV=10&action=active&android_id=84c16aaccd10a6e5&cpu=arm64-v8a&model=Pixel 2&name=Google&nonce=istb4&pn=0&push_id=6ce79a19f68c48779463dc893589c46c&screen=1080x1794&supplier=1&time=1671172755&uuid=07e90f02-7def-4f28-a0b4-70098396e1df&version=10{salt}'sign = hashlib.md5(data.encode(encoding='UTF-8')).hexdigest()print("e6a071ae2dc6cd117278b0f9d2fa04b1")print(sign)

pycharm终端输出如下:

总结:解决sign参数后,也就意味着str、str2参数我们能够获取到了,接下来我们对authorization参数mac做算法还原。

2、mac参数算法还原如下:

def get_mac():data = "1649340509\nhi9b4\nGET\n/landing/v5/timeline-with-device?action=refresh&X-UA=V%3D1%26PN%3D%26VN_CODE%3D224003000%26LOC%3DCN%26LANG%3Dzh_CN%26CH%3Dseo-baidu%26UID%3Dc2ff8daf-08ca-4e54-b051-6c5fde70bdda%26NT%3D1%26SR%3D1080x1794%26DEB%3DGoogle%26DEM%3DPixel%2B2%26OSV%3D10&show_channel_app=1\napi.xxxdada.com\n443\n\n"str2 = "d1e76439035449b521ea6c3d27aae758ef05ec65"mac = hash_hmac(data, str2)print("new--------")print(mac)print('ori--------')print("qrcn7ei6EBAPs/LkBO+undcifsk=")def hash_hmac(code, key):hmac_code = hmac.new(key.encode(), code.encode(), sha1).digest()return base64.b64encode(hmac_code).decode()

pycharm终端输出如下:

总结:走到这里所有算法还原就结束了。我们只需要把分析的每个参数进行字符串拼接即可实现对authorization参数的生成!最后一步流程就省略了,结果已经很明朗了,感谢各位读者朋友阅读!


六、总结分享

回顾整个分析流程,本次难点主要概括为以下几点:

  • 如何快速定位加密参数的位置

  • 熟悉hmac sha1加密算法

  • 熟悉md5源码加密实现

  • 熟悉ida、jadx、frida使用

今天分享到这里就结束了,欢迎大家关注下期文章,我们不见不散⛽️

文章来源:逆向与爬虫的故事(公众号)

原文链接:某游戏社区App | So层逆向分析

微信搜:逆向与爬虫的故事;给我一个关注!

某游戏社区App | So层逆向分析相关推荐

  1. 某汽车社区App 签名和加解密分析 (二) : Frida Dump so

    一.目标 App安全的主战场在Native层,分析Native层的so,最趁手的兵器就是Frida和Unidbg了. 今天我们的目标是 某汽车社区App v8.0.1 so 的分析. 二.步骤 特征字 ...

  2. 游戏社区App (三):客户端与服务端的加密处理 和 登录

    http请求数据无论是GET或者POST都可能会被抓包获取到数据.为了避免用户的敏感数据被窃取(比如密码),需要对数据进行加密处理. 一.相关名词解析 RSA:非对称加密. 会产生公钥和私钥,公钥在客 ...

  3. 某app登录协议逆向分析

    某app登录协议逆向分析 设备 iphone 5s Mac Os app:神奇的字符串57qm5Y2V 本文主要通过frida-trace.fridaHook.lldb动态调试完成破解相应的登录算法, ...

  4. 某饿了么APP最新版逆向分析(一)

    某饿了么APP最新版逆向分析 一.抓包分析 由于业务原因,需要采集部分数据,上次采这个app还是几年前 以为抓一下包,模拟一下请求就能获取数据. 开启了抓包工具之后被打脸了,显示网络错误,重新刷新 这 ...

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

    一.目标 稼轩长短句有云:宝马雕车香满路.从此香车美女就成了标配.这不李老板还没聊几个mm,又开始准备换车了. 今天我们的目标是 某汽车社区App v8.0.1. 二.步骤 脱个壳 李老板说这个App ...

  6. 基于Inspeckage的安卓APP抓包逆向分析——以步道乐跑APP为例

    引言:本人最近稍微弄懂了inspeckage的用法,特在此以步道乐跑APP为例,较详细记录地记录APP抓包与简单的逆向分析过程,用于备忘与共同学习!另外,温馨提醒,本文图片较多,建议连接WiFi阅读! ...

  7. 某饿了么APP最新版逆向分析(二):加密参数初探

    二.分析加密参数 说做就做,这边用的python进行模拟请求 万事俱备只欠东风,点击run 发现报错了 怎么回事? 明明请求的内容和抓包的内容完全一致 怎么没有返回我们想要的数据 报错内容为参数错误 ...

  8. 酷安App V2 Token(X-App-Token)逆向分析(最新版12.4.2)

    酷安App V2 Token逆向分析 仅用于研究和学习使用,禁止将相关技术应用到不正当途径,如侵犯隐私或权益,请联系我立即删除 文章目录 前言 新Token代码 前言 最近网上冲浪的时候,看到一篇关于 ...

  9. 中国游戏社区市场发展动态及十四五发展策略分析报告2022年版

    中国游戏社区市场发展动态及十四五发展策略分析报告2022年版   第一章 2016-2021年中国游戏社区行业发展概述 12 第一节 游戏社区行业发展情况概述 12 一.游戏社区行业相关定义 12 二 ...

最新文章

  1. GANimation填坑之旅
  2. jquery插件Loadmask
  3. Ubuntu升级之后The disk drive for / is not ready yet or not present的解决方法
  4. mysql 轨迹数据存储_python爬虫26 | 把数据爬取下来之后就存储到你的MySQL数据库...
  5. 如何在Mac OSX系统下安装Tomcat
  6. 《舰在亚丁湾》 “海军特战队”央视电视剧起航
  7. POI生成Word多级标题格式
  8. 家用计算机常见故障及解决方式,计算机常见的五大故障及解决办法
  9. [2]rubyruby on rails入门笔记---Ruby中的异常
  10. 我的U盘终于中招啦:U盘快捷方式病毒
  11. 服务器性能之IO性能指标含义
  12. 计算机网络故障的排除,网络故障怎么排除 网络故障排除方法
  13. Vue.js devtools官网最新下载 中文,绿色版Vue.js devtools下载谷歌插件
  14. redis命令之哈希表类型hgetall命令用法详情
  15. 设计模式(二)23种设计模式
  16. 企业与政府信息资源管理
  17. ITSM流程管理:如何有效实施
  18. Mifare系列7-安全性(转)
  19. centos7 系统安全加固方案
  20. 鸿蒙出世,金融圈如何布局?

热门文章

  1. 比尔盖茨:AI将如何减少不平等现象?
  2. 利用JS实现悬浮导航的隐藏和显示
  3. 互联网、电话订票起售时间(时刻)
  4. Linux ❉ 文件目录中常用命令 pwd / ls 详解
  5. 分页计算总页数的算法
  6. 解读BPM风潮:缘何受到企业青睐?(转载)
  7. 苹果手机怎么把中文翻译英文
  8. python批量下载必应图片
  9. 深圳自然人报税系统的服务器地址,自然人报税网络设置服务器地址
  10. TCP/IP 网络模型