美文网首页ios程序员iOS Developer
iOS 开发必知的小工具

iOS 开发必知的小工具

作者: CoderHG | 来源:发表于2018-09-05 20:52 被阅读97次

    1、Mac 上自带的一些命令工具

    file:查看Mach-O的文件类型

    file 文件路径

    otool:查看Mach-O特定部分和段的内容

    otool -L Mach-O文件 # 查看当前 Mach-O 文件的动态链接库。

    lipo:常用于多架构Mach-O文件的处理

    1. 查看架构信息:lipo -info 文件路径
    2. 导出某种特定架构:lipo 文件路径 -thin 架构类型 -output 输出文件路径
    3. 合并多种架构:lipo 文件路径1 文件路径2 -output 输出文件路径

    2、class-dump

    导出 Mach-O 文件中的头文件,前提是 已脱壳。具体指令如下:

    class-dump -H HGDev -o heraders

    HGDev: Mach-O 文件,将导出的头文件放入文件夹(heraders)中。

    3、Reveal

    查看 APP UI布局的工具。
    在设备上安装一个软件源,然后将 Mac 上的 RevealServer(help -- Show Reveal Library in finder -- iOS Library-RevealServer.framework -- RevealServer) 放入设备的 Library/RHRevealLoader 目录。

    在设备上运行想要查看的 APP 即可。

    4、MachOView

    特别不靠谱,因为常常 crash,所以习惯了使用 otool,但是一旦不闪退的话,还是挺方便的。
    MachOView

    5、Hopper Disassenbler

    能看到 Mach-O 文件中的代码逻辑的工具。

    6、Cycript

    这个是一个在越狱设备上使用的一个应用程序,通过Cydia安装,直接在设备上调试。有点像 Python,不一样的是直接在设备上调试。开发语言这是一个多语言的混合体,包括 OC、JS、Java 等。

    官方文档介绍:cycript-manual

    进入环境的命令:

    1. cycript
    2. cycript -p 进程ID
    3. cycript -p 进程名称

    第一种方式,仅仅是进入 cycript 的环境,后面两个是直接进入对应程序的 cycript 的环境。

    关键的快捷键:取消输入:Ctrl + C退出:Ctrl + D清屏:Command + R

    通过 ps 命令可以列出当前设备的所有进程:

    1. ps -A | grep key
    2. ps aux

    7、Clutch 与 dumpdecryted

    都是脱壳工具:
    Clutchdumpdecrypted

    7.1 Clutch

    列出已经安装的 APP:

    Clutch -i

    列出来的一般都是加壳的 App。

    进行加壳操作:Clutch -d APP序号或 BundleId

    Clutch -d com.app.dev

    具体步骤可以擦考

    脱壳:
    通过 ++Clutch -i++ 列出需要脱壳的应用列表:

    Installed apps:
    1:   腾讯课堂 - 在线职业培训教育平台 <com.tencent.edu>
    2:   QQ <com.tencent.mqq>
    3:   酷听音乐 - 歌曲音乐听你想听 <com.liyancong.kuq>
    4:   ボイスレコーダー-無料ボイスメモ <com.leqimea.recorderAudio>
    5:   爱思助手 <com.diary.mood>
    

    输入APP序号或者Bundle Id进行脱壳操作:++Clutch -d APP序号或BundleId++:Clutch -d com.liyancong.kuq, 如下:

    Zipping Kumi2.app
    ASLR slide: 0x100010000
    Dumping <Kumi2> (arm64)
    Patched cryptid (64bit segment)
    Writing new checksum
    DONE: /private/var/mobile/Documents/Dumped/com.liyancong.kuq-iOS8.0-(Clutch-2.0.4).ipa
    Finished dumping com.liyancong.kuq in 2.4 seconds
    

    DONE: /private/var/mobile/Documents/Dumped/com.liyancong.kuq-iOS8.0-(Clutch-2.0.4).ipa 就是脱壳结束的 ipa 文件。

    7.2 dumpdecryted

    下载眼代码后执行make指令,得到 dumpdecryted.dylib, 然后 scp 到 iPhone 设备的 /usr/root 目录。

    脱壳命令:

    DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib macho.app/macho

    结束后生成一个 macho.decrypted 就是脱壳后的 macho 文件。

    8、Theos

    能生成 tweak 项目的一个工具,代码在 这里

    通过如下命令进行 clone:

    git clone --recursive https://github.com/theos/theos.git $THEOS

    其中 $THEOS 是在 .bash_profie 中配置的变量:

    export THEOS=~/theos
    export PATH=$THEOS/bin:$PATH
    

    配置之后,执行如下命令起效:

    source ~/.bash_profile

    clone 成功之后,通过 nic.pl 命令创建一个 tweak 项目。
    nic.pl 之后选择 11 即可。

    创建之后,手动到中添加这两个变量 THEOS_DEVICE_IPTHEOS_DEVICE_PORT,也可以将其设置成全局的。

    Tweak.xm 中,代码编写结束之后,在终端分别执行这两条精灵即可:

    make package (打包)
    make install (安装)
    

    如果有错误,修改即可。

    安装之后再设备上就会有对应的 dylibplist 文件。

    可以参考:目录结构环境变量Logos 语法

    9、debugserver & lldb

    程序调试的一个工具,对于一个真机调试过的设备来说,都会有这个,会在第一次进行联调的时候,Xcode 默认安装到设备。一般是安装在:/Developer/usr/bin/debugserver

    image.png
    这个过程就应该在安装。

    只有安装成功之后才能进行调试,一旦这个文件没有,那么真机调试的时候直接报错,报错信息如下:


    image.png

    在越狱设备上经常出现这样的情况,无原无故的就没有了,暂时的解决方案是换一台重来没有连接过这个设备的电脑,连接安装即可。这样会重新安装 debugserver。我也不知道为什么一定要换一台电脑才能重新安装,暂时还没有找到清空的方法(可能在设置中的开发者中能清楚, 还没有试过),非要找一台新电脑。

    一般要使用这个工具来进行调试的话,只能在越狱的设备上。

    9.1 添加额外的权限

    Xcode 调试的过程中是使用 /Developer/usr/bin/debugserver,如果是调试飞 Xcode 项目的时候,这个工具缺少一定的权限,所以需要单独拎出来添加其它权限后单独使用。

    /Developer/usr/bin/debugserver 拖到电脑上,通过如下命令获取现有权限:

    ldid -e debugserver > debugserver.entitlements

    权限文件(debugserver.entitlements)中的内容如下:


    image.png

    需要在添加两个权限:

    get-task-allow
    task_for_pid-allow
    
    image.png

    添加之后再重新设置新的权限:

    ldid -Sdebugserver.entitlements debugserver

    这样 debugserver 就有了更多的权限,直接将其拖到设备的 /usr/bin目录下就可以使用。可能需要执行一下:chmod +x /usr/bin/debugserver

    以上的签名操作,也可以使用 codesign

    codesign -d --entitlements - debugserver
    codesign -fs- --entitlements debugserver.entitlements debugserver
    

    还有一种比较权威的方式是直接将 SpringBoard 的权限直接赋值给 debugserver

    9.2 开始使用

    登录设备之后,执行这个命令:

    debugserver *:port -a pid

    port: 休闲的端口即可,要与 mac 连接的对应。
    pid :可以是进程 ID 或者进程名称。

    回到 Mac 启动 lldb,然后执行:

    process connect connect://ip:port

    这里的 ip 如果是 usb 登录的话就直接写 localhost,写上对应映射的 port 即可。如果使用 WIFI 的话,ip 是设备的 ipportdebugserver 的那个 port

    当这个命令成功之后,会发现设备 卡死 了。这是正常的现象,在 lldb 执行一下 c 就可以了。这个指令的意思是跳过当前的断点,貌似一旦连接成功就会有一个默认的断点。

    推荐下一篇介绍:重组 IPA (打包再签名)

    相关文章

      网友评论

        本文标题:iOS 开发必知的小工具

        本文链接:https://www.haomeiwen.com/subject/vuyzwftx.html