首页 > 编程知识 正文

苹果怎么安装两个微信,ios微信分身版 免越狱

时间:2023-05-03 10:13:43 阅读:24616 作者:163

逐步说明如何利用LLDB分析微信,利用分析结果,Hook微信登录流程,拦截微信密码。

上一篇文章《APP重新签名》介绍了如何重新签名APP,利用XCode跑遍了微信,既然到了这个地步,绝对不能错过强大的LLDB。 本文介绍如何使用LLDB分析微信,并利用其结果来Hook微信登录过程和监听微信密码。

往常的规则,开场先给福利。 单击以下载Demo:HookWeChat。 这次有两个代码。 由于越狱微信太大,受限于github,因此没有传输到github,可以通过以下链接单独下载

正文所需工具和文件:

越狱版本微信7.0.2取码: 2w87

MachOView提取代码: n3hy

yololib提取代码: e8qs

class-dump提取代码: v5ku

接下来从几部作品中,微信脱下看起来很安全的上衣,裸露在大家面前。

框架角色MachO (原理分析)代码注入)代码过程) ViewDebug、LLDB、class-dump分析微信登录页)原理分析) Hook登录、自动获取密码)代码过程

当然,接下来我们将直接演示如何创建Framework,并介绍我们与Hookwechat相关的基础原理。

新项目FrameworkDemo、新项目Framework、FYHook

在新创建的FYHook文件夹中创建新的InjectCode (继承NSObject )对象,并创建新代码。

(void ) void ) nslog(@ '来了,cqdc?' ); }复制代码

直接运行,发现,cqdc? 输出并证明用这种方法新制作的Framework可以直接在我们的项目中运行。

2、探索MachO (不想看原理,可以直接跳到第三部分代码注入)。

根据上一篇文章的APP重新签名,我们可以用XCode跑微信。 那么,两者结合起来,能把我们的代码注入微信的APP吗?

Step 1首先考虑一下问题。 根据APP重新签名的结论,通过利用脚本,APP (是我们使用的微信的例子,以下简称微信。 )中,在要重新签名脚本的项目中直接创建框架。 能让我在微信上运行框架代码吗?

很明显,这不行。 感兴趣的人可以试试。 为什么? 回答这个问题如下。 请先把这个问题记在心里。

Step 2 MachO在我们用XCode创建新的HYHook时起作用,其实XCode在我们的项目中创建HYHook的时候,同时给我们做了链接HYHook的操作。 (这是后期XCode的新功能,早年XCode的这一步需要我们直接做。 ) ) )。

公共b构建显示,已经构建的文件中的框架下已经有FYHook,已经复制了FYHook。 (如何查看Build中发出的文件? 查看:正在重新签名APP step 8重新签名app )但是FYHook在ipa文件中并不意味着FYHook可以在我们的可执行文件中运行。 FYHook没有报告在我们的可执行文件中,所以必须在这个可执行文件中的某个地方做标记,通知可执行文件,并在必要时加载外部的FYHook

这里所说的可执行文件是指MachO文件。 (具体什么是MachO? 这不是本作品文章的重点内容,可以持续关注笔者之后的文章。 下一章将详细说明这一点很重要的MachO。 )使用MachOView可以看到MachO到底有什么。

Step 3 MachOView单击此处下载: MachOView提取代码: n3hy

在MachOView中打开框架演示的MachO时,可以看到下图

其中有一个Load Commons组,其中包含需要动态加载的所有库。 也就是说,如果没有与Load Commons对应的FYHook,就不会加载FYHook。

