必赢亚洲手机app下载


主流浏览器包容性测试之优先级排序

经验美利坚合众国One苹果电脑 plus

移动App侵犯与逆向破解技术

come from 
2016-07-07何兆林
腾讯Bugly😉

即便你有耐心看完这篇文章,您将明了怎么着入手展开app的分析、追踪、注入等实用的破解技术,此外,通过“入侵”,将扶持你明白什么躲过常见的安全漏洞,小说大纲:

概括介绍ios二进制文件结构与侵袭的规律

介绍侵犯常用的工具和方法,包含pc端和手机端

教师黑客技术中的静态分析和动态分析法

通过一个简便的实例,来介绍怎么着综合应用砸壳、寻找注入点、lldb远程调试、追踪、反汇编技术来进展黑客实战

教学越狱破解补丁和不需越狱的破解补丁制作方法和距离

黑客的功夫

乖巧的嗅觉

偶然通过一个函数名,一个类名,就能大约的判定出它的作用,那就是嗅觉;功力已臻化境时,甚至足以选择第六感判断出部分注入点

面对挫折的胆气

破解有时候很耗时,和次序开发刚刚相反,它耗时不是耗在写代码上,而是耗在寻找注入点和逆向工程上,有可能您花了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

Mobilesubstrate为了方便tweak开发,提供了三个紧要的模块:

MobileHooker就是用来做地点所说的那件事的,它定义一文山会海的宏和函数,底层调用objc-runtime和fishhook来替换系统或者目的应用的函数

MobileLoader用来在目的程序启动时依照规则把指定目录的第三方的动态库加载进去,第三方的动态库也就是我们写的破解程序,他的规律上边会不难讲解一下

Safe
mode
恍如于windows的兴安盟方式,比如大家写的部分系统级的hook代码发生crash时,mobilesubstrate会自动进入安全方式,安全格局下,会禁用所有的第三方动态库

app注入原理

地点讲到了mobileloader,他是怎么完成把第三方的lib注入进目的程序的呢?这几个我们要从二进制文件的协会说起,从底下的图来看,Mach-O文件的数额主导可分为三半数以上,分别是底部(Header)、加载命令(Load
commands)、和终极的多寡(Data)。mobileloader会在目的程序启动时,会基于指定的规则检查指定目录是或不是留存第三方库,如若有,则会由此改动二进制的loadCommands,来把温馨注入进具有的app当中,然后加载第三方库。

为了让大家看的更领会,上边我用machoview来开辟一个实在的二进制文件给我们看看,可以看到,二进制当中所有引用到的动态库都放在Load
commands段当中,所以,通过给那么些段增加记录,就可以注入我们团结一心写的动态库了

那么难点来了,在此地插入大家团结一心的动态库有哪些用?大家协调写的代码没有履行的入口,大家同样没发干坏事,嗯,恭喜你问到点子上了,大家还索要一个”main”函数来执行我们自己的代码,那个”main”函数在oc里面称为构造函数,只要在函数前声称
attribute((constructor)) static”
即可,有了它大家就可以发挥想象力,举行掩人耳目干点坏事了:

#import

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逆向分析方法

逆向分析最常用的有三种办法:

网络分析

通过分析和篡改接口数据,可以使得的破解通过接口数据来控制客户端表现的app,常用的抓包工具有Tcpdump,
WireShark, Charles等,windows平台有fidller

静态分析

经过砸壳、反汇编、classdump头文件等技术来分析app行为,通过那种措施得以使得的分析出app实用的部分第三方库,甚至分析出app的架构等情节,常用的工具有dumpdecrypted(砸壳)、hopper
disassembler(反汇编)、class_dump(导头文件)

动态解析

有静就有动,万物都是相生相克的,动态解析指的是由此分析app的周转时数据,来定位注入点或者取得首要数据,常用的工具有cycript(运行时控制台)、
lldb+debugserver(远程断点调试)、logify(追踪)

demo:微信抢红包插件

地点讲了诸多原理性的事物,相信大家已经看的躁动了,上面大家一块动点真格的,大家从头初始,一步一步的做一个微信的自动抢红包插件,当然,网上或者早已有连带的开源代码了,不过我那边要讲的是,那么些代码是怎么得出来的,我么重点讲一讲分析进程

工欲善其事,必先利其器

一台越狱的手机,并装有以下软件

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方法,怎么入手呢?大家先从界面出发,进入微信的音信头阵窗口:

ssh进手机的终点,输入ps命令,查找到微信的进度id

ps aux | grep WeChat

