Ummy Video Downloader 1.42 爆破
本帖最后由 c_null 于 2016-6-26 01:49 编辑最近周杰伦发了新的专辑《床边的故事》
身边有个杰迷花了20块钱买了QQ音乐的电子音乐版权,炫耀到不行。他个B还分享到微信里,感觉就好像我们点开就能听了一样。科科。
突然想到,我们还有水管的福利。一搜,果然有这张专辑,水管地址:https://www.youtube.com/watch?v=wxdl5wF-gX4
以前我下载水管视频用的是一个网站:http://en.savefrom.net/1-how-to-download-youtube-video/
在这个网站输入水管视频网页地址就可以下载了,但是对于这种音频不能直接下载mp3格式,而是要用网站推荐的工具Ummy Video Downloader
http://en.savefrom.net/img/articles/youtube_com/ummy_en.png
下载下来之后发现收费了。价格还挺贵的。
实在是想搞,再群里发出来之后,得到大神关注。得到神器Hopper
用Hopper导入可执行文件,文件所在目录如下
导入之后搜索License,找到verifyLicenseKey:forName函数,下端动态调试
关注这个函数的调用,10000645d,查看调用处的伪代码
rsi = @selector(verifyLicenseKey:forName:);
LOBYTE(r13) = LOBYTE();
rdi = rbx;
rbx = *objc_release;
;
;
r12 = rbx;
if (LOBYTE(r13) != 0x0) {
if (LOBYTE(var_3C) != 0x0) {
rdi = *_dispatch_main_q;
rbx = var_30;
rsi = rbx;
dispatch_async(rdi, rsi);
r15 = var_38;
}
else {
rbx = var_30;
(*(rbx + 0x10))(rbx);
r15 = var_38;
}
}
else {
if (LOBYTE(var_3C) != 0x0) {
rdi = *_dispatch_main_q;
r15 = var_38;
rsi = r15;
dispatch_async(rdi, rsi);
}
else {
r15 = var_38;
(*(r15 + 0x10))(r15);
}
rbx = var_30;
}
Verify函数的返回值跟0进行比较,Debug继续走,没注册时返回值是0,推断出非0的返回值是已注册
继续分析verify函数的返回值通过rax传递
rbx = *objc_release;
;
;
if (r12 == var_30) {
LODWORD(rax) = sign_extend_64(LOBYTE(r15));
return rax;
}
else {
rax = __stack_chk_fail();
}
return rax;
修改函数头部,使用rax寄存器的最低一个字节al传值
-:
0000000100059dc3 mov al, 0x1
0000000100059dc5 ret
0000000100059dc6 db0xe5 ; '.'
0000000100059dc7 push r15
0000000100059dc9 push r14
整理代码,重新调试,改完这个地方之后程序已经注册了。
mp3可以下载了
下载附件,替换Contents/MacOS/Ummy Video Downloader文件即可,原文件不要忘记备份。
支持了,感谢 学习了,感谢 感谢楼主分享。。。。。。。。。。。。。 谢谢分享了! 这需求!杰米以后会赖上你的,:D 牛逼,支持 感谢发布原创作品~ 继续努力~
页:
[1]