必赢亚洲手机app下载


那样用Mac才叫爽!

苹果电脑设置教程

移动App凌犯与逆向破解技术苹果电脑

正文来源于腾讯bugly开发者社区,非经作者同意,请勿转发,原作地址:http://dev.qq.com/topic/577e0acc896e9ebb6865f321

只要您有耐心看完那篇小说,您将理解怎么入手举行app的辨析、追踪、注入等实用的破解技术,此外,通过“凌犯”,将帮扶您领略什么规避常见的安全漏洞,小说大纲:

  • 简言之介绍ios二进制文件结构与侵犯的法则
  • 介绍凌犯常用的工具和办法,包蕴pc端和手提式有线电电话机端
  • 授业黑客技术中的静态分析和动态分析法
  • 通过三个不难易行的实例,来介绍怎样综合运用砸壳、寻找注入点、lldb远程调节和测试、追踪、反汇编技术来进展黑客实战
  • 讲解越狱破解补丁和不需越狱的破解补丁制作方法和差别

黑客的武功

  • 乖巧的嗅觉
    偶尔通过七个函数名,1个类名,就能大约的论断出它的功效,那就是嗅觉;功力已臻化境时,甚至足以采取第4感判断出部分注入点

  • 面对退步的胆子
    破解有时候很耗时,和顺序支付刚刚相反,它耗费时间不是耗在写代码上,而是耗在搜索注入点和逆向工程上,有恐怕你花了3天时间去找程序的破损,然则最后的破解代码可能就2行,不到一秒钟就化解了;但是你也急需压实面对挫折的备选,假诺路选错了,有大概你那3天完全是在荒废脑细胞

  • 远古之力
    太古之力-即侵犯进程中需求借助的各类工具,工欲善其事,必先利其器,工具都在此以前人智慧的战果,能用工具消除的,绝不要手动去搞

    iOS黑客关键字

    iOS的凌犯离不开越狱开发,一切的破解、侵袭都以两手空空在越狱的根基上的,如若没有得到系统级权限,一切的想法都是放空炮了,当然,市面上存在免越狱的破解补丁,可是它的付出进程,也是依据越狱环境的

    ### tweak

    在iOS的黑客界,要做破解或越狱开发,就亟须询问tweak,它是各类破解补丁的统称,在google上,若是您想寻找一些越狱开发资料或许开源的破解补丁代码,它是最好的机要字。

    iOS的tweak大约分成二种:

  • 首先种是在cydia上发布的,需求越狱才能安装,大部分是deb格式的安装包,iOS在越狱后,会默许安装三个称呼mobilesubstrate的动态库,它的职能是提供叁个系统级的凌犯管道,全部的tweak都得以重视它来开始展览开发,目前主流的开发工具有theos和iOSOpenDev,前者是使用makefile的一个编译框架,后者提供了一套xcode项目模版,能够平昔动用xcode开发可调节和测试,但是那个体系早就甘休更新了,对高版本的xcode协理倒霉,我们研究选取(本文中的例子全部运用theos)

  • 其次种是平素打包成ipa安装包,并动用自身的支付证书只怕集团证书签名,不需越狱也足以安装,可向来放到自个儿的网站上,可完成在线安装;对于没有越狱的手机,由于权力的限定,大家是从未艺术写系统级的tweak的,例如springboard的补丁是无奈运维的,那种tweak大多是针对有些app,把指标app举行修改注入处理,再另行签名和表露,有点类似于windows软件的xxx破解版、xxx免注册版

    从没越狱的机械由于系统中尚无mobilesubstrate这么些库,大家有三个挑选,第②个是一向把那几个库打包进ipa个中,使用它的api达成注入,首个是直接修改汇编代码;第三个适用于比较复杂的破解行为,而且越狱tweak代码能够复用,第两种适用于破解一些if…else…之类的标准语句

    ### Mobilesubstrate

    上面包车型大巴图浮现的正是oc届有名的method
    swizzling技术,他正是iOS的流入原理,类似于windows的钩子,所以大家注入也称为hook

    苹果电脑 1

    Mobilesubstrate为了便利tweak开发,提供了四个重庆大学的模块:

  • MobileHooker
    正是用来做地点所说的那件事的,它定义一层层的宏和函数,底层调用objc-runtime和fishhook来替换系统也许目的应用的函数

  • MobileLoader
    用来在目的程序运营时依照规则把钦赐目录的第③方的动态库加载进去,第③方的动态库也正是大家写的破解程序,他的规律下边会不难讲解一下

  • Safe mode
    类似于windows的平安情势,比如大家写的局部系统级的hook代码发生crash时,mobilesubstrate会自动进入安全情势,安全格局下,会禁止使用全体的第③方动态库

    ### app注入原理

    上边讲到了mobileloader,他是怎么形成把第壹方的lib注入进指标程序的呢?这么些我们要从二进制文件的协会说起,从上边包车型客车图来看,Mach-O文件的数目宗旨可分为三超越二分一,分别是尾部(Header)、加载命令(Load
    commands)、和末段的数额(Data)。mobileloader会在目的程序运维时,会遵照钦定的平整检查内定目录是或不是留存第2方库,借使有,则会通过修改二进制的loadCommands,来把温馨注入进具有的app在那之中,然后加载第壹方库。

    苹果电脑 2

    为了让大家看的更领悟,下边笔者用machoview来开辟二个实打实的二进制文件给大家看看,能够看来,二进制在那之中全数引用到的动态库都坐落Load
    commands段个中,所以,通过给那么些段扩展记录,就能够注入大家同舟共济写的动态库了

    苹果电脑 3

    这正是说难点来了,在此处插入咱们协调的动态库有如何用?大家协调写的代码没有履行的输入,大家一样没发干坏事,嗯,恭喜您问到点子上了,我们还供给3个”main”函数来实施大家温馨的代码,这么些”main”函数在oc里面称为构造函数,只要在函数前声称
    attribute((constructor)) static”
    即可,有了它我们就足以公布想象力,举行掩人耳目干点坏事了:

    #import <CaptainHook/CaptainHook.h>
    
    CHDeclareClass(AnAppClass);
    CHMethod(1, void, AnAppClass, say, id, arg1)
    {
      NSString* tmp=@"Hello, iOS!";
      CHSuper(1, AnAppClass, say, tmp);
    }
    __attribute__((constructor)) static void entry()
    {
      NSLog(@"Hello, Ice And Fire!");
      CHLoadLateClass(AnAppClass);
      CHClassHook(1, AnAppClass,say);
    }
    

    到这里甘休,大家已经知道了怎么在目的程序注入本身的代码,那么我们怎么知道需求hook哪些措施?怎么找到关键点实行实际的破解呢?下边讲一下广泛的app侵袭分析方法

    ### iOS逆向分析方法

    逆向分析最常用的有二种艺术:

    1. 网络分析
      透过分析和篡改接口数据,能够有效的破解通过接口数据来决定客户端表现的app,常用的抓包工具有Tcpdump,
      WireShark, 查理等,windows平台有fidller

    2. 静态分析
      因此砸壳、反汇编、classdump头文件等技术来分析app行为,通过那种办法得以有效的辨析出app实用的一对第叁方库,甚至分析出app的架构等情节,常用的工具有dumpdecrypted(砸壳)、hopper
      disassembler(反汇编)、class_dump(导头文件)

    3. 动态解析
      有静就有动,万物都以相生相克的,动态解析指的是通过分析app的运维时数据,来定位注入点也许取得首要数据,常用的工具有cycript(运营时控制台)、
      lldb+debugserver(远程断点调试)、logify(追踪)

    demo:微信抢红包插件

    地点讲了成千上万原理性的事物,相信大家已经看的浮躁了,上面大家一并动点真格的,我们从头开始,一步一步的做3个微信的自发性抢红包插件,当然,网上恐怕早就有相关的开源代码了,然则自己那边要讲的是,这一个代码是怎么得出来的,作者么重点讲一讲分析进程

    ### 工欲善其事,必先利其器

    一台越狱的手提式有线电话机,并负有以下软件

    • cycript
    • dumpdecrypted
    • debug server
    • openssh

    一台苹果电脑,并持有以下软件

    • class_dump
    • Theos
    • Hopper Disassembler v3
    • xcode
    • insert_dylib
    • pp助手

    ### 寻找注入点

    #### 砸壳

    先是我们要做的正是把微信的壳砸掉,砸壳其实是为着把它的头文件classdump出来,因为从appstore下载的app二进制都是透过加密的,间接实行classdump操作是甚也看不出来的

  • 用pp帮手把dumpdecrypted.dylib文件copy到微信的documents目录

  • ssh到手机的顶峰,cd到documents目录中,执行下边包车型大巴通令进行砸壳操作

    xxx$ cp /usr/lib/dumpdecrypted.dylib /path/to/app/document
    xxx$ DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /path/to/WeChat
    
  • 末段砸壳完结后会在documents目录生成砸了壳后的二进制文件,用pp助手copy出来并class-dump他的头文件备用

    实施完这几行命令后,会在微信的documents目录生成多个WeChat.decrypted文件,那正是砸壳后的二进制文件;当然了,这一步不是必须的,大家能够直接从91照旧pp助手下载二个曾经砸过壳的本子

    苹果电脑,#### 动态解析-cycript

    要想落成机关抢红包,大家无法不找到收到红包音讯的handler方法,怎么动手呢?大家先从界面出发,进入微信的音讯头阵窗口:

    苹果电脑 4

  • ssh进手机的极端,输入ps命令,查找到微信的进程id

    ps aux | grep WeChat
    
  • 祭起神器cycript,依照上一步找到的pid注入到微信的历程

    cycript -p pidxxx
    
  • 在cycript的极端输入这一串方法,效用正是打字与印刷出当下界面包车型客车view层级,(cycript还有很多妙用,我们能够上官网看文书档案,那里不详细介绍)

    UIApp.keyWindow.recursiveDescription().toString()
    

    最后的输出如下,内容太多,大家一定看不清楚,然而没什么,这些不是第①,那里只是展现一下打字与印刷的结果方式:

    苹果电脑 5

    小编们能够私自的挑三拣四3个节点不要太靠树叶,也休想太靠树根,例如作者选的是标红的片段,把那几个节点的内部存款和储蓄器地址copy出来,这几个内存地址,就代表了那个节点的view对象,ios开发的老油条们都知情,通过view的nextResponder方法,能够找出它所属的视图控制器ViewController,所以笔者么在cycript的控制巴尔的摩不停输入如下的通令:

    苹果电脑 6

    来看没有,通过八个nextResponder方法调用,作者么找到了日前闲谈窗口的ViewController类名,他正是BaseMsgContentViewController,今后我们收缩了目的限制,上边大家还必要延续压缩范围,要找到具体的信息处理函数才行。

    #### 动态解析-Logify

    要继承收缩范围,就得祭起神器Logify了,它是theos的三个模块,功能正是依照头文件自动生成tweak,生成的tweak会在头文件的兼具办法中注入NSLog来打字与印刷格局的入参和出参,非凡适合追踪方法的调用和多少传递

    方今我们根据在此之前砸壳后class_dump出来的头文件,找到BaseMsgContentViewController在pc终端履行如下命令:

    logify.pl /path/to/BaseMsgContentViewController.h > /out/to/Tweak.xm
    

    出口的tweak文件大致是其一样子的:

    苹果电脑 7

    此间带百分号的机要字,例如 %hook、%log、%orig
    都以mobilesubstrate的MobileHooker模块提供的宏,其实相当于把method
    swizzling相关的艺术封装成了各个宏标记,使用起来更不难,大家想要更深远驾驭种种标记,能够google一下logos语言

    #### theos创建tweak

    上面我们用logify生成了一个tweak代码,大家要把它安装到手提式有线电话机上,首先必要选用theos实行编写翻译,安装了theos之后,在pc终端输入nic.pl:

    苹果电脑 8

    先是选用品种模版当然是tweak啦,然后是项目名称、作者,后边四个挑选要专注:

  • 率先是bundle filter,这几个须求填你要求注入的靶子app的bundle
    id,MobileLoader模块会基于它来寻找你的tweak的注入指标

  • 说到底是list id applications to terminate upon
    installation,那里内定当tweak安装成功之后,须求kill的进度,大家要hook微信,那里就填微信的二进制文件名就足以了,为啥要kill?
    因为笔者么的插件是内需在app运行时加载进去的,借使不重启app,插件是不会收效的

    末尾一切都成功后,在当前目录会生成下列文件:

    苹果电脑 9

    把地点logify生成的tweak文件覆盖到当前目录,并用文件编辑器打开makefile文件,在文件的上马扩张你的ios设备的ip地址和ssh端口:

    苹果电脑 10

    终极在pc终端进入项目目录,输入 make package install 命令:

    苹果电脑 11

    时期会让您输入设备的ssh密码,越狱机器的暗中同意ssh密码是alpine,make命令会生成deb安装包,放在debs目录,大家如若想对外发布本身的插件,可以把转变的安装包上流传cydia即可

    设置成功后再也进入微信的聊天界面,并利用别的三个微信在群里发个普通音信,连接xcode打开越狱机器控制台,查看输出,会意识有相近下边包车型客车出口:

    Jun  7 09:56:13 Administratorde-iPhone WeChat[85972] <Notice>: [1;36m[WxMsgPreview] [m[0;36mTweak.xm:308[m [0;30;46mDEBUG:[m -[<BaseMsgContentViewController: 0x15e0c9a00> addMessageNode:{m_uiMesLocalID=2, m_ui64MesSvrID=0, m_nsFromUsr=ccg*675~9, m_nsToUsr=1037957572@chatroom, m_uiStatus=1, type=1, msgSource="(null)"}  layout:1 addMoreMsg:0]
    

    看出来了吗,音讯处理函数是BaseMsgContentViewController的addMessageNode:layout:addMoreMsg:主意,我们能够见见,方法的参数内容也打字与印刷出来了


动态解析-lldb

到近年来截至,笔者么已经把范围减少到了实际的函数,看起来注入点已经找到了,可是请我们想想一下,假设我们在那么些函数中流入抢红包逻辑,这大家的tweak会不会有哪些致命的短处?

不错,因为BaseMsgContentViewController那么些类是微信群聊天窗口对应的controller,作者么必须进入到群的聊天界面,那几个类才会成立,如若不进来聊天窗口,我们的插件就不奏效了,而且,尽管进入聊天窗口,也只是能自动枪当前群的红包而已,别的群就无法了,是还是不是有点low?

据此为了使大家的插件显得高贵一些,作者么还要继续追根溯源,寻找音讯的源头,那里就用到了lldb远程调节和测试,使用lldb打断点的格局,通过调用栈,大家能够就足以看到当新闻赶到时,方法的调用顺序,找到起始执行的新闻处理函数。

要在刚刚追踪到的addMessageNode:layout:addMoreMsg:格局中打断点,首先我们得精晓它在运营时的内部存款和储蓄器地址,那么内存地址怎么来啊?有那般二个公式:

  • 内部存款和储蓄器地址=进度内部存款和储蓄器集散地址+函数在二进制中的偏移量
首先偏移量我们可以通过反汇编工具hooper来查,在pc上用hooper打开微信的二进制文件(注意,打开时会让你选择armv7或者arm64,这需要根据你越狱手机的cpu类型来选,一定要和你的手机一致),hooper的界面非常简洁,左侧有个搜索框,可以输入函数名,直接找到函数在二进制中的位置

![](http://i4.piimg.com/567571/bba899cbcb2039ff.jpg)

通过左侧的搜索框搜addMessageNode关键字,找到它的偏移量是0x00000001017d7c6c:

![](http://i4.piimg.com/567571/3741deb7e838057f.jpg)

找到了偏移量,还需要进程的基地址,这个地址需要连lldb,所以下面讲一下如何连接lldb进行远程调试,先ssh进越狱手机的终端,在终端输入如下命令(注意,你的手机必须连xcode调试过才会有这个命令):

    debugserver *:19999 -a WeChat

然后在pc端新起一个终端窗口,输入如下命令来连接手机端进行调试:

    lldb  ->  process connect connect://deviceIP:19999

如果连接成功,会进入lldb的控制台,我们在lldb的控制台输入如下命令来获取微信进程的基地址:

    image list -o -f

执行这个命令会打印很多行数据,像下面图中这样,我么要找到微信的二进制文件所在的行,记录它的内存地址0X00000000000E800:

![](http://i4.piimg.com/567571/bee2f2368a061a4a.jpg)

到这里我们两个地址都找到了,再通过br命令打断点:

    br s -a '0X00000000000E800+0x00000001017d7c6c'

打好断点后继续向群里面发消息,我们会发现进程被断掉了,这时输入bt指令,就可以看到当前的调用栈,就像下图这样:

![](http://i4.piimg.com/567571/975624bb34d0f1c5.jpg)

分析堆栈的时候,重点找出模块时WeChat的项,这些都是微信模块的方法调用,有了堆栈,我们需要根据堆栈的内存地址找出它的具体函数名,思路还是先根据上面讲到的公式来计算出栈地址在二进制中的偏移量,然后用hooper找到偏移量对应的函数名
  • 函数在二进制中的偏移量=内部存款和储蓄器地址 –
    进程内存集散地址

    比如说依据箭头所指的内部存款和储蓄器地址和刚刚收获的历程营地址,总计偏移量:

    0x0000000101ad02f4 – 0x00000000000e8000 = 1019E82F4
    

    然后在hooper中追寻那几个地点,获得结果如下:

    苹果电脑 12

    末段把拥有的栈都举办复苏,得出调用栈是其一样子的:

    -[CMessageMgr MainThreadNotifyToExt:]:
    –>    
    -[BaseMsgContentLogicController OnAddMsg:MsgWrap:]:
    ——>
    -[RoomContentLogicController DidAddMsg:]
    ———->
    -[BaseMsgContentLogicController DidAddMsg:]
    —————->
    -[BaseMsgContentViewController addMessageNode:layout:addMoreMsg:]:
    

    CMessageMgr那个类浮出水面了,是时候表明黑客的嗅觉了,依照办法名我们能判定出MainThreadNotifyToExt:这一个点子唯有是用来发送公告的,就算hook这一个主意,我们是拿不到新闻内容的

    鉴于此处恐怕是贰个异步调用,用断点的措施,大概早就打字与印刷不出去栈消息了,所以还得使用logify来继续追踪CMessageMgr这么些类,讲过的始末作者就不另行了,直接获取最后的音讯处理函数:

    -(void)AsyncOnAddMsg:(id)message MsgWrap:(CMessageWrap* )msgWrap
    

实现“抢”的动作

上一节大家早就找到了hook的关键点,那么该怎么去贯彻抢的动作?同样大家须求组合动态解析和静态分析,首先获得红包音讯体的数据特征,然后再分析处理音讯的关键点

多少包分析

先是大家的代码需求分辨哪些才是红包音信,方法很简短,用logify追踪BaseMsgContentViewController,然后向微信群发四个红包,阅览手提式有线电话机日志输出,我们得以看来讯息的数据结构中有个type字段,值是49,那几个type应该正是符号音信类型的,倘若不明确,能够再发个图片或许文本之类的新闻,这一个值是不相同的:

 Administratorde-iPhone WeChat[47410] <Notice>: [1;36m[WxMsgPreview] [m[0;36mTweak.xm:308[m [0;30;46mDEBUG:[m -[<BaseMsgContentViewController: 0x15e0c9a00> addMessageNode:{m_uiMesLocalID=16, m_ui64MesSvrID=1452438635530425509, m_nsFromUsr=1037957572@chatroom, m_nsToUsr=ccg*675~9, m_uiStatus=4, type=49, msgSource="<msgsource>
         <silence>0</silence>
         <membercount>3</membercount>
     </msgsource>
     "}  layout:1 addMoreMsg:0]

目前大家能识别音信类型了,重点来了,怎么落实其一事呢,大概聪明人已经猜到了,从ui出手,先找到微信本人的抢红包函数,大家自个儿来给它构造参数并调用他不就行了?

苹果电脑 13

把红包点开后,用cycript打字与印刷出当下view的层次,就如下边那些,一眼就足以看来重点,WCRedEnvelopesReceiveHomeView正是开红包弹框的类名

苹果电脑 14

知晓类名后,用cycript追踪它,点击开红包,在日记中找到了下图中的内容,从名字来看,那是二个事件处理函数,大家今后要做的,就是把她过来成oc代码,真正落到实处抢红包效率

 Administratorde-iPhone WeChat[91173] <Notice>: [1;36m[WxMsgPreview] [m[0;36mTweak.xm:8[m [0;30;46mDEBUG:[m -[<WCRedEnvelopesReceiveHomeView: 0x13cdda8c0> OnOpenRedEnvelopes]

静态分析法

怎么把他苏醒成oc代码,真正贯彻抢红包功能吗?还得凭借一小点汇编技能,只是一丢丢而已,因为今后的反汇编工具已经很强劲了,大家不须求挨个去看寄存器了

在pc上用hooper打开微信的二进制文件,搜索OnOpenRedEnvelopes,查看汇编代码,注目的在于图片中最终一行调用了八个WCRedEnvelopesReceiveHomeViewOpenRedEnvelopes函数

苹果电脑 15
苹果电脑 16


三番5次搜寻WCRedEnvelopesReceiveHomeViewOpenRedEnvelopes这几个办法,找到它的汇编代码

  • 率先她不精晓从哪儿获得了三个payinfoitem
  • 接下来又获得了payinfo的m_c2cNativeUrl属性
  • 下一场调用substringfromindex吧navtiveurl的前缀截断,并调用bizutil的八个办法把url参数转换到了二个字典

    苹果电脑 17

    最后反解出的代码如下,是否相当粗略?

    NSString *nativeUrl = [[msgWrap m_oWCPayInfoItem] m_c2cNativeUrl];
    nativeUrl = [nativeUrl substringFromIndex:[@"wxpay://c2cbizmessagehandler/hongbao/receivehongbao?" length]];
    NSDictionary *nativeUrlDict = [%c(WCBizUtil) dictionaryWithDecodedComponets:nativeUrl separator:@"&"];
    

一连往下看, 在那边前边三行创设了3个mutable dictionary:

  • 继而上边多少个框框处都以调用了setobject:forkey:向里面填东西,那填的事物是吗吧?
  • 实际那里一度足以看的很精通了,第一个key是msgtype,值是字符串1,首个sendid,值是调用了三个objectforkey从另多个字典中取出来的,很鲜明,另二个字典正是地点从url解析获得的,前边的channelid也是一律的道理

    苹果电脑 18

    最终收获的代码如下:

    NSMutableDictionary *args = [[%c(NSMutableDictionary) alloc] init];
    [args setObject:nativeUrlDict[@"msgtype"] forKey:@"msgType"];
    [args setObject:nativeUrlDict[@"sendid"] forKey:@"sendId"];
    [args setObject:nativeUrlDict[@"channelid"] forKey:@"channelId"];
    

后续往下看从箭头所指的几处,我们得以瞥见,它的代码是那般的,共分为四步

  • 第⑧个箭头调用了mmservicecenter的defaultcenter方法来赢得mmservicecenter实例
  • 其次个箭头调用了CContactMgr的class方法
  • 其多个箭头调用了第②步获取的mmservicecenter实例的getservice方法,而那些办法是把第2步获得的class作为参数
  • 第四个箭头很领会了啊,第②步得到了CContactMgr实例,那里就是调用CContactMgr实例的getselfcontact方法获得本身的账户资料

    苹果电脑 19

    说到底苏醒的到的代码如下:

    CContactMgr *contactManager = [[%c(MMServiceCenter) defaultCenter] getService:[%c(CContactMgr) class]];
    CContact *selfContact = [contactManager getSelfContact];
    

接轨往下看,这里运用刚刚收获的selfcontact来赢得displayname和headimgurl,并把它们设置到刚刚的字典里面了,key分别是nickname和headimg

苹果电脑 20

末段的代码:

 [args setObject:[selfContact getContactDisplayName] forKey:@"nickName"];
 [args setObject:[selfContact m_nsHeadImgUrl] forKey:@"headImg"];

继之看,接下去那两段就相比较蛋疼了,完全是从内部存款和储蓄器地址里面取的值,小编也不掌握他从哪儿来,怎么办呢?有没有不懂汇编就能消除它的走后门呢,答案是有!

  • 对于第二个,笔者得以因此它的key猜出来,还记得最开首的时候大家取过payinfo的三个nativeurl属性吧,大家如今把她传进去
  • 对此第二个,大家得以推断sessionUserName大约是会话名称,也正是群名称的意思,从哪儿取那一个值吗?大家先把也设置成伪代码

    苹果电脑 21

    最终的结果如下:

    [args setObject:nativeUrl forKey:@"nativeUrl"];
    [args setObject:xxx forKey:@"sessionUserName"];
    

后续往下看,接下去这一段照旧用mmservicecenter来获取WCRedLogicMgr对象,然后调用WCRedLogicMgr的open方法来拆红包,能够想象open方法的参数正是地点大家劳累组装的字典

苹果电脑 22

代码如下:

 [[[%c(MMServiceCenter) defaultCenter] getService:[%c(WCRedEnvelopesLogicMgr) class]] OpenRedEnvelopesRequest:args];

领红包逻辑

到此处,大家再计算一下大家地点分析的历程……

  • 得到m_oWCPayInfoItem属性
  • 解析m_oWCPayInfoItem的m_c2cNativeUrl属性
  • 得到selfcontact
  • 组建相关参数
  • 调用OpenRedEnvelopesRequest:领取红包

    末尾的抢红包代码合并起来如下:

    #import "WxMsgPreview.h"
    
    %hook CMessageMgr
    
    -(void)AsyncOnAddMsg:(id)message MsgWrap:(CMessageWrap* )msgWrap {
      %log;
      %orig;
      if(msgWrap.m_uiMessageType == 49){
          CContactMgr *contactManager = [[%c(MMServiceCenter) defaultCenter] getService:[%c(CContactMgr) class]];
          CContact *selfContact = [contactManager getSelfContact];
    
          if ([msgWrap.m_nsContent rangeOfString:@"wxpay://c2cbizmessagehandler/hongbao/receivehongbao"].location != NSNotFound) { // 红包
    
              NSString *nativeUrl = [[msgWrap m_oWCPayInfoItem] m_c2cNativeUrl];
              nativeUrl = [nativeUrl substringFromIndex:[@"wxpay://c2cbizmessagehandler/hongbao/receivehongbao?" length]];
    
              NSDictionary *nativeUrlDict = [%c(WCBizUtil) dictionaryWithDecodedComponets:nativeUrl separator:@"&"];
    
              NSMutableDictionary *args = [[%c(NSMutableDictionary) alloc] init];
              [args setObject:nativeUrlDict[@"msgtype"] forKey:@"msgType"];
              [args setObject:nativeUrlDict[@"sendid"] forKey:@"sendId"];
              [args setObject:nativeUrlDict[@"channelid"] forKey:@"channelId"];
              [args setObject:[selfContact getContactDisplayName] forKey:@"nickName"];
              [args setObject:[selfContact m_nsHeadImgUrl] forKey:@"headImg"];
              [args setObject:nativeUrl forKey:@"nativeUrl"];
              [args setObject:msgWrap.m_nsFromUsr forKey:@"sessionUserName"];
    
              [[[%c(MMServiceCenter) defaultCenter] getService:[%c(WCRedEnvelopesLogicMgr) class]] OpenRedEnvelopesRequest:args];
          }
      }
    }
    
    %end
    

    刚才说了,有八个疑难题没有缓解:

  • 先是:大家不知情payinfo是哪里来的,

  • 其次:sessionusername大家也不精晓是哪儿来的

    此刻大家能够从我们注入点的参数入手,首先用logify打字与印刷出addmsg方法的参数音信,会意识,它的第一个参数刚好有贰个payinfo的属性,那样第①个难题一蹴即至了

    其次个我们曾经预计到它代表群名称,所以大家从修改两遍群名称,然后再观望logify打字与印刷出的参数值的成形,就足以肯定出从何地取了

    透过一番煎熬,得出了抢红包的为主代码,再组成地方章节所讲的theos制作tweak包的主意,打包并安装到手提式有线电话机,发个红包试试,是还是不是秒抢?


免越狱插件

检查注重项

如若设备尚未越狱,是绝非mobilesubstrate等条件的,而且一些系统目录是没有读写权限的,那时小编么只好从目的app的二进制文件入手,通过手动修改load
commands来加载自个儿的dylib,那么位置大家的插件又是运用theos基于mobilesubstrate编写翻译的,有没有主意显然大家的dylib有没有依靠别的的库呢?

接纳osx自带的otool工具即可,能够看看,大家的lib是依靠于substrate库的,别的的都以系统库,所以大家从越狱设备中把cydiasubstrate文件copy出来重命名为libsunstrate.dylib,和我们的dylib一起放入wechat.app目录中

终极动用install_name_tool命令修改动态库的路线把它指向app二进制文件的同级目录

苹果电脑 23

制作安装包

化解了依赖难点,然后要把大家的库注入到二进制weixin的二进制文件,这一步使用开源的insert_dylib即可
(@executable_path是一个环境变量,指的是二进制文件所在的途径)

insert_dylib命令格式:
./insert_dylib 动态库路径 指标二进制文件

 //注入动态库
 ./insert_dylib @executable_path/wxmsgpreview.dylib WeChat
 //打包成ipa
 xcrun -sdk iphoneos PackageApplication -v WeChat.app -o ~/WeChat.ipa

终极选取用公司证书只怕支付证书签名对ipa重新签名,就足以放置自个儿的水道展开发表了!


结语

因此汇总选用各样工具,实行静态和动态解析,大家经过实战破解了微信的抢红包逻辑,领会了入侵常用的工具,上面的抢红包代码还有好多更上一层楼之处,比如没有看清红包的发送者是否祥和、也并未看清红包里面包车型的士文字是或不是抢错三倍,有趣味的童鞋能够尝试优化一下!

越多优良内容欢迎关心bugly的微信公众账号:

苹果电脑 24

腾讯
Bugly
是一款专为移动开发者塑造的质监工具,支持开发者急迅,便捷的定位线上利用崩溃的动静以及化解方案。智能合并功用协助开发同学把天天上报的数千条
Crash
依据根因合并分类,每一天晚报会列出影响用户数最多的夭亡,精准定位功效援助开发同学定位到出题目标代码行,实时反映能够在发布后快速的询问应用的品质情状,适配最新的
iOS, Android 官方操作系统,鹅厂的工程师都在运用,快来出席大家吧!

相关文章

No Comments, Be The First!
近期评论
    功能
    网站地图xml地图