logo资料库

【frida使用】Android apk加解密渗透测试-小铭分享.pdf

第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
资料共13页,剩余部分请下载后查看
Frida简介
逆向算法时hook算法
在hook时批量操作
与外部应用的配合
更多文章
来源:小密圈:“企业护航人” 链接:https://t.zsxq.com/FMjqRRJ 作者:BMa Frida 简介 【frida 使用】Android apk 加解密渗透测试 Frida 是 一 款 基 于 python+javascript 的 hook 框 架 , 适 用 于 android\ios\linux\win\osx 等各平台,由于是基于脚本的交互,因 此相比 xposed 和 substrace cydia 更加便捷。本文重点介绍在 window 下对 Android apk 进行安全测试时的使用。 逆向算法时 hook 算法 在对 apk 进行安全测试的时候,经常会遇到请求参数被加密或者 签名的情况,在请求数据被修改后提示异常,导致无法有效地进 行漏洞挖掘。
遇到这种情况,最初的思路是直接逆向其算法,然后再重写算法, 在本机实现加密、解密、签名的动作。 现在从代码中可以看出,apk 使用的是 AES 算法,但是目前还无 法得知 AES 算法加密的 key、偏移值、待加密的字符串。通过 frida
hook 相关方法,可以很方便得到这些内容。 #!/usr/bin/python #coding:utf-8 import frida import sys import requests def on_message(message, data): print message requests(message) def request(message): #可以在 message 中添加标志位,然后在这里只处理 url pass jscode = """ setImmediate(function() { //prevent timeout console.log("[*] Starting script"); Java.perform(function() { var tmpClass = Java.use("cn.XXXXXXX.YYYYYY.c.b.a");
tmpClass.a.overload('java.lang.String', 'java.lang.String', 'java.lang.String').implementation = function(arg0,arg1,arg2) { console.log("[*] Method Modify!---1"); console.log(arg0); console.log(arg1); console.log(arg2); result = this.a(arg0,arg1,arg2); console.log(result); return result; }; }); }); """ # startup frida and attach to com.android.chrome process on a usb device session = frida.get_usb_device().attach("cn.nubia.bbs") # create a script for frida of jsccode script = session.create_script(jscode) # and load the script script.on('message', on_message)
script.load() sys.stdin.read() 验证获取到的 key、偏移量是否正确 然后可以重写算法实现对数据的加密、解密。
在实际逆向算法的过程中,经常会遇到 apk 反编译后的源码混淆 比较严重,或者将算法写入到 so 中的情况,这无疑给逆向算法的 工作带来的更多挑战,需要投入更多的精力。而我们的重点不是 逆向出算法,而是通过逆向算法解决数据加密、签名,以便能够 直接进行漏洞挖掘,是不是有更方便的方法呢? 在 hook 时批量操作 在测试越权、撞库时,只需替换请求中的某些参数的值。通过 frida
hook 相关方法,批量修改相关参数的值,然后循环将修改后的内 容传入原方法即可。 在如上代码对应的请求中,以撞库为例,通过 frida hook 该方法, 循环替换 username 的值,然后在控制台打印修改参数后请求的结 果,可以快速测试是否存在撞库漏洞,从而绕过了逆向加密算法。
在某些场景中,只能批量生成加密或签名后的请求数据,而无法 或者不方便在 hook 时批量发起 http 请求,那也只需要在 burpsuite 中重放加密后的数据即可。
分享到:
收藏