windows C++读取plist文件方法

在做iOS开发时,或者是做iOS的逆向工程中,经常遇到读取plist文件, 

它全名是:Property List,属性列表文件,它是一种用来存储串行化后的对象的文件。属性列表文件的扩展名为.plist ,因此通常被称为 plist文件。文件是xml格式的。

1,根据XML数据用来创建的内容属性列表,CFPropertyListRef可以是任何的属性列表对象:CFData,CFString,CFArray,CFDictionary,CFDate CFBoolean,CFNumber。请注意,如果您使用一个属性列表生成XML,任何字典的键在属性列表中必须CFString对象。


2,CFPropertyList提供一个抽象的属性列表类型能想到的CFPropertyList
 CFString面向对象术语作为超类,CFNumber CFDictionary等等。当核心基础函数返回一个CFPropertyListRef,这意味着属性的值可以是任何类型列表。例如,aCFPropertyListRef CFPreferencesCopyAppValue回报。这意味着,返回的值可以是一个CFString对象,CFNumber对象,再次CFDictionary对象等等。您可以使用CFGetTypeID决定什么类型的对象属性值列表。


3,您使用的一个CFPropertyListCreate……函数创建一个属性列表对象给现有的属性列表对象,原始XML数据(如一个文件),或者一个流。您还可以将一个属性列表对象转换成XML使用CFPropertyListCreateXMLData函数。
您使用CFPropertyListWriteToStream函数来编写一个属性列表输出流,并验证使用CFPropertyListIsValid函数属性列表对象。
CFPropertyList妥善照顾尾数法,发出一个属性列表(是否由流、XML或CFData对象)上创建一个powerpc的麦金塔是正确解释在基于intel的Macintosh,反之亦然。


本文主要从windows下读取plist讲起

首选提供一个工具plistcpp在https://github.com/animetrics/PlistCpp可以下载到完整版本,这里给出在windows下控制台版本下载


(若地址失效请联系我)


读取过程主要分两种情况

1,key后面直接有关键字,比如array,integer,string,bool,data等的直接读取即可

const vector& plistArray = boost::any_cast& >(dict.find("MobileTipsC2CVersion")->second)//再读取出array中数据

boost::any_cast(dict.find("XXX")->second)

//data数据的读取需要使用输入输出流 std::ifstream stream("xxx.png", std::ios::binary);


2,key后面跟dict关键字

const map& plistDict= boost::any_cast& >(dict.find("XXX")->second);

然后再一次对dict目录进行读取,


本人手上有windows下IOS设备的数据采集的详细资料,有需求的可联系我QQ1354103455,欢迎同行朋友交流切磋。


你可能感兴趣的:(IOS逆向)