应用程序检测到使用代理后就会抓包异常
IS_ICS_OR_LATER
相关文章:
https://www.it610.com/article/1280480273930141696.htm
解决方法:
使用VPN原理的软件进行抓包:
黄鸟 postaman charles
特征:抓包可以抓到,但是报错,400、ssl
解决方法:Xposed+JustTrustMe
特征:略
解决方法:证书+密码
小技巧:
这串代码可以在notepad++中直接运行python脚本,x.py指的是要执行的py路径
cmd /k python "c://x.py" & ECHO & PAUSE & EXIT
frida-ps -U 可以查看apk的包名称
方案一(推荐安装低版本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
,此时无报错说明成功
下载地址: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时
解决方法
var string=Java.use('java.lang.String');
string.$new(arguments[0]);
补充:
查看软件包名方法(其他方法):
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()
构造方法指的是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()
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()
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