开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (3)
标签 (5)
master
dev/1.1
dev/1.0
v1.0.9
v1.0.8
v1.0.7
v1.0.2
v1.0.1
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
项目仓库所选许可证以仓库主分支所使用许可证为准
master
分支 (3)
标签 (5)
master
dev/1.1
dev/1.0
v1.0.9
v1.0.8
v1.0.7
v1.0.2
v1.0.1
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (3)
标签 (5)
master
dev/1.1
dev/1.0
v1.0.9
v1.0.8
v1.0.7
v1.0.2
v1.0.1
FridaContainer
/
python
/
android
/
traceLogCleaner.py
FridaContainer
/
python
/
android
/
traceLogCleaner.py
traceLogCleaner.py 7.52 KB
一键复制 编辑 原始数据 按行查看 历史
DM星痕 提交于 2021年08月26日 15:02 +08:00 . 1. java trace 构造函数名加入 "_$init" 标志
# encoding: utf-8
'''
@author: xingjun.xyf
@contact: deathmemory@163.com
@file: TraceLogCleaner.py
@time: 2020年12月15日 7:14 下午
@desc: trace日志清洁工。默认 attach Android 当前打开的应用,接收 trace 内容并按 threadid 分文件记录
如果检测数据为字符数组,则会尝试转换成 string 到 trystr 字段,也会尝试转换成 hex
到 tryhex 字段,方便搜索。
保存结果在脚本同目录下的 tdc_dir 目录中。
'''
import codecs
import json
import os
import shutil
import sys
import frida
class TraceLogCleaner:
'''
@bFmt 是否以格式化方式记录日志
'''
def __init__(self, bFmt):
self.saveDir = 'tdc_dir'
self.bFmt = bFmt
pass
def washFile(self, path):
self.mkdirSaveDir()
with open(path, 'r') as f:
line = f.readline()
while (line != ''):
self.washLine(line)
line = f.readline()
f.close()
pass
def mkdirSaveDir(self):
if not os.path.isdir(self.saveDir):
os.makedirs(self.saveDir)
def washLine(self, line):
if line == '':
return
line = line.strip()
# print ('current line: {}'.format(line))
jobj = json.loads(line)
filename = str(jobj['tid'])
# wash args
status = jobj['status']
if status == 'msg':
result = line
elif status == 'jnitrace':
result = line
if self.bFmt is True:
fmtstr = self.getJniFormatString(jobj)
result += '\n' + fmtstr + '\n'
else:
if status == 'entry':
args = list(jobj['args'].values())
else:
args = []
if ('retval' in jobj):
args.append(jobj['retval'])
if isinstance(args, list):
tryval = {}
for i in range(len(args)):
try:
arg = args[i]
if isinstance(arg, list):
try:
trystr = "".join(map(chr, arg))
except:
trystr = ''
try:
tryhex = ','.join('{:02x}'.format(x & 0xff) for x in arg)
except:
tryhex = ''
tryval['p{:d}'.format(i)] = {'trystr': trystr, 'tryhex': tryhex}
except:
pass
jobj['tryval'] = tryval
result = json.dumps(jobj)
if self.bFmt is True:
fmtstr = self.getJavaMethodFormatString(jobj)
result += '\n' + fmtstr + '\n'
with open(os.path.join(self.saveDir, filename), 'a+') as f:
f.write(result)
f.write('\n')
f.close()
def clean(self):
if os.path.isdir(self.saveDir):
shutil.rmtree(self.saveDir)
def washWithSpawn(self, jspath, packagename):
dev = frida.get_usb_device()
app_pid = dev.spawn(packagename)
session = dev.attach(app_pid)
self._doWash(session, jspath)
dev.resume(app_pid)
sys.stdin.read()
session.detach()
def _doWash(self, session, jspath):
with codecs.open(jspath, 'r', 'utf-8') as f:
jscode = f.read()
f.close()
self.mkdirSaveDir()
script = session.create_script(jscode, runtime="v8")
# session.enable_jit()
session.enable_debugger()
script.on('message', self.onMessage)
script.load()
def washOnMessage(self, jspath):
with codecs.open(jspath, 'r', 'utf-8') as f:
jscode = f.read()
self.mkdirSaveDir()
dev = frida.get_usb_device()
app = dev.get_frontmost_application()
print (app)
session = dev.attach(app.pid)
script = session.create_script(jscode, runtime="v8")
# session.enable_jit()
session.enable_debugger()
script.on('message', self.onMessage)
script.load()
f.close()
sys.stdin.read()
session.detach()
pass
def onMessage(self, msg, data):
try:
self.washLine(msg['payload'])
except:
print('except line: ' + str(msg))
def getJavaMethodFormatString(self, jobj):
tryval = jobj['tryval']
status = jobj['status']
if status == 'exit':
try:
if 'retval' in jobj:
tryblock = ''
if 'p0' in tryval:
tryblock = '\n|(str)== \"{trystr}\"\n|(hex)== {tryhex}'\
.format(trystr=tryval['p0']['trystr'], tryhex=tryval['p0']['tryhex'])
vals = '|= {retval}{tryblock}'.format(retval=str(jobj['retval']), tryblock=tryblock)
else:
vals = ''
except:
print('except exit:', json.dumps(jobj))
else:
args = list(jobj['args'].values())
vals = []
try:
for i in range(len(args)):
arg = args[i]
tryblock = ''
if isinstance(arg, list):
pkey = 'p%d' % i
if pkey in tryval:
tryblock = '\n|(str)-- \"{trystr}\"\n|(hex)-- {tryhex}'\
.format(trystr=tryval[pkey]['trystr'], tryhex=tryval[pkey]['tryhex'])
tmp = '|- {arg}{tryblock}'.format(arg=str(arg), tryblock=tryblock)
vals.append(tmp)
except:
print('except entry:', json.dumps(jobj))
vals = '\n'.join(vals)
fmt = '[+] ({status}) {clsname}\n|-> {methodname}\n{vals}'.format(status=status, clsname=jobj['classname'], methodname=jobj['method'], vals=vals)
return fmt
def getJniFormatString(self, jobj):
try:
data = jobj['data']
jnival = data['jnival']
backtrace = data['backtrace']
argsfmt = []
for arg in jnival['args']:
tmp = '|- {argType}\t\t: {argValue}'.format(argType=arg['argType'].ljust(10, ' '), argValue=arg['argVal'].strip())
argsfmt.append(tmp)
backtraceFmt = []
try:
for bt in backtrace:
tmp = '|-> {address}: ({module_name}:{module_base}) {path}'\
.format(address=bt['address'], module_name=bt['module']['name'], module_base=bt['module']['base'], path=bt['module']['path'])
backtraceFmt.append(tmp)
except:
pass
fmt = '[+] {methodname}\n{args}\n|= {retType}\t\t: {retValue}\n|-> BackTrace: \n{backtraceFmt}'\
.format(methodname=data['methodname'], args='\n'.join(argsfmt),
retType=jnival['ret']['retType'].ljust(10, ' '), retValue=jnival['ret']['retVal'].strip(),
backtraceFmt='\n'.join(backtraceFmt))
except:
print('except:' + json.dumps(jobj))
return ""
return fmt
if __name__ == '__main__':
tdc = TraceLogCleaner(bFmt=True)
tdc.clean()
tdc.washOnMessage('../../_fcagent.js')
# tdc.washWithSpawn('../../_fcagent.js', 'com.baidu.BaiduMap')
# tdc.washFile(path='tdc_dir/test_31523')
print ('done !')
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/pythonzz/FridaContainer.git
git@gitee.com:pythonzz/FridaContainer.git
pythonzz
FridaContainer
FridaContainer
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /