重学dyld

0.01 写在前面 本文以 arm64 架构分析,如内容有不正确的,可以联系修改。😝。 文采不行,将就看。描述可能不够直接,将就看。可能省略了,将就看。 0x02 launchd 在OS X 和 iOS 中,用户环境始于 launchd,其对应于其他 UN*X 系统中的 init。作为系统中的第一个用户态进程,launchd 是由内核直接启动的,负责直接或间接地启动系统中的其他进程。其核心职责是根据预定的安排或实际的需要加载其他应用程序或作业,同时也将负责两种后台作业:守护程序和代理程序。 守护程序:后台服务,通常和用户没有交互。是由系统自动启动,不考虑是否有用户登录进系统。比如 Push 通知,外接设备和XPC等。 代理程序:特殊的守护程序,只有在用户登录的时候才启...
Click to read more ...

重学alloc、init、dealloc

一、alloc 1. alloc 的底层调用 新建项目并在 ViewController.m 中调用 alloc 代码。 NSObject *obj = [NSObject alloc]; 这时候如果按照一般调试方式,进入 alloc 的实现只能在 NSObject.h 中看到 alloc 方法。这时可以下载Runtime 源码进行查看。 1.1 通过断点查看alloc实现 在 NSObject *obj = [NSObject alloc]; 断点,然后按住 Control, 鼠标点击以下图标: 这种调试属于 Step controls ,更多 Step controls 请参考该文底部链接。 之后会进入到: Alloc&Init`objc_a...
Click to read more ...

Charles出现Unknown的一种解决方法

文采不好,凑活着看吧!! 文采不好,凑活着看吧!! 最近在逆向分析一个 App,遇到了 unknown 的现象,按照常规的处理就是安装证书,然后信任证书,打开 App,调试。然后发现。还是 unknown,如下图: 如上图提示 SSL Proxying not enabled for this host: enable in Proxy Settings, SSL locations,其实已经设置了,唯一不同的是 SSL Proxying 的端口配置不对,这里是 8663,而默认配置是 443,这里添加配置,如下图: 刷新请求,出现如下图所示: 基本上常规的操作,都操作了,由于我用的设备是非越狱机,不能安装 ssl kill switch2,所以要从代码上进行处理。...
Click to read more ...

反汇编 Block 的内部逻辑实现

一下是汇编中 block 在汇编中的体现。 __text:00000001002BF6EC BL _objc_release __text:00000001002BF6F0 ADRP X0, #aComKujiangLoad@PAGE ; "com.kujiang.loadQueue" __text:00000001002BF6F4 ADD X0, X0, #aComKujiangLoad@PAGEOFF ; "com.kujiang.loadQueue" __text:00000001002BF6F8 ...
Click to read more ...

获取Block的参数和返回值

这里以某音乐的 -[NetStatusManager showAlertViewWhileWifiOnlyWithCloseBlock:] 函数为例子。 找到 stackBlock 对象 (lldb) x/s $x1 0x1043ddc93: "showAlertViewWhileWifiOnlyWithCloseBlock:" (lldb) po $x2 <__NSStackBlock__: 0x16fdf6668> (lldb) 0x16fdf6668 是 block 函数的首地址。 找出 block 的函数体地址(函数实现) 根据以上的内存模型,只要找到 invoke 的这个函数指针的地址,它指向的是这个 Block 的实现。 在 64 位系统上,指针...
Click to read more ...

LLDB手动砸壳

准备工作 找出程序的可执行文件路径 root# ps aux | grep Snapchat 列出所有的 Frameworks xx.app root# ls Frameworks 把所需要解密的库,复制出来 scp -P 2222 -r root@localhost:/var/....xx.app/Frameworks/xx scp -P root@10.0.0.3:/var/....xx.app/Frameworks/xx 获取可执行文件的头部信息 otool -hf xxx(可执行文件) 获取64位的加密信息(arm64) otool -arch arm64 -l 可执行文件 | grep crypt ...
Click to read more ...