也就是读取Mach-O文件中的数据,所以这需要了解Mach-O文件。
一、main函数处理——做一个简单的工具
注意,命令行工具的调试,是编译好文件后拖拽到手机bin目录下,在终端中打印调试;而不是运行XCode。
MJAppTools命令工具就是个Mach-O可执行文件
命令行工具,就是个可执行文件,跟app差不多。
命令代码
拖拽到手机的/usr/bin/下,要设置权限
二、Mach-O文件数据的位置分析
是否加壳
看架构
看架构
对照源码
构架的类型
三、代码实现加载数据——读取magic
实现读取magic
command+B,编译好的文件拖拽到手机的Device/usr/bin,给予权限。
执行命令:TestCL(即编译好的包名),打印信息:
四、参数——给命令加参数
参数示例
参数传进来的地方
如果什么都不传,也会有一个参数,就是可执行文件的路径。
添加参数
对参数的判断和提示
对参数的判断和提示
五、权限
解决handle没有值,读取失败的问题。
这是权限的问题,读取每个app下的文件夹都必须要权限。
给文件签上一定的权限,让它可以访问其他app的可执行文件
导出已有的权限
产生的文件
强制给TestCL重新签权限
entitlements == xml == plist,所以,后缀可以修改。
权限文件如何写呢?
——找一个已有的权限文件,来修改。
SpringBoard上放了一堆APP,它有权限读取所有APP,它的权限最高。
SpringBoard的位置
拖拽到电脑上。
导出SpringBoard的权限
生成的SpringBoard的权限文件
SpringBoard的权限文件内容
把这个权限强制导入到自己写的命令行工具中:
验证:导出TestCL的权限文件,打开看下是否由很多权限
拖拽TestCL到手机/bin目录,赋值权限后,操作TestCL -l
也可以用codesign,但比较麻烦。
六、MJAppTools分析
添加脚本












网友评论