快捷搜索:

窃取微信密码

2019-10-11 作者:2019精准正版资料   |   浏览(76)

接纳LLDB对微信张开深入分析,然后使用分析的结果,再稳步疏解怎么着Hook微信的记名进度,截获微信密码。

在上一篇小说中,已经介绍了什么样对应用软件重具名,而且利用XCode将微信跑起来,既然到了这一步,就万万不可能错失强盛的LLDB。那篇小说就讲为我们讲授到如何利用LLDB对微信展开分析,然后选拔剖判的结果,再逐月讲明怎样Hook微信的报到进度,截获微信密码。

惯例,片头先给方便人民群众:点击下载德姆o:HookWeChat,此番有两份代码。由于越狱版微信容量太大,受到github限制,所以并未将它传到github,能够在凡尘链接单独下载

文中所要求选用的工具和文书:越狱版本微信7.0.2 提取码: 2w87MachOView 提取码: n3hyyololib 提取码:e8qsclass-dump 提取码:v5ku

接下去大家会从一下几部,让微信脱下看似安全的糖衣,裸露在豪门前边。

  • Framework的作用
  • 初探MachO
  • 代码注入
  • ViewDebug、LLDB、class-dump深入分析微信登入页面
  • Hook登陆,自动获得密码
  • 总结

什么样是Framework这里就十分的少加陈说,笔者参谋这几个网址,非常详尽,看不懂你一向@笔者。点这里:Framework最强讲明

废话十分少说,接下去直接演示如何创造贰个Framework,何况介绍跟咱们Hook微信有关的根基原理。

新建二个工程Framework德姆o,新建二个Framework,取名FYHook

图片 1创建Framework.png图片 2创建Framework.png

在新建出来的FYHook文件夹中新建InjectCode(承袭NSObject)对象,而且新建代码:

+ load { NSLog;}

图片 3新建InjectCode.png

一向运转,会意识来了,老弟被输出,表明用这种办法新建的Framework能够一直运行在大家的品种中。

图片 4NSLog字符串.png

依赖上篇作品APP重具名讲到的,大家可以接纳XCode将微信跑起来,那么是或不是将两方结合起来,就能够将大家的代码注入进微信的APP呢?

基于APP重具名中的结论,利用脚本能够省事重签APP(因为大家用的WeChat比方,所以上边简称WeChat),那么我们在重签脚本的工程中,直接开立二个Framework,能或无法让大家Framework中的代码在WeChat中运行?

很显眼,那是十分的(风乐趣的能够试一下)!为何?那一个标题上边会回复,先把这几个难点记在心尖。

在我们用XCode新建HYHook的时候,其实XCode帮大家做了一部操作:创造HYHook时候,同不经常候将HYHook链接到大家的类别中(那是早先时期的XCode新添作用,早年的XCode这一步是内需我们一向做的)

图片 5XCode自动链接.pngcommon+b Build一下,会发觉在曾经Build出来的文本中的Frameworks下已经有FYHook了,已经已经申明FYHook被Copy大家的ipa文件了。(怎样看Build出来的文件?查看:APP重签字中Step 8 App重签字)图片 6自行走入Frameworks已经MachO文件.png可是FYHook在ipa文件中,并不意味着着FYHook就足以被大家的可施行文件所实行,因为FYHook并从未没导报入大家的可施行文件,只有在这里个有效推行文书的某一个地方做好标识,告知可推行文件,在适龄的时候须要加载外界的FYHook,手艺够健康运维。

而以此地点所说的可实行文件就是MachO文本(具体怎么是MachO,那不是本片作品的重大内容,能够穿梭关怀笔者之后的稿子,下一章详细介绍那关键的MachO),我们能够应用工具MachOView来查看MachO中到底有啥样内容。

图片 7MachOView.png点击这里下载:MachOView 提取码: n3hy

用MachOView张开Framework德姆o的MachO,可以阅览如下图

图片 8查看MachO.png

可以看来里边的有个Load Commons组,那其间就包含富有须要被动态加载的库。也正是说,假若在Load Commons中绝非相应的FYHook,就不会加载FYHook。

在上海体育地方中能够看来FYHook已经被投入了Load Commons,何况图左侧也标记了FYHook所属的目录(和MachO文件同级的Frameworks下FYHook.framework中 ,FYHook.framework其实是个公文夹,里面包车型地铁FYHook也是个MachO

因此这里就获得了「为啥大家一向将FYHook参与大家的从重签脚本工程,不能够直接运营FYHook」的答案。因为在在大家Build出来的MachO文件中的Load Commons中尚无步入FYHook的门径。所以不可能运转FYHook中的代码。

那么我们直接将FYHook参加大家Build出的MachO文件行啊?鲜明也是特别的,因为大家Build出的MachO文件始终会被原始包中的MachO给替换掉。大家须要将FYHook参预原始包中的MachO中。

这里大家就要求用到终点命令行工具:yololib 提取码:e8qs

将下载下来的yololib.zip解压后收获的yololib放在‎⁨目录/usr⁩/local⁩/bin⁩下,那样我们在极端中就足以行使yololib命令了

图片 9yololib.png

以下命令便是将FYHook注入WeChat的吩咐

// yololib 「MachO路径」 「FYHook相对MachO的路径」yololib WeChat Frameworks/FYHook.framework/FYHook

新建工程,取名InjectFrameWork,进程可参考上一篇小说最终取得如下工程:

图片 10重签工程.png

新建二个Framework文件,取名FYHook,在FYHook中新建文件InjectCode,在InjectCode参与以前涉嫌的等同的load代码,等到如下工程:

图片 11创建Framework.png

找到WeChat的MachO文件,展开终端,步向此目录下实施命令

// yololib 「MachO路径」 「FYHook相对MachO的路径」yololib WeChat Frameworks/FYHook.framework/FYHook

图片 12yololib注入成功.png

zip -ry WeChat.ipa Payload

图片 13重新打包WeChat.ipa.png

将新收获的WeChat.ipa重新加入应用软件文件(这一步其实可以只参Gavin件,而不用投入工程),删除原本的Wechat7.0.2越狱.ipa。

图片 14新WeChat.ipa.png图片 15新WeChat.ipa-2.png

common + R运营代码,会开掘微信跑起来了,大家的来了,老弟也被输出了!

前边剖析了大家创制了FYHook,不过没有对MachO注入,获得的答案是来了,老弟不能够被输出,WeChat能跑起来。那么只要大家对MachO注入FYHook,却不曾开创对应的FYHook.framework,会怎么样啊?那就留下我们想想,再去注脚了,有答案的校友也能下方留言,并讲出原因哦。

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

图片 16ViewDebug.png

能够见见,登入按钮是贰个FixTitleColorButton对象,他的Target的名字存在地址0x280afaa40中,他的Action名字存在地址0x280afac00中。用同样的办法查看账号密码的输入框,会开掘她们都属于叁个对象,叫做WCUITextField

图片 17账号输入框WCUITextField.png

采用LLDB查看登陆按键具体的Target和Action名称

图片 18LLDB查看Target和Action.png

获悉:登陆开关处于WCAccountMainLoginViewController那几个页面之中登入开关的点击方法叫做onNext

class-dump,是足以把Objective-C运营时的扬言的音讯导出来的工具。其实便是足以导出.h文件。用class-dump能够把未经加密的app的头文件导出来。

点击那下载命令行工具:class-dump 提取码:v5ku同样的,将class-dump拷贝到Mac的目录/usr⁩/local⁩/bin⁩下,那样大家在终极中即可运用class-dump命令了

图片 19class-dump目录.png

运行命令将WeChat全数的头文件导出来。

// class-dump -H 「app的MachO文件」 -o 「输入的目录」class-dump -H WeChat -o /Users/dengbin/Code/GitHub/HookWeChat/InjectFrameWork/APP/WeChat-H

图片 20class-dump.png图片 21WeChat-H.png

利用文本工具,举个例子Sublime查看WeChat的头文件,找到前边开采的WCAccountMainLoginViewController

图片 22WCAccountMainLoginViewController.png

发觉里面确实有方法- onNext;,还会有长得很像账号输入框,密码输入框的指标_textFieldUserNameItem,_textFieldUserPwdItem

接下去就是找到密码输入框里面包车型地铁字符串了,能够窥见那五个都以WCAccountTextFieldItem对象,全数我们承接在导出的文本之中找到WCAccountText菲尔德Item

图片 23WCAccountTextFieldItem.png

在里边只开采贰个tips对象m_labelTip,未有发觉对应的textfiled,可是足以看到WCAccountTextFieldItem是一连于WCBaseTextFieldItem的,所以三番五次查找WCBaseText菲尔德Item

图片 24WCBaseTextFieldItem.png

从那就足以看看贰个m_textField对象,那是个WCUITextField对象,疑似大家的靶子textField,继续翻看WCUITextField

图片 25WCUITextField.png

果不其然,那便是三个UITextField文件,那么我们就可以通过text字段抽取其string。

接下去在用LLDB试试看,验证下我们的推测:随意在账号栏输入:qwerty然后在密码栏输入:123456

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

当中第七个地址0x1128bbc00是在前两部动用ViewDubg找到的。

图片 26找到输入的密码.png

能够开掘最后真的找到了我们输入的密码123456,表明我们的剖析是无可置疑的。

接下去又是代码Coding了。原理解析完,其实代码就很简短了,直接上代码:

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

稍稍解释一下,在头里大家开采登陆的响声事件是onNext,全体大家运用Objective-C的Runtime性情,对onNext实行形式替换,在响应原有的onNext在此之前,大家抬高大家和煦的主意,比如代码中的,在账号栏中央直属机关接输入密码。运维后结果如图:

图片 27运作结果.PNG

自家那用的是setIMP和getIMP的法子,对原方法开展HOOK,其实方法有三种:如:class_replaceMethod(),method_exchangeImplementations(),这里只是举多少个事例供大家仿效。

那篇作品的有着代码都得以在这里下载到:HookWeChat

  • 先对应用软件重签字,让应用程式能在XCode运行起来
  • 采纳yololib注入Framework,让APP可以运营大家直接的代码
  • 动用ViewDebug、LLDB、class-dump分析登入事件和密码框所在地点
  • 应用Runtime的MethodSwizzle,Hook登入事件

此次只是简短的微信的一个静态页面进行了始于接触,纵然思路轻巧,但那运用到的工具,却是无数大神前辈们为我们铺好的路,多谢!

MachO文件在本文中只是初略的聊到,其实在大家逆向进程中MachO是贰个最重要的存在,如:

  • 对app的砸壳,其实正是对MachO解密
  • 有着的诀窍名,静态字符串都以存在MachO中
  • app的架构(arm64,arm7...)也是在MachO中分裂的
  • app加载其实也是对MachO的一步步操作
  • ...

故而,在下篇作品,作者将会对MachO文件进行详细的传授。请持续关怀,感觉有救助的点个收藏,留言激励哦。

警告!非越狱状态,玩逆向微信不要真的登陆,有被警示乃至封号危机

本文由正版香港马报免费资料发布于2019精准正版资料,转载请注明出处:窃取微信密码

关键词: