当前位置: 首页>数据库>正文

process插件 process插件模型手册

导读

0x00.交个朋友

0x01.textobot.json插件配置文件

0x02.TB_main插件事件

0x03.Pyobjus简介

0x04.界面类API

0x05.按键类API

0x06.工具类API

0x07.下篇再见

0x08.定制服务

0x09.关于刘柏江

0x00.交个朋友

手游从业者模拟器玩家请关注云游模拟器PantaWin;

Android开发者请关注云游模拟器PantaWin/PantaMac/PantaLinux;

iOS越狱开发者请关注晓文框架Textobot;

Android插件开发者请关注飞度框架Fridobot;

移动调试器重度用户请关注利达调试器LidaDbg;

我们的产品推荐使用git下载和更新,在码云搜索geekneo即可。

0x01.textobot.json插件配置文件

每一个符合要求的TB插件都必须包含一个textobot.json配置文件,格式如下:

{    "target" : [        "application's bundle identifier"    ],    "package" : "your .tb plugin's package identifier",    "version" : "your .tb plugins's version",    "author" : "who writes this plugin",    "email" : "author's email",    "description" : "the description of this plugin"}

其中,只有target、package是必须的,其他的字段可选,也可以添加新的字段供本插件自己使用。

target字段的目的是指明要接收哪些App的文本型GUI事件;

package字段的目的是供调度器管理所有的TB插件使用。

0x02.TB_main插件事件

def TB_main(dictarg)

插件脚本必须提供的入口回调函数,没有则视为无效TB插件所以不会加载它,dictarg是框架提供的Key-Value字符串参数。有一个字段event指明当前的TB插件事件类型,当前支持的事件类型如下:

  1. install: 当插件被安装完毕时会收到该事件,一般用于全局性的初始化;
  2. uninstall: 当插件被卸载之前会收到该事件,一般用于全局性的资源回收清除;
  3. start: 当插件被用户启动时会收到该事件,一般用于启动插件的主逻辑,比如TBMachoDumper会打开选择App的界面;
  4. stop: 当插件被用户停止时会收到该事件;
  5. enable: 当插件被用户重新启用时会收到该事件;
  6. disable: 当插件被用户禁用时会收到该事件;
  7. apprun: 当系统有新的进程启动时会收到该事件,同时会在dictarg中包含两个字段’pid‘、‘name’代表当前进程的信息;
  8. appdie: 当系统运行的进程退出时会收到该事件,其他字段同apprun;
  9. idle: 当系统没有任何事件产生时,会每隔30s发送一次该事件给处于running状态的TB插件;

模板处理代码如下:

