2020-02-11 20:35:13 +08:00
<!DOCTYPE html>
< html lang = "zh-CN" class = "loading" >
< head >
<!-- hexo - inject:begin --> <!-- hexo - inject:end --> < meta charset = "UTF-8" / >
< meta http-equiv = "X-UA-Compatible" content = "IE=edge,chrome=1" / >
< meta name = "viewport" content = "width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" >
< title > 卸载浪潮安装的 IP-GUARD 监控软件 - Blog< / title >
< meta name = "apple-mobile-web-app-capable" content = "yes" / >
< meta name = "apple-mobile-web-app-status-bar-style" content = "black-translucent" >
< meta name = "google" content = "notranslate" / >
< meta name = "keywords" content = "Developer, Python, C++, JavaScript, Java," >
2020-02-22 14:53:35 +08:00
< meta name = "description" content = "DavidZ's Blog ,
原创发表于 DavidZ Blog, 遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接及本声明。
2020-02-13 20:39:56 +08:00
2020-02-22 14:53:35 +08:00
¶前言
2020-02-11 20:35:13 +08:00
2020-02-22 14:53:35 +08:00
屋漏更遭连夜雨,船迟又遇打头风。
2020-02-11 20:35:13 +08:00
2020-02-22 14:53:35 +08:00
刚刚处理完 Docker 里面,">
2020-02-11 20:35:13 +08:00
< meta name = "author" content = "DavidZ" >
< link rel = "alternative" href = "atom.xml" title = "Blog" type = "application/atom+xml" >
< link rel = "icon" href = "/img/favicon.png" >
< link href = "https://fonts.loli.net/css?family=Roboto+Mono|Rubik&display=swap" rel = "stylesheet" >
< link rel = "stylesheet" href = "//at.alicdn.com/t/font_1429596_nzgqgvnmkjb.css" >
< link rel = "stylesheet" href = "//cdn.bootcss.com/animate.css/3.7.2/animate.min.css" >
2020-02-13 21:45:16 +08:00
< link rel = "stylesheet" href = "//cdn.bootcss.com/social-share.js/1.0.16/css/share.min.css" >
2020-02-11 20:35:13 +08:00
< link rel = "stylesheet" href = "//cdn.bootcss.com/codemirror/5.48.4/codemirror.min.css" >
< link rel = "stylesheet" href = "//cdn.bootcss.com/codemirror/5.48.4/theme/dracula.css" >
< link rel = "stylesheet" href = "/css/obsidian.css" >
< link rel = "stylesheet" href = "/css/ball-atom.min.css" >
< meta name = "generator" content = "Hexo 4.2.0" > <!-- hexo - inject:begin --> <!-- hexo - inject:end --> < / head >
< body class = "loading" >
<!-- hexo - inject:begin --> <!-- hexo - inject:end --> < div class = "loader" >
< div class = "la-ball-atom la-2x" >
< div > < / div >
< div > < / div >
< div > < / div >
< div > < / div >
< / div >
< / div >
< span id = "config-title" style = "display:none" > Blog< / span >
< div id = "loader" > < / div >
< div id = "single" >
< div class = "scrollbar gradient-bg-rev" > < / div >
< div id = "top" style = "display: block;" >
< div class = "bar" style = "width: 0;" > < / div >
< div class = "navigation animated fadeIn fast delay-1s" >
< img id = "home-icon" class = "icon-home" src = "/img/favicon.png" alt = "" data-url = "https://blog.davidz.cn" >
< div id = "play-icon" title = "Play/Pause" class = "iconfont icon-play" > < / div >
< h3 class = "subtitle" > 卸载浪潮安装的 IP-GUARD 监控软件< / h3 >
< div class = "social" >
<!-- <div class="like - icon"> -->
<!-- <a href="javascript:;" class="likeThis active"><span class="icon - like"></span><span class="count">76</span></a> -->
<!-- </div> -->
< div >
< div class = "share" >
< a href = "javascript:;" class = "iconfont icon-share1" > < / a >
< div class = "share-component-cc" data-disabled = "facebook,douban,linkedin,diandian,tencent,google" > < / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< div class = "section" >
< div class = article-header-wrapper >
< div class = "article-header" >
< div class = "article-cover animated fadeIn" style = "
animation-delay: 600ms;
animation-duration: 1.2s;
background-image:
radial-gradient(ellipse closest-side, rgba(0, 0, 0, 0.65), #100e17),
2020-02-21 19:21:10 +08:00
url(//davidz.cn/static/blog/2020-02-11-inspur-ip-guard-uninstallation/cover.svg) ">
2020-02-11 20:35:13 +08:00
< / div >
< div class = "else" >
< p class = "animated fadeInDown" >
< a href = "/categories/Internship" > < b > 「
< / b > INTERNSHIP< b > 」< / b > < / a >
二月 11, 2020
< / p >
< h3 class = "post-title animated fadeInDown" > < a href = "/inspur-ip-guard-uninstallation/" title = "卸载浪潮安装的 IP-GUARD 监控软件" class = "" > 卸载浪潮安装的 IP-GUARD 监控软件< / a >
< / h3 >
< p class = "post-count animated fadeInDown" >
< span >
< b class = "iconfont icon-text2" > < / b > < i > 文章字数< / i >
2020-02-22 14:53:35 +08:00
6.2k
2020-02-11 20:35:13 +08:00
< / span >
< span >
< b class = "iconfont icon-timer__s" > < / b > < i > 阅读约需< / i >
2020-02-22 14:53:35 +08:00
6 mins.
2020-02-11 20:35:13 +08:00
< / span >
< span id = "busuanzi_container_page_pv" >
< b class = "iconfont icon-read" > < / b > < i > 阅读次数< / i >
< span id = "busuanzi_value_page_pv" > 0< / span >
< / span >
< / p >
< ul class = "animated fadeInDown post-tags-list" itemprop = "keywords" > < li class = "animated fadeInDown post-tags-list-item" > < a class = "animated fadeInDown post-tags-list-link" href = "/tags/Windows/" rel = "tag" > Windows< / a > < / li > < / ul >
< / div >
< / div >
< / div >
< div class = "screen-gradient-after" >
< div class = "screen-gradient-content" >
< div class = "screen-gradient-content-inside" >
< div class = "bold-underline-links screen-gradient-sponsor" >
< p >
< span class = "animated fadeIn delay-1s" > < / span >
< / p >
< / div >
< / div >
< / div >
< / div >
< div class = "article" >
< div class = 'main' >
< div class = "content markdown animated fadeIn" >
2020-02-22 14:53:35 +08:00
< blockquote >
< p > 原创发表于 < a href = "https://blog.davidz.cn" > DavidZ Blog< / a > ,遵循 < a href = "https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode" target = "_blank" rel = "noopener" > CC 4.0 BY-NC-SA< / a > 版权协议,转载请附上原文出处链接及本声明。< / p >
< / blockquote >
< h2 id = "前言" > < a class = "header-anchor" href = "#前言" > ¶< / a > 前言< / h2 >
2020-02-13 20:39:56 +08:00
< blockquote >
2020-02-11 20:35:13 +08:00
< p > 屋漏更遭连夜雨,船迟又遇打头风。< / p >
< / blockquote >
< p > 刚刚处理完 Docker 里面的“病毒”,又发现自己的笔记本被安装了监控软件,身后一阵凉风。< / p >
< h2 id = "发现" > < a class = "header-anchor" href = "#发现" > ¶< / a > 发现< / h2 >
< blockquote >
< p > 事发突然,因为影响我开发,所以也没有来得及截图。< / p >
< / blockquote >
< p > 为了使用 WSL2 里面的 Docker, 我加入了 < code > Windows 预览体验计划 - 慢< / code > ,把系统升级到了 Windows 10 2004。结果怪事就出现了——基本上所有的命令行都会在执行前显示一个错误。< / p >
< pre > < code class = "language-shell" > ANOMALY: use of REX.w is meaningless (default operand size is 64)
< / code > < / pre >
< p > 从来没见过这个错误,我进入安全模式发现竟然也会报错,在百度 + 谷歌 + stackoverflow 依然无任何有效答案后,陷入了绝望😢。< / p >
< p > 本来呢,这个只是报个错,并不是什么大问题(< s > 我本身有一点强迫症,不能忍< / s > ),但是 JetBrains 全家桶全部报错找不到 Git, CLion 报错找不到 VS。这就严重影响我开发了。Windows 预览体验计划还非常坑,不能回退,于是我又尝试了< code > Windows 预览体验计划 - 快< / code > ,结果问题依旧。< / p >
< p > 终于我突发奇想在 Github 上搜了一下(< s > 不是到我当时咋想的,病急乱投医把< / s > ),发现了一个叫< a href = "https://github.com/martona/mhook" target = "_blank" rel = "noopener" > mhook< / a > 的项目,在其类库代码中发现了< a href = "https://github.com/martona/mhook/blob/master/disasm-lib/disasm_x86.c#L1749" target = "_blank" rel = "noopener" > disasm_x86< / a > 这个文件,在第 1749 行发现了错误提示的源代码。< / p >
< pre > < code class = "language-c" > if (!SuppressErrors) printf(" [0x%08I64X] ANOMALY: use of REX.w is meaningless (default operand size is 64)\n" , VIRTUAL_ADDRESS);
< / code > < / pre >
< p > 现在我大体知道了这个问题产生的原因。< / p >
< ol >
< li > disasm 是一个 hook( 钩子) 库, 可以注入到别的程序。< / li >
< li > 更新系统后,这个钩子库和新的系统发生了冲突,于是报错,理论上所有被注入的程序都会报错。< / li >
< li > 这个钩子应该是个< strong > 监控软件< / strong > 或者病毒木马之类的。< / li >
< / ol >
< p > 我想起了在浪潮实习的时候,我的老师给我说浪潮作为面向政府国企的公司,对内部信息安全非常重视,所以会在员工的电脑里面安装监控软件,监控员工的一举一动,我当时感觉应该不会对实习生下手吧,想不到。。。回想起来,应该是入职浪潮的时候安装的那个上网小助手吧。< / p >
< p > 于是我下载了< a href = "https://www.freefixer.com/" target = "_blank" rel = "noopener" > freefixer< / a > ,查找注入的钩子,果不出其然,发现了在系统中安装的< a href = "http://www.ip-guard.net/" target = "_blank" rel = "noopener" > IP-GUARD< / a > 。按照官网的介绍,监控能力之强,范围之广令人汗颜,从网络到文件,邮件,应用等等,简直神通广大。< / p >
< h2 id = "处理" > < a class = "header-anchor" href = "#处理" > ¶< / a > 处理< / h2 >
< p > 我已经离职多日,第一时间肯定是卸载这个监控软件,直接删除文件肯定不行,结果 freefixer 也卸不掉(卸载完重启又出现),没有办法,只能到 WinPE 中手动逐一筛查,删除。< / p >
< p > 基本步骤如下< / p >
< h3 id = "1-进入-WinPE" > < a class = "header-anchor" href = "#1-进入-WinPE" > ¶< / a > 1. 进入 WinPE< / h3 >
< blockquote >
< p > 安全模式也会打开例如 explorer.exe 这样的系统进程,而监控软件也注入到了其中,所以安装全模式也不能删除< / p >
< / blockquote >
< p > 这里免费帮< a href = "https://www.itsk.com/forum.php?mod=viewthread&tid=404842" target = "_blank" rel = "noopener" > 优启通< / a > 做个广告。< / p >
< p > 下载上面这个 PE 安装到本地或者 U 盘 都行,然后重启进入 WinPE 就好了。< / p >
< h3 id = "2-到系统盘中删除对应的所有文件" > < a class = "header-anchor" href = "#2-到系统盘中删除对应的所有文件" > ¶< / a > 2. 到系统盘中删除对应的所有文件< / h3 >
< p > 想不到这个公司还是很良心的,所有程序文件都签了名,在 freefixer 上查得到,叫< a href = "https://www.freefixer.com/library/publisher/t.e.c%20solutions%20(g.z.)limited/" target = "_blank" rel = "noopener" > T.E.C Solutions (G.Z.)Limited< / a > 。< / p >
2020-02-11 21:09:53 +08:00
< blockquote >
< p > 下面这些文件都是在 freefixer 上有记录的文件,可以作为检测 IP-GUARD 是否安装的标志。< / p >
< / blockquote >
< table >
< thead >
< tr >
< th style = "text-align:center" > File Name< / th >
< / tr >
< / thead >
< tbody >
< tr >
< td style = "text-align:center" > < a href = "https://www.freefixer.com/library/file/ONacAgent.exe-211770/" target = "_blank" rel = "noopener" > ONacAgent.exe< / a > < / td >
< / tr >
< tr >
< td style = "text-align:center" > < a href = "https://www.freefixer.com/library/file/TIjtdrvd64.dll-261434/" target = "_blank" rel = "noopener" > TIjtdrvd64.dll< / a > < / td >
< / tr >
< tr >
< td style = "text-align:center" > < a href = "https://www.freefixer.com/library/file/thooksv364.dll-261436/" target = "_blank" rel = "noopener" > thooksv364.dll< / a > < / td >
< / tr >
< tr >
< td style = "text-align:center" > < a href = "https://www.freefixer.com/library/file/ONacAgent.exe-206855/" target = "_blank" rel = "noopener" > ONacAgent.exe< / a > < / td >
< / tr >
< tr >
< td style = "text-align:center" > < a href = "https://www.freefixer.com/library/file/winhadnt64.dll-95360/" target = "_blank" rel = "noopener" > winhadnt64.dll< / a > < / td >
< / tr >
< tr >
< td style = "text-align:center" > < a href = "https://www.freefixer.com/library/file/DtFrame32.dll-206842/" target = "_blank" rel = "noopener" > DtFrame32.dll< / a > < / td >
< / tr >
< tr >
< td style = "text-align:center" > < a href = "https://www.freefixer.com/library/file/winrdgv3.exe-122257/" target = "_blank" rel = "noopener" > winrdgv3.exe< / a > < / td >
< / tr >
< tr >
< td style = "text-align:center" > < a href = "https://www.freefixer.com/library/file/winrdlv3.exe-177929/" target = "_blank" rel = "noopener" > winrdlv3.exe< / a > < / td >
< / tr >
< tr >
< td style = "text-align:center" > < a href = "https://www.freefixer.com/library/file/winhafnt64.dll-211772/" target = "_blank" rel = "noopener" > winhafnt64.dll< / a > < / td >
< / tr >
< tr >
< td style = "text-align:center" > < a href = "https://www.freefixer.com/library/file/TIjtdrvd64.dll-211775/" target = "_blank" rel = "noopener" > TIjtdrvd64.dll< / a > < / td >
< / tr >
< tr >
< td style = "text-align:center" > < a href = "https://www.freefixer.com/library/file/ipnpf.sys-225950/" target = "_blank" rel = "noopener" > ipnpf.sys< / a > < / td >
< / tr >
< tr >
< td style = "text-align:center" > < a href = "https://www.freefixer.com/library/file/thooksv364.dll-211779/" target = "_blank" rel = "noopener" > thooksv364.dll< / a > < / td >
< / tr >
< tr >
< td style = "text-align:center" > < a href = "https://www.freefixer.com/library/file/winhadnt.dll-239634/" target = "_blank" rel = "noopener" > winhadnt.dll< / a > < / td >
< / tr >
< / tbody >
< / table >
< p > 我们可以利用 Windows Explorer 的按公司分组,快速找到所有相关文件。< / p >
2020-02-11 20:35:13 +08:00
< ol >
< li > 打开系统盘(这里假设是 C 盘),右键 - 分组依据 - 更多 - 勾选 公司 - 确定。< / li >
< li > 右键 - 分组依据 - 公司。< / li >
< li > 查看 - 选项 - 查看 - 应用到文件夹。< / li >
< li > 在下面的路径中找到所有公司为< code > T.E.C Solutions (G.Z.)Limited< / code > 的文件,删除。< / li >
< / ol >
< pre > < code class = "language-cmd" > C:\Program Files\Common Files\System
C:\Program Files (x86)\Common Files\System
C:\WINDOWS
C:\WINDOWS\System32
C:\WINDOWS\System32\drivers
C:\WINDOWS\SysWOW64
C:\WINDOWS\SysWOW64\drivers
< / code > < / pre >
< h3 id = "3-重启" > < a class = "header-anchor" href = "#3-重启" > ¶< / a > 3. 重启< / h3 >
< p > 再次运行 freefixer 检查是否删干净了。< / p >
< h2 id = "想法" > < a class = "header-anchor" href = "#想法" > ¶< / a > 想法< / h2 >
< p > 像浪潮这样主要客户是政府,国企的企业,确实需要证明其安全能力,在他的员工的电脑上安装监控软件确实是有效措施,我能够理解。但是,这么大一企业,安装监控时没有主动告知(至少应该告知监控我的哪些行为),毕竟是我自己私人的笔记本,不是企业配发的,也没让我签字。离职时就算知道了也找不到卸载方法(那个上网小助手也是我进入安全模式手动删除的,因为正常卸载需要密码,我嫌麻烦就自己删了),所有面向实习生的文档教程都只有安装方法,我不知道是不是因为实习生的缘故,全程只有我的那个老师给我口头说了一声,我现在感觉自己受到了欺骗,个人隐私受到了严重侵犯,很难受,同时也非常生气,可是又很无力,因为这件事情可大可小,从网上的评论来看在各大企业中都很正常。< / p >
< p > 希望这样的事情以后不会发生了吧。🙏< / p >
<!-- [if lt IE 9]><script>document.createElement('audio');</script><![endif] -->
< audio id = "audio" loop = "1" preload = "auto" controls = "controls"
data-autoplay="false">
< source type = "audio/mpeg" src = "//davidz.cn/static/blog/mp3/mowenwei---yintian.mp3" >
< / audio >
< div id = 'gitalk-container' class = "comment link"
data-ae='true'
data-ci='489076c5dd3f5ba13f67'
data-cs='d6e3b245787b0b74d0dbe2639ef87f452a401194'
data-r='blog.davidz.cn'
data-o='DavidZhang73'
data-a='DavidZhang73'
data-d=''
>留言< / div >
< / div >
< div class = "sidebar" >
< div class = "box animated fadeInRight" >
< div class = "subbox" >
< img src = "//davidz.cn/static/blog/img/avator.jpg" height = 300 width = 300 > < / img >
< p > DavidZ< / p >
< span > 凡事都要留几分< / span >
< dl >
< dd > < a href = "https://github.com/DavidZhang73" target = "_blank" > < span
class=" iconfont icon-github">< / span > < / a > < / dd >
< dd > < a href = "https://twitter.com/david731998" target = "_blank" > < span
class=" iconfont icon-twitter">< / span > < / a > < / dd >
< dd > < a href = "https://stackoverflow.com/users/12693553/davidz" target = "_blank" > < span
class=" iconfont icon-stack-overflow">< / span > < / a > < / dd >
< / dl >
< / div >
< ul >
2020-06-05 00:15:41 +08:00
< li > < a href = "/" > 12 < p > 文章< / p > < / a > < / li >
< li > < a href = "/categories" > 7 < p > 分类< / p > < / a > < / li >
2020-05-17 15:45:46 +08:00
< li > < a href = "/tags" > 12 < p > 标签< / p > < / a > < / li >
2020-02-11 20:35:13 +08:00
< / ul >
< / div >
< div class = "box sticky animated fadeInRight faster" >
< div id = "toc" class = "subbox" >
< h4 > 目录< / h4 >
2020-02-13 20:39:56 +08:00
< ol class = "toc" > < li class = "toc-item toc-level-2" > < a class = "toc-link" href = "#前言" > < span class = "toc-number" > 1.< / span > < span class = "toc-text" > ¶前言< / span > < / a > < / li > < li class = "toc-item toc-level-2" > < a class = "toc-link" href = "#发现" > < span class = "toc-number" > 2.< / span > < span class = "toc-text" > ¶发现< / span > < / a > < / li > < li class = "toc-item toc-level-2" > < a class = "toc-link" href = "#处理" > < span class = "toc-number" > 3.< / span > < span class = "toc-text" > ¶处理< / span > < / a > < ol class = "toc-child" > < li class = "toc-item toc-level-3" > < a class = "toc-link" href = "#1-进入-WinPE" > < span class = "toc-number" > 3.1.< / span > < span class = "toc-text" > ¶1. 进入 WinPE< / span > < / a > < / li > < li class = "toc-item toc-level-3" > < a class = "toc-link" href = "#2-到系统盘中删除对应的所有文件" > < span class = "toc-number" > 3.2.< / span > < span class = "toc-text" > ¶2. 到系统盘中删除对应的所有文件< / span > < / a > < / li > < li class = "toc-item toc-level-3" > < a class = "toc-link" href = "#3-重启" > < span class = "toc-number" > 3.3.< / span > < span class = "toc-text" > ¶3. 重启< / span > < / a > < / li > < / ol > < / li > < li class = "toc-item toc-level-2" > < a class = "toc-link" href = "#想法" > < span class = "toc-number" > 4.< / span > < span class = "toc-text" > ¶想法< / span > < / a > < / li > < / ol >
2020-02-11 20:35:13 +08:00
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< div id = "back-to-top" class = "animated fadeIn faster" >
< div class = "flow" > < / div >
< span class = "percentage animated fadeIn faster" > 0%< / span >
< span class = "iconfont icon-top02 animated fadeIn faster" > < / span >
< / div > <!-- hexo - inject:begin --> <!-- hexo - inject:end -->
< / body >
< footer >
< p class = "copyright" id = "copyright" >
© 2020
< span class = "gradient-text" >
DavidZ
< / span > .
Powered by < a href = "http://hexo.io/" title = "Hexo" target = "_blank" rel = "noopener" > Hexo< / a >
Theme
< span class = "gradient-text" >
< a href = "https://github.com/TriDiamond/hexo-theme-obsidian" title = "Obsidian" target = "_blank" rel = "noopener" > Obsidian< / a >
< / span >
< small > < a href = "https://github.com/TriDiamond/hexo-theme-obsidian/blob/master/CHANGELOG.md" title = "v1.4.3" target = "_blank" rel = "noopener" > v1.4.3< / a > < / small >
< / p >
< / footer >
2020-06-05 12:12:10 +08:00
< script type = "text/javascript" src = "https://cdn.bootcss.com/mathjax/2.7.7/MathJax.js?config=TeX-AMS-MML_HTMLorMML" >
2020-02-11 20:35:13 +08:00
< / script >
< script >
MathJax.Hub.Config({
"HTML-CSS": {
preferredFont: "TeX",
availableFonts: ["STIX", "TeX"],
linebreaks: {
automatic: true
},
EqnChunk: (MathJax.Hub.Browser.isMobile ? 10 : 50)
},
tex2jax: {
inlineMath: [
["$", "$"],
["\\(", "\\)"]
],
processEscapes: true,
ignoreClass: "tex2jax_ignore|dno",
skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
},
TeX: {
noUndefined: {
attributes: {
mathcolor: "red",
mathbackground: "#FFEEEE",
mathsize: "90%"
}
},
Macros: {
href: "{}"
}
},
messageStyle: "none"
});
< / script >
< script >
function initialMathJax() {
MathJax.Hub.Queue(function () {
var all = MathJax.Hub.getAllJax(),
i;
// console.log(all);
for (i = 0; i < all.length ; i + = 1 ) {
all[i].SourceElement().parentNode.className += ' has-jax';
}
});
}
function reprocessMathJax() {
if (typeof MathJax !== 'undefined') {
MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
}
}
< / script >
2020-06-05 12:12:10 +08:00
< link rel = "stylesheet" href = "//cdn.bootcss.com/gitalk/1.6.2/gitalk.min.css" >
2020-02-11 20:35:13 +08:00
2020-06-05 12:12:10 +08:00
< script src = "//cdn.bootcss.com/gitalk/1.6.2/gitalk.min.js" > < / script >
2020-02-11 20:35:13 +08:00
2020-02-13 21:45:16 +08:00
< script src = "//cdn.bootcss.com/jquery/3.4.1/jquery.min.js" > < / script >
2020-02-11 20:35:13 +08:00
< script src = "/js/plugin.js" > < / script >
< script src = "/js/obsidian.js" > < / script >
< script src = "/js/jquery.truncate.js" > < / script >
< script src = "/js/search.js" > < / script >
< script src = "//cdn.bootcss.com/typed.js/2.0.10/typed.min.js" > < / script >
< script src = "//cdn.bootcss.com/blueimp-md5/2.12.0/js/md5.min.js" > < / script >
2020-02-13 21:45:16 +08:00
< script src = "//cdn.bootcss.com/social-share.js/1.0.16/js/social-share.min.js" > < / script >
2020-02-11 20:35:13 +08:00
2020-06-05 12:12:10 +08:00
< script src = "https://cdn.bootcss.com/codemirror/5.54.0/codemirror.min.js" > < / script >
2020-02-11 20:35:13 +08:00
2020-06-05 12:12:10 +08:00
< script src = "//cdn.bootcss.com/codemirror/5.54.0/mode/javascript/javascript.min.js" > < / script >
2020-02-11 20:35:13 +08:00
2020-06-05 12:12:10 +08:00
< script src = "//cdn.bootcss.com/codemirror/5.54.0/mode/css/css.min.js" > < / script >
2020-02-11 20:35:13 +08:00
2020-06-05 12:12:10 +08:00
< script src = "//cdn.bootcss.com/codemirror/5.54.0/mode/xml/xml.min.js" > < / script >
2020-02-11 20:35:13 +08:00
2020-06-05 12:12:10 +08:00
< script src = "//cdn.bootcss.com/codemirror/5.54.0/mode/htmlmixed/htmlmixed.min.js" > < / script >
2020-02-11 20:35:13 +08:00
2020-06-05 12:12:10 +08:00
< script src = "//cdn.bootcss.com/codemirror/5.54.0/mode/clike/clike.min.js" > < / script >
2020-02-11 20:35:13 +08:00
2020-06-05 12:12:10 +08:00
< script src = "//cdn.bootcss.com/codemirror/5.54.0/mode/php/php.min.js" > < / script >
2020-02-11 20:35:13 +08:00
2020-06-05 12:12:10 +08:00
< script src = "//cdn.bootcss.com/codemirror/5.54.0/mode/shell/shell.min.js" > < / script >
2020-02-11 20:35:13 +08:00
2020-06-05 12:12:10 +08:00
< script src = "//cdn.bootcss.com/codemirror/5.54.0/mode/python/python.min.js" > < / script >
2020-02-11 20:35:13 +08:00
2020-06-05 12:12:10 +08:00
< script src = "//cdn.bootcss.com/codemirror/5.54.0/mode/cmake/cmake.min.js" > < / script >
2020-02-11 20:35:13 +08:00
2020-06-05 12:12:10 +08:00
< script src = "//cdn.bootcss.com/codemirror/5.54.0/mode/powershell/powershell.min.js" > < / script >
2020-02-11 20:35:13 +08:00
2020-02-13 20:39:56 +08:00
2020-06-05 12:12:10 +08:00
< script src = "//cdn.bootcss.com/codemirror/5.54.0/mode/yaml/yaml.min.js" > < / script >
2020-02-13 20:39:56 +08:00
2020-02-11 20:35:13 +08:00
< script src = "/js/busuanzi.min.js" > < / script >
< script >
$(document).ready(function () {
if ($('span[id^="busuanzi_"]').length) {
initialBusuanzi();
}
});
< / script >
< link rel = "stylesheet" href = "//cdn.bootcss.com/photoswipe/4.1.3/photoswipe.min.css" >
< link rel = "stylesheet" href = "//cdn.bootcss.com/photoswipe/4.1.3/default-skin/default-skin.min.css" >
< script src = "//cdn.bootcss.com/photoswipe/4.1.3/photoswipe.min.js" > < / script >
< script src = "//cdn.bootcss.com/photoswipe/4.1.3/photoswipe-ui-default.min.js" > < / script >
<!-- Root element of PhotoSwipe. Must have class pswp. -->
< div class = "pswp" tabindex = "-1" role = "dialog" aria-hidden = "true" >
<!-- Background of PhotoSwipe.
It's a separate element as animating opacity is faster than rgba(). -->
< div class = "pswp__bg" > < / div >
<!-- Slides wrapper with overflow:hidden. -->
< div class = "pswp__scroll-wrap" >
<!-- Container that holds slides.
PhotoSwipe keeps only 3 of them in the DOM to save memory.
Don't modify these 3 pswp__item elements, data is added later on. -->
< div class = "pswp__container" >
< div class = "pswp__item" > < / div >
< div class = "pswp__item" > < / div >
< div class = "pswp__item" > < / div >
< / div >
<!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
< div class = "pswp__ui pswp__ui--hidden" >
< div class = "pswp__top-bar" >
<!-- Controls are self - explanatory. Order can be changed. -->
< div class = "pswp__counter" > < / div >
< button class = "pswp__button pswp__button--close" title = "Close (Esc)" > < / button >
< button class = "pswp__button pswp__button--share" title = "Share" > < / button >
< button class = "pswp__button pswp__button--fs" title = "Toggle fullscreen" > < / button >
< button class = "pswp__button pswp__button--zoom" title = "Zoom in/out" > < / button >
<!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->
<!-- element will get class pswp__preloader - - active when preloader is running -->
< div class = "pswp__preloader" >
< div class = "pswp__preloader__icn" >
< div class = "pswp__preloader__cut" >
< div class = "pswp__preloader__donut" > < / div >
< / div >
< / div >
< / div >
< / div >
< div class = "pswp__share-modal pswp__share-modal--hidden pswp__single-tap" >
< div class = "pswp__share-tooltip" > < / div >
< / div >
< button class = "pswp__button pswp__button--arrow--left" title = "Previous (arrow left)" >
< / button >
< button class = "pswp__button pswp__button--arrow--right" title = "Next (arrow right)" >
< / button >
< div class = "pswp__caption" >
< div class = "pswp__caption__center" > < / div >
< / div >
< / div >
< / div >
< / div >
<!-- Global site tag (gtag.js) - Google Analytics -->
< script async src = "//www.googletagmanager.com/gtag/js?id=UA-157733505-1" > < / script >
< script >
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-157733505-1');
< / script >
< script >
function initialTyped () {
var typedTextEl = $('.typed-text');
if (typedTextEl & & typedTextEl.length > 0) {
var typed = new Typed('.typed-text', {
strings: ["凡事都要留几分", "颜值是第一生产力"],
typeSpeed: 90,
loop: true,
loopCount: Infinity,
backSpeed: 20,
});
}
}
if ($('.article-header') & & $('.article-header').length) {
$(document).ready(function () {
initialTyped();
});
}
< / script >
< / html >