frida搭建
https://frida.re/
它主要是逆向分析安卓apk应用的,对应用有hook的需求
感觉上来看很像做pwn题的时候,那种gdb.attach()的调试阶段
分析代码逻辑,进行执行流的控制,方法调用
frida安装
pip install frida-tools
frida --version #16.6.1
模拟器安装、adb设置
模拟器开root、开发者模式、usb调试
adb connect 127.0.0.1:21503
adb devices
adb shell
#getprop ro.product.cpu.abi
#x86_64
exit
去https://github.com/frida/frida/releases下载对应server版本
frida-server-<Frida版本>-android-<设备架构版本>.xz
解压缩后将文件传输过去
adb push E:xiaoyaofs /data/local/tmp
adb shell
cd /data/local/tmp
ls -la
chmod 777 fs
./fs
运行fs,此窗口不要再用,另起新窗口
#adb forward tcp:27042 tcp:27043
frida-ps -U #出现进程信息即可
安卓抓包
因为用到了模拟器,顺便记录一下抓包,用的yakit演示了,差不多
在模拟器对wifi设置代理:物理机ip+yakit端口,yakit也是同样的设置
然后在模拟器的浏览器去访问 证书下载地址:http://mitm 安装即可
其它
https://sourceforge.net/projects/dex2jar/
http://java-decompiler.github.io/
如果是反编译源码:
d2j-dex2jar.bat "test.apk"#将apk转化为jar文件
再用jd-gui打开即可,当然了,有的进行了混淆的话,可能要尝试其它工具,比如jadx-gui、mobsf
https://github.com/skylot/jadx
这个是用于反编译apk文件的
java -jar apktool_2.9.3.jar d test.apk
参考
安装参考:
https://blog.csdn.net/qq_45429426/article/details/125187375
包括了模拟器安装(root设置、开发者模式、usb调试)+frida安装+adb安装
https://github.com/frida/frida/releases
https://sourceforge.net/projects/dex2jar/
http://java-decompiler.github.io/
模拟器:
https://www.memuplay.com/zh/download.html
frida hook:
https://blog.csdn.net/fuhanghang/article/details/139793202
https://www.freebuf.com/sectool/236911.html
frida应用
HTB_APKey
(Mobile)Easy
登录提示 Wrong Credentia...
.dex-tools-v2.4d2j-dex2jar.bat .apkAPKey.apk
jd-gui分析jar文件
这样的内容,嘶,是我哪一步有问题?
后面一查,就是说这种有大量字节码,且函数名不规范,是因为做了混淆
后面用了jadx-gui,它自带反混淆
可以看到点击功能的代码逻辑,会检测密码是否与这个md5匹配
两种方法:
1.将源码改成,和该md5不匹配(或者改成一个可爆破的md5值),再用apktool编译成新的apk,是wp1的做法
2.frida进行hook
frida_hook
这里参考wp2用frida进行hook
https://www.cnblogs.com/codex/p/12986070.html frida hook构造
示例是这样写的:
//Java.Perform 表示 Frida 将会从这里开始执行JavaScript脚本。
Java.perform(function () {
//定义一个变量ClassName,Java.use 后面指定想要Hook的类SecondActivity
var ClassName=Java.use('com.example.SecondActivity');
//hook该类下的myFunc1方法,implementation 表示重新实现它
MainActivity.myFunc1.implementation = function () {
send("Hook Start...");
//调用SecondActivity类中的 calc()方法,获取返回值
varreturnValue=this.calc();
}
});
我要的只是这一段的内容
makeText = Toast.makeText(applicationContext, b.a(g.a()), 1);
makeText.show();
根据这段代码,先找到两个类名,就是上面的b类,还有g类,a只是它们的方法
//Java.Perform 表示 Frida 将会从这里开始执行JavaScript脚本。
Java.perform(function () {
var Class1=Java.use('c.b.a.b');
var Class2=Java.use('c.b.a.g');
console.log(Class1.a(Class2.a()));
});
frida -U -l myhook.js APKey
总结
学到了apk反编译、frida基础使用
参考
wp1:
https://nathanule99.gitbook.io/ctf-write-ups/walk-throughs/mobile/apkey
wp2:
https://mateuszmatyska.github.io/posts/apkey.html
frida_hook构造:
https://www.cnblogs.com/codex/p/12986070.html
混淆实例:
https://blog.csdn.net/weixin_42555014/article/details/129854278
原文始发于微信公众号(羽泪云小栈):frida搭建+使用
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论