def TB_main(dictarg):    event = dictarg['event']    if event == 'install':        print('install xxx TBPlugin')    elif event == 'uninstall':        print('uninstall xxx TBPlugin')    elif event == 'start':        print('start xxx TBPlugin')    elif event == 'stop':        print('stop xxx TBPlugin')    elif event == 'enable':        print('enable xxx TBPlugin')    elif event == 'disable':        print('disable xxx TBPlugin')    elif event == 'apprun':        print('process %d %s is running.' % (dictarg['pid'], dictarg['name']))    elif event == 'appdie':        print('process %d %s died.' % (dictarg['pid'], dictarg['name']))    elif event == 'idle':        print('idle event received)    else:        print('what to do with : %s' % (event))    return {}




process插件 process插件模型手册,process插件 process插件模型手册_控件,第1张


0x03.Pyobjus简介

Textobot系统级模块已经集成了Pyobjus这个库,它的主要目的是使用Python调用iOS SDK的ObjC类方法。这就极大的扩展了我们Python代码的能力,可以写出和Objective-C一样能力的处理逻辑。

关于Pyobjus更详细的使用文档,请自行百度或者谷歌‘pyobjus’,官方已经写了很多详细的说明和例子。在这里我们主要提一下最最核心的一点:

ObjC-Class = autoclass('ObjC-Class')

通过该函数我们就把本地的Objective-C类导入Python运行时了,然后就可以像使用其他Python对象一样使用Objective-C类的方法,非常方便强大,比如:

text = NSString.stringWithUTF8String_('Hello,Textobot')print('%s' % text.UTF8String())

原始的Objective-C代码如下:

NSString *text = [NSString stringWithUTF8String:@"some string"];printf("%s", [text UTF8String]);

但是Pyobjus只能处理Objective-C类方法,如果要调用有些库导出的C函数,那么可以使用Textobot导出的一个辅助类,需要注意的是调用的函数输入输出必须是id对象:

@interface TBObjcInvoker {    -(id)initWithDylib:(const char *)path;    -(NSString *)dlerror;    -(id)call:(const char *)sym;    -(id)call:(const char *)sym arg:(id)arg;    -(id)call:(const char *)sym arg0:(id)arg0 arg1:(id)arg1;    -(id)call:(const char *)sym arg0:(id)arg0 arg1:(id)arg1 arg2:(id)arg2;    -(id)call:(const char *)sym arg0:(id)arg0 arg1:(id)arg1 arg2:(id)arg2 arg3:(id)arg3;}

样例如下:

TBObjcInvoker = autoclass('TBObjcInvoker')invoker = TBObjcInvoker.alloc().initWithDylib_('/usr/lib/libMobileGestalt.dylib')serialno = invoker.call_arg_('MGCopyAnswer', objc_str('SerialNumber'))

0x04.界面类API

def TB_dialog(title, content)借助SpringBoard弹出一个提示框;title:提示框标题;content:提示框内容;
def TB_gui(controls)controls:GUI控件描述文本;通用格式为:控件类型---提示标题[---初始参数]当前支持的控件如下: * label :文本字符串,控件类型---提示标题---对齐方式包括空、center、right; * edit :多行编辑框,控件类型---提示标题---初始文本; * combo :单选列表框,控件类型---提示标题---初始列表,以逗号分隔; * spin :数据调节器,控件类型---提示标题---初始参数,格式为“起始值,步长,终止值”; * padding :多加一些空白完整使用方法请参考《史上最另类的文本型GUI事件模型》这篇文章。

0x05.按键类API

def TB_touch(x, y)x:整数,点击x坐标;y:整数,点击y坐标;def TB_touch_pair(pt)pt:字符串,点击坐标,格式为"x,y",比如"89,10",这些值一般由框架提供,参见回调函数TB_on_event;def TB_swipe(x1, y1, x2, y2)x1,y1:整数,滑动起始坐标;x2,y2:整数,滑动终止坐标;Note:iOS版本小于10.0的系统需要安装TBROOT/iOS/Util/SimulateTouch-iOS8_9.deb插件;

0x06.工具类API

def TB_input_text(text)text:通过键盘输入的文本内容;使用实例:先点击编辑框,然后输入文本。def input_text(pt, text):    TB_touch_pair(pt)    time.sleep(3)    TB_input_text(text)    time.sleep(3)
def TB_send_text(pt, text)如果TB_input_text不好用就试试这个API;text:直接向编辑框输入的文本内容;使用实例:先点击编辑框,然后发送文本。def send_text(pt, text):    TB_touch_pair(pt)    time.sleep(3)    TB_send_text(pt, text)
def TB_launch(bid)bid: 要运行的App BundleIDdef TB_targets()获取当前挂接在textobot server的目标进程,包含App和守护进程;如果列表中没有运行的进程,则重启对应进程即可;
def TB_clear_log()清空print输出的日志内容;插件模式不能全局使用,只能在函数内部使用;def TB_front_app()获取前台运行的App信息,包含bid和pid;插件模式不能使用;TB_event_callback开发模式通过该全局变量设置事件回调,回调类型参见TB_on_event;插件模式不能使用,使用方法参考TBMachoDumper源码;关于开发模式、插件模式请参考《Wow, 用迄今为止最简单快捷的方式写iOS代码!》这篇文章。

https://www.xamrdz.com/database/6t31935742.html

相关文章: