首页 > 其他分享 >实战:干掉高德地图7.2.0版iOS客户端的反动态调试保护

实战:干掉高德地图7.2.0版iOS客户端的反动态调试保护

时间:2024-06-06 16:35:48浏览次数:22  
标签:AMapiPhone sub ACF0 sp iOS 7.2 ptrace dyld 高德

沙梓社snakeninny  

高德是中国领先的数字地图内容、导航和位置服务解决方案提供商。苹果自带的地图采用的就是高德的数据,足见高德之权威 :+1:
昨天突发奇想,对高德地图上中一个官方不提供的功能产生了浓厚的兴趣,试图通过hack的方式来实现这个功能。谁知刚架上LLDB,竟然就出现了这样的一幕……

1. LLDB附加失败

 
FunMaker-5:~ root# debugserver *:1234 -a "AMapiPhone"
debugserver-@(#)PROGRAM:debugserver  PROJECT:debugserver-320.2.89
 for armv7.
Attaching to process AMapiPhone...
Segmentation fault: 11

很显然,高德地图做了反动态调试保护。为了干掉这层保护,我们先得搞清楚它采用了什么保护方法。因为现有的公开反动态调试保护只有ptrace方法这一种,所以自然而然地,我们先从它下手。

2. 用LLDB启动AMapiPhone

 
FunMaker-5:~ root# debugserver -x backboard *:1234 /var/mobile/Containers/Bundle/Application/1C86F6A1-E50A-434E-B08E-C39C200EFA0A/AMapiPhone.app/AMapiPhone
debugserver-@(#)PROGRAM:debugserver  PROJECT:debugserver-320.2.89
for armv7.
Listening to port 1234 for a connection from *...
 
(lldb) process connect connect://localhost:1234
Process 5171 stopped
* thread #1: tid = 0x1433, 0x1feb8000 dyld`_dyld_start, stop reason = signal SIGSTOP
    frame #0: 0x1feb8000 dyld`_dyld_start
dyld`_dyld_start:
-> 0x1feb8000:  mov    r8, sp
   0x1feb8004:  sub    sp, sp, #16
   0x1feb8008:  bic    sp, sp, #7
   0x1feb800c:  ldr    r3, [pc, #112]            ; _dyld_start + 132

LLDB停了下来,我们先“c”一下,看看是什么效果:

 
(lldb) c
Process 5171 resuming
Process 5171 exited with status = 45 (0x0000002d) 

进程直接退出,进一步验证了高德地图中含有反动态调试的功能。没什么好说的了,我们这就来看看怎么干掉这层保护。

3. 在ptrace上下断点,找到调用ptrace的地方

依据这个帖子 141,可以知道定位调用ptrace地方的方法很简单,就是在ptrace上下个断点:

 
FunMaker-5:~ root# debugserver -x backboard *:1234 /var/mobile/Containers/Bundle/Application/1C86F6A1-E50A-434E-B08E-C39C200EFA0A/AMapiPhone.app/AMapiPhone
debugserver-@(#)PROGRAM:debugserver  PROJECT:debugserver-320.2.89
 for armv7.
Listening to port 1234 for a connection from *...
Got a connection, launched process /var/mobile/Containers/Bundle/Application/1C86F6A1-E50A-434E-B08E-C39C200EFA0A/AMapiPhone.app/AMapiPhone (pid = 678).
 
snakeninnysiMac:~ snakeninny$ /Applications/OldXcode.app/Contents/Developer/usr/bin/lldb 
(lldb) process connect connect://localhost:1234
Process 6907 stopped
* thread #1: tid = 0x1afb, 0x1fe54000 dyld`_dyld_start, stop reason = signal SIGSTOP
    frame #0: 0x1fe54000 dyld`_dyld_start
dyld`_dyld_start:
-> 0x1fe54000:  mov    r8, sp
   0x1fe54004:  sub    sp, sp, #16
   0x1fe54008:  bic    sp, sp, #7
   0x1fe5400c:  ldr    r3, [pc, #112]            ; _dyld_start + 132
(lldb) b ptrace
Breakpoint 1: no locations (pending).
WARNING:  Unable to resolve breakpoint to any actual locations.
(lldb) c
Process 6907 resuming
1 location added to breakpoint 1
Process 6907 stopped
* thread #1: tid = 0x1afb, 0x37031e64 libsystem_kernel.dylib`__ptrace, queue = 'com.apple.main-thread, stop reason = breakpoint 1.1
    frame #0: 0x37031e64 libsystem_kernel.dylib`__ptrace
libsystem_kernel.dylib`__ptrace:
-> 0x37031e64:  ldr    r12, [pc, #4]             ; ptrace + 12

libsystem_kernel.dylib`ptrace + 4:
   0x37031e68:  ldr    r12, [pc, r12]
   0x37031e6c:  b      0x37031e74                ; ptrace + 16
   0x37031e70:  rsbeq  pc, r11, #48
(lldb) p/x $lr
(unsigned int) $0 = 0x000dbd19
(lldb) image list -o -f
  0] 0x000d1000 /private/var/mobile/Containers/Bundle/Application/1C86F6A1-E50A-434E-B08E-C39C200EFA0A/AMapiPhone.app/AMapiPhone(0x00000000000d5000)

所以ptrace的调用者位于0xdbd19 - 0xd1000 = 0xAD19处,如图所示:

image image796×353 63.4 KB
这段代码的含义很明显了,动态调用ptrace,来达到反动态调试的目的。这段代码位于sub_ACF0内部,我们来看看sub_ACF0的显式调用者:
image
只有一个sub_AD24。看看它内部的实现:
image image542×672 59.6 KB
它是main函数。好了,高德地图通过在main函数中动态调用ptrace函数来达到反动态调试目的,大家可以参考学习。

 

4. 干掉sub_ACF0

根据这个帖子 148,我们可以hook在IDA的Functions window中看到的任意形如sub_xxx的函数。tweak的核心代码如下:

 
#import <substrate.h>
#import <mach-o/dyld.h>
#import <dlfcn.h>

void (*old_sub_ACF0)(void);

void new_sub_ACF0(void)
{
        // old_sub_ACF0();
        NSLog(@"iOSRE: anti-anti-debugging");
}

%ctor
{
        @autoreleasepool
        {
                unsigned long _sub_ACF0 = (_dyld_get_image_vmaddr_slide(0) + 0xACF0) | 0x1;
                if (_sub_ACF0) NSLog(@"iOSRE: Found sub_ACF0!");
                MSHookFunction((void *)_sub_ACF0, (void *)&new_sub_ACF0, (void **)&old_sub_ACF0);
        }
}

编译打包安装,我们看看有了这个tweak的加持,动态调试的效果:

 
(lldb) process connect connect://localhost:1234
Process 10222 stopped
* thread #1: tid = 0x27ee, 0x1fea3000 dyld`_dyld_start, stop reason = signal SIGSTOP
    frame #0: 0x1fea3000 dyld`_dyld_start
dyld`_dyld_start:
-> 0x1fea3000:  mov    r8, sp
   0x1fea3004:  sub    sp, sp, #16
   0x1fea3008:  bic    sp, sp, #7
   0x1fea300c:  ldr    r3, [pc, #112]            ; _dyld_start + 132
(lldb) c
Process 10222 resuming
(lldb) 2015-02-09 19:55:05.129 AMapiPhone[737:10222] iOSRE: Found sub_ACF0!
2015-02-09 19:55:05.478 AMapiPhone[737:10222] iOSRE: anti-anti-debugging
2015-02-09 19:55:06.598 AMapiPhone[737:10222] DiskCookieStorage changing policy from 2 to 0, cookie file: file:///private/var/mobile/Containers/Data/Application/6AE478A8-7838-4C33-B716-D2810ED78CB9/Library/Cookies/Cookies.binarycookies
2015-02-09 19:55:07.596 AMapiPhone[737:10222] reInit /var/mobile/Containers/Data/Application/6AE478A8-7838-4C33-B716-D2810ED78CB9/Documents/autonavi/data/cache/vmap4res/style-icons-upate-recorder.data
vmap_basedb_create-offline /var/mobile/Containers/Data/Application/6AE478A8-7838-4C33-B716-D2810ED78CB9/Documents/autonavi/data/vmap/

LLDB成功进入了高德地图内部,misson complete~开始hack吧!

 

标签:AMapiPhone,sub,ACF0,sp,iOS,7.2,ptrace,dyld,高德
From: https://www.cnblogs.com/macanpsc/p/18235512

相关文章

  • 高德面试:为什么Map不能插入null?
    在Java中,Map是属于java.util包下的一个接口(interface),所以说“为什么Map不能插入null?”这个问题本身问的不严谨。Map部分类关系图如下:所以,这里面试官其实想问的是:为什么ConcurrentHashMap不能插入null?1.HashMap和ConcurrentHashMap的区别HashMap和ConcurrentHash......
  • SwiftUI 热门开源库推荐第1期 - 凡人程序猿 - iOS开发
    大家好,周末给大家分享几个我在用已久的GitHub开源库,这些开源库使用简单,功能强大,使用好它们能够为我们节省大量的开发时间。话不多说,直接上库。1、PopupViewgithub项目地址:https://github.com/exyte/PopupView这个开源库在GitHub上有3.2K个赞。它是一款功能全面且好用......
  • flutter3-weos手机OS系统|Flutter3.22+Getx仿ios桌面管理OA应用
    原创自研flutter3.x+getx仿制ios手机桌面UI管理系统模板Flutter3-OS。flutter3-osx基于最新跨平台技术Flutter3.22+Dart3.4+GetX+fl_chart实战仿IOS风格手机os管理系统。全新自研flutter磁贴式栅格布局引擎、分屏式多页管理、自定义主题壁纸、卡片式桌面小部件、可拖拽式悬浮球菜......
  • iOS 18 Beta版将于下周发布:预计将带来这25项新功能
    iOS18即将发布,苹果将在6月10日(北京时间6月11日凌晨1点)的WWDC主题演讲中发布软件更新,预计将推出许多新功能和变化。iOS18的第一个测试版应该会在WWDC主题演讲后立即向Apple开发者计划的成员提供,公开测试版可能会在7月发布。该更新应该会在9月向所有用户广泛发布,据传它将与iOS1......
  • Coolmuster iOS 数据擦除:隐私保护的终极方案
    手机和平板电脑是我们不可或缺的伙伴,它们存储着我们的照片、联系人、私人消息以及工作文件。然而,当这些设备需要更换或者出售时,如何确保存储在其中的数据不被他人恢复和滥用,成为了一个严峻的问题。CoolmusteriOS数据擦除,一款专为iOS用户设计的应用程序,提供了一种安全、彻底的......
  • iOS18新功能大爆料,打破常规,全面升级,这些变化不容错过!
    众所周知,苹果iOS操作系统近年来都没有发生重大变化,主要是添加小部件、锁屏编辑和手机屏幕编辑等功能,再加上bug偏多,以至于越来越多iPhone用户不愿意再升级系统了。这一点,从iOS17明显降低的安装率中就能看出一二,但最近有好消息传来,根据此前外界爆料,苹果正在计划为即将到来的......
  • iOS 18要来了!苹果预热WWDC24:6月11日凌晨1点见
    苹果最新通过官方公众号向大家发布了WWDC24邀请,将于北京时间6月11日凌晨1点正式开始,号称“猛料加载中”。据了解,本次大会苹果将发布新一代iOS18、iPadOS18、macOS15、tvOS18以及watchOS11、visionOS2操作系统。其中,最受消费者关注的还是iOS18。爆料称,iOS18可能会加入生......
  • 飞睿uwb定位tag防丢器,蓝牙智能防丢器原理,支持苹果IOS的本地防丢查找
    在当今这个快节奏的社会,人们的注意力经常被各种琐事分散,丢三落四的情况时有发生。随着科技的发展,智能防丢器应运而生,成为帮助我们解决这一烦恼的助手。今天,我们就来深入探讨一款备受瞩目的智能防丢产品——飞睿UWB定位Tag防丢器,它不仅结合了新的蓝牙技术,还拥有自己的APP,支持苹......
  • uniapp打包Android跟iOS禁用录屏截屏
    1.禁用截屏和录屏的目的保护敏感信息:防止用户截屏或录屏分享应用中的敏感信息,如个人隐私数据、金融信息、商业机密等。版权保护:保护应用中的版权内容,如视频、图片、文本内容,防止未经授权的复制和传播。数据安全:防止恶意用户利用截屏或录屏功能进行信息盗取,增加应用的数据......
  • 高德坐标打点(点为正常的WGS84地球坐标系,常见于 GPS 设备,Google 地图等国际标准的坐标
    创建一个js文件工具//WGS84toGCJ-02converter//高德转地球坐标//coordinateUtils.jsconstPI=3.1415926535897932384626;consta=6378245.0;//a:WGS84大地坐标系的长半轴constee=0.00669342162296594323;//ee:WGS84椭球的偏心率平方//WGS84toGC......