iOS逆向----增删改查plist文件

  • plist 是 Mac 种非常普遍的一种文件格式,类似 xml,通过键值对的方式来进行一些配置。
  • PlistBuddy 则是 Mac 自带的专门解析 plist 的工具。

由于Macos并未在环境变量中默认配置PlistBuddy,所以需要通过绝对路径来引用(当然你也可以自己配置一下环境变量):

~ ❯ /usr/libexec/PlistBuddy --help
Command Format:
    Help - Prints this information
    Exit - Exits the program, changes are not saved to the file
    Save - Saves the current changes to the file
    Revert - Reloads the last saved version of the file
    Clear [<Type>] - Clears out all existing entries, and creates root of Type
    Print [<Entry>] - Prints value of Entry.  Otherwise, prints file
    Set <Entry> <Value> - Sets the value at Entry to Value
    Add <Entry> <Type> [<Value>] - Adds Entry to the plist, with value Value
    Copy <EntrySrc> <EntryDst> - Copies the EntrySrc property to EntryDst
    Delete <Entry> - Deletes Entry from the plist
    Merge <file.plist> [<Entry>] - Adds the contents of file.plist to Entry
    Import <Entry> <file> - Creates or sets Entry the contents of file

Entry Format:
    Entries consist of property key names delimited by colons.  Array items
    are specified by a zero-based integer index.  Examples:
        :CFBundleShortVersionString
        :CFBundleDocumentTypes:2:CFBundleTypeExtensions

Types:
    string
    array
    dict
    bool
    real
    integer
    date
    data

Examples:
    Set :CFBundleIdentifier com.apple.plistbuddy
        Sets the CFBundleIdentifier property to com.apple.plistbuddy
    Add :CFBundleGetInfoString string "App version 1.0.1"
        Adds the CFBundleGetInfoString property to the plist
    Add :CFBundleDocumentTypes: dict
        Adds a new item of type dict to the CFBundleDocumentTypes array
    Add :CFBundleDocumentTypes:0 dict
        Adds the new item to the beginning of the array
    Delete :CFBundleDocumentTypes:0 dict
        Deletes the FIRST item in the array
    Delete :CFBundleDocumentTypes
        Deletes the ENTIRE CFBundleDocumentTypes array

新建plist

~/Desktop ❯ /usr/libexec/PlistBuddy test.plist
File Doesn't Exist, Will Create: test.plist
Command: save
Saving...
Command: exit
~/Desktop ❯ ls | grep test.plist
test.plist

添加

添加普通字段

Add :字段名 类型 值

~ ❯ /usr/libexec/PlistBuddy -c 'Add :Version string 1.0' test.plist
~ ❯ /usr/libexec/PlistBuddy -c "print" test.plist
Dict {
    Version = 1.0
}

添加数组字段

先添加数组名
Add :数组名 array

~ ❯ /usr/libexec/PlistBuddy -c 'Add :Applications array' test.plist

再添加数组的值
Add :数组名: 类型 值

~ ❯ /usr/libexec/PlistBuddy -c 'Add :Applications: string app1' test.plist
~ ❯ /usr/libexec/PlistBuddy -c 'Add :Applications: string app2' test.plist
~ ❯ /usr/libexec/PlistBuddy -c 'Add :Applications: string app3' test.plist
~ ❯ /usr/libexec/PlistBuddy -c "print" test.plist
Dict {
    Version = 1.0
    Applications = Array {
        app1
        app2
        app3
    }
}

添加字典字段

先添加字典名
Add :字典名 dict

~ ❯ /usr/libexec/PlistBuddy -c 'Add :Users dict' test.plist

再添加字典的key和value:
Add :字典名:key 类型 值

~ ❯ /usr/libexec/PlistBuddy -c 'Add :Users:Name string Bob' test.plist
~ ❯ /usr/libexec/PlistBuddy -c 'Add :Users:sex Bool ture' test.plist
~ ❯ /usr/libexec/PlistBuddy -c 'Add :Users:Age integer 20' test.plist
~ ❯ /usr/libexec/PlistBuddy -c "print" test.plist
Dict {
    Users = Dict {
        Name = Bob
        sex = false
        Age = 20
    }
    Version = 1.0
    Applications = Array {
        app1
        app2
        app3
    }
}

查看plsit

~ ❯ /usr/libexec/PlistBuddy -c "print" test.plist
Dict {
    Users = Dict {
        Name = Bob
        sex = false
        Age = 20
    }
    Version = 1.0
    Applications = Array {
        app1
        app2
        app3
    }
}

根据key查value

~ ❯ /usr/libexec/PlistBuddy -c 'Print :Users' test.plist
Dict {
    Name = Bob
    sex = false
    Age = 20
}

查数组的特定位置

~ ❯ /usr/libexec/PlistBuddy -c 'Print :Applications:2' test.plist
app3

修改

~ ❯ /usr/libexec/PlistBuddy -c 'Set :Applications:2 "reset application 2"' test.plist
~ ❯ /usr/libexec/PlistBuddy -c 'Print :Applications:2' test.plist
reset application 2

删除

~ ❯ /usr/libexec/PlistBuddy -c 'Delete :Applications' test.plist
~ ❯ /usr/libexec/PlistBuddy -c "print" test.plist
Dict {
    Users = Dict {
        Name = Bob
        sex = false
        Age = 20
    }
    Version = 1.0
}

合并

合并test 2.plist 到 test.plist

~ ❯ /usr/libexec/PlistBuddy -c 'print' test.plist
Dict {
    Users = Dict {
        Name = Bob
        sex = false
        Age = 20
    }
    Version = 1.0
}
~ ❯ /usr/libexec/PlistBuddy -c 'print' test\ 2.plist
Dict {
    Users = Dict {
        Name = Bob
        sex = false
        Age = 20
    }
    Version = 1.0
    Applications = Array {
        app1
        app2
        reset application 2
    }
}
~ ❯ /usr/libexec/PlistBuddy -c 'Merge test\ 2.plist' test.plist
Duplicate Entry Was Skipped: Users
Duplicate Entry Was Skipped: Version
~ ❯ /usr/libexec/PlistBuddy -c 'print' test.plist
Dict {
    Users = Dict {
        Name = Bob
        sex = false
        Age = 20
    }
    Version = 1.0
    Applications = Array {
        app1
        app2
        reset application 2
    }
}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页