宏混淆和重新生成类混淆的区别

LinkMap诡探

Xcode中配置LinkMap

LinkMap文件是Xcode产生可执行文件(Mach-O)的同时生成的链接信息,用来描述可执行文件的构造成分,包括代码段(__TEXT)和数据段(__DATA)的分布情况。XCode -> Project -> Build Settings -> 搜map -> 把Write Link Map File选项设为yes,并指定好linkMap的存储位置,如下图

linkmap
path to link map file

编译后,到编译目录里找到该txt文件,文件名和路径就是上述的Path to Link Map File位于~/Library/Developer/Xcode/DerivedData/XXX-eumsvrzbvgfofvbfsoqokmjprvuh/Build/Intermediates/XXX.build/Debug-iphoneos/XXX.build/xxx.txt

从文件中,我么可以看到这个LinkMap里展示这个可执行文件的全貌,分为三段,分别是:

Object files:列出所有.o目标文件的信息(包括静态链接库.a里的或者动态库framework的)

Sections:描述各个段在最后编译成的可执行文件中偏移位置的大小包括了代码段(__TEXT,保存程序代码段编译后的机器码)和数据段(__DATA,保存变量值),字段的含义在Mach-o中已详细介绍。

 Symbols:列出具体的按每个文件列出每个对应字段的位置和占用空间

Otool 分析二进制

otool -s __TEXT __stubs 二进制路径

通过这两操作,我们可以看到framework其实如果被打包进入到了.app之后,会发现其实是找不到那些宏定义之前的文件的啦,宏定义之后的文件,我们可以通过逆向工具等可以查看到,但是宏定义之前的文件是看不到的了,所以生成类的方式混淆和宏定义方式的混淆其实是一样的


参考链接

Mach-O可执行文件

otool相关命令

otool命令查看App动态库

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容