美文网首页
越狱的笔记-Cycript的使用

越狱的笔记-Cycript的使用

作者: guoguojianshu | 来源:发表于2021-06-09 23:49 被阅读0次

    先安装Cycript软件,在Cydia中,即可在iphone上调试正在运行中的App(注意app必须在手机上是运行状态)

    1.先远程登录手机

    sh usb.sh
    sh login.sh
    

    - Cycript的开启和关闭

    cycript
    

    cycript -p 进程ID

    cycript -p 1364
    

    cycript -p 进程名称

    cycript -p WeChat
    

    完整的进程,包括进程的ID, 安装路径,进程名称(最后一个是进程名称)

     1364 ??         0:08.08 /var/mobile/Containers/Bundle/Application/6F100B5F-CE1C-4329-886D-C60274D9C65D/WeChat.app/WeChat
    

    取消输入:control + C

    //输入完成的样子
    cy# ^C
    

    退出:control + D

    清屏:control + R

    获取手机上的进程

    • 必须先安装adv-cmds


      adv-cmds图片
    • ps命令是process status的缩写,使用ps命令可以列出系统当前的进程
    • 列出所有的进程
    ps -A
    

    ps aux
    
    • 搜索关键词,ps –A | grep 关键词
    ps -A | grep app
    

    常用语法

    [UIApplication sharedApplication]
    UIApp
    
    • 定义一个变量
    var app = UIApp.keyWindow
    

    "<iConsoleWindow: 0x137275e30; baseClass = UIWindow; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x13716dfe0>; layer = <UIWindowLayer: 0x1371eddf0>>"

    • 活动根控制器
    UIApp.keyWindow.rootViewController
    

    -用内存地址获取对象(#内存地址)

    #0x137275e30
    

    "<iConsoleWindow: 0x137275e30; baseClass = UIWindow; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x13716dfe0>; layer = <UIWindowLayer: 0x1371eddf0>>"

    已加载的所有OC类

    ObjectiveC.classes
    

    查看对象的所有成员变量 (对象)或(#内存地址)

    *UIApp.keyWindow
    *UIApp
    *#0x137210dc0
    

    递归打印view的所有子控件(跟LLDB一样的函数)

    view.recursiveDescription().toString()

     UIApp.keyWindow.recursiveDescription().toString()
    

    筛选出某种类型的对象

    • 筛选出控制器
    choose(UIViewController)
    
    • 筛选出cell
    choose(UITableViewCell)
    

    如果出现下面这个错误,可能是因为这个界面没有使用到cell,造成的错误,崩溃后从新连接下

    cy# choose(UITableViewCell)
    MS:Error: _krncall(mach_vm_read_overwrite(task, data, sizeof(*baton), reinterpret_cast<mach_vm_address_t>(baton), &error)) =268435459
    *** _assert(status == 0):../Inject.cpp(143):InjectLibrary
    

    把cy语法文件添加到手机上,放到cycript0.9文件中

    scp -P 10010 ~/Desktop/test.cy root@localhost:/usr/lib/cycript0.9
    

    使用test的指令

    导入头文件

    @import test
    

    调用test里面的函数

    minus(10,20)
    

    这样调用会报错,找不到这个变量,是test.cy文件内部的问题,因为js代码,函数调用函数,里面的函数就是私有的,造成引用不到,这个时候就得用exports这个变量,将函数导出

    throw new ReferenceError("Can't find variable: minus")

    js修改前的代码

    (function(exports)) {
        function sum(a,b) {
        return a + b;
        }
        function minus(a,b) {
            return a - b;
        }
    
    })(exports);
    

    js修改后的代码

    (function(exports)) {
    
     exports.sum =  function(a,b) {
        return a + b;
        };
    exports.minus = function(a,b) {
            return a - b;
        };
    
    })(exports);
    
    

    从新替换手机上的文件

    scp -P 10010 ~/Desktop/test.cy root@localhost:/usr/lib/cycript0.9
    
    

    再次调用方法

    minus(20,2)
    

    这个时候还是报错,因为使用export方法,表示就是这个方法传递给了这个test文件,得使用文件名进行访问

    test.minus(20,2)
    

    throw new TypeError("test.minus is not a function. (In 'test.minus(20,2)', 'test.minus' is undefined)")

    这样还是报错,因为是手机上文件被修改了,import时候,内存中还是原来的文件,必须得把手机上软件杀掉,然后电脑从新连接,再次import

    @import test
    

    提示这个,import时候,会提示里面有一个sum函数,和一个minus函数

    {sum:function (t,e){return t+e},minus:function (t,e){return t-e}}
    

    调用方法,就成功了

    test.minus(20,2)
    

    获得程序的bundleID

    [NSBundle mainBundle].bundleIdentifier
    

    test.py的内容

    (function(exports) {
    
        exports.sum =   function(a,b) {
        return a + b;
        };
        exports.minus = function(a,b) {
            return a - b;
        };
    
        exports.appId = [NSBundle mainBundle].bundleIdentifier;
    
        exports.rootVc = function() {
    
            return UIApp.keyWindow.rootViewController;
        };
        exports.docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
    
    })(exports);
    

    调用方法

    test.appId
    test.docPath
    test.rootVc()
    test.sum(10,20)
    

    以上test.cy文件的内容是局部变量,使用的时候得用文件名,可以把方法修改为全局的变量

    (function(exports) {
    
        JGSum = function(a,b) {
        return a + b;
        };
        exports.minus = function(a,b) {
            return a - b;
        };
    
        exports.appId = [NSBundle mainBundle].bundleIdentifier;
    
        exports.rootVc = function() {
    
            return UIApp.keyWindow.rootViewController;
        };
        JGDocPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
    
    })(exports);
    

    全部变量的调用方法

     JGSum(10,20)
    

    注意:如果test.cy文件没有放在cycript0.9文件下,在引用库的时候,就得加上后面的地址,类似域名com.xx.xx

    @import xx.xx.xx
    

    利用python打印字符

    • 先进入python环境
    python
    
    • 利用print打印符合
    print '\xc2\xa5'
    

    相关文章

      网友评论

          本文标题:越狱的笔记-Cycript的使用

          本文链接:https://www.haomeiwen.com/subject/zbodeltx.html