作者: pmself

  • 如何使用 AI 在 WordPress 中生成图像 wp插件Imajinn

    如何使用 AI 在 WordPress 中生成图像 wp插件Imajinn

    你想使用像DALL.E这样的人工智能工具在WordPress中生成图片吗?

    AI 生成的图像可以成为为您的 WordPress 博客文章生成图像的一个很好的替代方案,而无需担心版权问题。

    在本文中,我们将向您展示如何使用 AI 在 WordPress 中生成图像。

    为什么要使用 AI 工具为您的 WordPress 网站生成图像?

    有大量付费图片网站提供图片以在您的WordPress 网站上使用,收取少量费用。

    但是,这些图像的成本是额外的费用。大多数博主和小型企业没有这方面的预算。

    肯定有许多网站提供免版税图片,例如 Unsplash 或ShutterStock的有限免费图片库。

    但这些图像被过度使用,而且往往过于笼统。

    现在,为您的网站创建图像的最佳方式是制作您自己的图像或使用您自己的照片。但并不是每个人都是专业摄影师或数字艺术家。

    这就是人工智能的用武之地。

    DALL.E 等人工智能工具可以根据用户提供的文本描述生成独特的艺术品。

    这些图像不仅独特,而且极富创意和艺术性。

    例如,这是一张由 DALL.E 2 生成的带有日落背景的办公桌图像。它模仿了您可以在数百个网站上找到的通用库存图片的风格。

    现在看看这个由 DALLE.2 创作的艺术作品示例。

    这个是艺术的,更加丰富多彩,并且是漫画书风格。

    您可以在 DALL.E 主页上看到您可以使用的各种风格、主题和想法。

    最好的部分是您可以自由地将这些图像用于您的博客文章、文章,甚至登录页面。

    话虽如此,让我们来看看如何在 WordPress 中轻松使用 AI 生成的图像。

    我们将使用两种不同的 AI 工具向您展示两种方法,您可以选择最适合您的一种。

    1. 使用 DALL.E 为 WordPress 生成 AI 图像 2

    DALL.E 2是Open AI出品的一款人工智能工具,以其艺术渲染、超现实主义、创造力和多功能性而广受欢迎。

    没有可用于将 DALL.E 2 直接与您的 WordPress 网站集成的插件。

    但是,您可以在 DALL.E 2 网站上创建图像并将它们下载到您的计算机上。之后,您可以将这些图像上传到您的 WordPress 网站。

    首先,您需要访问DALL.E 2 网站并注册一个免费帐户,第一个月可获得 50 个积分。

    注册后,您会看到带有提示字段的 DALL.E 仪表板和 DALL.E 最近生成的一些艺术作品。

    在提示字段中键入要生成的图像的文本描述。您可以随心所欲地描述性和创造性。

    单击 Surprise Me 按钮以查看您可以生成的一些提示示例。

    单击“生成”按钮后,AI 将根据您提供的提示生成图像并显示四个结果。

    如果需要,您可以将它们全部下载到您的计算机上。您还可以单击任何生成的图像进行编辑。

    DALL.E 中的图像编辑器允许您扩展框架或平移。您还可以擦除或润饰图像的某个区域。

    再次单击“生成”按钮,AI 会根据您的更改重新生成图像。

    将图像下载到计算机后,您可以切换回 WordPress 网站的管理区域。

    您现在可以通过访问媒体 » 添加新页面将图像上传到您的 WordPress 媒体库。

    您还可以将图像直接添加到您的 WordPress 帖子和页面。只需编辑要显示图像的帖子或页面。

    在帖子编辑屏幕上,添加图像块,然后从您的计算机上传图像。

    DALL.E 2 生成的图像使用的许可证是什么?

    您保留您向 DALL.E 2 提供的提示生成的图像的版权。

    您可以在任何地方使用这些图像,包括您的 WordPress 网站、YouTube 视频、电子书、杂志等。

    2. 使用 Imajinn 在 WordPress 中生成 AI 图片

    对于第一种方法,我们将使用 Imajinn AI 在 WordPress 中生成图像。

    Imajinn AI 类似于 DALL.E 2、Midjourney 和 Stable Diffusion 等工具。它根据您提供的提示使用人工智能生成图像。

    首先,您需要安装并激活Imajinn插件。有关更多详细信息,请参阅我们关于如何安装 WordPress 插件的分步指南。

    注意:基本插件是免费的,并为您提供 10 个学分。之后,您可以从插件网站购买更多积分。

    激活后,您需要访问Media » Imajinn AI来配置插件设置和生成图像。

    首先,您需要通过提供电子邮件地址和密码进行注册以创建您的帐户。

    之后,您将能够开始使用 Imajin AI 生成图像。

    只需提供描述您要生成的图像的详细提示。

    您还可以从样式列表、艺术家风格、样式修饰符过滤器和纵横比中进行选择,以进一步自定义您的提示。

    在其下方,您可以选择单击“召唤”按钮以启动“提示精灵”工具。

    根据您提供的提示描述,该工具将建议进一步的提示想法以生成最佳图像。

    您可以单击生成按钮以使用建议的提示,或通过复制建议中的想法继续编写您自己的提示。

    满意后,单击“生成”按钮继续。

    该插件现在将开始使用在云端运行的 AI 工具生成图像。完成后,它将显示四种图像供您选择。

    在每张图片下方,您会找到分享图片、修复面孔(AI 不擅长生成人脸)或修饰图片的选项。

    您也可以只单击“保存”按钮将图像存储在您的 WordPress 媒体库中。

    要在 WordPress 帖子和页面中使用图片,只需编辑要添加图片的帖子或页面。

    在后期编辑屏幕上,在要显示图像的位置添加图像块,然后单击媒体库。

    接下来,您需要从媒体库中选择您之前保存的图像,并为该图像提供替代文本。

    之后,继续并单击“选择”按钮以插入图像。

    该插件还带有一个 Imajinn 块,您可以将其添加到您的帖子或页面并在块编辑器中生成图像。

    Imajinn AI 生成的图像使用的许可证是什么?

    Imajinn AI 生成的所有图像均在免费域或 CC0 许可下提供。

    您可以根据需要在您的网站上自由使用它们。

  • uniapp直接跳转应用商店

    uniapp直接跳转应用商店

    参考一:

    // 跳转应用商店
    export const jumpToAppMarket = (code) => {
    // 可以根據文檔換成其他商店 https://www.jianshu.com/p/b544810beac3
    const googlePlay = “com.android.vending”;

    if (plus.os.name == "Android") {  
        var Uri = plus.android.importClass("android.net.Uri");  
        var Intent = plus.android.importClass('android.content.Intent');  
        var main = plus.android.runtimeMainActivity();  
    
        var uri = Uri.parse("market://details?id=" + 包名);  
        var intent = new Intent(Intent.ACTION_VIEW, uri);  
        // 选择进入商店  
        intent.setPackage(googlePlay);  
        intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK;  
        // 没有该商店应用  
        if (intent.resolveActivity(main.getPackageManager()) !== null) {  
            main.startActivity(intent);  
        } else {  
            // 跳转浏览器  
            let uri = Uri.parse("https://play.google.com/store/apps/details?id=" + 包名);  
            let intent = new Intent(Intent.ACTION_VIEW, uri);  
            intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK;  
            intent.setPackage('com.android.browser');  
            main.startActivity(intent);  
        }  
    } else {  
        plus.runtime.openURL('itms-apps://itunes.apple.com/cn/app/id{appid}?mt=8');  
    }  

    参考二:安卓是指定包名跳转,iOS需要指定id

    if (plus.os.name == "Android") {
      // 跳转安卓应用市场
      let appurl = "market://details?id=com.tencent.mm" //这个是通用应用市场,如果想指定某个应用商店,需要单独查这个应用商店的包名或scheme及参数
      plus.runtime.openURL(appurl)
    } else {
      // 跳转AppStore
      let appleId = 纯数字id
      plus.runtime.launchApplication({
        action: `itms-apps://itunes.apple.com/cn/app/id${appleId}`,
      })
    }

  • WordPress ChatGPT 对话插件 WP-ChatGPT

    WordPress ChatGPT 对话插件 WP-ChatGPT

    WP-ChatGPT 是一款基于 ChatGPT 的 WordPress 对话插件,支持通过简码无缝接入任意主题。

    ChatGPT 是目前最强的 AI 之一,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论文等任务。

    主要特性有:

    双接口,同时支持网页版和最新推出的API版。
    额度及套餐系统,支持设置套餐和额度,方便进行流量变现。
    接口轮询机制,最大限度解决单一账号易达请求上限的问题。
    完善的会话机制,前台支持同时多会话切换,支持对任一消息进行重载,删除。
    回收站功能,支持前端删除的消息和会话移动至回收站。
    使用WordPress的账号体系,基本可与主题无缝配合。
    问答流式响应及Markdown解析。
    支持 PHP >= 7.4 版本。
    支持后台一键更新。


    价格
    专业版:¥6500/包含一次代安装服务和后续更新

    相关图片:

  • 魔众绘图功能(Markdown文档管理)

    魔众绘图功能(Markdown文档管理)

    模块演示 参考演示地址 绘图功能(Markdown文档管理) 的部分功能

    演示网址

     模块介绍

    模块介绍

    「绘图功能(Markdown文档管理)」是一个Web版本的在线图表文档管理系统,提供拖拽式的文档管理系统。

    功能特性

    • 提供增强版绘图管理功能
    • 多标签文档管理
    • 多分类文档管理
    • 文档导出Markdown
    • 文档导出Html预览
  • Android 和 IOS 平台签名证书生成指南

    Android 和 IOS 平台签名证书生成指南

    有安卓开发经验的朋友对这个应该不陌生,生成方法也有很多,我这里只对没有经验的朋友做以下简单指导。

    如果您不想看以下的一堆文字,请前往:yunedit.com/createcert 自动生成,具体生成和使用方法此网站有说明。

    如果您想亲自尝试生成证书,请看下面流程。

    keystore的作用

    Android平台打包发布apk应用,需要使用数字证书(.keystore文件)进行签名,用于表明开发者身份。

    Android证书的生成是自助和免费的,不需要审批或付费。

    此教程的目的是生成.keystore文件,或者获取.keystore文件的 MD5 和 SHA256 参数。

    windows平台生成证书的方法:

    安装java,并配置环境变量

    1、下载JRE软件:https://pan.baidu.com/s/1Jc7zGroF8QdB7QuxaCqKtw 解压码:4tjz

    2、安装JRE软件,直接常规软件安装方法,点下一步,直到完成即可。记录下安装目录,比如:C:\Program Files\Java\jre1.8.0_231

    3、windows 桌面双击进入我的电脑,然后鼠标右键选择属性。

    4、设置环境变量

    5、再设置一个path环境变量

    使用 win+q 快捷键打开windows搜索,输入cmd 打开命令提示符,输入 java -version 如果出现下面的提示,表示已经安装成功

    生成 keystore 文件,或者获取 keystore 文件的 MD5 和 SHA256

    如果以前通过春哥介绍的方法,在线生成过 .keystore 文件,请按照下面 情况一 来操作。如果您是初次打包APP,并未生成过 keystore文件,请按照 情况二 来操作。如果您不记得是否生成过 .keystore 文件,请直接参照 情况二。

    情况一:已有 .keystore 文件,获取它的 MD5 和 SHA256 的方法

    1、使用 win+q 快捷键打开windows搜索,输入cmd 打开命令提示符

    2、使用cd命令,定位到您的 .keystore 文件目录,如果不知道 keystore 文件在哪里,可以在 HBuilderX 软件->发行->云打包中查看证书文件路径。比如我的路径是 d:\qibier.keystore。

    3、使用 keytool 命令,查看 MD5 和 SHA256 值,如下图所示:

    keytool -list -v -keystore d:\qibier.keystore

    命令行红色部分为你的 .keystore 文件路径

    情况二:生成全新的 .keystore 文件

    生成全新 .keystore 文件的命令行:

    keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore

    testalias :是证书别名,可修改为自己想设置的字符,建议使用英文字母和数字

    test.keystore :是证书文件名称,可修改为自己想设置的文件名称

    要查看你生成的这个文件的md5,sha256等信息,请使用上面 情况一 中的方法。

    至此,我们已经可以自己生成.keystore文件,并且获取它的信息了。

    windows平台IOS生成证书的方法:

    采用第三方工具:香蕉云编 https://www.yunedit.com/

  • 35岁职业危机为何偏爱互联网人?|不宜高调

    35岁职业危机为何偏爱互联网人?|不宜高调

    作者|肖芳

    编辑|文姝琪

    尽管知道工作难找,很多步入中年的互联网大厂员工还是在今年选择主动失业。

    主动失业并不意味着有明确规划。他们只是想先逃离身心俱疲的工作,有人还没等到股票兑现,有人想靠银行卡里10万元存款过一段没人打扰的生活……至于接下来要做什么,他们并不是很清楚,甚至陷入焦虑和迷茫——职场中年危机就在不知所措的一瞬间到来。

    有人埋怨自己运气差,选错了领导和团队,本来想在大厂核心业务部门大干几年,实现百万年薪的梦想,奈何总是被领导质疑和针对;有人意识到自己的职业经历并没有延续性,工作十多年一直根据市场需求转型,虽然已经有带团队的经验,但在竞争激烈的求职环境中,依然很难说清楚自己拥有哪些别人不具备的优势;还有人后悔自己没早点看机会,现在市场上几乎没有和原来薪水持平的岗位,不想委曲求全,就只能被动等待好机会到来。

    从短期来说,这些主动失业的大厂员工还想找个薪水不比原来少、又不内卷的工作,连他们自己都知道很难——叫得上名字的大厂都在疯狂内卷,而且招聘需求不多。从长期来看,他们不知道还能在互联网行业从业多久,以及自己的职业发展路径是什么,这个问题更加棘手。

    为什么当年怀揣改变世界梦想的互联网大厂员工纷纷陷入职业困境?

    大厂打工哲学

    我一位体制内的朋友几年前到互联网大厂面试时,感受到了体制思维和互联网大厂思维的巨大差异:他在体制内工作将近20年,想找一家互联网大厂工作到退休,面试HR给他当头一棒,对方觉得他能干3年已经算很长了。

    3年甚至不足3年就要跳一次槽,几乎成为大厂员工的惯例。一位2017年进入字节跳动的校招生到现在还能回忆起3年后要迫不及待离职的处境:和自己同期进入的同事相继跳槽,团队人员几乎重新换了一遍。最重要的是,离职的同事薪水都涨了很多,“还不跳槽感觉是自己有问题”。

    业界传闻字节跳动的薪资“入职即巅峰”,其实类似的问题在很多大厂都存在:辛辛苦苦干3年,薪资涨幅可以忽略不计,但跳一次槽可以涨30%。在阿里、腾讯、字节、快手、美团等几家大厂疯狂抢人的阶段,1年半跳一次槽,薪资即可涨30%甚至更高,职级也可以获得提升。

    更早看透这套游戏规则的大厂人获得了更高的薪资和职级,而对团队氛围和工作内容认可、愿意留下来踏踏实实长干的员工则常常在三四年之后唏嘘不已:当年和自己薪资差不多的前同事,跳了两次槽之后,薪资已经比自己多了一倍。

    一位非常熟悉游戏规则的大厂员工告诉我,大厂员工寄希望于通过努力工作,提升能力而获得涨薪,但其实提升能力是个伪命题,每家大厂的业务逻辑和价值观都不一样,看重的能力不同。跳槽涨薪的逻辑是平台背书,而不是个人能力。

    在行业扩张期,平台和参与项目的背书能力尤其重要,跳槽涨薪便有了捷径可循。比如,你想从事电商行业,先在阿里电商业务获得一份P7的工作,两三年之后再跳去美团,职级涨到P8的可能性极大。

    即使在公司内部升职,也是有捷径可循的。参与公司最受重视、最容易出成绩的项目是非常必要的,同时还要搞明白公司看重什么能力。以产品岗为例,腾讯看重从用户需求出发讲产品故事的能力,字节跳动则更加看重ROI。

    大厂员工在升职加薪上的捷径受益于大厂人员规模的扩张,也是产品和服务走向成熟的结果。

    在移动互联网早期,一款应用的产品团队不足10人,每个产品经理要独自操盘多个产品模块,需要持续思考如何方便用户使用,产品经理可以直接接触用户,用户反馈能够给产品经理更多认知和启发,这个阶段的产品经理能够快速成长。

    2014年之后,移动互联网逐渐告别产品创意驱动的增长模式,用户增长更加依赖公司的战略判断和落地执行能力,组织越来越大,每个人的工作越来越细分。一个DAU过亿的产品,产品经理团队有上千人的规模,但已经很难做出让用户有足够感知的功能创新,甚至根本接触不到用户——他们的工作已经变得可有可无。如果说早期的产品经理是为用户服务,如今的产品经理已经变成为老板和汇报服务。

    组织臃肿、分工越来越细导致基层和中层员工很难培养全局的商业视角。一位前淘宝的产品经理在三年前任职期间意识到,自己的领导具有非常强拆解和落地KPI的能力,但并不能深刻理解京东和拼多多是什么,在淘宝和竞品竞争过程中难以用全局视角思考。这些发现让他越来越怀疑所谓的经验,是否只适用于某一个老板或者某一家公司。

    当然,更多的互联网大厂人关心的是能否跳槽去有增长红利的平台——最近两年还在增长的字节跳动几乎成为了唯一正确的选择。实际上,字节跳动除了TikTok之外,其他产品增长也基本见顶。

    随着各家大厂都进入收缩期并开始降本增效,全行业的工作环境都陷入极度内卷中。大厂员工因内卷和毫无价值感的工作感到痛苦,但机会越来越少,涨薪越来越难,一旦脱离大厂,过去的积累就要归零,很多人陷入到不知所措的迷茫中。

    他们甚至半开玩笑说“跳槽的尽头是字节跳动”。

    中年人去哪儿了?

    我近期见到的每一位大厂员工在谈及职业理想时,都提到了律师和医生——这是他们羡慕的职业,也是他们渴望寻找的职业方向。律师和医生可以干20年以上,不仅没有35岁中年危机,而且越老越吃香。

    互联网行业恰恰相反,让各家互联网大厂引以为豪的就是年轻人多。脉脉数据研究院去年10月发布的一份调查显示,各家互联网大厂员工的平均年龄从27岁到33岁不等,其中字节跳动和拼多多员工平均年龄仅27岁。阿里、百度、腾讯三家成立20年以上的公司,员工的平均年龄也只有31岁、30岁和29岁。

    过去几年,互联网行业的年轻人也以自己处在一个年轻人居多的行业为骄傲,但他们终究会意识到,自己也会步入中年。

    互联网行业的中年人去哪儿了?没人能准确回答这个问题,但很多大厂人的中年职业危机正是从意识到周围同事中只有极个别领导超过40岁开始的。从体制内或者传统行业进入互联网行业的大厂员工感受到的差别更明显:他们原来所在的单位(公司)职业发展路径有着非常强的确定性,可以用自己领导或者仰慕的技术专家来对标自己10年后的职业路径。但在互联网公司,同事大多是同龄人,没人知道自己10年后的样子。

    实际上,现在互联网公司的年轻人也不知道10年前互联网行业是什么样子,但这一点都不重要。

    我的朋友判官10年前在当时的风口行业担任产品经理,这个行业现在听起来已经相当生僻——安卓ROM。当时安卓手机生态还不完善,很多用户通过刷机来解决系统bug或者精简内存,而移动应用都要通过ROM预装分发,行业的共识是“ROM是移动互联网的风口”。ROM产品经理作为移动应用预装的商务对接和产品预装执行人,掌握着极大的话语权。

    只是这种被风口加持的光环并没有持续太久,一方面手机厂商原装ROM体验已经非常好,刷机的人越来越少,更重要的是,时间证明,移动互联网的流量入口是超级App而不是ROM。如今回想起来,判官也不觉得遗憾,因为在2010年到2012年,没有人意识到会诞生微信这样的超级App。

    过去10年,互联网风口一直在快速迭代,从网约车到O2O、共享单车,再到短视频、直播,人们的认知也在随着行业的变化持续迭代。

    “拥抱变化”成为互联网公司信奉的价值观,这也意味着大厂员工过去的经验和积累没有太多复用性。经验和积累不重要,也就意味着拥有10年工作经验的人和应届毕业生差别不像传统行业那么大,而对互联网公司来说,后者成本更低,且精力更旺盛。

    一位最近选择主动失业的大厂员工反思,自己在互联网行业工作十几年,一直在转型。大学毕业在门户做编辑,门户抢新闻、做流量的方法烂熟于心,但算法推荐出现之后,这套方法论失效了,取而代之的是话题运营的玩法。当他因为疲惫和焦虑离开大厂,思考未来还能做什么时,意识到大厂的经验很难为其提供直接帮助。

    在红利期没抓住机会多赚点钱成为很多大厂员工最后悔的事——既然工作不具备持续发展的可能性,多赚点钱大概是最好的选择了。

    职业焦虑的解药

    财务自由之后退休是很多大厂员工信奉的工作哲学。过去几年,阿里、腾讯、滴滴、快手、字节跳动等大厂员工财务自由后,去追求自己想要生活的故事被媒体广泛报道,这也成为更多年轻人投身互联网行业的原因。

    高薪以及财务自由是互联网大厂吸引优秀人才加入并且激励他们持续为公司付出的方式,但互联网大厂似乎只懂得用高薪激励,并没有在人才培养机制建设上进行太多投入——员工除了财务自由之外,也没有更多可预期成长空间。

    为了追求发展速度和效率,一些互联网大厂还通过快速招人组团队试验、业务不达预期快速裁撤的方式尝试新业务,员工在没有太多完整项目经验情况下就遭遇裁员(详见上篇《字节跳动为什么还在轰炸式招聘?》)。相比之下,诸如IBM、SAP、宝洁等外企有更成熟的人才培养体系,初阶员工获得培养能力提升,可以让整个职业生涯受益并可持续。

    财务自由的故事仅仅存在于公司成长初期的一小部分人之中,对大部分大厂员工来说,更像是华而不实的梦想。在大厂员工为自己35岁之后的职业发展而焦虑时,财务自由的故事让他们的焦虑雪上加霜——尤其是当听说自己曾经的同学和同事赶上好机遇而财富快速膨胀的时候。

    尽管知道当下的就业形势严峻,我见到的部分大厂员工还是更愿意相信通过跳槽继续实现薪资30%以上的涨幅,甚至还有人寄希望于“干一票大的”实现财务自由。他们更多把工作不顺心归咎于公司文化和部门领导,换一家公司就好了;虽然也知道自己在大厂做的工作并没有太多实际价值,甚至可有可无,他们依然愿意多花点时间在相同的行业中找到愿意给更高职级和更高薪水的工作。

    前大厂高级产品专家、播客《三五环》主理人刘飞从大厂离职之后,试图在非大厂叙事逻辑下和朋友对谈,以发现不同的认知视角、不同的思维模式乃至不同的生活态度。经过一段时间的对谈之后,他反思到,很多人在大厂工作就以为自己在互联网圈里,实际上在大厂接触到的人和信息真的很少。和大厂中层沟通创业机会,他们的视角基本都是这个行业的市值、市场份额以及商业模式,大家已经习惯了大厂和大平台视角,反而忽视了身边力所能及的小生意。

    在互联网大厂还没有完善的人才培养机制之前,大厂员工的职业焦虑问题只能通过个人努力来消除——跳出大厂模式和大厂思维方式,很可能会发现一个新世界。在主动失业之后,也有一些大厂员工选择彻底离开互联网大厂:有人自己开店做小生意,有人进入传统行业,有人转型内容创作……在彻底离开后,很多人意识到最近10年在互联网行业工作,虽然焦虑,但也是幸运。

    焦虑显而易见,幸运在于没有哪个行业像互联网行业一样,可以实现1年半跳槽一次薪水涨30%的神话。很多大厂员工工作5年就可以获得大几十万的年薪,在传统行业工作10年甚至更长时间都未必拿得到。

  • 古诗词取名小工具2.0-已开源

    古诗词取名小工具2.0-已开源

    古诗词取名小工具2.0已上线,本次选择了开源项目

    仓库地址:https://github.com/wz930206/chinese-poetry-namer

    后端地址:https://github.com/wz930206/PiPiName

    预览效果如下:

  • 中国黑客关系图

    中国黑客关系图

    他们是普通人,却又如此传奇。

    一、少年行侠更仗剑,何惜囊中沽酒钱

    1999年,西安电子科技大学大四学生黄鑫编辑了一个可以控制别人电脑的程序“冰河”,他实习工作的同事建议他放在网上。

    “这么好玩的软件,为什么不与更多人分享呢?”

    谁能想到“冰河”竟然会爆炸性传播开来,它后来成为了中国最著名的木马程序,黄鑫也在小小年纪就成为中国“木马教父”。

    事实上,黄鑫写这个程序纯粹是出于好奇,并没有任何恶意。

    一年前,黄鑫因为打架被西安电子科技大学开除学籍,尽管在悔过恳求后,老师们同意他继续完成学业,但却是拿不到毕业证的。

    黄鑫

    黄鑫也着实天才,只苦学半年,便补上之前三年功课,同时还学会了C++、汇编语言等作为自己将来谋生的手段,同时还在大四进入了软件公司实习。

    事实上,早期黑客群体中存在大量高校学生。

    究其原因,中国互联网的前身就是中国教育科研网。

    1996年,清华大学、北京大学、上海交通大学、西安交通大学、华南理工大学、东南大学等六所高等学校提交了建设教育科研网建议书,当年这个网络便开通,连接的正是北京、上海、广州、南京、西安等五所城市。

    这五座城市高校的学生群体中,凡是无心上课又爱搞事的,一定会找到很多低成本上网的机会,所以才会诞生大量黑客。

    毕竟,还有什么事比作“黑客”更酷呢?

    在黄鑫写“冰河”的这个时间,他隔壁学校西北工业大学的杨冀龙也进入了黑客圈子。

    杨冀龙当时在读大三,在西北工业大学帮老师管理信息中心,有大量的时间免费泡在网上,可以经常和其他黑客交流。

    这时候,年轻黑客们能学的东西实在不多,除了光盘、书籍,他们中间最流行的还是一个叫Coolfire的台湾人写的“黑客八篇”。

    Coolfire真名林正隆,台湾人,他在互联网的蛮荒期,写了八篇影响深远入门文章,每篇开头都是:“这不是一个教学文件,只是告诉你该如何破解系统,好让你能够将自己的系统作安全的保护……若有人因此文件导致恶意入侵别人的电脑或网络,本人概不负责!!”

    在警告大家不要入侵别人电脑后,他就开始认真教大家入侵别人电脑。

    与此同时,林正隆还制定了“13条黑客守则”,从“不恶意破坏任何的系统……”到“不要将破解账号分享与朋友……”。

    可以这么说,林正隆几乎写了一份《Coolfire——黑客菜鸟入门指南》。

    黄鑫、杨冀龙这种大陆的后辈们都因此受益。

    在黄鑫写出“冰河”前几年,一个名叫龚蔚的上海游戏玩家也阅读了《Coolfire》指南。

    龚蔚本来是玩单机游戏受挫,想学点黑客技术破解游戏机,结果读完《Coolfire》觉得整个人生都被升华了,甚至因此在注册了“绿色兵团”这个黑客站点,不过访问者寥寥。

    在之后的印尼排华事件,中国驻南斯拉夫大使馆被轰炸事件中,龚蔚以爱国主义为号召,纠集黑客进行反击,一时应者云集,号称加入者有3000人。

    不过说实在的,这时候大家所谓的“加入绿色兵团”,其实也就是在这个站点注册会员,并没有牢固人员从属关系。

    年轻黑客们自然纷纷加入。

    绿色兵团不仅是黑客组织,也是教育平台,许多年轻人受影响成为黑客。

    季昕华(今Ucloud创始人)曾经对雷峰网说过,他本来只是大学计算机中心管理学生,是加入绿色兵团后才开始真正学习安全知识的,李滨(今腾讯云安全总经理)也对雷峰网谈过类似经历。

    同样是1999年,绿色兵团在上海延安东路128弄6号(星空网吧)召开第一次年会。

    一个叫沈继业的人出现了,绿色兵团原成员周帅对雷峰网称其为“说客”。当时,大家传说他是从事资本运做的北京人。

    沈继业其实也是技术出身,清华自动化系1986年入学,此时他刚刚卖掉自己上一家公司,看好网络安全,也看好绿色兵团,于是奔赴上海,说服了龚蔚等核心成员,将绿色兵团进行商业化运作,随后绿色兵团转轨并拥有了自己的网络安全公司:上海绿盟计算机网络安全技术有限公司。

    一年后的3月,绿色兵团与中联公司合作了北京中联绿盟信息技术有限公司,同年7月,北京绿盟和上海绿盟因内部原因合作破裂,北京绿盟启用新域名。

    《沸腾十五年》里对这段堪称中国网络安全历史上第一场公案有过详细的描述,各位读者可以自行购阅,最终结果是:

    自认为绿色兵团的衣钵继承者、希望继续走民间路线的上海绿盟无声无息自然消亡;而沈继业成为北京绿盟老大,现北京绿盟已上市。

    北京绿盟吸引了大量需要工作的黑客,卜峥、袁哥、小四、hume、star等纷纷前往北京,成为其麾下大将。这11个人和沈继业一起并称为绿盟的12元老。

    绿色兵团的成功引人注目,国内开始形成黑客团体风潮。

    当时只有16岁的吴翰清建立了幻影旅团,万涛建立了中国鹰派,王俊卿创立了0x557,这是后话……

    时间再次回到1999年初,杨冀龙当时还在西北工业大学读书,日常负责学校计算机中心的管理工作。

    这天晚上,杨突然看到有人在网上发布了“黑客game”,声称“我这里有个服务器,你们都可以过来攻击,谁能突破过去,拿到最高权限,就可以到北京来找我请吃饭。”

    年轻版杨冀龙

    杨冀龙顿时起了胜负心,也觉得非常好玩,于是在学校电脑上敲动命令行,一晚上没睡觉,竟然成功通关了。

    后来众黑客曾对雷峰网回忆,这应该是中国第一个CTF夺标赛,而杨冀龙一不小心好像成为了第一位通关者。

    发布这个“黑客game”的网站就是安全焦点。

    二、燕赵慷慨悲歌士,纷纷相逢剧孟家

    杨冀龙通关比赛后,自然要找比赛的创办者的王英键请吃饭。

    王英键此时正在天津理工大学读本科,却已经是安全焦点的核心人物之一了。

    一年前,王英键在网上结识了一个叫张迅迪的年轻人。

    张迅迪是一个酒店网管,人长得帅,舞跳得也好,英文超级棒,甚至偶尔代理酒店KTV的DJ。

    张迅迪在网上办了一个叫“安全焦点”的论坛,经常翻译国外技术文章放在上面。

    从《Coolfire》流行这件事,大家应该可以看出,其实早期的黑客们大多非科班出身,大部分英文水平真的不咋底,但又非常渴求国外技术,所以就一股脑向“安全焦点”涌来。

    王英键光刷文章不过瘾,于是给张迅迪发去邮件,一番交流,两个年轻人迅速成为好朋友。

    在一台破旧的老台式机上,王英键为安全焦点网站做了一个CMS发布系统,成为了核心成员。

    不久,一个叫吴鲁加的年轻人(今知识星球创始人)也加入进来。

    吴鲁加1999年时正在厦门一个喇叭厂做销售人员,这是他毕业两年间换的第八份工作,因为不小心把电脑里的销售数据搞丢了,所以不得不专研网络技术,每天混迹各种安全论坛。

    加入安全焦点之后,吴鲁加更是积极与各路黑客交流。

    这段时间,他也渐渐有了名声,刚刚加入安全焦点的“木马教父”黄鑫同学便到厂里来拜访他。

    在吴鲁加的办公室兼卧室里,两人痛饮畅谈。

    因为没有床铺,吴鲁加便把唯一的沙发让给黄鑫睡,自己则披毯卧地,甚至在半夜把毯子也盖在了黄鑫身上,先人后己,颇具古人风范。以至于,黄鑫多年后都在感慨,吴鲁加是一个值得深交的朋友。

    这时候2000年已近在眼前,“千年虫”问题即将到来,网管张迅迪不得不为了酒店的调试忙碌起来。

    张迅迪告诉吴鲁加和王英键:“我要忙一阵了,你们可以帮我一起管一下网站。”他把服务器的管理权限也交给了吴鲁加和王英键。

    安全焦点三剑客正式出道,三人努力运营论坛,影响力越来越大。

    因为在安全焦点认识了很多黑客,吴鲁加的技术越来越好,他收到了两棵橄榄枝——北京绿盟和华泰网安。

    2000年左右,国内三大安全公司鼎足而立——北京绿盟、华泰网安、安络科技。

    后来深圳的安络科技衰落,北京的启明星辰崛起取而代之。(安洛科技基于辰光工作室,谢朝霞请来了深圳老资格的互联网人张春晖与其共同创业。2001年年初,ISB投资公司给安络科技投资100万美元,谢朝霞出任副总,出任总经理的是张春晖。但2002年张春晖与谢朝霞分手单飞,谢朝霞独掌安络。)

    总而言之,这段时间,众黑客云集大北京。

    吴鲁加毅然决然的选择了华泰网安,毕竟华泰网安规模更大,但真正去了之后,他发现自己主要工作是渗透服务、安全咨询和售前,工作相当空闲。

    一段时间后,吴鲁加觉得这不是自己想要的,于是又毅然决然跳槽绿盟。

    绿色兵团消失,绿盟变成了商业公司,众黑客仍然需要一个精神家园,他们自然纷纷加入安全焦点。

    绿盟、启明星辰、华泰网安的骨干们白天是公司员工,晚上就成了安焦这个组织核心成员,堪称安焦18罗汉,后来的欧阳梅雯(shotgun,今360战投副总裁)、TK教主、袁哥、吴云坤(今奇安信总裁)、deepin、stardust……都成为安全焦点的常客。

    在安全焦点日益壮大的时候,这时候黄鑫却遭遇了半个月的牢狱之灾。

    这年五一长假刚结束,黄鑫就被拘留了。

    按照黄鑫的设计,冰河的控制者会默认申请一个21CN邮箱收取被控制者的IP地址,结果中间出现了循环错误,以至于所有中了冰河的电脑,每隔1分钟就会给21CN发送邮件。21CN服务器崩溃了。

    相关部门无法查证多少人使用了冰河软件,只好抓了黄鑫这个作者。

    但这其实是一个误会,因为黄鑫并没有入侵21CN,甚至从来没有恶意控制过任何人的电脑。

    在安全焦点等黑客群体的营救下,黄鑫最终被证明于此事无关,也没有留下案底。

    随着人们对冰河的滥用,黄鑫停止维护这一远程控制工具,而是反过来开发了一个名叫“冰河陷阱”的免费应用,专门清理电脑中的“冰河木马”,甚至可以让使用者能够直接对话控制者,“你的木马已经被发现了。”

    “冰河”现在网上已经绝迹了,“冰河陷阱”一直到现在网上还有下载。

    与此同时,黄鑫把主要精力投入在免费安全检测工具X-scan上,这让他收获了大量粉丝。

    这一日,黄鑫收到一个名叫杨勇(今腾讯安全掌门人)的大学生发来的粉丝邮件,后来对方又主动提出要帮他测试X-scan,于是便把自己新写的版本交给了他。

    这学生在男女比1:10的首经贸大学读书,天天不好好谈恋爱,就知道专研技术,可见其也非凡人。

    黄鑫竟然真的收到了杨勇发来的X-scan技术错误,深感这小子也是个人才,于是发信感谢:“你有空来我们这边转转吗?请你吃饭!”

    很多年后,杨勇告诉雷峰网,他走上安全这条职业道路过程中,对他影响最大的一件事是“遇见贵人,比如像我遇见了冰河(黄鑫)”。

    那一天,杨勇在饭局上陆续见到了王英键、吴鲁加、杨冀龙、王娟、蔡晶晶(今永信至诚创始人)、王伟……从此,他成为了安全焦点的一份子。

    在某次饭后,王英键将大家拉到自己和黄鑫、娟子出租屋,宣布自己想要办“黑客大会”,取名Xcon。

    在场众人听后,各个拍手称赞,都表示非常支持Xcon。在热火朝天讨论一圈后,大家发现现在面临着一个大问题——想办事,没有钱。

    三、知己相逢显神技,一剑成名天下闻

    Xcon现在已经是国内最顶尖、最权威的闭门黑客大会,自2002年开办,到现在已经二十年整,在世界范围内都有了影响力。

    网上能查到的信息都说,Xcon起源于美国超级黑客Jeff Moss创办的DEFCON,但其实并不是这样。

    时间再次回到本世纪初。

    吴鲁加、王英键参加了由当时刚从《电脑报》副主编去天极网做总编辑的林军发起(这也是为什么第一届黑客大会电脑报主办、第二届天极网络主办的原因)、网络版编辑熊杰张罗的,在北京办的黑客大会,他们终于见到了从温州赶来的张迅迪。

    各路方面军终于陕北会师,大家激动坏了,喝了很多酒。

    大会招待酒店提出:“最大的房间只能住两个人。”

    他们立刻表示:“我们三个要在一起,打地铺也可以。”那天晚上,他们通宵畅聊,怎么说话也说不够。

    按道理说,绿盟、华泰、启明三大网安公司都在北京,张迅迪作为大黑客为什么不来北京打拼?

    据某个不愿透露姓名和性别的杨冀龙老师说,因为张迅迪长得太帅、舞跳得太好,所以老婆不放心。一直到15年后,他才被允许离开自己工作的地级市酒店,“被迫”拿了阿里几千万股票后,入职阿里高级安全专家。这已经是前几年的事了。

    当年和张迅迪分开后,王英键一直心心念念,想要“办黑客大会”,让大家再聚一聚。

    就在此时,安全焦点上有人反应,一个叫方兴(ID flashsky)的人文章有问题。

    方兴是什么人?

    相比于安全焦点年轻的黑客们,方兴30岁才开始学习计算机技术。

    在此之前,方兴因为专科毕业,做过工人、出纳、保险推销员、代课老师、电脑出单员,因为帮女服务员挡酒得罪过领导,被“优化”到大山深处卖农机;因为反抗同事歧视,遭到过开除。

    8年时间里,方兴换了8份工作,也真真是轻狂任侠,眼里不揉沙子。

    方兴怎么会容忍别人质疑抄袭?

    于是,他连续发文反驳,在这些文章中,他展露了超出常人技术,以及对二进制底层的深刻理解。

    黄鑫、季昕华和他英雄惜英雄,于是立刻引荐他加入安全焦点,经过一轮投票表决,大家都同意了他的加入。

    2002年夏天,王英键在京郊南城世纪公园旁边办起了第一届Xcon。

    前文不是说没钱吗?绿盟和启明星辰后来赞助了一部分。

    Xcon核心成员一半都是绿盟骨干,另一半则是欧阳梅雯这些启明星辰骨干,这两家自然出钱赞助。

    那华泰网安去哪了呢?它已经被收购,后来就没有存在感了。

    大会开始以后,沈继业作为赞助商被请上台讲话。

    沈继业接过话筒道:“讲话?我知道在这种会上,我讲什么话都让人讨厌,不说了,就这样吧。”

    如此一来,启明星辰的代表也不好意思讲话了,这也开创了一个惯例,Xcon大会没有领导讲话环节,所有人上来都直接谈技术。

    雷峰网《08年奥运黑客今安在》一文中提到的“四大黑客”中两位——江海客和季昕华都站上了演讲台,分别演讲了《基于网络流和包的病毒检测》、《Adhoc 安全防护》。

    后来Xcon越来越与国际接轨,王英键甚至邀请到了世界宗师级大黑客、自由软件之父Richard Stallman过来演讲,听讲的人几乎都经历了一场圆梦之旅。

    赛门铁克首席软件工程师Matt Conover也来过Xcon演讲,他是一个16岁就提出缓冲区溢出攻击的少年天才,演讲时也才二十岁出头。

    不过,Matt Conover中文水平不太好,于是向某个动物爱好者杨冀龙老师请教:“Hello, World!”程序用中文应该怎么说?

    杨冀龙非常耐心的把一种起源于美洲的动物名字翻译给了他。然后,Matt Conover就非常自然的在大会中频频引用“草泥马”三个字,引得听众大笑。

    要知道,Matt Conover还有另一个身份,他可是w00w00(自称世界最大的黑客组织)创始人之一。

    对于w00w00,大家可以不严谨理解为美国版“安全焦点”,他们有30多个核心成员——比安焦人可多多了,后来这些人大部分去了微软、谷歌,也有做起公司卖给Facebook,比如whatsup创始人詹·库姆。

    幸好,Matt Conover并未生气,或者说双方各得其乐。

    年轻的黑客们只要聚在一起,总是欢乐多多。

    相比于欢乐无限的杨冀龙,Xcon更多时候拜托当时启明星辰的演讲嘉宾、后来去了McAfee的赵伟担任翻译。

    很多年后,众黑客仍然对赵伟的翻译水平啧啧称叹。

    理想状况中,最顶尖的黑客大会Xcon开完以后,舆论爆炸,各种报道连篇累牍。但现实情况却是,每次Xcon大会开完,社会上并没有什么人知道这件事。

    原因很简单,早期黑客们都比较抵制媒体,闭门大会既没有观众来看,也不许媒体进入,这也导致Xcon用了很多年才建立起应有的名声。

    不过,安全焦点的名声已经压不住了。

    Xcon首届大会后不久,方兴在分析微软MS03-26漏洞时,论述他对RPC DCOM漏洞的发现,于是赶紧撰写文章发给了季昕华。

    两个人彻夜不眠,用了整整两个晚上对其进行分析,最后以“安全焦点”的名义发布在著名的国际漏洞网站SecurityFocus上。这是世界上第一篇公布 RPC DCOM漏洞技术细节的文章。

    一个月后,根据RPC DCOM漏洞开发的“冲击波”病毒席卷全世界,数千万台微软系统电脑因此中招。

    微软因此遭遇严重危机,于是紧急召开全球发布会,一方面指责安全焦点的方兴等人没有责任心,另一方面却在两年后试图招募方兴进入微软中国工作。

    这里有两个细节值得注意:方兴和季昕华的文章是针对英文版Windows写的,而英文版和中文版Windows是不一样的,所以震动世界的“冲击波”蠕虫病毒在中国吃了瘪,它在中文版Windows上攻击失败。

    另一点,信息安全行业的规则是,大家可以针对已经有补丁的漏洞撰写技术文章。微软当时已经发布了补丁,但是他们并没有帮助用户们建立打补丁意识。

    按照季昕华对雷峰网的说法,他们发布文章前曾经给微软发过邮件。但微软显然没有认识到这篇文章的重要性,他们实在没想到中国还有这样的技术力量。

    四、三十六峰长剑在,斗牛相分星各明

    经历这件事后,安全焦点在全球互联网面前大大露脸,世界各地无数技术爱好者发来称赞邮件,中国黑客的技术实力近一步被社会承认。

    中国年轻黑客们终于可以吃口饱饭。

    为什么这么说?因为现实情况就是这么惨。

    众黑客告诉雷峰网:“网络安全是一个小康类需求,整个中国互联网行业都还在温饱线上挣扎,谁愿意花钱做网络安全呀!”

    自2000年互联网泡沫破灭,整个行业都一片灰暗。

    绿盟虽然是行业头马,英才荟萃,却在2002年有整整半年发不出工资,其他的黑客更是缺少稳定收入。

    沈继业脸上总是愁云密布,这时候,他又从吴鲁加处听到一个不好的消息,“安全焦点比绿盟名气更大”。

    沈不相信,于是在谷歌页面进行搜索,结果发现安全焦点的索引比绿盟多得多,这下感到更加丧气。

    也就是在Xcon举办的当年,王俊卿(la0wang, 0x557 创始人,今锦行科技联合创始人)在上海待业了半年,正如他后来对雷峰网说的那样——“所有愉快的面试,都终止在我拿出高中文凭的那一刻”。

    王俊卿

    幸好,老王遇到了欧阳梅雯,于是入职启明星辰。

    多说一句, 0x557 创业群体达成的总市值,可能是国内黑客组织中第一名,全球范围内也仅次于前面提到的w00w00(主要他们家有WhatsApp!这挂谁比得过啊)。

    但是,当年的黑客们实在需要吃饭的出路啊!

    吴鲁加这段时间比较幸运,遇到了欧阳梅雯的挖角,在2003年的情人节这天,这两个大胡子男人边喝红酒边聊天,结束后才发现周围情侣都在看他们。

    吴鲁加本来是坚定不走的,结果遇到了启明星辰严望佳亲自出马,于是只好跳槽,做了启明星辰在深圳的CTO。

    不过,他在启明星辰一共也就工作了差不多两年。

    2005年初,黄鑫因为X-scan做的太好,总是有创业的欲望,于是与吴鲁加约定,“各自努力3个月,不行就辞职创业”。

    结果时间只过去几个星期,黄鑫就突然给吴鲁加邮寄过去十几个箱子,吴鲁加只好离职创业。

    在启明星辰投资下,两人做了一家叫大成天下的公司,主要做防信息泄密业务。

    后来,大成天下与知名黑客董志强(killer)的超级巡警进行合并,但没有1+1大于1,killer辗转去了百度,如今是腾讯七大实验室里的云鼎实验室的负责人。

    今天,大成天下的主打产品是知名的知识付费服务平台知识星球,知识星球的最开始名叫小密圈,这名字很黑客。

    腾讯也是大成天下的重要股东之一。

    时间回到2006年,这时候随着网络资产和恶意攻击的增多,人们的安全需求也越来越多。

    赵伟找到杨冀龙、方兴、余弦等人,说了一句007经典台词:“世界是邪恶的,但不是因为那些邪恶的人,而是因为那些无动于衷的人。”

    赵伟

    他们创办了一家名叫知道创宇的公司,并且推出了365门神这个to c产品。

    但是不得不说,他们这一批创业的人都比较倒霉,正好赶上了360免费。

    360免费事件带来的冲击,不但让to c安全产品们失去了市场——365门神就是这样消失的;而且让to b产品失去了客户——比如姜向前和姚纪卫当时做的反病毒引擎,明明已经被评为国内第一了,但是甲方倒了,仍然没有生意可做。

    方兴后来又离开知道创宇,和王伟做起了翰海源,主要做反APT攻击,在该领域首屈一指,然后卖给了阿里;

    这批创业者真正翻身,还是2010年3Q大战之后。

    恐怖平衡下,腾讯为防范360,开始撒钱投资给各家。这中间几年,各家都有一段苦苦支撑期。

    除了创业,黑客们另一条路就是去大厂。

    季昕华作为第一位被大厂招安的黑客,先开创了华为安全业务,2004年又开创了腾讯安全,之后创办了UCloud,具体经历可以参见《08年奥运黑客今何在》;

    杨勇本来是在《电脑爱好者》杂志做“实习编辑”,结果毕业后杂志社裁员,他失去了工作。在黄鑫的引荐下,杨勇先去了航天科技集团,之后又在安全焦点朋友推荐下,2005年去了腾讯和季昕华搭班子,现在是腾讯安全平台掌门人;

    李滨先是被吴鲁加拉进了绿盟,后来季昕华拉他去华为,他没有去,却阴差阳错去了天融信,前几年也去了腾讯,现在是腾讯云安全总经理。雷峰网在2021年GAIR后和他聊了会,他意气风发,指点江山,一想他也才40出头,正当年。

    五、人生难得乘好风,不避利害是豪雄

    时间回到2008年,在季昕华、TK、江海客、袁哥这些人正为奥运网络安全保驾护航之时,安全焦点论坛网站已经被DDoS攻击打的生不如死。

    在经历无数次开一周、关一周的挣扎循环后,张迅迪不得不选择关闭论坛网站。

    安全焦点的故事渐渐只剩传说,唯独王英键在经营公司的同时,每年仍然坚持办一场Xcon,邀请大家从世界各地过来一聚。

    这里不得不提一个大家早年的遗憾,早期在Xcon上演讲成名的黑客大多数去了国外大公司。

    因为国内互联网太过早期,安全产业发展时间没到,黑客们太不挣钱,确实没有容身之地。

    一直到前些年移动互联网热潮形成,各种应用需要安全加持,国内的安全产业才算真正起来。

    尤其在3Q大战之后,腾讯几乎是有计划的招收传奇黑客。

    马化腾投资知道创宇团队后,曾经专门询问杨冀龙怎么做安全。

    杨冀龙建议腾讯:第一,要挖些真正的骨灰级黑客,因为骨灰级黑客从底层原理到应用都懂,他们可以真正加强腾讯自身安全;第二,要投资产业各个方向的一些安全公司,在外围生态上提升实力。

    在此之后,杨冀龙又交给腾讯任宇昕和丁珂一张名单,上面就写着方兴、吴石、TK、袁哥、Killer……这些传奇黑客们的名字。

    后来腾讯的七大安全实验室,几乎就是为这些人设置的。

    关于腾讯和360、阿里抢人这件事,这又是另一个故事,请持续关注沸腾科技史系列新书《沸腾信安志》。

    因为老是办Xcon,王英键渐渐被视为黑客界武林大会召集人,因此有了一个响亮的名头——呆神。

    随着Xcon名声日涨,王英键寻找嘉宾演讲,也从约稿,变成了耐心审稿,甚至还因此拒绝过一位新生代漏洞之王——黑哥。

    在被拒稿后,黑哥并没有放弃,再之后一年又再次投稿,仍试图上Xcon演讲,但是仍然被拒绝。

    不过,黑哥也不气馁,因为他当时主要精力还是在医学上。

    不久之前,黑哥还跟雷峰网说:“其实我是真的热爱医生这个职业,只不过作为一个本科生,我在市医院的工作已经到头了,很难再有发展空间,所以才在有孩子后,被迫将业余爱好变主职。”

    黑哥一方面是漏洞之王,web安全集大成者,另一方面也是益阳市人民医院的杰出外科医生,曾经手刃无数jj,堪称包皮终结者。

    在黑哥做外科医生期间,吴翰清就曾经邀请过他,因为他挖过很多微软漏洞,第一个提出CSRF Worm概念,甚至去淘宝给安全团队培训web2.0下的渗透测试。

    黑哥一开始对大厂邀请通通拒绝,于是网上纷纷传说黑哥开“玛莎拉蒂”。

    实际上,黑哥挣着一个月三四千的工资,每天抱着孩子说“妈的拉了”。

    2011年,黑哥有了孩子,觉得自己需要更多的钱,于是提出三个条件找安全类工作,最重要的是在家里工作,很快被知道创宇的赵伟挖掘,做了CSO(首席安全官)和404实验室总监,钱翻了N倍。

    说来也巧,TK教主也是因为有了孩子,需要更多的钱,所以才从绿盟跳槽腾讯的。

    可见,孩子是黑客进步的阶梯。

    黑哥不仅朴实,而且心地善良,甚至因为做好人好事上过电视。

    黑哥2011年左右下班回家,在路上看到有个人心脏病犯了,躺在车库地上不能动弹,如果没人救就性命堪忧。

    黑哥路过伸出了援手,救人性命。其实,当时社会上正因为彭宇案的影响,风气非常冷漠,就是黑哥救人前后,某地才发生的“小悦悦事件”(18人路过都没救2岁小女孩)。

    黑哥在网上找漏洞,在医院治病,在没人看见的路上也救人,仁心仁术,这样的黑客即便掌握最强的攻击技术也让人安心。

    但是,Xcon不知道能不能安心了。

    在黑哥加入知道创宇后一年,知道创宇打造了千人规模的黑客大会Kcon,并且每年一届。

    Xcon后来每次被人对比时,最大的对比对象就是Kcon。

    2015年之后,随着4G的普及,中国的互联网产业进入了爆发期,电子商务、互联网金融、共享经济、推荐引擎、社区团购都来了,整个行业对安全的去求迅速暴增。

    本来不吃香的安全人员,现在突然紧缺起来,而且是缺口非常大。

    王英键便和蔡晶晶创办了“神话行动”,在齐向东(奇安信创始人)赞助下,培养了一批优秀学员。后来,这些人都成了信息安全领域的精英。

    在众黑客看来,现在才是安全行业的好时代,国家重视,技术领先,大家各种机会都有了。

    六、后记:

    上世纪90年代,中文环境里出现了“黑客”一词,最早是出现在学术期刊中,代指技术高超的电脑专家,是个完全的褒义词,并不代指入侵别人电脑的人。

    但是这些年,这个词的意思已经变味了,这就有必要讨论一下“黑客精神”。

    吴翰清在《白帽子讲Web安全》中说:“最为纯粹的黑客精神实质上已经死亡”

    张迅迪给安全焦点喊的口号是:“from internet for internet。”

    方兴说:“黑客精神是创新与自律。黑客最大的价值是发现有价值但未知的东西。黑客因为具备了攻击和控制网络设备的能力,很容易利用这种能力去获取利益,并造成较大危害,所以一定要克制的使用这些能力。”

    杨冀龙说:“黑客精神有四点,一是对未知的探索、二是永不退缩、三是逆向思维、四是有正义之心。”

    欧阳梅雯在知乎上为了形容“黑客精神”,更是写过一个精彩的引用,这是《天龙八部》里描写风波恶的内容:

    “那黑衣汉子站在独木桥上,身形不动如山,竟是一位身负上乘武功之士。那挑粪的乡下人则不过是个常人,虽然生得结实壮健,却是半点武功也不会的。

    我越看越是奇怪,寻思:这黑衣汉子武功如此了得,只消伸出一个小指头,便将这乡下人连着粪担,一起推入了河中,可是他却全然不使武功……

    这黑衣汉子口中被泼大粪,若要杀那乡下人,只不过举手之劳。就算不肯随便杀人,那么打他几拳,也是理所当然,

    可是他毫不恃技逞强。这个人的性子确是有点儿特别,求之武林之中,可说十分难得……像这样的人,算不算得是好朋友、好汉子?”

    网络安全行业和武侠江湖是很像的,有门派组织,有江湖喝号,有武林大会,有绝计和宝物,而且都是大侠少而恶盗多,甚至连朝廷的管制方式都很相似。

    这种氛围里,竟然出了这样一群奇人。

    他们在最艰苦的岁月里,只要把道德底线稍微降低一点,就可以衣食无忧,然而他们没有;

    他们掌握着最高超的技术,却拿着流量行业一半甚至更低的薪水,只要稍微做点灰产,就能摆脱困境,然而他们没有;

    他们忍受着社会的质疑,承担着行业流氓带来的负面,却仍然坚持着自己热爱的技术创新。

    直到现在,他们终于等到了自己的时代。

    2018年,世界最顶级黑客大会Defcon China在中国举办,这是它创办二十五年来第一次离开拉斯维加斯。百度马杰和王英键一起做了很多努力。这个故事足够精彩,我们也会写进《沸腾信创志》里。

    尽管Defcon的主办团队绝大部分人都非常反对,但是创始人Jeff Moss却非常坚持。

    据说,Jeff Moss是被这句话打动的:

    “Defcon在美国的发展已经到头了。我们中国现在有最庞大的用户群,有最庞大的安全技术爱好者群体。你除了中国,没有更好的选择。”

    正是:

    天下英雄出我辈,一入江湖岁月催。

    尘事如潮人如水,江湖正好几人回。

    这是一篇预热文,自2021年记述互联网史的《沸腾十五年》修订本、移动互联网史的《沸腾新十年》上下卷出版后,沸腾科技史系列受到广泛欢迎。雷峰网已经启动了另一本科技史新书《沸腾信安志》的拜访与采写工作。

    近年来,中国互联网产业的日趋成熟,信息安全行业随之也进入红利期,但这一切离不开过去20年间信息安全从业者的苦心耕耘。《沸腾信安志》不仅想要记述信息安全行业的早期发展契机,也想展现行业进行时各位贡献者的风貌,更想铭记技术创新者们对未来的诸多想象。

    期待读者,尤其是技术贡献者与我们讨论,本文作者林觉民,微信linjuemin_vx。

  • 数据库 | .frm .myd .myi 这些MY SQL文件怎么导入?

    数据库 | .frm .myd .myi 这些MY SQL文件怎么导入?

    平常我们倒入MySQL数据库表一般是通过phpMyAdmin工具,通过导入按钮,选择.sql文件执行即可。今天准备测试一系统的源程序,准备导入.sql文件,找了半天没找到,发现数据库文件是MYI,frm和myi文件,不是平常用的.sql文件,以前没有用过这种文件,以前都没有注意到这一点。网上搜索了一下,呵呵,顺利导入到MYSQL中了。

    首先我们先介绍一下.frm .myd .myi是什么文件。.frm .myd .myi都是Mysql存储数据的文件, 代表MySQL数据库表的结构/数据和索引文件 ,我们默认创建数据库和表时只生成数据库表结构的文件.frm. 移植数据库时,必须存在三种格式的数据库表文件,才能正常使用该DB。

    打开你的在mysql的data目录,你可能还会遇见另一种文件格式 .opt你可以用文本编辑器打开,可以看到里面保存的是编码信息。.frm,myd,myi是属于MySQL存储数据的文件,phpMyAdmin是无法导入的。phpMyAdmin支持的文件格式为sql文件。以下是操作方法的相关介绍,希望对大家有帮助。

    其实操作很简单:

    1、新建个数据库,名称与程序中conn.php中的相同(或者你随便取个,把conn.php中的数据库名修改成与你刚建的一致),假如为testdb

    2、这时你会发现mysql目录下会生成你刚建的以数据库名命名的目录testdb

    3、将源程序中的.opt、.frm、 .myd、 .myi等文件都放到这个文件夹中。

    这时你再用phpMyAdmin看testdb数据库发现里面有很多表及相应记录了,说明导入数据成功了!

  • 仿shici365古诗词源码 带完整有效 安装教程

    shici365古诗词原是一个已经做到了权重1~2的网站,后不知何种缘由没有继续,机缘巧合下小编收集到了这套源码,现免费提供给大家下载,或许有人能重获机缘,飞腾而上。

    注:本套源码来源于网络,因修改麻烦,但小编完成测试过,程序完整,可行!网络上提供的安装说明太简洁,会有问题的。

    本套源码收录华夏古文学各朝代的典籍,包含古诗词,名言名句,诗人介绍,古书古籍,历史介绍,成语介绍,搭建起来就可以运营了 。

    安装教程

    1、数据库文件在根目录下面,解压后可以直接使用

    备注:在网站上线前,先使用批量修改工具(如notepad)修改:“abc.com”替换为“你的域名(不带www)”。

    2、配置文件

    Huanabcd\common.php

    3、域名解析及建站

    根目录 —— 解析“www”、“@” ; Mobile —— 解析“m” ; So —— 解析“so”

    4、后台文件、初始化后台账号密码

    后台地址:域名/admin ;账号:guanli 密码:123456

    网站上线后请及时修改后台地址以及用户名密码!

    5、模板文件路径

    templates\gushi

    6、内容建设注意事项

    在下图“系统基本参数”位置,填写你的网站tdk,以及域名信息。

    填写完毕上述信息后,需要点击清理缓存。

    安装中遇到的问题:

    [content_hide]

    1,数据库问题:数据库不是SQL格式,可以新建数据库后,找到新建的数据库目录,直接导入数据库文件,参考网址:https://pmself.com/1396.html

    2,网站ADMIN管理后台不能打开的问题,一般是PHP的版本问题,修改为PHP5.6即可;MYSQL也要低版本5.6;

    3,网站后台系统参数修改不了,此问题需要改变数据库文件夹的权限为777即可;然后需要重启数据库!刷新网页缓存!

    4,404错误的问题,这个问题是测试最久的,解决方法,如果nginx服务,则要转换静态规则,根目录中的是apache环境下织梦网站伪静态规则  .htaccess 文件;

    [/content_hide]

    5,终于得到解决,对于新手菜鸟来讲,是有难度的,除以上4关键个问题外,到此基本完毕,无错误!程序完整可行!


    古诗词源码 – 演示截图

  • 黑客帝国屏保源码

    黑客帝国屏保源码

    黑客帝国屏幕保护设置

    1. 打开VS2010或以上版本,新建—>项目,Visual C++,win32,选择win32控制台应用程序,名称填写为”hacker”。

    2. 将一下代码复制到项目源文件中

    黑客帝国屏保源码

    //数字流星雨   作者:Wicrecend
    #include "stdafx.h"
    #include <windows.h>
     
    #define ID_TIMER    1 
    #define STRMAXLEN  25 //一个显示列的最大长度 
    #define STRMINLEN  8  //一个显示列的最小长度
     
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; 
    ////////////////////////////////////////////////////////////////// 
    ////////////////////////////////////////////////////////////////// 
    typedef struct tagCharChain //整个当作屏幕的一个显示列,这是个双向列表 
    { 
            struct tagCharChain *prev; //链表的前个元素 
            TCHAR  ch;                  //一个显示列中的一个字符 
            struct tagCharChain *next; //链表的后个元素 
    }CharChain, *pCharChain;
     
    typedef struct tagCharColumn 
    { 
            CharChain *head, *current, *point; 
            int x, y, iStrLen; //显示列的开始显示的x,y坐标,iStrLen是这个列的长度 
            int iStopTimes, iMustStopTimes; //已经停滞的次数和必须停滞的次数,必须停滞的次数是随机的 
    }CharColumn, *pCharColumn;
     
    int main(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
                        PSTR szCmdLine, int iCmdShow) 
    { 
            static TCHAR szAppName[] = TEXT ("matrix") ; 
            HWND            hwnd ; 
            MSG            msg ; 
            WNDCLASS    wndclass ;
     
            wndclass.style                = CS_HREDRAW | CS_VREDRAW ; 
            wndclass.lpfnWndProc        = WndProc ; 
            wndclass.cbClsExtra        = 0 ; 
            wndclass.cbWndExtra        = 0 ; 
            wndclass.hInstance        = hInstance ;
     
    wndclass.hIcon                = LoadIcon (NULL, IDI_APPLICATION) ; 
            wndclass.hCursor        = LoadCursor (NULL, IDC_ARROW) ; 
            wndclass.hbrBackground        = (HBRUSH) GetStockObject (BLACK_BRUSH) ; 
            wndclass.lpszMenuName        = NULL ; 
            wndclass.lpszClassName        = szAppName ;
     
            if(!RegisterClass (&wndclass)) 
            { 
                MessageBox (NULL, TEXT ("此程序必须运行在NT下!"), szAppName, MB_ICONERROR) ; 
                return 0; 
            }
     
            hwnd = CreateWindow (szAppName, NULL, 
                                WS_DLGFRAME | WS_THICKFRAME | WS_POPUP, 
                                0, 0, 
                                GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), 
                                NULL, NULL, hInstance, 
                                NULL) ;
     
            ShowWindow (hwnd, SW_SHOWMAXIMIZED) ; //最大化显示 
            UpdateWindow (hwnd) ; 
            ShowCursor(FALSE); //隐藏鼠标光标 
              
            srand ((int) GetCurrentTime ()) ; //初始化随机数发生器 
            while (GetMessage (&msg, NULL, 0, 0)) 
      { 
                TranslateMessage (&msg) ; 
                DispatchMessage (&msg) ; 
            } 
            ShowCursor(TRUE); //显示鼠标光标 
            return msg.wParam ; 
    }
     
    TCHAR randomChar() //随机字符产生函数 
    { 
            return (TCHAR)(rand()%(126-33)+33); //33到126之间 
    }
     
    int init(CharColumn *cc, int cyScreen, int x) //初始化 
    { 
            int j; 
            cc->iStrLen = rand()%(STRMAXLEN-STRMINLEN) + STRMINLEN; //显示列的长度 
            cc->x = x+3 ;        //显示列的开始显示的x坐标 
            cc->y =rand()%3?rand()%cyScreen:0; //显示列的开始显示的y坐标 
            cc->iMustStopTimes = rand()%6 ; 
            cc->iStopTimes    = 0 ; 
            cc->head = cc->current = 
                            (pCharChain)calloc(cc->iStrLen, sizeof(CharChain)); //生成显示列 
            for(j=0; j<cc->iStrLen-1; j++) 
            { 
                    cc->current->prev = cc->point; //cc->point一个显示列的前个元素 
                    cc->current->ch  = ''; 
                    cc->current->next = cc->current+1; //cc->current+1一个显示列的后个元素 
                    cc->point          = cc->current++; //cc->point = cc->current; cc->current++; 
            } 
            cc->current->prev = cc->point; //最后一个节点 
            cc->current->ch  = ''; 
            cc->current->next = cc->head; 
      cc->head->prev    = cc->current; //头节点的前一个为此链的最后一个元素
     
            cc->current = cc->point = cc->head; //free掉申请的内存要用current当参数 
            cc->head->ch = randomChar(); // 对链表头的 元素填充 
            return 0; 
    }
     
    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
    { 
          HDC          hdc ; 
          //ctn 用来确定一个显示链是否 向下前进,如果等待次数超过必须等待的次数,ctn就代表要向下前进 
          int i, j, temp, ctn; //j为一个显示链中除链表头外的在屏幕上显示的y坐标,temp绿色过度到黑色之用 
          static  HDC hdcMem; 
          HFONT    hFont; 
          static  HBITMAP hBitmap; 
          static  int cxScreen, cyScreen; //屏幕的宽度 高度. 
          static  int iFontWidth=10, iFontHeight=15, iColumnCount; //字体的宽度 高度, 列数 
          static  CharColumn *ccChain;
     
          switch (message) 
          { 
            case WM_CREATE: 
                cxScreen = GetSystemMetrics(SM_CXSCREEN) ; //屏幕宽度 
                cyScreen = GetSystemMetrics(SM_CYSCREEN) ; 
                SetTimer (hwnd, ID_TIMER, 10, NULL) ;
     
                hdc = GetDC(hwnd); 
                hdcMem = CreateCompatibleDC(hdc); 
                hBitmap = CreateCompatibleBitmap(hdc, cxScreen, cyScreen); 
                SelectObject(hdcMem, hBitmap); 
                ReleaseDC(hwnd, hdc); 
                //创建字体 
                hFont = CreateFont(iFontHeight, iFontWidth-5, 0, 0, FW_BOLD, 0, 0, 0, 
      DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, 
                                    DRAFT_QUALITY, FIXED_PITCH | FF_SWISS, TEXT("Fixedsys")); 
                SelectObject(hdcMem, hFont); 
                DeleteObject (hFont) ; 
                SetBkMode(hdcMem, TRANSPARENT); //设置背景模式为 透明 
                iColumnCount = cxScreen/(iFontWidth*3/2); //屏幕所显示字母雨的列数
     
                ccChain = (pCharColumn)calloc(iColumnCount, sizeof(CharColumn)); 
                for(i=0; i<iColumnCount; i++) 
                { 
                    init(ccChain+i, cyScreen, (iFontWidth*3/2)*i); 
                } 
                return 0 ;
     
            case WM_TIMER: 
                hdc = GetDC(hwnd); 
                PatBlt (hdcMem, 0, 0, cxScreen, cyScreen, BLACKNESS) ; //将内存设备映像刷成黑色 
                for(i=0; i<iColumnCount; i++) 
                { 
                    ctn = (ccChain+i)->iStopTimes++ > (ccChain+i)->iMustStopTimes; 
                    // 
                    (ccChain+i)->point = (ccChain+i)->head; //point用于遍历整个显示列 
                      
                    //第一个字符显示为 白色 
                    SetTextColor(hdcMem, RGB(255, 255, 255)); 
      TextOut(hdcMem, (ccChain+i)->x, (ccChain+i)->y, &((ccChain+i)->point->ch), 1); 
                    j = (ccChain+i)->y;  
                    (ccChain+i)->point = (ccChain+i)->point->next; 
                    //遍历整个显示列,将这个显示列里的字符从下往上显示 
                    temp = 0 ; //temp绿色过度到黑色之用 
                    while((ccChain+i)->point != (ccChain+i)->head && (ccChain+i)->point->ch) 
                    { 
                            SetTextColor(hdcMem, RGB(0, 255-(255*(temp++)/(ccChain+i)->iStrLen), 0)); 
                            TextOut(hdcMem, (ccChain+i)->x, j-=iFontHeight, &((ccChain+i)->point->ch), 1); 
                            (ccChain+i)->point = (ccChain+i)->point->next; 
                    } 
                    if(ctn) 
                        (ccChain+i)->iStopTimes = 0 ; 
                    else continue; 
                    (ccChain+i)->y += iFontHeight; //下次开始显示的y坐标 为当前的y坐标加上 一个字符的高度 
                    //如果开始显示的y坐标减去 整个显示列的长度超过了屏幕的高度 
                    if( (ccChain+i)->y-(ccChain+i)->iStrLen*iFontHeight > cyScreen) 
                    { 
                            free( (ccChain+i)->current ); 
    init(ccChain+i, cyScreen, (iFontWidth*3/2)*i); 
                    } 
                    //链表的头 为此链表的前个元素,因为下次开始显示的时候 就相当与在整个显示列的开头添加个元素,然后在开始往上显示 
                    (ccChain+i)->head = (ccChain+i)->head->prev; 
                    (ccChain+i)->head->ch = randomChar(); 
                } 
                  
                BitBlt(hdc, 0, 0, cxScreen, cyScreen, hdcMem, 0, 0, SRCCOPY); 
                ReleaseDC(hwnd, hdc); 
                return 0;
     
            case WM_RBUTTONDOWN: 
                KillTimer (hwnd, ID_TIMER) ; 
                return 0;
     
            case WM_RBUTTONUP: 
                SetTimer (hwnd, ID_TIMER, 10, NULL) ; 
                return 0;
     
            //处理善后工作 
            case WM_KEYDOWN: 
            case WM_LBUTTONDOWN: 
            case WM_DESTROY: 
                KillTimer (hwnd, ID_TIMER) ; 
                DeleteObject(hBitmap); 
                DeleteDC(hdcMem); 
                for(i=0; i<iColumnCount; i++) 
                { 
                    free( (ccChain+i)->current ); 
                } 
                free(ccChain); 
                PostQuitMessage (0) ; 
                return 0 ; 
            } 
            return DefWindowProc (hwnd, message, wParam, lParam) ; 
    }

    3. 编译项目工程

    4. 找到生成的exe文件,将exe后缀改为scr(hacker.exe->hacker.scr)

    5. 将文件hacker.scr拷贝到C:WindowsSystem32下

    6. 鼠标移到桌面,右击,选择个性化,屏幕保护程序,选择hacker。

    属于自己的黑客帝国屏幕保护程序就设置成功了!