2016年6月10日编辑:此方法仅适用于迅雷2.6.0,更高级版本增加了保护措施,如果大家感兴趣,可以看看这个回复和这个帖子。
闲言不表,开门见山
定位Mac迅雷的可执行文件
snakeninnys-iMac:~ snakeninny$ ls /Applications/Thunder.app/Contents/MacOS
Thunder libetm.dylib libiniparser.dylib
如果你的迅雷也是放在了/Applications
下,那么可执行文件的位置应该跟上面一样
用Hopper分析可执行文件
定位要修改的函数
可执行文件尺寸不大,Hopper很快就可以完成对它的分析。在Label搜索栏中输入“ is”(注意,是“空格is”),在搜索结果中,找到如图所示的4个方法:
它们分别是
1. -[LocalTask isValidLixianTask]
2. -[UserController isVip]
3. -[UserController isPlatinum]
4. -[UserController isDiamond]
用Hopper静态patch这4个方法
首先patch-[LocalTask isValidLixianTask]
:
把鼠标焦点放在-[LocalTask isValidLixianTask]
的第一行汇编代码上,然后选择Hopper菜单栏的Modify → Assemble Instruction,并在弹出的文本框里输入mov eax, 0x1
,如图所示:
然后点击“Assemble and Go Next”,再在文本框里输入
ret
。patch之后的-[LocalTask isValidLixianTask]
长这样:为什么要这么patch呢?简单解释一下:在x86汇编里,函数的返回值存放在eax寄存器里。1对应BOOL类型的YES,因此我们的patch让
-[LocalTask isValidLixianTask]
永远返回YES,告诉迅雷这是一个有效的离线任务 同理,用完全相同的输入来patch掉另外的3个方法,即把它们的前2条汇编指令都改成
mov eax, 0x1
和ret
,修改结果如图所示:用Hopper生成一个patch过的新可执行文件
在Hopper的菜单里选择File → Produce New Executable…,然后在弹框中选择YES,即可生成一个新的Thunder文件。用这个新的Thunder替换掉原来的/Applications/Thunder.app/Contents/MacOS/Thunder,然后重启迅雷,看看效果:
打完收工