注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

熊猫正正的博客

熊猫正正的天空

 
 
 

日志

 
 

IOS反调试ptrace  

2015-10-21 17:58:43|  分类: IOS安全 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
参考链接:
http://www.blogfshare.com/ioss-check-debug.html

唉,说起来这就是一个坑,Cydia Substrate在其文档中也没找到详细说明,最后也只能来看看代码曾半仙最早给的那份substrate-master源码,然后一切就了然于胸了,这个坑很大,很大!!!
现在我们先来看下MSHookFunction怎么Hook IDA中的sub_xxxx函数,然后再来谈谈为啥是这样的。
IOS反调试ptrace - 熊猫正正 - 熊猫正正的博客

就以这段代码为例吧,下断点红色选中部分,中的sub_17C94就是我想要Hook的函数,首先确认了下参数个数为2个。
以下给出代码片段截图:
IOS反调试ptrace - 熊猫正正 - 熊猫正正的博客

看到这里我想很多人有点不理解,为啥需要 | 0x00000001,别急,下面我就借花献佛,慢慢道来也。
既然源头是出现在MSHookFunction上,那们我们就去阅读下这块的代码:
IOS反调试ptrace - 熊猫正正 - 熊猫正正的博客

IOS反调试ptrace - 熊猫正正 - 熊猫正正的博客

从这2 段代码中可以很明显的看到在SubstrateHookFunction中,看到这么一句
if ((reinterpret_cast(symbol) & 0x1) == 0)
也就是说,MSHookFunction在判断Hook函数的时候,是通过在传到进来函数地址的奇偶数来判断是ARM指令的函数,还是Thumb指令的函数。
这个坑好大,我勒个去啊!!!
别急,接下来看这句
reinterpret_cast(reinterpret_cast(symbol) & ~0x1)
判断完后,为了能正确Hook地址,又改回原来的地址了,这下变清楚了吧。
再者,从MSFindSymbol函数中也能清楚的看到**value |= 0x00000001**这句!!!

PS: 把Hook写得飞起吧......


-------------------------------------------------------------------------------------------------------------------------------------

自己写了一个反调试的例子,测试了一下

反调试代码如下:

IOS反调试ptrace - 熊猫正正 - 熊猫正正的博客

lldb的时候发现会挂掉,然后我们分析出函数地址,并利用下面这个程序hook掉反调试的函数,就可以过反调试了

IOS反调试ptrace - 熊猫正正 - 熊猫正正的博客
函数地址:0xAA90,然后利用THEOS写过ptrace的代码如下:
 #import <substrate.h>
#import <mach-o/dyld.h>
#import <dlfcn.h>

void (*old_disable_gdb)(void);

void new_disable_gdb(void)
{
NSLog(@"pandazheng,pandazheng,pandazheng");
}


__attribute__ ((constructor)) void dylibMain()
{
unsigned long sub_func = (_dyld_get_image_vmaddr_slide(0) + 0xAA90) | 0x1;
if (sub_func) NSLog(@"pandazheng: found ptrace address");
MSHookFunction((void*)sub_func,(void*)new_disable_gdb,(void**)&old_disable_gdb);
}

把生成好的dylib,plist放到/LibraryMobileSubstrate/DynamicLibraries,然后重启SpringBoard,发现就可以正常调试了,如图:
IOS反调试ptrace - 熊猫正正 - 熊猫正正的博客
 

Come Over!


  评论这张
 
阅读(483)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017