Android破签:密钥native方法里了?不会C也看不懂IDA?用这个工具吧~

2024-09-02 15:12

本文主要是介绍Android破签:密钥native方法里了?不会C也看不懂IDA?用这个工具吧~,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

吉祥知识星球icon-default.png?t=N7T8http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247485367&idx=1&sn=837891059c360ad60db7e9ac980a3321&chksm=c0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330&scene=21#wechat_redirect

《网安面试指南》icon-default.png?t=N7T8http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484339&idx=1&sn=356300f169de74e7a778b04bfbbbd0ab&chksm=c0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene=21#wechat_redirect

最近在挖某APP时,想要尝试修改请求参数,但是发现这个APP对所有的请求都做了签名校验。那没办法,只能反编译APK看一下签名是怎么实现的了。

反编译不细说,无非就是dex2jar / jadx这些工具

反编译之后,在源码中根据签名请求头名称“Sign”搜索来找到对应的代码,发现签名的方式比较常规,就是通过“appId + 参数 + 时间戳 + 随机数 + 请求体(如果有)”生成一个字符串,然后使用一个密钥对这个字符串进行HMACMD5,生成一个签名后,将它放在“Sign”请求头里面一起传给服务端进行验证。

但是问题来了,其它的参数都好获取,但是它的密钥是通过一个Java的native方法获取的,像这样:

public native String a();

这就难搞了,这意味着密钥是通过调用C来生成的,而C动态库的反编译可比Java难搞多了,而我对C也实在说不上很熟悉。

不管怎么样,先试一下吧,先通代码找到对应的动态库名称,然后使用IDA反编译看了下,20分钟之后,我决定放弃了。我只想拿个密钥,并不想分析它的汇编代码(也没有这个能力),何况我也不是一个Android逆向工程师。

0x02

既然静态的分析不可行,那就只能换一种方式了,使用动态的分析来解决。作为一个Java应用程序是肯定可以Hook的,因为它原生就提供了这个功能。

而Frida则是一个Android的Hook工具,它可以通过简单的几行代码,来Hook应用中的某些方法,那我只需要Hook这个本地方法的上层方法,打印一下密钥就行了,这不比苦哈哈的去分析汇编简单多了?

安装

本机命令行工具安装使用pip只需要一行命令: 

$ pip install frida-tools 

Android Server则在Github下载对应版本的Server,使用adb推到手机/模拟器上再启动就行了:

$ adb root
$ adb push frida-server /data/local/tmp/
$ adb shell "chmod 755 /data/local/tmp/frida-server"
$ adb shell "/data/local/tmp/frida-server &"

这里就不细说了,看官方文档就行了,很详细:
https://frida.re/docs/android/

脚本

安装好了之后,就要写个Hook脚本了,它支持多种语言来实现,简单起见,使用JS吧,大概就是这样:

def on_message(message, data):
if message['type']=='send':
print("[*] {0}".format(message['payload']))
else:
print(message)jscode ="""Java.perform(() => {// hook 脚本// 找到我们需要hook的类const secret = Java.use('com.xxxx.xxxx.Secret');//对secret类的a方法提供一个新的实现secret.a.implementation = function () {//执行原来的方法 a()const result = this.a();//打印密钥console.log('key is: ', result);//返回return result;};
});
"""# 找到对应android应用的进程,可以使用 frida-ps -U 查看
process = frida.get_usb_device().attach(1001)
# 创建JS脚本
script = process.create_script(jscode)
script.on('message', on_message)
print('[*] Running')
# 加载脚本
script.load()
sys.stdin.read()

执行

执行上面的脚本,如果没有报错的话,那就是成功了,我们再回到应用中,触发一次HTTP请求,看到密钥已经被打印出来了:

知道密钥和签名方式之后,那就简单了,使用mimtproxy写个代理来自动对请求进行重新签名就行了,现在就可以愉快的随便修改参数啦~

这篇关于Android破签:密钥native方法里了?不会C也看不懂IDA?用这个工具吧~的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130311

相关文章

Android实现悬浮按钮功能

《Android实现悬浮按钮功能》在很多场景中,我们希望在应用或系统任意界面上都能看到一个小的“悬浮按钮”(FloatingButton),用来快速启动工具、展示未读信息或快捷操作,所以本文给大家介绍... 目录一、项目概述二、相关技术知识三、实现思路四、整合代码4.1 Java 代码(MainActivi

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

Python处理函数调用超时的四种方法

《Python处理函数调用超时的四种方法》在实际开发过程中,我们可能会遇到一些场景,需要对函数的执行时间进行限制,例如,当一个函数执行时间过长时,可能会导致程序卡顿、资源占用过高,因此,在某些情况下,... 目录前言func-timeout1. 安装 func-timeout2. 基本用法自定义进程subp

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

基于Java实现回调监听工具类

《基于Java实现回调监听工具类》这篇文章主要为大家详细介绍了如何基于Java实现一个回调监听工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录监听接口类 Listenable实际用法打印结果首先,会用到 函数式接口 Consumer, 通过这个可以解耦回调方法,下面先写一个

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的