动态调试(24)

简介: debugServer的权限问题

上节课回顾


微信图片_20220510004242.png

image.png


debugServer的权限问题


  1. 链接手机


  1. cd /Developer/usr/bin/ -> ls -> 查看是否有debugServer


  1. touch 123.txt -> 发现是没有权限的


  1. 所以将debugServer拷贝到/usr/bin里面 -> /usr/bin/debugServer


  1. ls -l debugServer -> 查看权限


  1. 将该文件拷贝出来 -> scp -P 12345 root@localhost:/usr/bin/debugServer ./debugServer


  1. theos资料 ->debugserver.entitlements ->拷贝到当前目录下


  1. ldid -e debugserver > debugserver.entitlements -> 将debugserver里面的权限导出来


微信图片_20220510004248.png

image.png


  1. 将上图两个key值对应的设为1


  1. ldid -Sdebugserver.entitlements debugserver -> 给debugserver重新设置权限


  1. 然后将修改后的debugserver拷贝到/usr/bin里面进行覆盖,这样全局都能用。


class-dump(MonkeyDev的使用)


  1. class-dump -> 查看class-dump的版本
  2. which class-dump -> 查看class-dump放在哪里
  3. Build Seting -> Monkey -> class-dump -> YES -> 重签的时候可以顺便帮你提取头文件
  4. MonkeyDev的路径不能有中文,否则有可能提取失败


命令行工具


  1. 快速建一个工程


微信图片_20220510004252.png
image.png


  1. printf("打印") -> 编译 -> 来生成一个MachO文件


  1. 将该文件拷贝到手机 -> ./可执行文件 -> 执行




微信图片_20220510004257.png

image.png


手动砸壳


  1. 我们是通过otool -l Wechat | grep crypt里面的cryptid字段来判断一个包是否加密的


  1. 链接手机找到微信 sp -A | grep Wechat


  1. scp -P 12345 root@localhost:微信手机路径(上一步可获取) ./ -> 将手机里面的拷贝出来  -> 查看权限,发现此时我们拿到的是一个未砸壳的微信包


  1. 直接WeChat的包 -> MachOView -> Load Commands -> INFO_64 -> 直接改0 -》 com + s 保存


  1. 直接calss-dump 这个包 -> class-dump -H Wechat -o headrs/ -> 发现不行


  1. otool -l Wechat | grep crypy -> 拿到偏移值off 和 size


  1. 手机debugserver localhost:12346 -a WeChat(17116用进程编号比较好)  -> 附加进程


  1. 电脑lldb -> process connect conect://localhost:12346 -> 链接手机


  1. com + w -> 可以不杀掉进程,而退出lldb调试,使用exit同时会杀掉手机进程


  1. Xcode附加也可以  -> 建议用这种,比较快


  1. image list -> 拿到首地址


微信图片_20220510004301.png
image.png


  1. 断点调试 -> memory read --force --outfile ~/Desktop/WeChatDump/WeChat.bin --binary --count 前面拿到的size + 首地址 + 偏移


微信图片_20220510004306.png
image.png


  1. 将内存中的WeChat拷贝到桌面, 桌面文件夹要提前创建


  1. 所拷贝就是解密后的包
15 dd seek=16384 bs=1 conv=notrunc if=./Wechat.bin of=WeChat


  1. 把.bin文件写入WeChat(未砸壳的),seek->跳过多少字节,bs->一次写入多少字节,notrunc不截断文件,只进行覆盖操作


  1. 上面的写入比较慢,因为是一个一个字节写的,最后用class-dump进行验证


  1. 写入之后,需要手动改下cryptid


  1. class-dump -H Wechat -o headrs/ -> 手动砸壳成功


消除系统气泡小插件


  1. SpringBoard -> 系统桌面APP
  2. ps -A | grep Spring -> 找桌面的APP位置 -> 拷贝出来并且class-dump拿到头文件


微信图片_20220510004311.png