祭起神器cycript,依照上一步找到的pid注入到微信的长河

cycript -p pidxxx

在cycript的终极输入这一串方法,功用就是打印出如今界面的view层级,(cycript还有诸多妙用,大家可以上官网看文档,那里不详细介绍)

UIApp.keyWindow.recursiveDescription().toString()

终极的输出如下,内容太多,大家自然看不清楚,可是没什么,这些不是第一,那里只是突显一下打印的结果格局:

俺们可以肆意的精选一个节点不要太靠树叶,也并非太靠树根,例如我选的是标红的片段,把这么些节点的内存地址copy出来,这么些内存地址,就象征了这些节点的view对象,ios开发的老油条们都领悟,通过view的nextResponder方法,可以找出它所属的视图控制器ViewController,所以我么在cycript的控制德雷斯顿连连输入如下的一声令下:

看到没有,通过多个nextResponder方法调用,我么找到了脚下闲谈窗口的ViewController类名,他就是苹果电脑,BaseMsgContentViewController,现在大家减弱了对象限制,下边我们还须要后续压缩范围,要找到具体的音讯处理函数才行。

动态解析-Logify

要继续缩短范围,就得祭起神器Logify了,它是theos的一个模块,效能就是依据头文件自动生成tweak,生成的tweak会在头文件的保有办法中注入NSLog来打印方式的入参和出参,分外适合追踪方法的调用和数量传递

前天大家按照在此此前砸壳后class_dump出来的头文件,找到BaseMsgContentViewController在pc终端履行如下命令:

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

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

此地带百分号的重大字,例如%hook、%log、%orig都是mobilesubstrate的MobileHooker模块提供的宏,其实也就是把method
swizzling相关的不二法门封装成了各个宏标记,使用起来更简便,大家想要更透彻摸底各类标记,可以google一下logos语言

theos创建tweak

地方大家用logify生成了一个tweak代码,大家要把它安装到手机上,首先要求使用theos举办编译,安装了theos之后,在pc终端输入nic.pl:

先是选用种类模版当然是tweak啦,然后是项目名称、小编,前面八个选项要留意:

率先是bundle filter,那些要求填你须要注入的目的app的bundle
id,MobileLoader模块会按照它来寻觅你的tweak的流入目标

最后是list id applications to terminate upon
installation,那里指定当tweak安装成功将来,须求kill的经过,大家要hook微信,那里就填微信的二进制文件名就可以了,为何要kill?
因为我么的插件是索要在app启动时加载进去的,借使不重启app,插件是不会收效的

说到底一切都做到后,在现阶段目录会生成下列文件:

把地方logify生成的tweak文件覆盖到当前目录,并用文件编辑器打开makefile文件,在文件的启幕增加你的ios设备的ip地址和ssh端口:

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

时期会让您输入设备的ssh密码,越狱机器的默许ssh密码是alpine,make命令会生成deb安装包,放在debs目录,大家假若想对外揭晓温馨的插件,可以把转变的安装包上传播cydia即可

安装成功后再次进入微信的聊天界面,并采纳别的一个微信在群里发个普通消息,连接xcode打开越狱机器控制台,查看输出,会发现有接近上边的输出:

