一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种还原iOS类型编码的伪代码的方法及装置与流程

2022-03-05 04:28:31 来源:中国专利 TAG:

一种还原ios类型编码的伪代码的方法及装置
技术领域
1.本发明属于ios代码逆向分析领域,涉及一种objective-c逆向分析方法,尤其涉及一种还原ios类型编码的伪代码的方法及装置。


背景技术:

2.在分析ios代码的时候,现有技术缺少对类型的详细结构展示,造成分析的困难。例如,在对程序/函数设置断点的时候,此时函数的参数只是一个地址。如果该参数只是单纯的变量,只需简单地直接查看内存就可以进行读取和分析。如果函数的参数是个结构比较复杂的结构体,查看内存就不知道是什么了。单独的一个个地分析,这样带有猜测的成分在里面,是有一定失败的风险。这个时候,如果知道函数的参数的数据结构,那么分析就简单了,即,直接计算地址就能找到对应的数据。
3.因此,现有技术的问题在于:在分析ios代码的时候,缺少对类型的详细结构展示。具体地,针对现有技术的弊端归纳如下:
4.(1)现有技术的分析都是提供了参数名称或者别名,分析起来不方便,不利于静/动态分析。
5.(2)在针对指针的时候,使用了任意类型作为参数,不便于区分,隐藏了参数结构,增大了分析难度。
6.(3)针对函数的参数的不明确性,在查找数据的时候需要经过繁琐的偏移地址计算。
7.故此,如果有对应函数的参数的数据结构展示,那么,在分析的时候将会更加容易直观,大大的减少分析难度。


技术实现要素:

