Frida-trace

{
  onEnter(log, args, state) {
    var self = new ObjC.Object(args[0]);  // 當前對象
    var method = args[1].readUtf8String();  // 當前方法名
    log(`[${self.$className} ${method}]`);

    var isData = false;
        // 如果參數(shù)是一個時間戳或者基本數(shù)據(jù)類型, 無法使用new ObjC.Object來轉(zhuǎn)換, 則可以使用toInt32來顯示原來的值
    // var timestamp = args[4].toInt32();

    // 字符串
    // var str = ObjC.classes.NSString.stringWithString_("hi wit!")  // 對應(yīng)的oc語法:NSString *str = [NSString stringWithString:@"hi with!"];
    // args[2] = str  // 修改入?yún)?
    // array
    // 數(shù)組
    // var array = ObjC.classes.NSMutableArray.array();  // 對應(yīng)的oc語法:NSMutableArray array = [NSMutablearray array];
    // array.addObject_("item1");  // 對應(yīng)的oc語法:[array addObject:@"item1"];
    // array.addObject_("item2");  // 對應(yīng)的oc語法:[array addObject:@"item2"];
    // args[2] = array; // 修改入?yún)?
    // 字典
    // var dictionary = ObjC.classes.NSMutableDictionary.dictionary(); // 對應(yīng)的oc語法:NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
    // dictionary.setObject_forKey_("value1", "key1"); // 對應(yīng)的oc語法:[dictionary setObject:@"value1" forKey:@"key1"]
    // dictionary.setObject_forKey_("value2", "key2"); // 對應(yīng)的oc語法:[dictionary setObject:@"value2" forKey:@"key2"]
    // args[2] = dictionary; // 修改入?yún)?
    // 字節(jié)
    var data = ObjC.classes.NSMutableData.data(); // 對應(yīng)的oc語法:NSMutableData *data = [NSMutableData data];
    var str = ObjC.classes.NSString.stringWithString_("hi wit!")  // 獲取一個字符串。 對應(yīng)的oc語法:NSString *str = [NSString stringWithString:@"hi with!"];
    var subData = str.dataUsingEncoding_(4);  // 將str轉(zhuǎn)換為data,編碼為utf-8涯塔。對應(yīng)的oc語法:NSData *subData = [str dataUsingEncoding:NSUTF8StringEncoding];
    data.appendData_(subData);  // 將subData添加到data。對應(yīng)的oc語法:[data appendData:subData];
    args[2] = data; // 修改入?yún)?    isData = true;

    // 更多數(shù)據(jù)類型:https://developer.apple.com/documentation/foundation

    var before = args[2];

    // 注意悴晰,日志輸出請直接使用log函數(shù)。不要使用console.log()
    if (isData) {
        // 打印byte對象
      var after = new ObjC.Object(args[2]); // 打印NSData
      var outValue = after.bytes().readUtf8String(after.length()) // 將data轉(zhuǎn)換為string
      log(`before:=${before}=`);
      log(`after:=${outValue}=`);
    } else {
        // 打印字符串乐横、數(shù)組垦页、字段
      var after = new ObjC.Object(args[2]); // 打印出來是個指針時,請用該方式轉(zhuǎn)換后再打印
      log(`before:=${before}=`);
      log(`after:=${after}=`);
    }

    // 如果是自定義對象時比肄,使用以上方法無法打印時,請使用以下方法:
    // var customObj = new ObjC.Object(args[0]); // 自定義對象
    // // 打印該對象所有屬性
    // var ivarList = customObj.$ivars;
    // for (key in ivarList) {
    //   log(`key${key}=${ivarList[key]}=`);
    // }

    // // 打印該對象所有方法
    // var methodList = customObj.$methods;
    // for (var i=0; i<methodList.length; i++) {
    //   log(`method=${methodList[i]}=`);
    // }
  },
  onLeave(log, retval, state) {

  }
}


注意: args的第0個參數(shù)是self對象, 第1個參數(shù)是方法名, 上方代碼有.

frida-trace [options] target

1.命令格式

frida-trace [options] target

iOS常用的可選參數(shù):

