吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 46134|回复: 97
收起左侧

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

  [复制链接]
backtrace 发表于 2015-7-23 08:50
本帖最后由 backtrace 于 2015-7-30 11:53 编辑

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

QQ20150723-2.png

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

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


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

QQ20150730-3.png

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

勾选中图示中的地方

QQ20150730-5.png

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

QQ20150730-6.png

然后关闭fuzzy search,继续搜索 LoginViewController(搜索与登录视图有关),整理后得出以下几个视图
LoginViewController
USBLoginViewController
QRCodeLoginViewController
AutoAuthLoginViewController

既然默认加载的是QRCodeLoginViewController视图,那么直接选中-[QRCodeLoginViewController loadView] 函数,在函数起始处没有看到调用关系,直接在函数首尾处下两个断点

QQ20150730-11.png


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

QQ20150730-8.png

QQ20150730-9.png


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

QQ20150730-10.png


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

QQ20150730-14.png

程序执行了到此处

QQ20150730-15.png

按图示中的方式点击,跳到函数起始处
QQ20150730-16.png

QQ20150730-17.png

可以看到-[QRCodeLoginViewController loadView]是在 -[LoginWindowController showQRCodeView]函数中被调用的。进而可以推断,加载QRCodeView的逻辑是在LoginWindowController类中。

继续单步跟踪,一直执行到函数末尾,函数直接跳入了内存领空

QQ20150730-19.png

QQ20150730-20.png

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

QQ20150730-22.png

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

QQ20150730-23.png

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

点击下右上角的反编译功能,查看下源码
QQ20150730-24.png

QQ20150730-25.png

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



在左侧搜索 LoginWindowController show,看看有哪些登录界面的显示函数
QQ20150730-18.png

从字面意思上可以推断 -[LoginWindowController showPasswordLoginView] 就是要找的普通账号密码登录方式的调用函数。


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


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


QQ20150723-3.png

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

确定了关键点,这就开工

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

需要将图中的汇编代码改为 mov rsi, qword [ds:0x100a82618],但是直接在此处编辑,得到的结果却是图中的错误结果
QQ20150730-26.png
这个应该是hopper的一个bug,所以只能通过修改16进制的方式来修改程序逻辑。



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


由于hopper对于图中的调用没办法直接修改成预期的结果,所以得通过hopper的Hex Editor来修改
0187EB70-C538-4B99-BF71-5488719C821E.png


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


692CD4F8-EA31-4178-B223-EF655BE9DD04.png


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

QQ20150723-4.png

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

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

QQ20150723-5.png

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







免费评分

参与人数 21威望 +2 吾爱币 +1 热心值 +21 收起 理由
厚道 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
qwerttqqaz + 1 我很赞同!
xhily + 1 牛逼大神带我飞
吾爱-爱吾 + 1 必须赞!!!
1485573943 + 1 我很赞同!
q3212831 + 1 会不会分分钟冻结呢
waiwaizhangh + 1 我很赞同!
李智乐乐 + 1 666 win版的可以修改不
y421076373 + 1 666666666666666666
adsl7865644 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
盛夏的剩下 + 1 666666
showking + 1 我很赞同!
a5112075 + 1 谢谢@Thanks!
阳光鸣鸣 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
HoS + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
星痕之痛 + 1 我很赞同!
Hmily + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
wskige + 1 我很赞同!
zero000 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
Programmer + 1 我很赞同!
guantxq + 1 鼓励转贴优秀软件安全工具和文档!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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 [ds:0x100a7ce28] ;@selector(showQRCodeView)  //此处对应的16进制代码为 488B35EDE88D00,这里要对这个16进制代码进行反序,即0x008DE8ED,一般来说,相对偏移和实际偏移的差值是固定的,即这个值是固定的 0x100a7ce28 - 0x008DE8ED

而我们要改成如下的这个效果
mov        rsi, qword [ds:0x100a82618] ;@selector(showPasswordLoginView)

所以就转换成了求等式的方式
x = 0x008E40DD ,在修改16进制时,同样需要反序,最后的修改方式就成图中的那样的了
hubiancao2009 发表于 2015-7-23 08:55
头像被屏蔽
愤怒男孩 发表于 2015-7-23 09:07
感觉很牛逼,非常期待楼主的分享
kalilinux 发表于 2015-7-23 17:23
楼主威武,微信要是升级了,可能又要重新破解了
whisky 发表于 2015-7-23 19:21
赞一个,不错的啊。MAC用户就不用扫码了
 楼主| backtrace 发表于 2015-7-24 20:11
黑科技 发表于 2015-7-24 20:24
好教程 学习下 丰富下自己的知识{:1_912:}
leixin821792669 发表于 2015-7-24 21:23 来自手机
楼主,能破一个mac迅雷的高速通道吗?感觉这个需求量更大
redapple0204 发表于 2015-7-25 09:03
支持!其实老版本的也可以
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 04:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表