Cycript基本语法与使用-iOS逆向工程

Cycript(二):使用手册 目录常见问题(General Questions)Cycript 控制台(Cycript Console)JavaScript 解析器(JavaScript Parser)CommonJS 模块(CommonJS Modules)C 类型和指针(C Types and Pointers)C 结构体和数组(C Structs and Arrays)Objective-C 基础(Objective-C Basics)Objective-C 高级(Objective-C Advanced)Java 初始预览版(J 阅读详情



Cycript基本语法与使用-iOS逆向工程



设备连接方式见上篇:http://blog.youkuaiyun.com/glt_code/article/details/65444592


1.常用数据类型(字符串、数组、字典、Bool, NSNumber)


cy# @"Hello Gao Liutong"
@"Hello Gao Liutong"
cy# @[1, 2, 3]
@[1,2,3]
cy# @{"key":"value"}
@{"key":"value"}
cy# @YES
@true
cy# @(5+7)
@12


2.instanceof 判断是什么类型


cy# @"Hello Gao Liutong" instanceof String
true
cy# @[1, 2, 3] instanceof Array
true
cy# @"Hello Gao Liutong" instanceof Array
false


3.substr字符串截取,slice数组截取(slice(0,2)从0下标长度为2,即下标0和1)


cy# @"Hello Gao Liutong".substr(0, 5)
"Hello"
cy# @[1,2,3,"hello"].slice(0, 2)
[@1,@2]


4.数组与字典的一些操作


cy# var array = [NSMutableArray arrayWithObjects:@"1",@"2", nil]; 
@["1","2"]
cy# array.length
2
cy# array.count
2
cy# array[5] = 6; array;
@["1","2",,,,6]
cy# array.length = 3; array;
@["1","2",,]
cy# array[0]
@"1"
cy# @{@"key":@"55555"}["key"]
@"55555"


5.js转换为oc类型


cy# ?debug
debug == true
cy# @(2+7)
cy= Instance.box((9))
@9
cy# @"test"
cy= Instance.box("test")
@"test"

6.调用方法,实际上是oc中的函数 objc_msgSend(receiver, selector, arg1, arg2, …);


cy# [@"hello world" stringByReplacingOccurrencesOfString:@"hello" withString:@"niho"]
cy= objc_msgSend(Instance.box("hello world"),"stringByReplacingOccurrencesOfString:withString:",Instance.box("hello"),Instance.box("nihao"))
@"nihao world"


7.字典与数组操作


cy# var a = [1, 2, 3]
[1,2,3]
cy# [a objectAtIndex:0]
@1
cy# [a setObject:@"123" atIndex:2]; a
[1,2,@"123"]
cy# var dict = {"key":"value"}
{key:"value"}
cy# [dict setObject:a forKey:"array"]
cy# dict
{key:"value",array:[1,2,@"123"]}


8.初始化一个对象


cy# [[NSObject alloc] init]
#"<NSObject: 0x16f7c590>"
cy# [new NSObject init]
#"<NSObject: 0x182e5cb0>"


9.#+内存地址 代表了一个对象


cy# UIApp
#"<SpringBoard: 0x17af0400>"
cy# #0x17af0400
#"<SpringBoard: 0x17af0400>"


10. 获取window的子view


cy# UIApplication.sharedApplication()
#"<SpringBoard: 0x17af0400>"
cy# UIApplication.sharedApplication().windows[0]
#"<SBSecureWindow: 0x16fb81f0; baseClass = UIWindow; frame = (0 0; 320 568); userInteractionEnabled = NO; gestureRecognizers = <NSArray: 0x16fb8ee0>; layer = <UIWindowLayer: 0x16fb8600>>"
cy# UIApplication.sharedApplication().windows[0].contentView()
#"<UIView: 0x18075620; frame = (0 0; 320 568); clipsToBounds = YES; layer = <CALayer: 0x180757c0>>"
cy# UIApplication.sharedApplication().windows[0].contentView().subviews[0]
cy# UIApplication.sharedApplication().windows[0].contentView().subviews()[0]
#"<SBFStaticWallpaperView: 0x16fcb4b0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x16fcb740>>"



11.打印视图的层次


cy# UIApp.keyWindow.recursiveDescription().toString()


12.获取所有的framworks


cy# function loadFramework(fw)
 { 
       var h="/System/Library/",t="Frameworks/"+fw+".framework";
          [[NSBundle bundleWithPath:h+t]||
         [NSBundle bundleWithPath:h+"Private"+t] load];
            
 }


13.CG...Make函数


cy# function CGPointMake(x, y) { return {x:x, y:y}; }
cy# function CGSizeMake(w, h) { return {width:w, height:h}; }
cy# function CGRectMake(x, y, w, h) { return {origin:CGPointMake(x,y), size:CGSizeake(w, h)}; }


14.获取对象的属性


方法一、

cy# [i for (i in *UIApp)]


方法二、

cy# function tryPrintIvars(a){ var x={}; for(i in *a){ try{ x[i] = (*a)[i]; } catc(e){} } return x; }


15.根据类获取方法


cy# function printMethods(className, isa) { 
        var count = new new Type("I");
            var classObj = (isa != undefined) ? objc_getClass(className)->isa :    
                objc_getClass(className); 
                    var methods = class_copyMethodList(classObj, count); 
                        var methodsArray = [];
                            for(var i = 0; i < *count; i++) { 
                                    var method = methods[i]; 
                                            methodsArray.push({selector:method_getame(method),     
                                                    implementation:method_getImpleentation(method)});
                                                        }
                                                                free(methods); 
                                                                        return metodsArray;


16.获取当前的控制器


cy# function currentVC() {
        var app = [UIApplication sharedApplication]  
            var keyWindow = app.keyWindow  
                var rootController = keyWindow.rootViewController  
                    var visibleController = rootController.visibleViewController  
                        if (!visibleController){
                               return rootController
                                   }
                                       return visibleController.childViewControlles[0]
                                       }



