标题: 奇葩的Adobe Flash Player安装流程
创建: 2018-05-15 12:36 更新: 2019-12-12 12:16 链接: https://scz.617.cn/windows/201805151236.txt
目录:
☆ 离线安装包的安装过程
0) 29.0.0.171版离线安装包
1) 奇葩转向
1.1) 奇葩转向停止
2) 利用PFW禁止安装包联网
3) 利用调试器禁止安装包联网
☆ 安装旧版Flash
☆ 30.0.0.154版
☆ 离线安装包的安装过程
0) 29.0.0.171版离线安装包
Firefox版
http://fpdownload.macromedia.com/get/flashplayer/pdc/27.0.0.187/install_flash_player.exe
IE版
http://fpdownload.macromedia.com/get/flashplayer/pdc/27.0.0.187/install_flash_player_ax.exe
Chrome版
http://fpdownload.macromedia.com/get/flashplayer/pdc/27.0.0.187/install_flash_player_ppapi.exe
我维护了某些常用软件的离线安装包下载链接:
https://scz.617.cn/resource/201503041155.txt
1) 奇葩转向
从中国大陆地区访问:
https://get3.adobe.com/flashplayer/update/activex/?source=2680
会被301到:
https://flash.2144.com/?activex
下面分别是不挂代理、挂代理时的情形:
$ curl --ciphers DEFAULT --compressed -ksL -I "https://get3.adobe.com/flashplayer/update/activex/?source=2680"
HTTP/1.1 301 Moved Permanently Server: AkamaiGHost Content-Length: 0 Location: https://flash.2144.com/?activex Date: Tue, 15 May 2018 02:21:47 GMT Connection: keep-alive Network_Type: Throughput: vhigh Country_Code: CN
$ curl --socks5
HTTP/1.1 200 OK Server: JRun Web Server Content-Language: en-US Content-Language: en-US Content-Type: text/html; charset=UTF-8 Vary: Accept-Encoding Content-Encoding: gzip Cache-Control: private, no-cache, no-store Date: Tue, 15 May 2018 02:23:26 GMT Content-Length: 20 Connection: keep-alive Set-Cookie: SETTINGS.LOCALE=en%5Fus; HttpOnly;domain=.adobe.com;expires=Thu, 07-May-2048 02:23:26 GMT;path=/cfusion/ Network_Type: mobile Throughput: vhigh Country_Code: XX
这还不算最奇葩的。假设挂海外代理下载了IE版离线安装包(29.0.0.171):
http://fpdownload.macromedia.com/get/flashplayer/pdc/29.0.0.171/install_flash_player_ax.exe
双击执行:
install_flash_player_ax.exe
你妹啊,居然会去访问URL:
https://get3.adobe.com/flashplayer/update/activex/?source=2680
这个行为导致默认浏览器弹出,最终转向无比垃圾的2144网站。明明有一个离线安装 包在我的面前,但无法进入正常安装流程。表面上看,不从2144下载可怕的流氓安装 包,是无法继续的。
有些阅读障碍症患者会以为本文炒冷饭,在说如何避免重定向到2144。针对这类患者, 强调一下,前面说的已经是大份的离线安装包,不是那种小份的在线安装包。
Adobe在2017年宣布,将于2020年停止开发和分发Flash浏览器插件。显然,Adobe在 此之后决定流氓一把,与中国流氓2144配合着割韭菜,能割一茬是一茬,如果用户不 爽了,正好加速Flash的消亡。
1.1) 奇葩转向停止
安装32.0.0.303时,意外发现执行离线安装包时不再进行前述奇葩转向。尽管下载离 线安装包本身仍然需要挂海外代理,但已经拥有离线安装包之后,不再需要断网再安 装。Adobe终于把恶心程度降了一点。
2) 利用PFW禁止安装包联网
bluerust发现,利用PFW禁止install_flash_player_ax.exe联网,就能正常安装。现 象是,这货试图联网,挣扎了好一会儿,发现无法成功,然后无奈地继续早期那种正 常安装流程。Win7之后的PFW都可以做这个操作,不需要第三方软件。
对普通用户而言,拔掉网线、关闭WIFI连接、禁用网卡之类的操作,也可用于此处。
部分读者看到这里可以打住了。好奇心比较强的,继续,后面介绍如何不用PFW完成 安装。
3) 利用调试器禁止安装包联网
以IE版离线安装包(29.0.0.171)为例。
用Process Monitor观察install_flash_player_ax.exe,它会创建子进程:
C:\Program Files (x86)\Internet Explorer\iexplore.exe
调用栈回溯中出现临时文件:
C:\Windows\SysWOW64\Macromed\Temp{5D9D6F03-53DF-4F79-A99A-AFBDF0B67B2E}\fpb.tmp
调用栈上出现:
install_flash_player_ax+0xc329
在IDA中能搜到"fpb.tmp",用IDA x64可以正常搜这个字符串,用IDA x86搜这个字符 串时会僵死。顺着"fpb.tmp"的交叉引用定位其所在函数:
Morpheme+0x11083
"C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\cdb.exe" -noinh -snul -hd -o -xe ld:ntdll install_flash_player_ax.exe
在cdb里install_flash_player_ax的模块名是Morpheme。
lm m Morpheme start end module name 000d0000 0143c000 Morpheme (deferred) bp Morpheme+0x11083 g
断点命中时查看调用栈回溯:
Morpheme+0x11083: 000e1083 55 push ebp
kpn # ChildEBP RetAddr 00 0174ea94 000d3600 Morpheme+0x11083 01 0174eafc 000d19e4 Morpheme+0x3600 02 0174eb10 000d1a0a Morpheme+0x19e4 03 0174ec94 000fa563 Morpheme+0x1a0a 04 00000000 00000000 Morpheme+0x2a563
栈顶的函数引用了"fpb.tmp"。在IDA中用F5简单看了看各层函数,在0x000d19e4低址 方向看到如下代码:
ub 0x000d19e4 Morpheme+0x19cd: 000d19cd 80bd9c00000000 cmp byte ptr [ebp+9Ch],0 000d19d4 7413 je Morpheme+0x19e9 (000d19e9) 000d19d6 2bc6 sub eax,esi 000d19d8 d1f8 sar eax,1 000d19da 50 push eax 000d19db 56 push esi 000d19dc 8b4d84 mov ecx,dword ptr [ebp-7Ch] 000d19df e85bfeffff call Morpheme+0x183f (000d183f)
F5看到的是:
sub_D18E5 () { ... if ( a4 ) { / * 不要让流程进入该函数 / sub_D183F( ... ); return( a2 ); } ... }
我开了个脑洞,在调试器里动态Patch,让a4恒为0:
"C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\cdb.exe" -noinh -snul -hd -o -g -G -xi ld -xe cpr -c "bu Morpheme+0x19cd \"eb @ebp+0x9c 0;gc\";g" install_flash_player_ax.exe
选中"Morpheme+0x19cd",纯粹是感觉,并不知道a4的本来涵义,只是简单地不想让 流程进入sub_D183F(),避免与"fpb.tmp"产生交集。
这次不会试图访问:
https://get3.adobe.com/flashplayer/update/activex/?source=2680
于是也不会转去2144。安装结束时会碰上错误提示:
C:\Windows\system32\Macromed\Temp{03F4A992-6C51-4267-9A65-70368217B047}\InstallFlashPlayer.exe
不支持该请求。
然后告诉你,安装遇到错误,请访问如下链接以获取帮助:
https://helpx.adobe.com/cn/flash-player/kb/installation-problems-flash-player-windows.html https://helpx.adobe.com/flash-player/kb/installation-problems-flash-player-windows.html
不要理它们,实际上Flash已经安装成功,"添加删除"里有,用IE实测Flash有效。
试了一下,静态Patch也可以:
$ fc /b old new 00000160: C7 C1 00000161: 67 D8 00000162: 37 36 00000DD4: 74 EB
实际只Patch了1个字节,把jz变成jmp。
☆ 安装旧版Flash
有时因故需要安装旧版Flash,比如29.0.0.140版,此时官方最新版是29.0.0.171。 你会碰上错误提示:
安装错误
您尝试安装的Adobe Flash Player版本不是最新版本,请访问Player下载中心获取最 新、最安全的版本。
这是如下注册表项惹的祸:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Macromedia\FlashPlayer\SafeVersions] "6.0"=dword:ffffffff "7.0"=dword:ffffffff "8.0"=dword:ffffffff ... "28.0"=dword:ffffffff "29.0"=dword:000000ab
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Macromedia\FlashPlayer\SafeVersions] "6.0"=dword:ffffffff ... "29.0"=dword:000000ab
0xab就是171,表示当前官方最新版是29.0.0.171,小于这个数的旧版无法正常安装。 只需要手工修改这个数,就可以安装旧版Flash。
reg add "HKLM\SOFTWARE\Macromedia\FlashPlayer\SafeVersions" /v "29.0" /t REG_DWORD /d 140 /f reg query "HKLM\SOFTWARE\Macromedia\FlashPlayer\SafeVersions" /v "29.0"
reg add "HKLM\SOFTWARE\Wow6432Node\Macromedia\FlashPlayer\SafeVersions" /v "29.0" /t REG_DWORD /d 140 /f reg query "HKLM\SOFTWARE\Wow6432Node\Macromedia\FlashPlayer\SafeVersions" /v "29.0"
实际起作用的是Wow6432Node下的SafeVersions。
Archived Flash Player versions https://helpx.adobe.com/flash-player/kb/archived-flash-player-versions.html
Uninstall Flash Player For Windows https://helpx.adobe.com/flash-player/kb/uninstall-flash-player-windows.html https://fpdownload.macromedia.com/get/flashplayer/current/support/uninstall_flash_player.exe
我猜官方的"uninstall_flash_player.exe -uninstall"会处理SafeVersions。顺便 看了一眼Flash涉及的目录:
C:\Windows\System32\Macromed\Flash\ C:\Windows\SysWOW64\Macromed\Flash\ %appdata%\Adobe\Flash Player\ %appdata%\Macromedia\Flash Player\
☆ 30.0.0.154版
Firefox版
http://fpdownload.macromedia.com/get/flashplayer/pdc/30.0.0.154/install_flash_player.exe
IE版
http://fpdownload.macromedia.com/get/flashplayer/pdc/30.0.0.154/install_flash_player_ax.exe
Chrome版
http://fpdownload.macromedia.com/get/flashplayer/pdc/30.0.0.154/install_flash_player_ppapi.exe
假设已翻墙下载了上述正常版本,非2144流氓版本。假设已经通过断网安装绕过了 2144,但运行时会提示:
此Flash Player与您的地区不相容,请重新安装Adobe Flash Player
显然,相比29.0.0.171,30.0.0.154多了一些流氓动作。有次听zyh说,TK在微博上 讲过这事,所以后来我一直在用29.0.0.171,没有升级。今天不知怎么想的,手工升 级后果然碰上幺蛾子。
如果回滚至29.0.0.171版,就没有锁区提示,但我想用30.0.0.154版。本想自己逆向 后剁之,眼珠一转,这事出来这么久,肯定有成熟解决方案,放狗。有人提供静态 Patch过的DLL,当然是针对几个特定版本的。假设这些Patch过的版本有适用于你的, 你又有洁癖,可以自己下回来"fc /b"再IDA看一下。放狗时没看到适用于我的版本, 倒是找到一个不用静态Patch的方案,亲测有效:
$ notepad c:\windows\system32\drivers\etc\hosts
在hosts文件中增加
127.0.0.1 geo2.adobe.com
$ notepad %APPDATA%\Macromedia\Flash Player\macromedia.com\support\flashplayer\sys\settings.sol
settings.sol不是文本文件,但我们要干的事用notepad就可以完成。假设你已经碰 上锁区提示,在settings.sol中肯定能搜到uciCountryCode,它后面有个CN,把CN改 成EN。
做完上述两步,关闭浏览器,重新打开浏览器,播放Flash时不再出现锁区提示。
同时做这两步是充分非必要的,有些人可能只做其中一步就没事了,那随你,但我建 议同时做这两步。
geo2.adobe.com用于判定浏览器所在区域,修改hosts使得无法进行这种判定。
settings.sol中的uciCountryCode就是记录下来的浏览器所在区域,只锁CN。
用notepad编辑settings.sol达成目的没有问题,如果你很好奇,可以用这个工具查 看:
https://sourceforge.net/projects/soleditor/ https://downloads.sourceforge.net/project/soleditor/soleditor/Version%201.1.0.1/SolEditInstall.exe
有人会说Flash已被废,跟本文不冲突,HTML5离一统江湖还有些时日,伪上帝们还是 一边凉快去。
要点有四,挂代理从官网下载安装包、修改hosts、断网安装、修改settings.sol。 Adobe要到站了,它和2144一起耍流氓的心情我能理解,59岁开始犯错误的前好同志 们,这是人性。
32.0.0.223版处理办法同上。