在上图中,FYHook已添加到Load Commons中,图的右侧也显示了FYHook所属的目录。 (在与MachO文件相同级别的Frameworks下的FYHook.framework中,FYHook.framework实际上也是一个文件夹,其中的FYHook也是mons

于是在这里得到了“为什么我们不能直接把FYHook放在我们的重新签名脚本项目中,直接运行FYHook?”的答案。 我们从Build出来的MachO文件中的Load Commo

ns中没有加入FYHook的路径。所以无法运行FYHook中的代码。

那么我们直接将FYHook加入我们Build出的MachO文件行吗? 显然也是不行的,因为我们Build出的MachO文件始终会被原始包(WeChat)中的MachO给替换掉。我们需要将FYHook加入原始包(WeChat)中的MachO中。

Step 4 将FYHook标记入MachO中

这里我们就需要用到终端命令行工具:yololib 提取码:e8qs

将下载下来的yololib.zip解压后得到的yololib放在‎⁨目录/usr⁩/local⁩/开放的身影⁩下,这样我们在终端中就可以使用yololib命令了

以下命令就是将FYHook注入WeChat的命令

// yololib 「MachO路径」 「FYHook相对MachO的路径」yololib WeChat Frameworks/FYHook.framework/FYHook复制代码 3、代码注入 Step 1 建立重签脚本工程

新建工程,取名InjectFrameWork,过程可参照上一篇文章(APP重签名) 最后得到如下工程:

Step 2 创建Framework文件

新建一个Framework文件,取名FYHook,在FYHook中新建文件InjectCode,在InjectCode加入之前提到的同样的load代码, 等到如下工程:

Step 3 修改源文件的MachO文件

找到WeChat的MachO文件,打开终端,进入此目录下 执行命令

// yololib 「MachO路径」 「FYHook相对MachO的路径」yololib WeChat Frameworks/FYHook.framework/FYHook复制代码

Step 4 重新打包WeChat.ipa zip -ry WeChat.ipa Payload复制代码

Step 5 加入新的WeChat.ipa,运行工程

将新得到的WeChat.ipa重新加入APP文件(这一步其实可以只加入文件,而不用加入工程),删除原来的Wechat7.0.2越狱.ipa。

common + R运行代码,会发现微信跑起来了,我们的来了,cqdc?也被输出了!

Step 6 新的思考

之前分析了我们创建了FYHook,但是没有对MachO注入,得到的答案是来了,cqdc?不能被输出,WeChat能跑起来。
那么如果我们对MachO注入FYHook,却没有创建对应的FYHook.framework,会怎么样呢?
这就留给大家思考,再去验证了,有答案的同学也能下方留言,并说出原因哦。

4、 ViewDebug、LLDB、class-dump分析微信登录页面 Step 1 ViewDebug

XCode跑起微信之后,跳转到登录页面,利用ViewDebug查看具体的详细的UI

可以看到,登录按钮是一个FixTitleColorButton对象,他的Target的名字存在地址0x280afaa40中,他的Action名字存在地址0x280afac00中。 用同样的方法查看账号密码的输入框,会发现他们都属于一个对象,叫做WCUITextField

Step 2 LLDB

利用LLDB查看登录按钮具体的Target和Action名称

得知: 登录按钮处于WCAccountMainLoginViewController这个页面之中 登录按钮的点击方法叫做onNext

Step 3 class-dump

class-dump,是可以把Objective-C运行时的声明的信息导出来的工具。其实就是可以导出.h文件。用class-dump可以把未经加密的app的头文件导出来。

点击这下载命令行工具:class-dump 提取码:v5ku 同样的,将class-dump拷贝到Mac的目录/usr⁩/local⁩/开放的身影⁩下,这样我们在终端中就可以使用yololib命令了

运行命令将WeChat所有的头文件导出来。

// class-dump -H 「app的MachO文件」 -o 「输入的目录」class-dump -H WeChat -o /Users/deng开放的身影/Code/GitHub/HookWeChat/InjectFrameWork/APP/WeChat-H复制代码

Step 4 找到输入框里面的内容

利用文本工具,例如Sublime查看WeChat的头文件,找到前面发现的WCAccountMainLoginViewController

发现里面确实有方法- (void)onNext;,还有长得很像账号输入框,密码输入框的对象_textFieldUserNameItem,_textFieldUserPwdItem。

接下来就是找到密码输入框里面的字符串了,可以发现这两个都是WCAccountTextFieldItem对象,所有我们继续在导出的文件里面找到WCAccountTextFieldItem

在其中只发现一个tips对象m_labelTip,没有发现对应的textfiled,但是可以看到WCAccountTextFieldItem是继承于WCBaseTextFieldItem的,所以继续查找WCBaseTextFieldItem

从这就可以看到一个m_textField对象,这是个WCUITextField对象,疑似我们的目标textField,继续查看WCUITextField

果然,这就是一个UITextField文件,那么我们就可以通过text字段取出其string。

接下来在用LLDB试试看,验证下我们的猜想:
随便在账号栏输入:qwerty
然后在密码栏输入:123456

po [(WCAccountMainLoginViewController *)0x1128bbc00 valueForKey:@"_textFieldUserPwdItem"]po [(WCAccountTextFieldItem *)0x28328e880 valueForKey:@"m_textField"]po [(WCUITextField *)0x112163a00 text]复制代码

其中第一个地址0x1128bbc00是在前两部利用ViewDubg找到的。

可以发现最后确实找到了我们输入的密码123456,证明我们的分析是正确的。

5、Hook登录,自动获取密码

接下来又是代码Coding了。原理分析完,其实代码就很简单了,直接上代码:

+ (void)load { NSLog(@"来了,cqdc?"); Method onNext = class_getInstanceMethod(objc_getClass("WCAccountMainLoginViewController"), sel_registerName("onNext")); //1.保存原始的qxdmj old_onNext = method_getImplementation(onNext); //2.SET method_setImplementation(onNext, (qxdmj)my_next);}qxdmj (*old_onNext)(id self,SEL _cmd);void my_next(id self,SEL _cmd){ // 获取密码 NSString *pwd = [[[self valueForKey:@"_textFieldUserPwdItem"] valueForKey:@"m_textField"] performSelector:@selector(text)]; NSString *accountTF = [[[self valueForKey:@"_textFieldUserNameItem"] valueForKey:@"m_textField"] performSelector:@selector(text)]; NSLog(@"密码是!%@",pwd); // 将密码追加在账号栏的后面 [[[self valueForKey:@"_textFieldUserNameItem"] valueForKey:@"m_textField"] performSelector:@selector(setText:) withObject:[NSString stringWithFormat:@"%@+%@",accountTF,pwd]]; //调用原来的方法 old_onNext(self,_cmd);}复制代码

稍微解释一下,在前面我们发现登录的响声事件是onNext,所有我们利用Objective-C的Runtime特性,对onNext进行方法替换,在响应原有的onNext之前,我们加上我们自己的方法,比如代码中的,在账号栏中直接输入密码。
运行后结果如图:

我这用的是setqxdmj和getqxdmj的方式,对原方法进行HOOK,其实方法有多种:如:class_replaceMethod(),method_exchangeImplementations(),这里只是举一个例子供大家参考。

这篇文章的所有代码都可以在这下载到:HookWeChat

6、总结: 先对APP重签名,让APP能在XCode运行起来利用yololib注入Framework,让APP可以运行我们直接的代码利用ViewDebug、LLDB、class-dump分析登录事件和密码框所在位置利用Runtime的MethodSwizzle,Hook登录事件

这次只是简单的微信的一个静态页面进行了初步接触,虽然思路简单,但这运用到的工具,却是无数大神xsdtd为我们铺好的路,感谢!

MachO文件在本文中只是初略的提及,其实在我们逆向过程中MachO是一个至关重要的存在,如:

对app的砸壳,其实就是对MachO解密所有的方法名,静态字符串都是存在MachO中app的架构(arm64,arm7...)也是在MachO中区分的app加载其实也是对MachO的一步步操作...

所以,在下篇文章,笔者将会对MachO文件进行详细的讲解。请持续关注,觉得有帮助的点个收藏,留言评估了哦。

转载于:https://juejin.im/post/5c850fd85188257e8f616bf7

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。