backtrace 发表于 2015-7-23 08:50

修改Mac版微信客户端使其支持账号密码方式登录

本帖最后由 backtrace 于 2015-7-30 11:53 编辑

最近Mac App Store提示更新了新版的微信客户端,打开之后,却发现只有扫码登录这一种登录方式了



这对平时习惯用账号密码方式登录微信客户端的用户来说造成了很大困扰。

所以试着用Hopper载入了微信,看看能否通过修改的方式找回原来的账号密码登录方式{:1_896:}
按照惯例,先在左侧搜索下有没有登录流程相关的处理过程,在搜索栏输入login



可以看到出现了很多搜索结果,但是无关的搜索结果太多,所以需要进一步定位。因为打开Mac版微信,直接展示出来的是二维码扫描界面,而二维码在编程中一般习惯写成qrcode,所以再继续搜索下qrcode



可以看到,比搜索login出来的结果少了很多,但依然有不少无关的搜索结果。这时可以利用hopper的fuzzy search功能取搜索结果的交集


勾选中图示中的地方



再看下搜索结果,无关的信息大量减少,主要注意下被红框圈中的地方



然后关闭fuzzy search,继续搜索 LoginViewController(搜索与登录视图有关),整理后得出以下几个视图
LoginViewController
USBLoginViewControllerQRCodeLoginViewControllerAutoAuthLoginViewController
既然默认加载的是QRCodeLoginViewController视图,那么直接选中- 函数,在函数起始处没有看到调用关系,直接在函数首尾处下两个断点




然后打开hopper调试器 Debug -> Open Debugger Panel...



点击运行后,程序在断点处停了下来


继续执行,跳到函数末尾处后进行单步调试



程序执行了到此处



按图示中的方式点击,跳到函数起始处

可以看到-是在 -函数中被调用的。进而可以推断,加载QRCodeView的逻辑是在LoginWindowController类中。
继续单步跟踪,一直执行到函数末尾,函数直接跳入了内存领空


一直点击step out,直到程序跳回程序领空中后,在此处停了下来。0x00000001000025e6mov rdi, qword 继续执行,程序直接运行跑飞了{:1_908:}说明关键的登录视图调用过程已经错过了。继续调试,看看 -是在哪里被调用的。
在图中的地方下断点,然后再次在调试器中执行。在图中断点处停下后,查看下调用堆栈,就能直接跳转到调用的父函数

双击堆栈前的地址后,程序显示如图

(ps:其实在上一步中就能直接用查看调用堆栈的方式快速找到父函数,这里舍近求远主要是为了向不熟悉hopper的朋友演示下如何从内存领空跳回到程序领空)
点击下右上角的反编译功能,查看下源码

这里就是我们要找的关键点了。


在左侧搜索 LoginWindowController show,看看有哪些登录界面的显示函数
从字面意思上可以推断 - 就是要找的普通账号密码登录方式的调用函数。

在hopper中搜索下@selector(showPasswordLoginView),可以发现 showPasswordLoginView的引用在 0x100a82618 @selector(showPasswordLoginView)

分析过程到此结束,下面开始修改程序验证下猜想是否正确。



综合前面的分析可以知道,在调用过程中,直接指定了扫二维码的登录方式,而普通的登录方式并未在代码中删除,所以可以通过修改图中的关键点的调用让账号密码的登录方式重新显示

确定了关键点,这就开工

//关键代码如下
mov      rsi, qword ;@selector(showQRCodeView)//此处对应的16进制代码为 488B35EDE88D00
mov      rsi, qword ;@selector(showPasswordLoginView)

需要将图中的汇编代码改为 mov rsi, qword ,但是直接在此处编辑,得到的结果却是图中的错误结果

这个应该是hopper的一个bug,所以只能通过修改16进制的方式来修改程序逻辑。



通过计算可以得知
0x100a82618 - 0x100a7ce28 = x - 0x8DE8ED
x = 0x8E40DD


由于hopper对于图中的调用没办法直接修改成预期的结果,所以得通过hopper的Hex Editor来修改



将图中标注的地方修改成DD 40 8E





然后通过 File -> Produce New Executable... 来保存刚才修改的文件,现在再来运行一下微信



久违的账号密码登录方式又出现了{:1_912:}

再试下登录,可以正常登录



搞定收工{:301_988:}
成品下载:http://www.52pojie.cn/thread-390100-1-1.html







wskige 发表于 2015-7-27 00:26

WINDOS的能改吗

backtrace 发表于 2016-11-3 13:18

cjhm 发表于 2016-11-3 11:23
感谢分享教程,小白有个地方不大懂,想请解答下   
通过计算可以得知
0x100a82618 - 0x100a7ce28 = x -...

这么变换下,可能更好理解些
0x100a82618 - x = 0x100a7ce28 - 0x008DE8ED

mov      rsi, qword ;@selector(showQRCodeView)//此处对应的16进制代码为 488B35EDE88D00,这里要对这个16进制代码进行反序,即0x008DE8ED,一般来说,相对偏移和实际偏移的差值是固定的,即这个值是固定的 0x100a7ce28 - 0x008DE8ED

而我们要改成如下的这个效果
mov      rsi, qword ;@selector(showPasswordLoginView)

所以就转换成了求等式的方式
x = 0x008E40DD ,在修改16进制时,同样需要反序,最后的修改方式就成图中的那样的了

hubiancao2009 发表于 2015-7-23 08:55

支持楼主   貌似很厉害{:301_993:}

愤怒男孩 发表于 2015-7-23 09:07

感觉很牛逼,非常期待楼主的分享{:301_993:}

kalilinux 发表于 2015-7-23 17:23

楼主威武,微信要是升级了,可能又要重新破解了

whisky 发表于 2015-7-23 19:21

赞一个,不错的啊。MAC用户就不用扫码了

backtrace 发表于 2015-7-24 20:11

在这里下载http://www.52pojie.cn/thread-390100-1-1.html

黑科技 发表于 2015-7-24 20:24

好教程 学习下 丰富下自己的知识{:1_912:}

leixin821792669 发表于 2015-7-24 21:23

楼主,能破一个mac迅雷的高速通道吗?感觉这个需求量更大

redapple0204 发表于 2015-7-25 09:03

支持!其实老版本的也可以
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 修改Mac版微信客户端使其支持账号密码方式登录