游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

iOSinlinehook绕过反调试

  两种绕过方案
  这里有两种方案去绕过这种反调试:静态内存匹配特征patch实现一个简单的inlinehook动态hook绕过静态内存匹配特征patch
  在介绍思路之前,先看下一遍内联汇编去实现反调试的代码asmvolatile(movx0,31movx1,0movx2,0movx3,0movx16,26svc128);
  这里可以看出原理就是调用了26号系统调用,那么我们是不是可以去代码段里面去搜索,找到满足该特征的代码位置,然后直接将svc置为nop不就可以了?下面引出两个问题,如何去遍历代码段以及如何去修改?获取代码段位置以及大小voidgetTextSegmentAddr(structsegmentRangetextSegRange){intoffset0;structmachheader64header(structmachheader64)dyldgetimageheader(0);if(headermagic!MHMAGIC64){return;}offsetsizeof(structmachheader64);intncmdsheaderncmds;while(ncmds){gothroughallloadcommandtofindTEXTsegmentstructloadcommandlcp(structloadcommand)((uint8t)headeroffset);offsetlcpcmdsize;if(lcpcmdLCSEGMENT64){structsegmentcommand64curSegment(structsegmentcommand64)lcp;structsection64curSection(structsection64)((uint8t)curSegmentsizeof(structsegmentcommand64));checkcurrentsectionofsegmentisTEXT?if(!strcmp(curSectionsegname,TEXT)!strcmp(curSectionsectname,text)){uint64tmemAddrcurSectionaddr;textSegRangestartmemAddrdyldgetimagevmaddrslide(0);textSegRangeendtextSegRangestartcurSectionsize;break;}}}return;}
  代码不复杂,就是动态解析了自身内存里面的macho文件,根据macho文件格式找到代码段LCSEGMENT64(TEXT)然后就能得到text的开始位置以及大小。内存搜索匹配ptrace内联汇编代码voidlookupptracesvc(voidtargetaddr,uint64tsize){uint8tp(uint8t)targetaddr;for(inti0;isize;i){movx16,0x1a0xd2800350svc0x800xd4001001if(((uint32t)p)0xd2800350((uint32t)p1)0xd4001001){returnp;}p;}returnNULL;}
  传入的就是代码段的地址以及大小,然后遍历整个代码段,找到满足以下ptrace特征汇编代码movx16,0x1a0xd2800350svc0x800xd4001001
  然后就返回该地址。patch代码(将svc改为nop)
  iOSLLDB中基于内存单指令patch实现反反调试161这篇文章介绍了如何去patch代码的原理,但当时遇到一个bug:在iOS1112上面patch会失败,后面我花了一段时间去分析了失败的原因,后来也写了一篇文章去记录了分析的过程,感兴趣的可以访问iOS12内存patchremapbug分析57
  这里我就直接给出patch的代码uint8tpatchinsdata〔4〕{0x1f,0x20,0x03,0xd5};noppatchCode(ptracesvcp4,patchinsdata,4);
  完整流程代码如下(void)killantidebug{structsegmentRangetextSegRange;getTextSegmentAddr(textSegRange);voidptracesvcplookupptracesvc((void)textSegRange。start,textSegRange。endtextSegRange。start);if(!ptracesvcp){ADDLOG(〔〕notfoundptracesvc);return;}ADDXLOG(〔〕foundptracesvcaddressp,ptracesvcp);charptracebyteshexdump((void)ptracesvcp,8);ADDXLOG(〔〕readptracesvcinsaddress:psize:0xxinstbytes:s,ptracesvcp,8,ptracebytes);free(ptracebytes);ADDLOG(〔〕starttoptachptracesvctoret);uint8tpatchinsdata〔4〕{0x1f,0x20,0x03,0xd5};patchCode(ptracesvcp4,patchinsdata,4);ADDLOG(〔〕ptachptracesvctonopdone,readnewvalue);ptracebyteshexdump((void)ptracesvcp,8);ADDXLOG(〔〕readptracesvcinsaddress:psize:0xxinstbytes:s,ptracesvcp,8,ptracebytes);free(ptracebytes);}
  通过比对前后的代码就发现svc出地址的代码已经变成了nop从而绕过了反调试inlinehook动态hook绕过
  这种方式主要针对那些混淆了系统调用号或者其他编译版本,其绕过原理是直接hooksvc指令,然后判断是否为26号系统调用(让其他系统调用正常执行),若满足就直接跳过svc指令。
  整体流程代码如下structsegmentRangetextSegRange;getTextSegmentAddr(textSegRange);voidsvcplookupsvcins((void)textSegRange。start,textSegRange。endtextSegRange。start);if(!svcp){ADDLOG(〔〕notfoundsvc);return;}ADDXLOG(〔〕foundsvcaddressp,svcp);charsvcbyteshexdump((void)svcp,4);ADDXLOG(〔〕readptracesvcinsaddress:psize:0xxinstbytes:s,svcp,4,svcbytes);free(svcbytes);xia0Hook(svcp);
  同样遍历代码段找到所有的svc指令,然后进行hook,下面看hook的具体实现boolxia0Hook(voidtargetaddr){intlen(int)sysconf(SCPAGESIZE);1。gettargetaddresspageandpatchoffsetunsignedlongpagestart(unsignedlong)(targetaddr)PAGEMASK;unsignedlongpatchoffset(unsignedlong)targetaddrpagestart;printf(〔〕Targetaddress:pPagestart:pPatchoffset:p,targetaddr,(void)pagestart,(void)patchoffset);2。mapnewpageforpatchvoidnewmmap(NULL,len,PROTREADPROTWRITE,MAPANONMAPSHARED,1,0);if(!new){printf(〔〕mmapfailed!);returnfalse;}3。copytarget4instonewpageintcopysize44;voidcopyfromaddrtargetaddrcopysize;memcpy((void)(new),copyfromaddr,copysize);cmpx16,0x1ab。nelocnotptracesvcjmpldrx17,0x8brx17origsvcnextaddr1origsvcnextaddr2ldrx17,0x8brx17origsvcaddr1origsvcaddr2uint64torigsvcaddr(uint64t)targetaddr;uint64torigsvcnextaddr(uint64t)(targetaddr14);uint8tcheckjmpdata〔〕{0x1f,0x6a,0x00,0xf1,0x51,0x00,0x00,0x58,0x20,0x02,0x1f,0xd6,origsvcnextaddr0xff,(origsvcnextaddr81)0xff,(origsvcnextaddr82)0xff,(origsvcnextaddr83)0xff,(origsvcnextaddr84)0xff,(origsvcnextaddr85)0xff,(origsvcnextaddr86)0xff,(origsvcnextaddr87)0xff,0x51,0x00,0x00,0x58,0x20,0x02,0x1f,0xd6,origsvcaddr0xff,(origsvcaddr81)0xff,(origsvcaddr82)0xff,(origsvcaddr83)0xff,(origsvcaddr84)0xff,(origsvcaddr85)0xff,(origsvcaddr86)0xff,(origsvcaddr87)0xff};intcheckjmpdatasize104;memcpy((void)(new44),checkjmpdata,checkjmpdatasize);4。patchtargetaddresstojmphookcodevoidpatchaddrcopyfromaddr;uint64tnewp(uint64t)new;ldrx16,0x8brx16hookcodeaddr1hookcodeaddr2uint8tpatchdata〔〕{0x50,0x00,0x00,0x58,0x00,0x02,0x1f,0xd6,newp0xff,(newp81)0xff,(newp82)0xff,(newp83)0xff,(newp84)0xff,(newp85)0xff,(newp86)0xff,(newp87)0xff};intpatchdatasize44;patchCode(patchaddr,patchdata,patchdatasize);5。setnewpagetorxmprotect(new,len,PROTREADPROTEXEC);returntrue;}
  这里代码比较复杂,大致分为以下步骤map一页内存new,后面会将hook的代码写到里面copy原svc前的四条指令保存到new页(目前没有进行相对寻址修复)将hook判断的代码写到紧接着前面四条指令的后面,汇编代码大致如下cmpx16,0x1ab。nelocnotptracesvcjmpldrx17,0x8brx17origsvcnextaddr1origsvcnextaddr2ldrx17,0x8brx17origsvcaddr1origsvcaddr2就是简单的判断了系统调用号是否为26,若满足就跳到svc的下一条指令,若不是则跳回原svc指令以保证其他系统调用正常执行。patch目标地址进行hook跳转,由于进行任意地址跳转需要4条指令大小,所以这里覆盖了svc前的四条指令ldrx16,0x8brx16hookcodeaddr1hookcodeaddr2这里就是在执行svc指令前使其跳转到我们的hook代码最后将new这页设置为可读不可写可执行的页属性总结Todo
  其实对于这种inlinehook去绕过调试,后面发现已经有人已经实现了,因为只要实现了inlinehook,肯定能hook代码绕过。不过我这里主要是想去自己分析以及实现这里面的很多细节。因为hook框架由于要考虑到稳定,兼容等等因素,所以往往代码不是很直接。而这里通过仅仅实现绕过反调试的需求,所以代码都比较通俗易懂,原理来说都是一样的。只有自己去动手写了代码才发现里面的乐趣所在,比如如何去实现系统调用的判断?如何解决寄存器污染?如何去实现代码段patch?当然还有很多汇编级别的坑存在,踩坑解决坑同样有意思,这里就不一一介绍。
  后面主要还有两个事需要做:相对寻址指令的修复问题,以及hook代码的稳定兼容扩展问题。抽离相关代码,集成到xia0LLDB143之中,真正实现调试器中一键绕过反调试。更新20190911
  xia0LLDB143中已经集成了两种绕过反调试方案。app采取直接或间接调用ptrace函数的反调试方案〔xia0LLDBdebugme〕单指令patchptrace函数app采取单点或者多点多线程利用内联汇编方式的反调试方案〔xia0LLDBdebugme〕动态inlinehookapp中所有的svc指令,然后判断是否为26号系统调用,然后patch。
  https:github。com4ch12dyxia0LLDB

穿戴甲怎么量尺寸穿戴甲贴上为什么来回动穿戴甲在购买的时候要先测量好指甲的尺寸才行,不然戴的会不服帖,这穿戴甲的尺寸应该怎么测量比较好一些?为什么贴上穿戴甲之后会来回的晃动?穿戴甲怎么量尺寸甲片测量方法:……眼影刷有保质期吗眼影刷可以当遮瑕刷吗眼影刷是我们大家很多人都要使用的化妆工具,而同时因为大多数的产品都是有保质期的,那么我们在这里便要了解一下眼影刷有保质期吗?眼影刷可以当遮瑕刷吗?眼影刷有保质期吗化妆刷没……区块链技术如何革新医疗保健行业?医疗保健行业在数据存储、共享和验证方面面临许多问题。患者数据存在于孤立的孤岛中,医生无法在需要时访问它,而黑客似乎能够相对容易地利用它。患者不觉得自己拥有自己的健康信息。假药充……眼影刷用完怎么处理眼影刷每次用完都洗吗眼影刷是我们大家都很熟悉的一种化妆工具,很多人都使用过,也有很多人不清楚化妆刷使用后要怎么处理,那么我们便了解一下眼影刷用完怎么处理?眼影刷每次用完都洗吗?眼影刷用完怎么处理……黄晓明女神节剧组发红包,与工作人员调侃,要是没娶杨颖他会更好昨天是全国一年一度的三八女神节,而教主黄晓明却在剧组拍戏。而从黄晓明的状态来看是相当不错的,看上去丝毫没有受到离婚的影响!在剧组里黄晓明看到一个剧组小哥在烤香肠,身为资深……华为又发布新机,麒麟芯片鸿蒙OS,随Mate50一同开售,仅您在阅读前请点击上面的关注二字,后续会第一时间为您提供更多有价值的相关内容,感谢您的支持。大家期待已久的华为mate50手机今天(9月21日)开售了,由于大家非常的热情,……看了泰伦卢的球员生涯合作过的大佬,难怪能够拿捏詹姆斯昨天快船不敌森林狼无缘直接拿到季后赛的门票,除了球员表现不佳外泰伦卢的临场指挥也备受指责,但是不可否认快船能够走到附加赛,泰伦卢也功不可没!今天特意去看了一下泰伦卢的球员生涯经……指甲油不涂底油会怎么样指甲油要等底油干了在涂吗一般去美甲店做指甲的时候都是要涂底油之后在上胶的,这涂指甲油的时候也要先上底油的吗?要是上底油的话要等底油干了才能涂指甲油吗?指甲油不涂底油会怎么样是的,涂抹底油的目的就……美瞳有散光度数吗美瞳度数比镜片度数低多少现在都美瞳都是可以有度数的,近视的人也是可以戴的,那么有散光的可以戴美瞳吗?美瞳度数比镜片度数低多少?美瞳有散光度数吗美瞳是有散光度数的,一般情况下50度以下散光都不需要……修容要定妆吗先修容还是先散粉定妆大多数的女生都知道,修容是化妆的一个步骤,并且是非常重要的步骤,可以将我们的面部修饰的更小、更立体,那么我们便了解一下修容要定妆吗?先修容还是先散粉定妆?修容要定妆吗要定……延续百年农耕文化,传统的乡村风貌和风土民情饶有趣味!关东雪村关东雪村松岭地处吉林省东南部临江市花山镇一个名叫珍珠门村的原始自然小山村,是较为典型的山东移民村。雪村住户不过一百多户,房子高低分布在村落的岭上及小山底部,安静闲适。……美瞳买回来可以直接佩戴吗美瞳买回来后怎么处理美瞳在买的时候就是泡着在,这样的话买回来之后是不是就可以直接佩戴了?美瞳刚买回来之后应该怎么处理才好?美瞳买回来可以直接佩戴吗般来说是不可以,美瞳必须用营养水浸泡24小时……
露华浓唇膏真假露华浓唇膏真假鉴别云想衣裳花想容,春风拂槛露华浓。露华浓应该是最有诗意的一个彩妆品牌了,虽然退出了中国市场,但是大家对于露华浓的热情不减。它们家的唇膏很滋润,上色也是很持久哦!下面为大家介绍露华……日本足球教育成功的秘密,就藏在这部14秒的纪录片里来源蓝橡树IDblueoak2022年,卡塔尔世界杯,日本队在落后一球的情况下,连进两球战胜前世界冠军德国队。面对德国队凶猛的进球,日本门将四连扑,被网友戏称……露华浓唇膏多少钱?露华浓唇膏专柜价格美国价格露华浓唇膏是美国的开架产品,这个牌子在美国也是大热,虽然之前退出了中国市场,但是如今火热大有回归势头。它们家的唇膏属于平价好物。下面为大家介绍露华浓唇膏价格露华浓唇膏专柜……35岁刘亦菲穿挂脖裙秀身材,难得打扮艳丽,没想到她还有这一面在娱乐圈中,能够拥有一种独特的风格,是一件幸运的事,这是能够让人记住的基础,也是让诸多明星究其一生都在追寻的东西。也有很多人拥有了这种风格,却因为太过根深蒂固的印象,想要……tatcha口红色号tatcha口红试色tatcha是一家美国的化妆品品牌,却是以日本艺妓为主题的彩妆,今天5号网小编就要为大家介绍一下,tatcha口红色号有哪些?tatcha口红试色怎么样?tatcha口红……谍战剧潜伏中,翠萍在老家痴痴等待,还会等来余则成吗?凌云摘要:经典谍战剧《潜伏》最后,翠萍回了老家,天天在村口痴痴等待,还会等到余则成回来吗?【公告,本号由原来头条号知兵堂光亭搬迁而来,敬请大家继续关注支持】经……蓝库云工业物联网加速布局,制造业面临数字化转型浪潮工业4。0时代来临,设备及产线的数字自动化将为制造业带来全新样貌。由于工业自动化无法全然取代人力,但了解并学习相关知识与技能将有助于布局转型随着工业4。0的驱动,工业物联网(I……纪梵希304是西柚色吗?纪梵希小羊皮304和317哪个好看?在我们平时的日常生活中经常可以见到有很多人非常喜欢使用纪梵希家的口红,纪梵希小羊皮一直是热门的明星产品,那么纪梵希304是西柚色吗?纪梵希小羊皮304和317哪个好看?纪梵希3……纪梵希2018春季彩妆试色纪梵希小羊皮303好看吗我们都知道现在市面上的很多化妆品品牌在每年不同的季节都会推出同系列的彩妆产品,纪梵希是平时非常受大家欢迎与喜爱的化妆品品牌,那么下面就由5号网的小编来为大家介绍纪梵希2018春……小米与印度电信公司RelianceJio合作提供True5GIT之家12月27日消息,小米今天宣布与印度电信运营商RelianceJio合作,将独立(SA)5G技术引入小米和Redmi5G设备,为用户提供真5G(True5G)体验。……hera口红147多少钱?hera口红147专柜价格热播韩剧蓝色大海的传说全智贤同款口红就是hera147,很多人已经准备开始买买买了。那么hera口红147多少钱?hera口红147专柜价格。hera口红147多少钱……魅可是哪个国家的品牌?mac是几线品牌?魅可,专注于彩妆系列产品的品牌。其品牌系列的口红今年可谓大热,席卷彩妆市场。那么,有多少人了解魅可这个品牌呢?魅可是哪个国家的品牌呢?魅可是哪个国家的品牌M?A?C……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网