image.png


  1. 可以用Xcode进程附加以及Cycript来分析系统的APP界面,最好是用Xcode进程附加找会比较快(这里我的实操是可以的, 如果附加失败的, 自己搜寻相关解决方案)
  2. 也可以通过Cycript来查看图层, 最终找到SBIconParallaxBadgeView, 这个视图
  3. 直接将SBIconParallaxBadgeView的初始化返回为空
  4. export THEOS_DEVICE_IP=localhost / export THEOS_DEVICE_PORT=12345 -> 这两个东西经常要用, 所以可以放在./zshrc里面


微信图片_20220510004316.png
image.png



微信图片_20220510004320.png

image.png


  1. 将文件夹放在桌面(放置路径有中文,导致编译不成功)
cd 桌面文件夹
make -> 编译
make package;make install -> 安装到手机, 可以同时执行 -> 可以看到APP所有气泡都消失了

MonkeyDev中Logos Tweak


  1. 打开MonkeyDev中的Logos Tweak -> 新建工程 -> 放在桌面(放置中文路径)
  2. Library文件夹下找 ->  BadgeTweak.plist -> 找到要附加的进程
  3. Build Setting -> Monkey -> MonkeyDevBuildPackageOnAnyBuild -> 插件,每次编译是否安打包

       1.MonkeyDevInstallOnAnyBuild -> 每次编译就安装,默认为Yes,所以插件不要随便编译

       2.IP -> localhost

       3.Port -> 12345 -> 当然也可以在./zshrc中配置(手动配置或./zshrc中配置都可以)


微信图片_20220510004325.png
image.png

       4.先映射一下

       5.MonkeyDevkillProcessOnInstall -> 安装完后,需要杀掉的进程, 此处是SpringBoard

       6.签名Build Settrings -> signing -> Code Signing Identity -> iOS Developer

       7.失败的话, 如果代码没错, 清理一下缓存,再安装试试


Theos原理


  1. 拿到一个theos的插件项目 -> make编译 ->  生成的动态库, 目的是拿到这个动态库进行注入操作.
  2. make package -> 打包 -> 会在插件项目的packes文件夹下生成构建的版本, 如果重复构建会自动生成版本号来做区分.


       1.生成的是.deb格式的包 -> cydia下发安装的

       2.make install -> 安装到手机


  1. 链接上手机 -> cd /Library/MobileSubstrate/DynamicLibraries -> 发现我们安装的所有的插件都在这里


         1..plist文件 -> 里面存的是要覆盖安装到哪个APP的插件

  1. 将系统的SpringBoard拷贝出来, 用MachO打开来查看, 发现我们的插件并没有注入到可执行文件里面, 那么插件是怎么运行的? ->  说明通过插件的这种方式, 并没有污染我们的MachO文件 -> 猜测修改的是dyld链接的方式,即DYLD_INSERT_LIBRARIES




目录
相关文章
一例简单的frida反调试绕过
一例简单的frida反调试绕过
|
2月前
|
网络协议 Shell Linux
安卓逆向 -- IDA动态调试
安卓逆向 -- IDA动态调试
23 0
|
2月前
|
Android开发 数据安全/隐私保护
安卓逆向 -- Jeb动态调试
安卓逆向 -- Jeb动态调试
38 1
|
6月前
|
安全 Android开发
[笔记]安卓逆向之动态调试
[笔记]安卓逆向之动态调试
|
11月前
|
区块链 C++
upx加壳过360
upx加壳过360
480 0
|
安全 API
LyScript 实现绕过反调试保护
LyScript插件中内置的方法可实现各类反调试以及屏蔽特定API函数的功能,这类功能在应对病毒等恶意程序时非常有效,例如当程序调用特定API函数时我们可以将其拦截,从而实现保护系统在调试时不被破坏的目的。
220 0
LyScript 实现绕过反调试保护
|
小程序 JavaScript 安全
小程序逆向分析 (一)
小程序逆向分析 (一)
小程序逆向分析 (一)
|
安全 编译器 数据库
IDA静态逆向分析工具使用详解
IDA静态逆向分析工具
392 0
|
NoSQL 编译器 C语言
iOS逆向-day8:LLDB 动态调试
iOS逆向-day8:LLDB 动态调试
640 0
iOS逆向-day8:LLDB 动态调试