能力值:
( LV8,RANK:130 )
2 楼
import frida
import sys
def on_message(message, data):
if message['type'] == 'send':
print("[*] {0}".format(message['payload']))
else:
print(message)
device = frida.get_usb_device()
pid = device.spawn("com.android.providers.downloads.ui", activity="com.android.providers.downloads.ui.DownloadList")
with open('AdInfo.js') as f:
jscode = f.read()
session = device.attach(pid)
session.enable_debugger()
script = session.create_script(jscode, runtime='v8')
script.on('message', on_message)
print('[*] Running CTF')
script.load()
script.exports.init()
device.resume(pid)
sys.stdin.read() // AdInfo.js
rpc.exports = {
init: function () {
setImmediate(function () {
Java.perform(function () {
javaClassInit()
hook_Md5SignData()
hook_getSign()
// hook_LocalNativeAdView_bindNativeAd()
})
})
}
}; 我自己是这样hook的:
1. 挂起方式启动app: device.spawn
2. 读取javascript脚本: with open('AdInfo.js') as f:
3. 启用调试器方便在chrome中调试frida JavaScript脚本: session.enable_debugger()
4. 启用v8引擎方便使用chrome调试
5. 此处可以下python断点,断下之后打开chrome中按f12,选择绿色图标打开nodejs调试器调试JavaScript脚本:script.exports.init()
6. 恢复apk程序运行:device.resume(pid)
最后于 2019-9-25 18:55
被金罡编辑
,原因:
能力值:
( LV8,RANK:130 )
3 楼
关于保存日志: 1.在JavaScript脚本中使用send后on_message(message, data):会收到消息方便保存日志,楼主可以尝试使用这种方法中保存日志。 2.python中使用控制台输出流相关函数来读取控制台所有的输出,你可以查查相资料。 3.你可以运行frida_hook.py > log.txt来保存所有日志。
能力值:
( LV4,RANK:50 )
4 楼
金罡
关于保存日志:
1.在JavaScript脚本中使用send后on_message(message, data):会收到消息方便保存日志,楼主可以尝试使用这种方法中保存日志。
2.python中使 ...
感谢大佬指点。
你说的3种方法我都尝试过了,没什么效果,可能是我代码有问题
我用的是file的写文件。
就是apk启动后,它发了几次消息,然后关闭apk,然后文件一点内容都没有。
我很无奈
能力值:
( LV4,RANK:50 )
5 楼
金罡
关于保存日志:
1.在JavaScript脚本中使用send后on_message(message, data):会收到消息方便保存日志,楼主可以尝试使用这种方法中保存日志。
2.python中使 ...
具体代码:
import frida
import os
import sys
jscode = """
Java.perform(function() {
console.log("[*] Starting script --console");
var f = Java.use('类名');
console.log("Hook Start");
f.b.implementation = function(str1, str2) {
console.log("Hook Start...");
var ret = this.b(str1, str2);
console.log("Success!");
console.log(arguments[1]);
return ret;
}
});
"""
def message(message, data):
if message["type"] == 'send':
print("if")
print("[*] {0}".format(message['payload']))
file.write("[*] {0}".format(message['payload']))
else:
print("else")
print(message)
file.write(message)
def execute(str):
print(str)
os.system(str)
if __name__ == '__main__':
file = open(r"C:\Users\Xmhwws\Desktop\rizhi.txt", 'a')
print("文件:" + file.read())
execute("adb devices")
execute("adb shell pm clear 包名")
execute("adb shell am start -n 包名/启动Activity")
process = frida.get_remote_device().attach('包名')
script = process.create_script(jscode)
script.on("message", message)
script.load()
sys.stdin.read()
print("结束")
file.flush()
file.close()
能力值:
( LV8,RANK:130 )
6 楼
def __executeCMD(self, cmd, printOutput = True):
'''return tuple (output, errput, returncode)'''
print ' '.join(cmd)
if platform.system() == "Windows":
subprocess.STARTUPINFO.dwFlags |= subprocess.STARTF_USESHOWWINDOW
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False)
## while p.poll() is None:
## x = p.stdout.readline()
## if len(x) is not 0:
## print x,
out, err = p.communicate()
if printOutput:
if out is not None:
print out
if err is not None:
print err
print
if p.returncode != 0:
raise Exception("Execute CMD error: %d" % p.returncode)
return (out, err, p.returncode)
out, err = p.communicate()
注意代码中的变量out 就是控制台输出结果。
能力值:
( LV2,RANK:10 )
7 楼
在js代码中,直接使用frida提供的File保存文件,代码如下 function writeFile(content) { var file = new File("/sdcard/encrypt.txt","a+");//a+表示追加内容,此处的模式和c语言的fopen函数模式相同 file.write(content+"\n"); file.flush() file.close(); }
能力值:
( LV4,RANK:50 )
8 楼
ydscience
在js代码中,直接使用frida提供的File保存文件,代码如下
function writeFile(content) {
var file = new File("/sdcar ...
感谢大佬的指点,测试了一下,可以写入数据。
此外,发现了一件事:
必须先给予apk读写权限才行,否则会报权限不足的异常。
/sdcard是不能写入的,data/user/0/包名这种私有目录可以
最后于 2019-9-30 18:06
被xmhwws编辑
,原因:
能力值:
( LV4,RANK:50 )
9 楼
金罡
def __executeCMD(self, cmd, print ... Thanks(・ω・)ノ
最后于 2020-7-10 06:11
被xmhwws编辑
,原因:
能力值:
( LV1,RANK:0 )
10 楼
xmhwws
ydscience
在js代码中,直接使用frida提供的File保存文件,代码如下
function writeFile(content) {
v ...
楼主你好,就是用了他这段代码,然后就直接报错,frida.InvalidArgumentError: gDBus.Error:re.frida.Error.InvalidArgument: Script(line 16): SyntaxError: unterminated string,请问一下,这个参数就是换成一个字符串也报错。
最后于 2020-1-8 14:08
被wx_宁不知 。编辑
,原因:
能力值:
( LV1,RANK:0 )
11 楼
powershell 可以用的 `| Tee-Object log.log` 保存日志
能力值:
( LV1,RANK:0 )
12 楼
frida -U com.gdufs.xman -l printHookSample1.js > ./libartSymbols.txt