8.针对现有技术的技术问题,本发明提供了一种还原ios类型编码的伪代码的方法:通过获取变量的偏移地址及方法的偏移地址,可以获得集合的入口地址并访问到对应的集合,集合是一个变量结构体或者方法结构体的数组,获取并分析数组中的元素(即,变量类型字符串或方法类型字符串),即可生成伪代码结构并获取翻译后的伪代码。
9.本技术涉及的术语做如下解释:
10.伪代码:近似于真实代码源代码的一种简称,是一种非正式的、类似于英语结构的、用于描述模块结构图的语言。
11.ipa:是apple程序应用文件iphoneapplication的缩写。简单来说,mac下的软件就像是windows下的绿色软件一样,解压后即可使用,不需要安装,卸载的话也只用删除程序文件即可(这里不涉及pkg格式安装包)。
12.objective-c:是苹果公司专门为开发apple app提供的一种计算机语言(简称:oc)。
13.变量/参数:使用计算机语言内部规定的关键词定义的名称。
14.mach-o:为mach object文件格式的缩写,它是ios系统中可执行程序。作为a.out格式的替代,mach-o提供了更强的扩展性,并提升了符号表中信息的访问速度。
15.machoview:用于mac平台中查看macho文件格式信息。
16.数据结构:使用计算机语言定义个数据模型。
17.本发明包括以下步骤:
18.s100:获取并分析未加密的ipa包,获取所述ipa包中核心文件;
19.s200:提取目标字符串,所述目标字符串包括类型字符串及名称字符串,步骤s200包括以下步骤:
20.s201:采用machoview读取类的入口信息并查找所有的类,所述类的入口信息用以储存类的偏移量;
21.s202:采用machoview查找所述核心文件中类的数据段及常量数据段的偏移位置,所述类的数据段储存所有类基本信息的偏移量;
22.s203:通过类基本信息的偏移量,在常量数据段中寻址目标字符串的偏移地址;
23.s204:通过寻址目标字符串的偏移地址,获取目标字符串的结构体;
24.s205:获取目标字符串的结构体中数据data的值作为偏移地址,用以在常量数据段中寻址并访问类的详细结构体;
25.s206:根据所寻址到的类的详细结构体,获取类的所有信息,包括变量ivars的偏移地址、名称name的偏移地址及方法basemethods的偏移地址,其中,变量ivars的偏移地址及方法basemethods的偏移地址均为集合的入口地址;
26.s207:判断获取到的偏移入口是否为类变量偏移入口,如果是,执行步骤s208,否则,获取到的偏移入口为类方法偏移入口,执行步骤s209;
27.s208:采用变量ivars的偏移地址寻址集合并查找类的所有变量定义,当前集合用以储存变量类型字符串的偏移,根据所述变量类型字符串的偏移寻址数组,根据变量列表结构体确定数组的大小和个数、变量结构体的类型字符串的偏移量及名称字符串的偏移量计算变量类型字符串的偏移地址,并根据变量类型字符串的偏移地址寻址并获取当前集合中的元素作为变量类型字符串,其中,变量类型字符串的起始标识/结束标识均为0x00,执行步骤s300;
28.s209:采用方法basemethods的偏移地址寻址集合并查找类的所有方法定义,当前集合用以储存方法类型字符串的偏移,根据所述方法类型字符串的偏移寻址数组,根据方法列表结构体确定数组的大小和个数、方法结构体的类型字符串的偏移量及名称字符串的偏移量计算方法类型字符串的偏移地址,并根据方法类型字符串的偏移地址寻址并获取当前集合中的元素作为方法类型字符串,其中,方法类型字符串的起始标识/结束标识均为0x00;
29.s300:分析并整合目标字符串,生成伪代码结构;
30.s400:生成并输出伪代码。
31.优选地,步骤s100包括以下步骤:
32.s101:在越狱iphone手机/越狱ipad上安装工具软件frida,用以对ipa包进行脱壳并获取未加密的ipa包;
33.s102:解压ipa包,释放ipa包所包含的文件;
34.s103:查找解压后文件夹所包含的.app文件夹,并查找.app文件夹中具有与当前ipa相同前缀文件名的文件,作为当前ipa的核心文件;
35.s104:将所述核心文件写入内存,所述核心文件是二进制流文件。
36.优选地,所述步骤s300包括以下步骤:
37.s301:确定并获取变量类型字符串/方法类型字符串的类型,包括值类型及指针类型;
38.s302:确定数据形式,包括结构体形式、数组形式、联合体形式和简单变量形式;
39.s303:将变量类型字符串/方法类型字符串生成伪代码:采用还原ios类型字符串的方法,生成伪代码结构。
40.优选地,步骤s400包括以下步骤:
41.查询变类型编码表,将伪代码结构翻译为开发语言关键词,输出翻译后的伪代码。
42.优选地,所述工具软件为frida。
43.本发明还提供了一种还原ios类型编码的伪代码的装置,其特征在于,包括:
44.ipa包分析模块,用以获取并分析未加密的ipa包,获取所述ipa包中核心文件;
45.提取模块:用以提取目标字符串,所述目标字符串包括变量类型字符串及名称字符串;
46.分析模块:用以分析并整合目标字符串,生成伪代码结构;
47.伪代码生成模块:用以将伪代码结构翻译为开发语言关键词,输出翻译后的伪代码。
48.本发明具有以下有益效果:
49.1.针对ios(特别是oc objective-c)app进行分析,以提供变量/参数的完整数据模型结构。
50.2.针对分析过程,一方面方便明了,另一方面能够快熟定位目标数据。
51.3.针对分析操作,目标更加准确,计算量减少。
附图说明
52.图1为本发明所提供的方法的总流程图;
53.图2为本发明所提供的一个实施例中提取目标字符串的具体流程图;
54.图3为本发明所提供的一个实施例中采用machoview读取类的入口信息的实例图;
55.图4为本发明所提供的一个实施例中所获取目标字符串的结构体的数据结构图;
56.图5为本发明所提供的一个实施例中所获取类的详细结构体的数据结构图;
57.图6为本发明所提供的一个实施例中所获取变量列表结构体的数据结构图;
58.图7为本发明所提供的一个实施例中所获取方法列表结构体的数据结构图;
59.图8为本发明所提供的一个实施例中输出翻译后的伪代码的实例图;
60.图9为本发明所提供的一种还原ios类型编码的伪代码的装置的功能框图。
具体实施方式
61.本发明引入申请号为2021112675915、申请日为2021年10月29日、题为《一种还原ios类型字符串的方法》的发明申请并结合起来进行说明。
62.图1示出了本发明所提供的方法的总流程图。如图1所示,本发明的方法包括以下步骤:
63.s100:获取并分析未加密的ipa包,获取ipa包中核心文件。步骤s100包括以下步骤:
64.s101:在越狱iphone手机/越狱ipad上安装工具软件frida,用以对ipa包进行脱壳并获取未加密的ipa包;
65.s102:解压ipa包,释放ipa包所包含的文件;
66.s103:查找解压后文件夹所包含的.app文件夹,并查找.app文件夹中具有与当前ipa相同前缀文件名的文件,作为当前ipa的核心文件;
67.s104:将核心文件写入内存,核心文件是二进制流文件。
68.s200:提取目标字符串,目标字符串包括类型字符串及名称字符串。
69.图2示出了本发明所提供的一个实施例中提取目标字符串的具体流程图。如图2所示,步骤s200包括以下步骤:
70.s201:采用machoview读取类的入口信息section64(__data,__objc_classlist)并查找所有的类,类的入口信息section64(__data,__objc_classlist)用以储存类的偏移量;图3示出了本发明所提供的一个实施例中采用采用machoview读取类的入口信息的实例图。如图3所示,通过machoview,可以读取类的入口信息section64(__data,__objc_classlist)。
71.s202:采用machoview查找核心文件中类的数据段section64(_data,_objc_data)及常量数据段section64(__data,__objc_const)的偏移位置,类的数据段section64(_data,_objc_data)储存所有类基本信息的偏移量;
72.s203:通过类基本信息的偏移量,在常量数据段section64(__data,__objc_const)中寻址目标字符串的偏移地址;
73.s204:通过寻址目标字符串的偏移地址,获取目标字符串的结构体struct cd_objc2_class;
74.图4示出了本发明所提供的一个实施例中所获取目标字符串的结构体struct cd_objc2_class的数据结构图。
75.另外,图5示出了本发明所提供的一个实施例中所获取类的详细结构体的数据结构图。
76.s205:获取目标字符串的结构体struct cd_objc2_class中数据data的值作为偏移地址,用以在常量数据段section64(__data,__objc_const)中寻址并访问类的详细结构体struct cd_objc2_class_ro_t;
77.具体地,获取如图4所示的数据data(即,unit64_t data)的值作为偏移地址,在常量数据段section64(__data,__objc_const)中寻址并访问如图5所示的类的详细结构体struct cd_objc2_class_ro_t。
78.s206:根据所寻址到的类的详细结构体struct cd_objc2_class_ro_t,获取类的所有信息,如图5所示,包括变量ivars(即,unit64_t ivars)的偏移地址、名称name(即,unit64_t name)的偏移地址及方法basemethods(即,unit64_tbasemethods)的偏移地址,其中,变量ivars的偏移地址及方法basemethods的偏移地址均为集合的入口地址:
79.s207:判断获取到的偏移入口是否为类变量偏移入口,如果是,执行步骤s208,否则,获取到的偏移入口为类方法偏移入口,执行步骤s209;
80.图6示出了本发明所提供的一个实施例中所获取变量列表结构体的数据结构图;
81.s208:采用变量ivars的偏移地址寻址集合并查找类的所有变量定义,当前集合用以储存变量类型字符串的偏移,根据变量类型字符串的偏移寻址数组,根据如图6所示的变量列表结构体struct ivar64_list_t确定数组的大小(即,如图6所示的unit32_t entsize)和个数(即,如图6所示的unit32_t count)、变量结构体struct ivar64_t的类型字符串(即,如图6所示的uint64_t type)的偏移量及名称字符串(即,如图6所示的uint64_t name)的偏移量计算变量类型字符串的偏移地址,并根据变量类型字符串的偏移地址寻址并获取当前集合中的元素作为变量类型字符串,其中,变量类型字符串的起始标识/结束标识均为0x00,执行步骤s300;
82.图7示出了本发明所提供的一个实施例中所获取方法列表结构体的数据结构图;
83.s209:采用方法basemethods的偏移地址寻址集合并查找类的所有方法定义,当前集合用以储存方法类型字符串的偏移,根据方法类型字符串的偏移寻址数组,根据方法列表结构体struct entsize_list_tt确定数组的大小和个数、方法结构体struct method_t的类型字符串(即,如图7所示的const char*type)的偏移量及名称字符串(即,如图7所示的sel name)的偏移量计算方法类型字符串的偏移地址,并根据方法类型字符串的偏移地址寻址并获取当前集合中的元素作为方法类型字符串,其中,方法类型字符串的起始标识/结束标识均为0x00;
84.s300:分析并整合目标字符串;
85.步骤s300包括以下步骤:
86.s301:确定并获取变量类型字符串/方法类型字符串的类型,包括值类型及指针类型;
87.s302:确定数据形式,包括结构体形式、数组形式、联合体形式和简单变量形式;
88.s303:将变量类型字符串/方法类型字符串生成伪代码:采用还原ios类型字符串的方法,生成伪代码结构。对于其中的还原ios类型字符串的方法,本发明引入申请号为2021112675915、申请日为2021年10月29日、题为《一种还原ios类型字符串的方法》的发明申请中的还原ios类型字符串的方法,本发明不再赘述。
89.s400:生成并输出伪代码。步骤s400包括以下步骤:
90.查询变类型编码表typeencodings,将伪代码结构翻译为开发语言关键词,输出翻译后的伪代码。图8示出了本发明所提供的一个实施例中输出翻译后的伪代码的实例图。
91.本发明还提供了一种还原ios类型编码的伪代码的装置。
92.图9示出了本发明所提供的一种还原ios类型编码的伪代码的装置100的功能框图。如图9所示,该装置100的特征在于,包括:
93.ipa包分析模块101,用以获取并分析未加密的ipa包,获取ipa包中核心文件;
94.提取模块102:用以提取目标字符串,目标字符串包括变量类型字符串及名称字符串;
95.分析模块103:用以分析并整合目标字符串;
96.伪代码生成模块104:用以将伪代码结构翻译为开发语言关键词,输出翻译后的伪
代码。
97.通过本发明所提供的方法,解决了现有技术中尚无一种还原ios类型编码的伪代码的方法及装置的技术问题。
98.应当理解的是,本发明不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献