#!/usr/bin/env python
# -*- coding: utf-8 -*-
#By:AloneMonkey
import sys
import frida
import codecs
import threading
import time
import re
reload(sys)
sys.setdefaultencoding('utf-8')
global session
global UIMESSAGE
global APPINFO
global appname
global appdoc
global appurl
finished = threading.Event()
APP_JS = './js/app.js'
UI_JS = './js/ui.js'
HOOK_JS = './js/hook.js'
#系统标准输出,支持grep
def outWrite(text):
sys.stdout.write(text.encode('utf8') + '\n');
#带颜色打印输出
def colorPrint(color, s):
return "%s[31;%dm%s%s[0m" % (chr(27), color, s , chr(27))
#获取第一个USB连接的设备
def get_usb_iphone():
dManager = frida.get_device_manager();
changed = threading.Event()
def on_changed():
changed.set()
dManager.on('changed',on_changed)
device = None
while device is None:
devices = [dev for dev in dManager.enumerate_devices() if dev.type =='tether']
if len(devices) == 0:
print 'Waiting for usb device...'
changed.wait()
else:
device = devices[0]
dManager.off('changed',on_changed)
return device
#枚举运行进程信息
def listRunningProcess():
device = get_usb_iphone();
processes = device.enumerate_processes();
processes.sort(key = lambda item : item.pid)
outWrite('%-10s\t%s' % ('pid', 'name'))
for process in processes:
outWrite('%-10s\t%s' % (str(process.pid),process.name))
#枚举某个进程的所有模块信息
def listModulesoOfProcess(session):
moduels = session.enumerate_modules()
moduels.sort(key = lambda item : item.base_address)
for module in moduels:
outWrite('%-40s\t%-10s\t%-10s\t%s' % (module.name, hex(module.base_address), hex(module.size), module.path))
session.detach()
#从JS接受信息
def on_message(message, data):
if message.has_key('payload'):
payload = message['payload']
if isinstance(payload, dict):
deal_message(payload)
else:
print payload
#处理JS中不同的信息
def deal_message(payload):
global UIMESSAGE
global APPINFO
global appname
global appdoc
global appurl
appdoc=''
appurl=''
k=0
#基本信息输出
if payload.has_key('mes'):
print payload['mes']
#安装app信息 |grep "Snapchat"
if payload.has_key('app'):
app = payload['app']
APPINFO=payload['app']
lines = app.split('\n')
for line in lines:
if len(line):
arr = line.split('\t')
if len(arr) == 3:
outWrite('%-40s\t%-70s\t%-80s' % (arr[0], arr[1], arr[2]))
if appname==arr[0]:
if k==0:
appdoc=arr[2]
k=1
else:
appurl=arr[2]
k=0
if appurl!='':
xs=''
print appurl
result = re.findall(".*file://(.*)>.*",appurl)
for x in result:
xs=xs+x
#print x
print xs
appdoc=''
appurl=''
#处理UI界面输出
if payload.has_key('ui'):
print colorPrint(31, payload['ui'])
UIMESSAGE=UIMESSAGE+payload['ui']
#处理完成事件
if payload.has_key('finished'):
finished.set()
#加载JS文件脚本
def loadJsFile(session, filename):
source = ''
with codecs.open(filename, 'r', 'utf-8') as f:
source = source + f.read()
script = session.create_script(source)
script.on('message', on_message)
#接收js脚本的消息
script.load()
return script
def main():
global session
global appname
global UIMESSAGE
UIMESSAGE=''
# 1. 获取USB设备
device = get_usb_iphone()
if len(sys.argv)>2:
appname=sys.argv[2]
else:
appname=u'有料短视频'
print '设备信息:' + str(device)
if sys.argv[1]=='ps':
# 2. 枚举运行进程信息
print 'ps'
listRunningProcess()
elif sys.argv[1]=='appinfo':
# 3. 枚举安装应用程序信息 |grep Snapchat
print 'appdoc'
session = device.attach(u'SpringBoard')
script = loadJsFile(session, APP_JS)
script.post({'cmd' : 'docinstalled'})
finished.wait()
elif sys.argv[1]=='mod':
# 4. 枚举某个进程加载的模块信息
print 'mod'
session = device.attach(appname)
listModulesoOfProcess(session)
elif sys.argv[1]=='ui':
# 5. 显示界面UI
#之后n 0xoooooooo(某个地址),输出某个地址的响应链
print 'ui'
session = device.attach(appname)
script = loadJsFile(session, UI_JS)
#我们把消息输出到文本中
time.sleep(3)
file_object=open('uimess.txt','w+')
try:
#all_the_text = file_object.read()
file_object.write(UIMESSAGE)
finally:
file_object.close()
while True:
line = sys.stdin.readline()
if not line:
break
script.post(line[:-1])#向js发命令
elif sys.argv[1]=='hook':
# 6. 动态Hook
print 'hook'
session = device.attach(appname)
script = loadJsFile(session, HOOK_JS)
sys.stdin.read()
# 2. 枚举运行进程信息
#listRunningProcess()
# 3. 枚举安装应用程序信息
#session = device.attach(u'SpringBoard')
#script = loadJsFile(session, APP_JS)
#script.post({'cmd' : 'installed'})
#finished.wait()
# 4. 枚举某个进程加载的模块信息
#session = device.attach(u'Snapchat')
#listModulesoOfProcess(session)
# 5. 显示界面UI
#session = device.attach(u'Snapchat')
#script = loadJsFile(session, UI_JS)
#while True:
# line = sys.stdin.readline()
# if not line:
# break
# script.post(line[:-1])
# 6. 动态Hook
#session = device.attach(u'Snapchat')
#script = loadJsFile(session, HOOK_JS)
#sys.stdin.read()
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
if session:
session.detach()
sys.exit()
else:
pass
finally:
pass
相关推荐
iOS应用脱壳实战:使用Frida-iOS-Dump解密微信美团等App
在iOS应用安全分析与逆向工程领域,应用加密与解密是核心技术环节。苹果的FairPlay DRM加密机制会在应用分发时对二进制文件进行保护,使得从App Store下载的应用无法直接进行静态分析。其原理是通过设备密钥在运行时动态解密内存中的代码段,而脱壳技术正是要获取这个解密后的内存镜像。这项技术的价值在于为安全研究、漏洞挖掘和架构学习提供了基础,广泛应用于移动安全审计、恶意代码分析和应用逻辑研究等场景。本文聚焦于Frida-iOS-Dump工具,它利用Frida动态插桩框架实现内存抓取,通过注入JavaS
Frida—HOOK 学习笔记2
frida
Unity手游逆向分析实战:从IL2CPP到Frida Hook的完整路径
逆向工程是理解软件内部工作原理、进行安全评估和漏洞分析的关键技术。其核心原理在于通过静态与动态分析,解析程序的代码逻辑、内存结构和数据流。在移动安全领域,这项技术对于评估应用安全性、研究防护机制具有重要价值,尤其在游戏、金融等高价值应用中。Unity引擎作为跨平台游戏开发的主流选择,其采用的IL2CPP脚本后端将C#代码编译为原生库,提升了性能,但也带来了新的逆向挑战。通过结合Il2CppDumper等工具恢复符号信息,并利用Frida进行动态Hook,可以有效地分析游戏逻辑,例如实现内存修改或协议分析。本
使用frida工具对Android应用进行Hook
Frida hook Android Java函数 Frida 环境搭建介绍 1、首先需要去github下载frida server文件,下载链接如下https://github.com/frida/frida/releases,根据Android手机不同的CPU架构选择合适的frida-server文件 2、通过adb push 命令将下载好的frida-server文件传到手机设备中,设置frida-server文件的执行权限 3、电脑安装python pip 4、使用pip安装frida (pip i
U3D游戏《东方新世界》Il2Cpp破解详细教程
U3D游戏《东方新世界》Il2Cpp破解详细教程U3D游戏《东方新世界》Il2Cpp破解详细教程
SLAM算法的优缺点
SLAM(Simultaneous Localization and Mapping,同时定位与地图构建)算法是一种通过传感器数据实时估计机器人自身位置和构建环境地图的技术。
Frida-跨平台注入工具基础篇
http://drops.wooyun.org/tools/5602 0x00 功能介绍 官方主页 github Inject JavaScript to explore native apps on Windows, Mac, Linux, iOS and Android. Hooking Functions Modifying Function Argume...
计算机模拟爆破过程,基于LSDYNA岩石爆破模拟建模分析
原标题:基于LSDYNA岩石爆破模拟建模分析 Ls Dyna岩石爆破模拟仿真作者:dyna_focus擅长领域:dyna/abaqus/hypermesh一、 数值模型的建立1.1 单元及算法的选择岩石,炸药,空气都采用solid164实体单元。岩石采用常应力实体单元,该种单元属于纯粹的lagrange算法,该种算法单元网格附着在材料上,随着材料的流动而产生单元网格的变形,但是在结构变形巨大时,有...
Frida API使用(3)
在这里对其中的一部分API进行了介绍,这篇文章继续介绍后面的内容。 通过这部分的介绍,可以发现通过Frida操纵内存、查看模块等信息是如此的简单。操作内存,最重要的自然就是打补丁了,邪恶的微笑。 Module对象 Module.load(path): loads the specified module from the filesystem path and returns a Module object. Throws an exception if the specified module cann.
数字IC后端手把手实战教程 | Innovus verify_drc VIA1 DRC Violation解析及脚本自动化修复方案
数字IC后端实战项目案例之Innovus verify_drc DRC Violation脚本自动化修复方案
手把手教你用STM32的SPI驱动MCP2517FD实现CAN FD通信(附完整代码)
本文详细介绍了如何使用STM32通过SPI驱动MCP2517FD实现CAN FD通信,涵盖硬件连接、SPI驱动编写、寄存器配置及数据收发实战。提供完整代码示例和常见问题排查指南,帮助开发者快速构建高可靠性的CAN FD通信系统,适用于汽车电子和工业控制等领域。
【iOS逆向与安全】frida-trace入门
frida-trace是一个用于动态跟踪函数调用的工具。支持android和ios。安装教程请参考官网。工欲善其事必先利其器。本文将以某App为示范,演示frida-trace的各种方法在iOS中的应用。
WGCNA分析中那些没人告诉你的坑:以肺结核差异基因模块筛选为例
本文深入探讨WGCNA分析在肺结核差异基因模块筛选中的七个关键陷阱,包括soft-thresholding选取、样本离群值检测、模块合并阈值调整等。通过实际案例和R代码示例,揭示生信数据挖掘中常被忽视的技术细节,帮助研究者避免常见错误,提升分析结果的可靠性和生物学意义。
精品连载丨安卓 App 逆向课程之二逆向神器 frida 的介绍
“ 阅读本文大概需要 8 分钟。 ”前面我们介绍了精品连载丨安卓 App 逆向课程一之环境配置,下面我们来接着介绍一个安卓 App 逆向大杀器—— frida。前阵子受《Xposed模块...
技术面 - 手撕算法题整理
这篇博客整理了华为OD面试中涉及的算法题,包括LeetCode热门题目、OD原题和需要手写的算法,如二分查找、冒泡排序等。建议优先刷"hot100"的LeetCode题目,全刷OD原题,以及掌握手撕算法的基本原理。
OceanSim: 基于Isaac Sim GPU 加速水下机器人感知仿真框架
OceanSim 采用先进的基于物理的渲染技术,对水下视觉和声学传感器进行精确建模。与其他模拟引擎相比,OceanSim 的渲染速度要快得多。作为 NVIDIA Issac Sim 的扩展,OceanSim 采用了多功能设计。通过融入快速发展的 NVIDIA Omniverse 生态系统,我们的模拟器自然而然地在机器人学习和水下机器人技术之间架起了一座桥梁,从而促进了水下应用中体现型人工智能技术的开发和部署。OceanSim 将以开放源码的方式提供,使研究界能够以合作的模式作出贡献。
APP逆向神器之Frida【Android初级篇】
说到逆向APP,很多人首先想到的都是反编译,但是单看反编译出来的代码很难得知某个函数在被调用时所传入的参数和它返回的值,极大地增加了逆向时的复杂度,有没有什么办法可以方便...
【2026华为OD新规机考】最新套题持续更新【完全原创题解 | 详细考点分类 | 不断更新题目 | 六种主流语言Py+Java+Cpp+C+Js+Go】
可上练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【优快云】否则不通过)
【iOS逆向与安全】iOS插件开发光速入门
经过之前的学习,相信你已经能熟练的使用Frida-trace、IDA Pro等逆向工具。不过,仅仅到这肯定是不够的。接下来,学会把你逆向的结果打包成插件并运行,那iOS逆向,你也就真正的入门了。
迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)
迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)
Statistics and Machine Learning Toolbox
Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具
下载得物app显示与此设备cpu不兼容该怎么办_APP逆向神器之Frida【Android初级篇】...
说到逆向APP,很多人首先想到的都是反编译,但是单看反编译出来的代码很难得知某个函数在被调用时所传入的参数和它返回的值,极大地增加了逆向时的复杂度,有没有什么办法可以方便地知道被传入的参数和返回值呢?答案是有的,这个方法就是Hook,Hook的原理简单地说就是用一个新的函数替代掉原来的函数,在这个新的函数中你想做什么都可以,为所欲为。本文中的Frida就是一个很常用的Hook工具,只需要...
Outlook Express 6 (OE6) for Win7/Win8/Win10
英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。
安卓逆向神器- frida(1)简介
简介: 随着技术的更新换代, 反爬是层出不穷, 三年前一个ip可以爬某宝的几百万的数据不会被封, 其他除了一些ip限制,和一些js的加解密几乎没有,随着移动端的兴起,数据已经倾斜到app端, 风控也是层出不穷, 各种加密解密,看着眼花缭乱,让人不知如何下手。 首先声明: 此次分享只为学习交流使用,切勿用于其他非法用途,关键代码均打码 Frida: 虽说反爬严重了,但是活还的干不是, 但是app破解难度很大, 群控吧效率还比较低,而且不可控, 那么frida就
精雕软件(JDpaint) 5.5 绿色版
精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版
安卓逆向_24( 一 ) --- Hook 框架 frida( Hook Java层 和 so层) )
From:Hook 神器家族的 Frida 工具使用详解:https://blog.csdn.net/FlyPigYe/article/details/90258758 详解 Hook 框架 frida ( 信抢红包 ):https://www.freebuf.com/company-information/180480.html APP逆向神器之F...
android 怎么调用js项目_APP逆向神器之Frida【Android初级篇】
说到逆向APP,很多人首先想到的都是反编译,但是单看反编译出来的代码很难得知某个函数在被调用时所传入的参数和它返回的值,极大地增加了逆向时的复杂度,有没有什么办法可以方便地知道被传入的参数和返回值呢?答案是有的,这个方法就是Hook,Hook的原理简单地说就是用一个新的函数替代掉原来的函数,在这个新的函数中你想做什么都可以,为所欲为。本文中的Frida就是一个很常用的Hook工具,只需要...
Frida安卓逆向实战:从环境搭建到Java/Native层Hook
动态代码插桩技术是现代软件安全分析与逆向工程的核心手段之一,它允许在程序运行时注入自定义代码,实现对函数调用、数据流和程序逻辑的动态监控与修改。其原理是通过向目标进程注入代理,拦截并重定向特定的函数执行流程,从而在不修改原始二进制文件的情况下,实时观察和干预程序行为。这项技术的核心价值在于为安全研究人员、开发者和逆向工程师提供了强大的动态分析能力,能够深入理解闭源软件的运行机制、发现潜在漏洞、分析加密算法或调试复杂问题。在移动安全领域,特别是安卓应用逆向分析中,动态插桩技术被广泛应用于协议分析、算法还原、漏
深入解析frida-ios-dump:基于Frida动态插桩的iOS应用内存脱壳原理与实践
动态插桩技术通过在目标进程运行时注入代码,实现对程序行为的监控与修改,是软件逆向与安全分析的核心手段。其原理基于进程注入、远程通信和脚本执行,通过Hook关键函数或读取内存数据,为安全研究、漏洞挖掘和软件调试提供强大支持。在iOS逆向工程中,这项技术常被用于应用脱壳,即从内存中提取已解密的可执行文件。以frida-ios-dump工具为例,它利用Frida的动态插桩能力,结合对Mach-O文件格式和ASLR机制的深入理解,精准定位并提取内存中的解密镜像,有效应对App Store应用的加密保护。掌握这一过程
319



被折叠的 条评论
为什么被折叠?