// 設(shè)備相關(guān)
-D  連接到指定的設(shè)備囊陡,多個設(shè)備時使用芳绩。示例:frida-trace -D 555315d66cac2d5849408f53da9eea514a90547e -F 
-U  連接到USB設(shè)備,只有一個設(shè)備時使用撞反。示例fria-trace -U -F// 應(yīng)用程序相關(guān)
-f  目標應(yīng)用包名妥色。spawn模式。示例:frida-trace -U -f com.apple.www
-F  當前正在運行的程序遏片。attach模式示例嘹害。示例:frida-trace -U -F或frida-trae -UF
-n  正在運行的程序的名字撮竿。attach模式。示例:frida-trace -U -n QQ
-N  正在運行的程序的包名笔呀。attach模式幢踏。示例:frida-trace -U -N com.apple.www
-p  正在運行的程序的pid。attach模式许师。示例:frida-trace -U -p 2302// 方法相關(guān)房蝉,以下參數(shù)在一條跟蹤命令中可重復(fù)使用
-I  包含模塊。示例:frida-trace -UF -I "libcommonCrypto*"
-X  不包含模塊微渠。示例:frida-trace -UF -X "libcommonCrypto*"
-i  包含c函數(shù)惨驶。示例:frida-trace -UF -i "CC_MD5"
-x  不包名c函數(shù)。示例:frida-trace -UF -i "*MD5" -x "CC_MD5"
-a  包含模塊+偏移跟蹤敛助。示例:frida-trace -UF -a 模塊名\!0x7B7D48
-m  包含某個oc方法。示例:frida-trace -UF -m "+[NSURL URLWithString:]"
-M  不包含某個oc方法屋确。示例:frida-trace -UF -M "+[NSURL URLWithString:]"http:// 日志相關(guān)
-o  日志輸出到文件纳击。示例:frida-trace -UF -m "*[* URL*]" -o run.log

2.常用命令

frida-trace中的方法匹配命令支持模糊匹配,星號匹配0個或多個字符攻臀,問號匹配1個字符:

-m "-[NSURL *]" // 匹配NSURL類的所有實例方法
-m "+[NSURL *]" // 匹配NSURL類的所有類方法
-m "*[NSURL *]" // 匹配NSURL類的所有方法
-m "*[*URL *]"  // 匹配以URL結(jié)尾類的所有方法
-m "*[URL* *]"  // 匹配以URL開頭類的所有方法
-m "*[*URL* *]" // 匹配包含URL的類的所有方法
-m "*[*URL* *login*]"   // 匹配包含URL的類的帶login的所有方法
-m "*[????? *]" // 匹配類名只有五個字符的類的所有方法

簡而言之:


當你只知道部分類名時,不確定的地方用星號代替

當你只知道部分方法名時刨啸,不確定的地方用星號代替

當你不知道方法名時堡赔,直接用星號代替

當你不知道某個字母是大小寫時,用問號代替

Frida關(guān)于JavaScript API的文檔: JavaScript API

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末设联,一起剝皮案震驚了整個濱河市善已,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌离例,老刑警劉巖换团,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異宫蛆,居然都是意外死亡艘包,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門耀盗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來想虎,“玉大人,你說我怎么就攤上這事叛拷∩喑” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵忿薇,是天一觀的道長邓线。 經(jīng)常有香客問我淌友,道長,這世上最難降的妖魔是什么骇陈? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任震庭,我火速辦了婚禮,結(jié)果婚禮上你雌,老公的妹妹穿的比我還像新娘器联。我一直安慰自己,他們只是感情好婿崭,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布拨拓。 她就那樣靜靜地躺著,像睡著了一般氓栈。 火紅的嫁衣襯著肌膚如雪渣磷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天授瘦,我揣著相機與錄音醋界,去河邊找鬼。 笑死提完,一個胖子當著我的面吹牛形纺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播徒欣,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼逐样,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了打肝?” 一聲冷哼從身側(cè)響起脂新,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎粗梭,沒想到半個月后戏羽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡楼吃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年始花,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孩锡。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡酷宵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出躬窜,到底是詐尸還是另有隱情浇垦,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布荣挨,位于F島的核電站男韧,受9級特大地震影響朴摊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜此虑,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一甚纲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧朦前,春花似錦介杆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至恩伺,卻和暖如春赴背,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背晶渠。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工凰荚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人乱陡。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像仪壮,于是被迫代替她去往敵國和親憨颠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容