十三、命令行MJAppTools工具是如何实现的

也就是读取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分析

添加脚本

你可能感兴趣的:(十三、命令行MJAppTools工具是如何实现的)