APP渗透抓不到包/安卓逆向--Frida
Posted 向阳-Y.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了APP渗透抓不到包/安卓逆向--Frida相关的知识,希望对你有一定的参考价值。
android检测代理
应用程序检测到使用代理后就会抓包异常
IS_ICS_OR_LATER
相关文章:
https://www.it610.com/article/1280480273930141696.htm
解决方法:
使用VPN原理的软件进行抓包:
黄鸟 postaman charles
证书校验
单向认证:
特征:抓包可以抓到,但是报错,400、ssl
解决方法:Xposed+JustTrustMe
双向认证(rsa算法):
特征:略
解决方法:证书+密码
Frida入门
小技巧:
这串代码可以在notepad++中直接运行python脚本,x.py指的是要执行的py路径
cmd /k python "c://x.py" & ECHO & PAUSE & EXIT
frida-ps -U 可以查看apk的包名称
首先安装frida模块(python3.9)
PC端:
方案一(推荐安装低版本frida,兼容性好):
pip install frida==14.2.18
pip install frida-tools==9.2.5
pip install objection==1.8.4
如果在这一步一直卡着安装不成功就试试方案二
方案二:
到https://pypi.org/project/frida/#files下载frida-12.7.16-py3.7-win-amd64.egg。
并把它放到E:\\Program Files\\Python37\\Lib\\site-packages中。
此时执行pip install frida就OK了
测试:
打开powershell,
输入frida-ps -U
,此时无报错说明成功
设备端:frida-server 14.2.18
下载地址:https://github.com/frida/frida/releases
判断模拟器手机的架构
大部分为两种情况:
手机端下载 frida-server-版本-android-arm64.xz
模拟器下载 frida-server-版本-android-x86.xz
adb -s 设备名 shell getprop ro.product.cpu.abi //我的是32位x86
下载对应版本并解压:
连接模拟器
我这里使用的是逍遥模拟器,21503是逍遥模拟器的默认端口
(夜神:adb connect 127.0.0.1:62001)
其他adb命令补充
adb kill-server
adb start-server
adb devices 查看设备列表
adb install f:/1.apk #表示安装apk文件
adb -s 设备名 shell getprop ro.product.cpu.abi # 查看cpu架构,用于判断适合安装哪个版本的frida
adb connect 127.0.0.1:21503
adb shell
adb push 文件路径 /data/local/tmp
cd /data/local/tmp/
ls
chmod 777 frida-server-15.1.22-android-x86 //赋予frida执行权限
./frida-server-15.1.22-android-x86 //运行frida,此时frida就已经跑起来了
最后转发一下端口:
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043
注意:
如果开了两个模拟器则需要匹配使用哪一个模拟器:
adb devices #列出模拟器列表
adb -s 模拟器名 shell
问题集合
byte类型hook
当遇到byte格式数据(类似于下图),需要hook时
解决方法
var string=Java.use('java.lang.String');
string.$new(arguments[0]);
例子:
hexdump输出16进制
参考实战hook陌陌so层【43分43秒】
模板
Frida模板【普通方法】
补充:
查看软件包名方法(其他方法):
adb shell pm list packages -3
adb shell am monitor //需要先运行此命令,再运行需要查看包名的APP
import frida,sys
jscode="""
Java.perform(function()
var utils = Java.use('包名.类名')
utils.函数.implementation = function(函数值1,函数值2) //如果是构造方法这里还能utils.$init.inplementation
console.log("Hook Start...");
send("Success!");
return this.函数(函数值1,函数值2); //同理,这里就写return this.$init(函数1,函数2)
);
"""
def message(message,data):
if message["type"] == 'send':
print("[*] 0".format(message['payload']))
else:
print(message)
process = frida.get_remote_device().attach('app包名')
script=process.create_script(jscode)
script.on("message",message)
script.load()
sys.stdin.read()
Frida模板【构造方法】
构造方法指的是new一个对象
import frida,sys
jscode="""
Java.perform(function()
var utils = Java.use('包名.类名')
utils.$init.implementation = function(函数值1,函数值2)
console.log("Hook Start...");
send("Success!");
return this.$init(函数值1,函数值2);
);
"""
def message(message,data):
if message["type"] == 'send':
print("[*] 0".format(message['payload']))
else:
print(message)
process = frida.get_remote_device().attach('app包名')
script=process.create_script(jscode)
script.on("message",message)
script.load()
sys.stdin.read()
Frida模板【重载方法】
add(1,2)
add(1,2,3)
重载就是函数名字一样,例如:
import frida,sys
jscode="""
Java.perform(function()
var utils = Java.use('包名.类名')
utils.函数.overload("类型").implementation = function(函数值1,函数值2) //类型指的是int,java.lang.String等
console.log("Hook Start...");
send("Success!");
return this.函数(函数值1,函数值2);
);
"""
def message(message,data):
if message["type"] == 'send':
print("[*] 0".format(message['payload']))
else:
print(message)
process = frida.get_remote_device().attach('app包名')
script=process.create_script(jscode)
script.on("message",message)
script.load()
sys.stdin.read()
Frida模板【构造对象参数】
需要hook的代码段如下:
import frida,sys
jscode="""
Java.perform(function()
var utils = Java.use('包名.类名')
utils.函数.overload("com.xiaojianbang.app.Money").implementation = function(obj) //因为这里的类型为对象,所以写上对象的路径
console.log("Hook Start...");
send("Success!");
send(obj.getInfo())
var mon = mon.$new(1000,'港币') //自己构造一个对象
return mon.getInfo()
);
"""
def message(message,data):
if message["type"] == 'send':
print("[*] 0".format(message['payload']))
else:
print(message)
process = frida.get_remote_device().attach('app包名')
script=process.create_script(jscode)
script.on("message",message)
script.load()
sys.stdin.read()
推荐技术文章!:
https://bbs.pediy.com/thread-272270.htm
以上是关于APP渗透抓不到包/安卓逆向--Frida的主要内容,如果未能解决你的问题,请参考以下文章