标题: 奇葩的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 : --ciphers DEFAULT --compressed -ksL -I "https://get3.adobe.com/flashplayer/update/activex/?source=2680" 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版处理办法同上。