Jun  7 09:56:13 Administratorde-iPhone WeChat[85972] :
[1;36m[WxMsgPreview] [m[0;36mTweak.xm:308[m [0;30;46mDEBUG:[m
-[ 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的界面卓殊简洁,左边有个搜索框,能够输入函数名,直接找到函数在二进制中的地点

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

找到了偏移量,还亟需经过的基地址,那几个地点须求连lldb,所以下边讲一下哪些连接lldb举行长途调试,先ssh进越狱手机的顶峰,在巅峰输入如下命令(注意,你的手机必须连xcode调试过才会有其一命令):

debugserver *:19999 -a WeChat

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

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

如若老是成功,会跻身lldb的控制台,我们在lldb的支配台输入如下命令来赢得微信进度的基地址:

image list -o -f

实践那么些命令会打印很多行数据,像上边图中如此,我么要找到微信的二进制文件所在的行,记录它的内存地址0X00000000000E800:

到那里大家四个地方都找到了,再经过br命令打断点:

br s -a ‘0X00000000000E800+0x00000001017d7c6c’

打好断点后三番五次向群里面发信息,大家会发现经过被断掉了,那时输入bt指令,就可以看来眼前的调用栈,就好像下图那样:

分析堆栈的时候,重点找出模块时WeChat的项,这么些都是微信模块的点子调用,有了库房,大家须求基于堆栈的内存地址找出它的切实函数名,思路依旧先根据上边讲到的公式来计量出栈地址在二进制中的偏移量,然后用hooper找到偏移量对应的函数名

函数在二进制中的偏移量=内存地址 – 进度内存基地址

比如按照箭头所指的内存地址和正好收获的经过营地址,总计偏移量:

0x0000000101ad02f4 – 0x00000000000e8000 = 1019E82F4

然后在hooper中搜寻这一个地方,获得结果如下:

末段把装有的栈都举办复原,得出调用栈是这几个样子的:

-[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] : [1;36m[WxMsgPreview]
[m[0;36mTweak.xm:308[m [0;30;46mDEBUG:[m -[
addMessageNode:{m_uiMesLocalID=16, m_ui64MesSvrID=1452438635530425509,
m_nsFromUsr=1037957572@chatroom, m_nsToUsr=ccg*675~9, m_uiStatus=4,
type=49, msgSource=”

0

3

“}  layout:1 addMoreMsg:0]

现在大家能辨别新闻类型了,重点来了,怎么落到实处那个事呢,可能聪明人已经猜到了,从ui入手,先找到微信本身的抢红包函数,大家团结来给它构造参数并调用他不就行了?

把红包点开后,用cycript打印出脚下view的层系,就像是上边那几个,一眼就可以见到重点,WCRedEnvelopesReceiveHomeView就是开红包弹框的类名

清楚类名后,用cycript追踪它,点击开红包,在日记中找到了下图中的内容,从名字来看,那是一个事件处理函数,大家明天要做的,就是把她过来成oc代码,真正兑现抢红包作用

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

静态分析法

怎么把她过来成oc代码,真正贯彻抢红包作用吗?还得依靠一点点汇编技能,只是一点点罢了,因为现在的反汇编工具已经很有力了,我们不需求挨个去看寄存器了

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

后续查找WCRedEnvelopesReceiveHomeViewOpenRedEnvelopes那几个艺术,找到它的汇编代码

率先她不领会从哪个地方获得了一个payinfoitem

然后又收获了payinfo的m_c2cNativeUrl属性

然后调用substringfromindex吧navtiveurl的前缀截断,并调用bizutil的一个办法把url参数转换成了一个字典

说到底反解出的代码如下,是还是不是很简短?

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

后续往下看, 在此处后面三行制造了一个mutable dictionary:

接着下边多个框框处都是调用了setobject:forkey:向里面填东西,这填的事物是什么呢?

其实那里已经得以看的很明亮了,第三个key是msgtype,值是字符串1,第三个sendid,值是调用了一个objectforkey从另一个字典中取出来的,很鲜明,另一个字典就是上面从url解析得到的,前边的channelid也是千篇一律的道理

说到底获得的代码如下:

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方法,而这些艺术是把第二步得到的class作为参数

第多少个箭头很精通了吧,第三步得到了CContactMgr实例,那里就是调用CContactMgr实例的getselfcontact方法取得自己的账户资料

末段复苏的到的代码如下:

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

CContact *selfContact = [contactManager getSelfContact];

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

末尾的代码:

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

随之看,接下去那两段就相比蛋疼了,完全是从内存地址里面取的值,我也不知道她从何地来,如何是好呢?有没有不懂汇编就能搞定它的走后门呢,答案是有!

对此第三个,我可以透过它的key猜出来,还记得最初阶的时候我们取过payinfo的一个nativeurl属性吧,我们姑且把她传进去

对此第三个,大家可以算计sessionUserName大约是会话名称,也就是群名称的情趣,从何地取那么些值吗?咱们先把也设置成伪代码

最终的结果如下:

[args setObject:nativeUrl forKey:@”nativeUrl”];

[args setObject:xxx forKey:@”sessionUserName”];

延续往下看,接下去这一段如故用mmservicecenter来获取WCRedLogicMgr对象,然后调用WCRedLogicMgr的open方法来拆红包,可以想象open方法的参数就是上边大家坚苦组装的字典

代码如下:

[[[%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二进制文件的同级目录

创设安装包

焚林而猎了信赖难点,然后要把我们的库注入到二进制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重新签名,就足以放置自己的沟渠展开发表了!

结语

经过汇总应用各类工具,举办静态和动态解析,大家由此实战破解了微信的抢红包逻辑,精通了侵略常用的工具,下边的抢红包代码还有好多改正之处,比如没有看清红包的发送者是否温馨、也一向不看清红包里面的文字是还是不是抢错三倍,有趣味的童鞋可以品味优化一下!

相关文章

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