17.choose(类),可以查看这个类的所有对象


cy# choose(UIView)
[#"<UIStatusBarDataNetworkItemView: 0x15c118e0; frame = (25 0; 13 20); autoresize = RM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x15c11a80>> [Item = <UIStatusBarItem: 0x15c11480> [DataNetwork (Left)]]",#"<UIStatusBarBatteryItemView: 0x15c120c0; frame = (282 0; 33 20); autoresize = LM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x15c110c0>> [Item = <UIStatusBarItem: 0x14762a10> [Battery (Right)]]",#"<UIImageView: 0x15c121e0; frame = (27.5 0; 5.5 20); opaque = NO; autoresize = LM+TM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x15ac6b30>>",#"<UIStatusBarBatteryPercentItemView: 0x15c123f0; frame = (248 0; 31 20); autoresize = LM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x147bb8a0>> [Item = <UIStatusBarItem: 0x15ae59f0> [BatteryPercent (Right)]]",#"<UIStatusBarTimeItemView: 0x15c124b0; frame = (144 0; 32 20); autoresize = LM+RM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x14683410>> [Item = <UIStatusBarItem: 0x159f21c0> [Time (Center)]]",#"<UISegment: 0x15c14d40; frame = (0 0; 155 29); opaque = NO; layer = <CALayer: 0x15c14f80>>",#"<UISegmentLabel: 0x15c15150; frame = (64.5 6.5; 26 16); text = '\xe4\xbb\x8a\xe5\xa4\xa9'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x15c153a0>>",#"<UISegment: 0x15c15a10; frame = (156 0; 156 29); opaque = NO; layer = <CALayer: 0x15c16cc0>>",#"<UIImageView: 0x15c15bc0; frame = (156 0; 1 29); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; tag = -1030; layer = <CALayer: 0x15c16050>>",#"<UILabel: 0x15c15cb0; frame = (48 20.5; 272 40); text = '3\xe6\x9c\x8824\xe6\x97\xa5 \xe6\x98\x9f\xe6\x9c\x9f\xe4\xba\x94'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x15c17e70>>",#"<UIImageView: 0x15c160b0; frame = (155 0; 1 29); opaque = NO; autoresize = LM; userInteractionEnabled = NO; tag = -1030; layer = <CALayer: 0x15c16160>>",#"<UISegment: 0x15c16320; frame = (156 0; 156 29); opaque = NO; layer = <CALayer: 0x15c162d0>>",#"<UISegment: 0x15c164f0; frame = (0 0; 155 29); opaque = NO; layer = <CALayer: 0x1


18.分类


cy# @implementation NSObject (TestCategory)
    -description {return "test"}
    -(double)calculate:(float)num {return num * 10;}
    @end
cy# test = [new NSObject init]
#"test"
cy# [test calculate:10]
100


19.类与方法的调用注意用的是@implementation


cy# @implementation MyClass : NSObject 
    {
        int num;
    }
    -(int)returnNum {return this -> num;}
    @end
MyClass
cy# var aNum = [new MyClass init]
#"<MyClass: 0x159279e0>"
cy# aNum->num = 10;
10
cy# [aNum returnNum]
10


20.Block用法


cy# testBlock = ^ int (int value) {return value * 10}
^int(int){}
cy# testBlock(10)
100



参考地址: http://www.cycript.org/manual/
iOS 逆向编程(十四)Cycript 语法入门 命令 | 结果 || — | — || UIApp | 获取当前 App 的 Appdelegate 对象 || UIApp.keyWindow | 获取当前的keyWindow对象 || UIWindow.keyWindow | 获取当前的keyWindow对象 || var | 定义一个对象 || #内存地址 | 获得当前内存地址的对象 || #内存地址 | 获得当前内存地址的对象 || *对象 | 获得对象的所有成员变量 | 阅读详情

相关推荐

python - 啃书 第六章 面向对象程序设计

基本概念 面向过程程序设计(Procedure Oriented Programming)POP: 把计算机程序视为一系列命令集合。一组函数按照事先设定的顺序依次执行。函数是程序的基本单元。 C、python等 面向对象程序设计(Object Oriented Programming)OOP: 新的程序设计思想和方法 把计算机程序视为一组对象(Object)的集合,每个对象可以接受其他对象发送的消息,并处理这些消息。 对象是程序的基本单元,一个对象包含数据和操作数据的方法。 C++、C#、Java、Pyth

jhsxy2005的博客 519

Cycript学习

Cycript是OC、JS、Java等语法的混合物,利用Cycript可以用来研究、修改、调试正在运行的iOS或者Mac程序 Cycript的官方网址 使用方法: 在Cydia里面安装Cycript 常用命令: cycript 进入cycript cycript -p 进程名称 或 进程ID 调试指定进程 Ctrl + C 取消输入 Ctrl + D 退出 Co...

IOSSHAN的博客 1737

iOS逆向工程笔记

Cycript是一款脚本语言,可以看作是Objective-JavaScript,它可以帮助我们轻松测试和验证函数效果。在越狱手机中可以通过注入方式在第三方应用中运行也可以用静态库的方式把cycript集成到自己的应用(MonkeyDev,可以给非越狱iOS第三方App写插件,但是权限受沙盒限制)在越狱手机中安装Cycript在Cydia上搜索Cycript进行安装Cycript使用(注入到第三方进程空间)注入Cycript模块到第三方进程//确认进程名或者进程PID1368??

dhq199023的博客 2087

02-Cycript的使用

Cycript介绍 Cycript是Objective-C++、ES6(JavaScript)、Java等语法的混合物,可以用来探索、修改、调试正在运行的Mac\iOS APP,需要通过Cydia安装Cycript,即可在iPhone上来调试运行中的App,可以点击官网来查看,可以点击Cycript文档来查看Cycript的使用方式 注意:App在运行时才能进行调试 Cycript开启和关闭 在进行此步骤前,需要先将Mac和iPhone用USB进行连接(在第一节中有介绍) Cycrip的指令有:

TSLee的博客 1723

初探iOS逆向工程+微信小牛试刀

何为逆向工程?逆向工程,指的是通过分析一个程序或系统的功能、结构或行为,将它的技术实现或设计细节推导出来的过程。当我们对一个软件的功能很感兴趣,却又拿不到它的源代码时,往往可以通过逆向工程的方式对它进行分析。推荐的书籍:iOS逆向交流论坛:http://iosre.com/开始尝试简单的微信抢红包应用脱壳:准备工作 一台已越狱的iPhone5s以上机器(已安装OpenSSH和Cycript,砸壳用)

AirSars001的博客 4463

iOS应用远程动态调试实战:非越狱环境下使用Cycript进行运行时分析与Hook

动态调试与运行时分析是深入理解软件内部机制、进行安全评估和性能优化的核心技术。其原理在于通过注入技术,在目标程序运行时动态地观察、修改其内存状态和执行流程,从而实现对应用行为的深度洞察与控制。这项技术的核心价值在于,它绕过了对源代码和调试符号的依赖,使得分析闭源应用、进行黑盒测试以及学习优秀架构设计成为可能。在移动安全、逆向工程、质量保障等应用场景中,动态调试是分析数据流、测试健壮性、探索功能实现的关键手段。本文聚焦于iOS平台,详细阐述了如何利用Cycript这一强大的交互式脚本环境,结合debugser

weixin_34379433的博客 461

iOS逆向与安全 - 4. Cycript脚本语言的使用

一、Cycript介绍及安装 简介 Cycript是ECMAScript some-6,Objective-C ++和Java的混合体。它以Cycript-to-JavaScript编译器的形式实现,并为其虚拟机使用(未修改的)JavaScriptCore。它集中于通过采用其语法和语义的方面而不是将另一种语言作为二等公民来提供其他语言的“流利的FFI”。 Cycript的主要用户是目前在...

NULLGIRL 1928

iOS安全和逆向系列教程 第15篇:Cycript入门与使用

/ 保存为~/cycript_helpers.cy// 递归打印视图层次i++) {// 查找具有特定类名的视图i++) {// 获取应用当前显示的控制器} else {// 获取控制器中的所有属性if (!return;i++) {try {// 截图功能// 使用导入的功能Cycript是一个强大而灵活的工具,为iOS逆向工程提供了无与伦比的交互式体验。

一个自学不成材的程序员 938

iOS逆向工程-工具篇

对于初开始学习iOS逆向工程的人来说,实现一个tweak可以算是入门逆向工程了。 当然了,可能你现在还不知道tweak是什么。简单来说,你可以把一个tweak当作某一个app的一个插件(类似于浏览器广告屏蔽插件)。在app运行的时候,tweak会hook住某个函数,然后在hook的函数里面,你可以插入你的代码。 比如用户在登陆微信账号的时候,tweak可以hook住登录函数,dump出

fishmai的专栏 1万+

ios 12上安装cycript

ios 12或其他较高的系统越狱请关注公众号“玩机之家”。公众号中安装合适的unc0ver进行越狱.(现在12.1.2以下已经可以通过爱思助手越狱) 在ios 11及更高版本的ios系统中,因为cycript不能直接使用,也没有人维护的原因,许多人不得不使用其他工具代替cycript。 想继续使用cycript,所以经过一段时间,终于找到了cycript如何在ios高版本...

不仅仅是个程序员的博客 623

非越狱环境下iOS逆向工程技术实战:dylib注入、重签名与App Hook

dylib注入技术利用了iOS系统的动态链接库(dynamic library,dylib)特性。动态链接库是包含可由多个程序共享的代码和数据的文件。当一个程序执行时,这些库的代码和资源被链接到程序中。在非越狱的iOS设备上,所有的应用程序都运行在沙盒环境中,为了确保系统的安全性和稳定性,Apple对沙盒环境做了严格的限制,应用程序不能直接操作其他应用程序的数据和代码。然而,通过dylib注入技术,我们可以动态地将自定义的代码注入到目标应用程序中,以此来修改应用程序的行为,或者为其添加新的功能。

weixin_31961675的博客 1960

iOS逆向工具Cycript使用指南

Cycript是一款由Jay Freeman开发的脚本工具,结合JavaScript和Objective-C能力,可在运行时与iOS应用交互调试。文章介绍了其安装方法(越狱设备通过Cydia或命令行,电脑端通过Homebrew),基本使用包括附加进程、获取UI元素、遍历视图层级等操作。重点讲解了实用技巧:查找修改界面元素、方法调用与Hook、内存分析、网络监控等,并提供了界面分析和自动化测试的示例脚本。最后提醒注意稳定性、内存管理、合法性和数据备份。该工具适合开发者进行应用调试和分析,但需谨慎使用。

油墨香^-^的博客 2246

四阶龙格库塔方法求解一次常微分方程组

四阶龙格库塔方法求解一次常微分方程组一、写在前面二、四阶龙格库塔方法三、使用四阶龙格库塔方法求解一次常微分方程组 一、写在前面 龙格库塔方法是数值求解常微分非线性方程的有利工具,计算精度较高,通过缩短步进距离和增加阶数可以进一步控制误差范围。工程上较为常用的是四阶龙格库塔算法(R-K4),在计算收敛的情况下往往可以得到比较好的结果。 二、四阶龙格库塔方法 这里简单介绍一下算法的具体实现过程,不做详细的推导。其求解的问题是形如方程: y˙=f(y,t),其中t∈[t0,t1]初值y(t0)=c0 \dot{y

HelloWorldTM的博客 2万+

mjcript:iOS逆向工程必备工具!基于Cycript的高效函数库完全指南

mjcript是一款专为iOS逆向工程打造的高效函数库,基于Cycript实现,集成了大量实用功能,帮助开发者快速获取应用信息、分析UI结构和调试代码。无论是越狱开发新手还是经验丰富的逆向工程师,mjcript都能显著提升工作效率,让iOS逆向过程变得更加简单高效。 ## 为什么选择mjcript? 在iOS逆向工程中,快速定位关键信息和调试代码是提升效率的关键。mjcript通过封装常用的C

gitblog_00129的博客 345

[QDS]从零开始,写第一个Qt Design Studio到程序调用的项目

最近在使用Qt Design Studio进行开发,但是简中网上要不就是只搜得到Qt Designer(Qt Creator内部库),要不就只搜得到一点营销号不知道从哪里搬来的账号,鉴于Qt Design Studio是一个这么强大的软件,自然是需要来进行一下小小的实践的。所以开了这篇文章,方便没有使用过Qt Design Studio 和 QML的开发者也可以快速上手QDS(Qt Design Studio)。在本文中,你将学会如何使用QDS开发一个简单的QML程序,与你的C++后端代码进行交流。

Andius的博客 8210

300个fpga练手项目推荐

• 按键设置BPM,LED和蜂鸣器同步打拍(支持4/4、3/4拍)• 例:先实现DDR3控制器(基础),再构建视频处理流水线(集成)◦ 驱动小型e-Paper显示日期/时间(SPI接口,静态刷新)◦ 音频输入经FFT后,用LED柱状显示频率能量(8频段简化)◦ 通过HC-05模块接收手机指令,控制电机方向(前进/后退)• 随机点亮LED,用按钮响应,数码管显示反应时间(毫秒级)• 8个LED旋转闪烁,按钮停止后显示中奖编号(带减速动画)• 用4方向按键输入手势(如→→←↑),正确后点亮绿色LED。

qq_62784677的博客 7637

iOS逆向工程终极指南:Hopper与Cycript动态调试深度解析

iOS逆向工程是移动安全研究、漏洞挖掘和应用程序分析的重要技能。对于iOS开发者来说,理解逆向工程不仅有助于提高代码安全性,还能深入理解系统底层机制。本文将为您详细介绍iOS逆向工程的核心工具Hopper与Cycript,提供完整的动态调试指南,帮助您快速掌握iOS应用安全分析技术。 ## 为什么学习iOS逆向工程?🔍 在当今移动应用安全日益重要的时代,逆向工程技能变得尤为关键。无论是进行安

gitblog_01145的博客 550

PMSM单电阻采样避坑指南:如何解决非观测区电流重构难题(附ST专利分析)

本文深入解析了PMSM单电阻采样技术中的非观测区电流重构难题,并详细介绍了ST专利方案及移相法的工程实践。通过优化PWM调制策略和系统级调试方法,有效解决了相电流检测精度问题,为电机控制领域的工程师提供了实用的技术指南。

weixin_33737774的博客 631

iOS 逆向之 Cycript 高级玩法(非越狱) & .cy文件的封装

What is Cycript 摘自官方文档:   Cycript is a hybrid of ECMAScript some-6, Objective-C++, and Java. It is implemented as a Cycript-to-JavaScript compiler and uses (unmodified) JavaScriptCore for its virtual ...

weixin_33749131的博客 1536

深入剖析RK3588系统休眠唤醒机制及驱动适配秘籍

本文深入探讨了RK3588嵌入式系统的休眠唤醒机制及驱动适配技术。首先分析了系统支持的两种休眠模式(Freeze浅度睡眠和Mem深度睡眠)及四种唤醒方式(GPIO中断、蓝牙事件、外设活动和定时器唤醒)的工作原理。重点介绍了驱动适配的三个关键环节:设备树配置要点、驱动代码实现与优化方法,以及驱动与内核电源管理的协同机制。通过GPIO按键唤醒和蓝牙唤醒两个实际案例,展示了具体实现过程并提供了常见问题的解决方案。文章为开发者提供了全面的技术参考,有助于优化系统功耗管理和响应性能,对嵌入式系统开发具有重要指导意义。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 432

运行后选择GDB/LLDB出现这样的窗口:launch: program ‘输入程序名称,例如 D:\Desktop\新建文件夹\a.exe‘ does not exist...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1127

iOS应用逆向工程完整指南:从入门到精通

iOS应用逆向工程是移动安全领域的重要技能,帮助开发者深入理解iOS系统架构和应用运行机制。作为世界上第一本非常详细的iOS应用逆向工程技能书籍,本项目为iOS安全研究人员、开发者和逆向工程爱好者提供了全面的学习资源。📱 ## 为什么学习iOS逆向工程? iOS逆向工程不仅涉及安全研究,还能帮助开发者: - 🔍 **深入理解iOS系统**:了解Apple未公开的API和内部机制 - 🛡

gitblog_01017的博客 1505

canoe安装完成开启之后因为VectorDeviceParams30_64.dll报错崩溃打不开...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1074

iOS逆向工程深度指南:从理论到实战的完整学习路径

iOS应用逆向工程是移动安全领域的核心技术,也是深入理解iOS系统架构的必经之路。作为世界上第一本详细阐述iOS逆向工程技能的书籍,《iOS App Reverse Engineering》为安全研究人员、高级开发者和技术爱好者提供了系统性的学习资源。本文将为您梳理如何高效掌握这一复杂技能,从基础概念到实战应用,构建完整的知识体系。 ## 为什么选择iOS逆向工程作为技术进阶方向? 在移动应用

gitblog_00154的博客 996

《网络安全自学教程》- Nmap使用及扫描原理分析

使用Nmap进行端口扫描、主机发现、服务识别、操作系统识别、指定脚本、结果导出文件,使用wireshark抓包分析扫描原理。

wangyuxiang946的博客 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Cycript(一):基础简介

目录Cycript 简介Cycript 附加的特性其他 Cycript 简介 什么是 Cycript ? Cycript 允许开发者通过具有语法高亮显示和代码补全功能的交互式控制台,使用 Objective-C++ 和 JavaScript 语法的混合体,来探索和修改 iOS 或 macOS 上正在运行的应用程序(Cycript 还可以在 Android 和 Linux 上独立运行,并提供对 Java 的访问,但是不能注入进程) 可以将 Cycript 看成是一个理解 Objective-C 语法的 J

Airths 的博客 1780

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

上一篇: usbmuxd进行ssh连接-iOS逆向工程
下一篇: Hopper Disassembler基础使用-iOS逆向工程
glt_code
博客等级 码龄10年 40粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值