導讀
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配置文件,格式如下:
<code>{"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"
}/<code>
其中,只有target、package是必須的,其他的字段可選,也可以添加新的字段供本插件自己使用。
target字段的目的是指明要接收哪些App的文本型GUI事件;
package字段的目的是供調度器管理所有的TB插件使用。
0x02.TB_main插件事件
<code>def
TB_main
(dictarg)
/<code>
插件腳本必須提供的入口回調函數,沒有則視為無效TB插件所以不會加載它,dictarg是框架提供的Key-Value字符串參數。有一個字段event指明當前的TB插件事件類型,當前支持的事件類型如下:
- install: 當插件被安裝完畢時會收到該事件,一般用於全局性的初始化;
- uninstall: 當插件被卸載之前會收到該事件,一般用於全局性的資源回收清除;
- start: 當插件被用戶啟動時會收到該事件,一般用於啟動插件的主邏輯,比如TBMachoDumper會打開選擇App的界面;
- stop: 當插件被用戶停止時會收到該事件;
- enable: 當插件被用戶重新啟用時會收到該事件;
- disable: 當插件被用戶禁用時會收到該事件;
- apprun: 當系統有新的進程啟動時會收到該事件,同時會在dictarg中包含兩個字段’pid‘、‘name’代表當前進程的信息;
- appdie: 當系統運行的進程退出時會收到該事件,其他字段同apprun;
- idle: 當系統沒有任何事件產生時,會每隔30s發送一次該事件給處於running狀態的TB插件;
模板處理代碼如下:
<code>def TB_main(dictarg): event = dictarg['event'
]if
event =='install'
:'install xxx TBPlugin'
)elif
event =='uninstall'
:'uninstall xxx TBPlugin'
)elif
event =='start'
:'start xxx TBPlugin'
)elif
event =='stop'
:'stop xxx TBPlugin'
)elif
event =='enable'
:'enable xxx TBPlugin'
)elif
event =='disable'
:'disable xxx TBPlugin'
)elif
event =='apprun'
:'process %d %s is running.'
% (dictarg['pid'
], dictarg['name'
]))elif
event =='appdie'
:'process %d %s died.'
% (dictarg['pid'
], dictarg['name'
]))elif
event =='idle'
:'idle event received) else: print('
what todo
with : %s' % (event)) return {}
/<code>
0x03.Pyobjus簡介
Textobot系統級模塊已經集成了Pyobjus這個庫,它的主要目的是使用Python調用iOS SDK的ObjC類方法。這就極大的擴展了我們Python代碼的能力,可以寫出和Objective-C一樣能力的處理邏輯。
關於Pyobjus更詳細的使用文檔,請自行百度或者谷歌‘pyobjus’,官方已經寫了很多詳細的說明和例子。在這裡我們主要提一下最最核心的一點:
<code>ObjC-Class
= autoclass('ObjC-Class'
)/<code>
通過該函數我們就把本地的Objective-C類導入Python運行時了,然後就可以像使用其他Python對象一樣使用Objective-C類的方法,非常方便強大,比如:
<code>text = NSString.stringWithUTF8String_('Hello,Textobot'
)'%s'
% text.UTF8String())/<code>
原始的Objective-C代碼如下:
<code>NSString
*text = [NSString
stringWithUTF8String:@"some string"
]; printf("%s"
, [text UTF8String]);/<code>
但是Pyobjus只能處理Objective-C類方法,如果要調用有些庫導出的C函數,那麼可以使用Textobot導出的一個輔助類,需要注意的是調用的函數輸入輸出必須是id對象:
<code>@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; }/<code>
樣例如下:
<code>TBObjcInvoker
= autoclass('TBObjcInvoker'
)invoker
= TBObjcInvoker.alloc().initWithDylib_('/usr/lib/libMobileGestalt.dylib'
)serialno
= invoker.call_arg_('MGCopyAnswer'
, objc_str('SerialNumber'
))/<code>
0x04.界面類API
<code>def
TB_dialog
(title, content)
藉助SpringBoard彈出一個提示框; title:提示框標題; content:提示框內容;/<code>
<code>def TB_gui(controls) controls:GUI控件描述文本; 通用格式為:控件類型 當前支持的控件如下: * label :文本字符串,控件類型 * edit :多行編輯框,控件類型 * combo :單選列表框,控件類型 * spin :數據調節器,控件類型 * padding :多加一些空白 完整使用方法請參考《史上最另類的文本型GUI事件模型》這篇文章。/<code>
0x05.按鍵類API
<code>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插件;/<code>
0x06.工具類API
<code>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
)/<code>
<code>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)/<code>
<code>def
TB_launch
(bid)
bid:
要運行的App BundleIDdef
TB_targets
()
獲取當前掛接在textobot server的目標進程,包含App和守護進程; 如果列表中沒有運行的進程,則重啟對應進程即可;/<code>
<code>def
TB_clear_log
()
清空print輸出的日誌內容; 插件模式不能全局使用,只能在函數內部使用;def
TB_front_app
()
獲取前臺運行的App信息,包含bid和pid; 插件模式不能使用; TB_event_callback 開發模式通過該全局變量設置事件回調,回調類型參見TB_on_event; 插件模式不能使用,使用方法參考TBMachoDumper源碼; 關於開發模式、插件模式請參考《Wow, 用迄今為止最簡單快捷的方式寫iOS代碼!》這篇文章。/<code>
0x07.下篇再見
到此,我們完整介紹了Textobot系統級API當前版本的所有內容,不管多複雜的插件都是可以滿足要求的,如果沒有現成的API並且覺得非常有必要,朋友們可以私信告訴我,我酌情加上。下一篇我們詳細介紹TB插件進程級API的內容。
0x08.定製服務
我們團隊雖小,但個個都是一頂三的技術精英,因此技術能力是嚴重過剩的。所以如果您有任何關於iOS/Android底層的疑難雜症、雲遊模擬器掛機/二次開發、曉文/飛度插件定製等方面的個性化需求,歡迎通過私信聯繫我們。
0x09.關於劉柏江
8年移動互聯網從業經驗、精通iOS/Android底層開發/攻防對抗、GikDbg/KiwiVM原作者、幾維安全聯合創始人/股東。
我的自媒體賬號將圍繞PantaEmu、Textobot、Fridobot、LidaDbg為用戶朋友們傳道、授業、解惑。歡迎各位朋友關注、點贊、轉發,謝謝大家。