【Chrome插件】Chrome插件修改教程(一款GitHub的插件为例,附样品)

查看 168|回复 12
作者:klxn0-0   
2020年10月12日补:
当前最新版已混淆,关键词和流程均有大改动,
需要动态调试(本文中有教程)
可以下载比较
"

(本文的样本存在严重bug!请使用上述新版)
当然。。研究学习修改插件是没问题的
长文警告!全文共
3736
个汉字(不包含非MD部分,
56
张图片。)

Gitee分会场:https://taozhiyu.gitee.io/Chrome_tutorial
还是推荐在gitee看吧。
  • gitee一开始有生成目录,由于目录过长,吾爱左边的目录显示不全(仅电脑端有)。
  • 图床由【gitee】提供,虽然他不知道。(2020年7月10日23:17:26已全局改为吾爱本地图片,防断链)
  • 编辑&预览由【马克飞象】辅助,虽然他也不知道。
  • PDF打包及后期编辑由【Typora】生成,虽然他还是不知道。
  • Chrome 开发者模式屏蔽由【耍下】提供“Chrome++插件”,虽然他依然不知道。

    准备工作
    因为很多人需要,而且没有在吾i 破解 论坛都没有找到
    那就我来抛砖引玉吧。
    需要使用的工具
    [ol]
  • 脑子。

    当然不是说大脑,是思维。
    举个例子吧,之前有人问我,为什么把支付失败的字符串改成支付成功后,
    只弹出成功,没有效果。。。这个问题比较深奥,我无法解释。(当时我就说我不会。)
  • 正确的上网方式(非必须)

    你改插件,总不能改二手的吧。。。
  • js,HTML(H5),CSS基础(*)

    这些很重要!巧妇难为无米之炊,万丈高楼平地起,离不开。。。
    吾爱。
    咳咳
  • 习惯用的编辑器。

    一个好的编辑器可以让你事半功倍
    当然理论上notepad也成,就是太费眼。
    这里我推荐的两款是notepad++和sublime
    咳咳,至于前者,本来挺喜欢的(只对软件本身),后来事情发生了就果断卸载。。。
    如果你确定满足并且想一起研究的话,就继续吧。

    [/ol]
    正式开始。
    插件安装与提取
    从谷歌商店提取
    因为我是Chrome的用户(曾经的某6某忠实粉丝hhh劝退)
    理论上Chromium内核的浏览器插件修改起来应该都差不多吧。
    目标:Octotree
    官网:octotree.io
    Chrome插件下载地址(谷歌商店):链接太长。。点我访问
    下载&安装
    谷歌商店一键安装。


    1594173504128.png (123.45 KB, 下载次数: 8)
    下载附件
    2020-7-10 22:53 上传

    安装


    1594173512123.png (41.38 KB, 下载次数: 3)
    下载附件
    2020-7-10 22:54 上传

    安装完成(感觉这几张都是废图。。。)


    1594173518640.png (29.76 KB, 下载次数: 3)
    下载附件
    2020-7-10 22:54 上传

    提取插件安装包
    chrome://extensions/管理页面中,查看刚才安装后的插件的ID


    1594173528497.png (37.73 KB, 下载次数: 5)
    下载附件
    2020-7-10 22:54 上传

    如图所示,本例的ID是bkhaagjahfmjljalopjnoealnfndnagc(只需要看首尾就足够了。)
    好吧,我不知道Chrome下载的crx文件。。。放在哪里(可能是安装后自动删掉了?)
    有知道的朋友可以回复告知一下。
    访问chrome://version


    1594173597870.png (100.58 KB, 下载次数: 1)
    下载附件
    2020-7-10 22:55 上传

    找到个人资料路径,计算机里打开路径。
    插件所在文件夹在Chrome资料文件夹下的Extensions文件夹
    比如本例:
    看首几位为:bkha


    1594173564306.png (50.63 KB, 下载次数: 2)
    下载附件
    2020-7-10 22:55 上传

    找到插件文件夹了。
    打开该文件夹,


    1594173585400.png (14.46 KB, 下载次数: 2)
    下载附件
    2020-7-10 22:55 上传

    里面这个版本号所在的文件夹才是真正的插件文件夹(插件是需要打包才能成为crx文件的,本质上就是有经过签名压缩文件,后面会说怎么签名打包)
    复制这个版本号文件夹出来。
    安装提取插件安装包(新增教程)
    因为crx是经过打包的,Chrome在74版之后禁止了离线安装未经认证的插件(旧版本或修改版本的朋友请忽略,但是打包还是要打开开发者模式)

    注:未经认证的插件是指插件的签名未在Chrome备案企业版,
    大佬们可以尝试hook或是劫持Chrome的认证,实现离线安装未经认证的插件。

    因此需要在右上角打开开发者模式

    注:如果一直弹窗提醒不安全很烦,可以考虑使用【耍下】的扩展(前言部分有提到)
    chrome去提示插件version.dll
    下载:https://taozhiyu.lanzouj.com/ib16jzc
    密码:hgjbxa
    使用方法:
    下载完直接扔到Chrome.exe根目录重启浏览器就行



    image.png (21.8 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:37 上传

    把解压后的插件所在文件夹拖进来就行

    如果不行就点击加载未封装的扩展应用,选择插件所在文件夹然后点击选择文件夹

    直接下载crx
    有些浏览器或某些插件可以直接下载到crx或未封装的插件
    下载后直接解压就好。
    注意事项!!!
    注意!和爆破exe一样!最重要的就是勤备份!
    注意!和爆破exe一样!最重要的就是勤备份!
    注意!和爆破exe一样!最重要的就是勤备份!
    不然一失足成千古恨。。。
    修改--解锁高级功能
    获取到目标文件的解压文件就可以开始着手了
    分析区别
    破解功能自然是因为功能上有差异。找到这个差异。
    比如


    1594173612185.png (53.27 KB, 下载次数: 3)
    下载附件
    2020-7-10 22:55 上传


    试用会员过期提示升级的提示(源码里称之为广告)

    或是


    1594173625818.png (22.45 KB, 下载次数: 1)
    下载附件
    2020-7-10 22:55 上传


    剩余会员试用时间的显示

    亦或是


    1594173641634.png (32.38 KB, 下载次数: 1)
    下载附件
    2020-7-10 22:56 上传


    仅会员可以使用的提示。
    当然还有很多情况,比如只有会员才会显示的按钮(官方示意图可能会有关键词)

    定位判断代码及修改
    推荐notepad++和sublime之一的原因就是他们支持文件夹中搜索关键词(好吧,everything好像也可以,不过那不是编辑器。。)
    例如试用会员还剩多长时间过期的提示
    关键词:remained,文件夹内搜索,发现只有content.js里有。


    1594173646830.png (33.03 KB, 下载次数: 1)
    下载附件
    2020-7-10 22:56 上传

    打开继续搜索


    1594173651384.png (120.58 KB, 下载次数: 1)
    下载附件
    2020-7-10 22:56 上传

    发现只有一处(巧了,看一下前后文,应该是的day(s)也有了)
    向前找判断
    这里因为打包的时候压缩了,建议在新窗口美化一下(当然也可以直接修改。或是直接保存美化后的代码。个人喜欢原汁原味)
    当然有些lj网站美化后的代码会出现问题。。比如


    1594173656795.png (256.53 KB, 下载次数: 1)
    下载附件
    2020-7-10 22:57 上传

    这样。
    因为瞎换行,把人家的字符串给拆了。。。


    1594173660598.png (179.36 KB, 下载次数: 1)
    下载附件
    2020-7-10 22:57 上传

    格式化后看起来就很(相对)清爽了。
    一个方法,里面是判断。
    根据判断找到
    this._state === t.SUBSCRIPTION_OK
    此处其实可以使用全局替换,把this._state === t.SUBSCRIPTION_OK改成true。
    此处选择方法分析,尽可能少改动。
    搜索调用(这个没有混淆,很方便找。如果混淆了一般都会动态调试,下面有动态调试的方法,可以参考一下)


    1594173667243.png (241.65 KB, 下载次数: 1)
    下载附件
    2020-7-10 22:58 上传

    这里一样,因为很轻松就能知道SUBSCRIPTION_OK、SUBSCRIPTION_EXPIRED、TRIAL_EXPIRED是什么意思,直接改就行了。如果混淆了,需要动态调试。
    搜索后得知_getTrialRemainingDays只有一处调用,因此直接赋值就好,不会有问题。
    const a = this._getTrialRemainingDays(_);
    改成
    const a = 0;//此处改成0(试用剩余0天,试用期间有购买Pro的广告)
    接着是改this._state,因为多次调用该代码,因此溯源。找this._state赋值的位置。
    就在上面一行(格式化后的)


    1594173674635.png (52.39 KB, 下载次数: 1)
    下载附件
    2020-7-10 22:58 上传

    async _verifySubscription(e) {
    const i = e || await extStore.get(a),
        o = this._decodeTokenPayload(i);
    let s = t.UNAUTHENTICATED;
    if (o) {
        const { expiredAt: e, subscriptionStatus: a, trialDays: i, createdAt: n } = o;
        if (Date.now()
    老规矩,可以把判断改掉。
    我这里把除了SUBSCRIPTION_OK的赋值全都改了。
    async _verifySubscription(e) {
    const i = e || await extStore.get(a),
        o = this._decodeTokenPayload(i);
    let s = t.UNAUTHENTICATED;
    if (o) {
        const { expiredAt: e, subscriptionStatus: a, trialDays: i, createdAt: n } = o;
        if (Date.now()
    当然全都删掉然后改成
    return t.SUBSCRIPTION_OK
    也是可以的。
    我个人习惯基于原代码修改。
    测试是否成功
    把上面的代码在原文件里对应修改。
    保存后点击


    1594173693089.png (38.47 KB, 下载次数: 1)
    下载附件
    2020-7-10 22:58 上传

    重新加载插件就修改完成了。

    这里是成功破解了高级功能。
    如果不成功返回继续
    如果报错见出现错误的处理方法

    修改--汉化
    分类
    上一次修改的时候对代码进行了汉化,这次也不例外。
    汉化的情况有多重。
    [ol]
  • 语言是写死的(类似这次,是只有单一语言的)
  • 有多重语言包可以选择,就是没有中国的(差评)
  • 有中文的选项,但是只有部分是汉语,而且还有好多是错的。
    [/ol]
    一般来说,
    1是因为没做多语言配置,在js里直接修改就好
    2相对来说好改一点,找到语言包,修改就行(一般是json文件或是js内的json,且多为谷歌语言包,在插件目录下的_locales文件夹下,有对应语言的语言包)
    3一般和2情况类似,补充翻译即可。(推荐BCompare 4,对比很方便,其他某插件的示意图如下图)


    1594173716958.png (290.21 KB, 下载次数: 1)
    下载附件
    2020-7-10 22:58 上传

    本插件是最不方便修改的写死在js里的类型。一般需要所见即需译,就是看到需要翻译的,就去翻译,而且翻译的过程最好从特征词句到一般词语。
    有强烈特征的一句话或是一个不常见的单词先翻译。比如settings,一般只要有设置的插件里会反复出现。这就不好定位了。
    例子一:汉化提示语并自定义
    举个例子


    1594173723968.png (53.71 KB, 下载次数: 2)
    下载附件
    2020-7-10 22:58 上传

    第一次安装完后打开会有如下提示,一句话,就很方便搜索到


    1594173727366.png (111.14 KB, 下载次数: 2)
    下载附件
    2020-7-10 22:58 上传

    那就直接修改好了。注意不要修改到关键词,或是其他代码,或是单双引号,亦或是%1、$1、{1}这类的替换字符。
    翻译替换进去就行,这里我选择谷歌翻译,可能是日常习惯用谷歌搜索吧,而且比较喜欢Material Design风格吧。


    1594173733847.png (365.76 KB, 下载次数: 1)
    下载附件
    2020-7-10 22:59 上传

    虽然都是简单的句子,我还是选择机译+校准。因为打字没有复制粘贴快(所以码教程是最痛苦的,不接受反驳
    当然,你也可以随手扔一个“版权”之类的。。。虽然破解版只是技术的产物,是没有版权可验的。
    修改完:


    1594173740108.png (57.58 KB, 下载次数: 1)
    下载附件
    2020-7-10 22:59 上传

    效果图:


    1594173747813.png (49.8 KB, 下载次数: 1)
    下载附件
    2020-7-10 22:59 上传

    例子二:汉化部分设置
    再举个例子


    1594173762430.png (33.41 KB, 下载次数: 1)
    下载附件
    2020-7-10 22:59 上传

    因为我刚才卸载了,提示我要登录。
    改之,老规矩,搜索上面的关键词unlock:


    1594173769681.png (148.5 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:00 上传

    搜索后发现并没有解锁的列表,在${s}和${n}里。
    向上翻一下,找到了该列表。


    1594173775804.png (90.28 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:00 上传

    既然是破解版,那就可以随心所欲的翻译了。。。比如我是这么做的


    1594173818199.png (34.27 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:00 上传

    对应的代码部分:


    1594173858503.png (325.7 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:01 上传

    例子三:重复部分汉化
    汉化Settings设置的标题部分。有很多搜索项


    1594173826716.png (14.86 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:00 上传

    可以
    [ol]

  • 勾选Aa区分大小写。

  • 使用正则表达式,排除前后没有的字符比如使用
        \WSettings\W
    匹配前后都是非字母和数字的`Settings`


    1594173836476.png (159.54 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:00 上传

    (这9处除了一个夜间模式匹配字符的正则表达式,其余的都是要汉化的)

  • 审查元素,找到前后文(包括类名、ID)
    比如


    1594173842727.png (59.61 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:00 上传

    很方便就可以精准定位到汉化的位置。


    1594173848131.png (123.38 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:00 上传

    [/ol]
    其他汉化例子展示
    请下载插件(同时提供了修改后的和未修改的版本)
    修改--布局
    布局一般修改是CSS,JS甚至HTML,因此要都有所了解。
    给作者填坑
    老bug了。。无法滚动的bug修复了,但是界面还是不正常(左侧多余,右侧溢出)


    1594173867705.png (112.97 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:01 上传

    在Chrome的控制台里一通摸索(瞎改),

    一般为CSS或CLASS的修改居多,需要有HTML、CSS等基础

    发现是


    1594173879599.png (74.02 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:01 上传

    把transform和left属性强制删除,设置就行(unset)
    在下面的class里找到设置右侧属性的类(本例中见下图)


    1594173884778.png (30.14 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:02 上传

    因为是!important强制属性,所以只需要改一个就行。
    修改部分如图所示:


    1594173891562.png (14.38 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:02 上传


    注:
    [ol]
  • 改法不唯一,只要能实现目的,且简洁方便快捷实用,就是好方法。
  • 本方法因为没有使用transform属性,移动动画会丢失。
    不想加animation动画,又没想到更好的方法。。。
    凑活用吧,反正主要不是看动画的。
    [/ol]

    强迫症患者


    1594173898285.png (10.65 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:02 上传

    tip竟然出现在左边。。。
    好难受看我改到下(上)面
    分析class,tooltipped-w是左边显示,因此猜测w是指西边。


    1594173960295.png (20.65 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:03 上传

    观察到上面Git部分有想要的样式,
    同理,炮制出tooltipped-sw(西南),改动前后的对比


    1594173915326.png (7.04 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:02 上传


    注:Chrome在标签上右键Force State可以设置当前状态

    改完代码发现在右侧的时候显示正常,但是左侧的时候就变了。
    查看代码发现因为有页面方向的变换,对class进行了动态改变。
    改js代码吧。给每一个加上单独的类(这里我使用的是tao)


    1594173930433.png (52.65 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:02 上传

    效果(注:图经过处理,为了方便看效果,部分间距增加了)


    1594173922425.png (51.89 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:02 上传

    左右均正常。
    其他修改(瞎改)


    1594173951406.png (34.66 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:03 上传

    咳咳,反正html、css或js呗。
    看着改好了。。。
    修改--杂项
    还有一些乱七八糟的东西可以修改,具体可以参考附录中的第二个教程
    比如右键,第一个是官网。
    可以点击后弹一个咱们的唔愛论坛官网,改改作者、简介啥的


    1594174031309.png (246.41 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:04 上传

    注!上述截图因为方便说名,仅把更新链接删掉了。真正操作的时候请删除
    或是卸载后再弹一下5爱的官网(下图第一个框)
    当然也可以像我上个版本一样,第一次安装的时候弹一下。


    1594174046561.png (62.83 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:04 上传

    效果:

    第一次安装有弹窗:


    1594174053646.png (55.31 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:04 上传

    同时点击确定后有吾爱网站弹出


    1594174061713.png (4.91 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:04 上传


    修改--动态调试
    动态调试是最方便找到出问题的位置以及原因的办法(虽然不一定能想到怎么解决。比如下图)。


    1594174105263.png (36.3 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:05 上传

    亦或是代码被混淆的很厉害,又抽取了结构,平流抽象化了(AST)

    注:AST又被称为js预编译,可以参考这里的介绍

    还是以Octotree为例
    假如我故意(一不小心)出了一个未知错误。


    1594173977195.png (86.47 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:03 上传

    插件的错误也十分“委婉”,而且因为压缩了,不方便看错误位置。
    动态调试吧。
    这里要分情况查看。
    popup(弹出页面)
    就是点击插件的按钮,会有窗口弹出的。类似于下图的ADblock插件


    1594174017522.png (29.63 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:04 上传

    插件上右键-审查弹出窗口-(格式化)下断点-重新加载

    注:重新加载可以在console里输入
    location.reload(true)
    重新加载。



    1594173998360.png (415.8 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:03 上传

    植入到页面的js
    可以直接在console-Content Script-页面的位置(如果有iframe的话)-插件名中格式化,下断点等等。


    1594174009237.png (388.27 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:04 上传


    注:推荐一个我刚发现的功能(可能有朋友早就知道了了吧。。)
    在上图蓝色箭头所示的方框的位置,是异常前下断点,
    系统会在出现异常并且没有被捕捉的地方,在报错前断下。堆栈,数据都保存着,而且有报错的信息,可以方便调试。

    出现错误的处理方法


    1594174105263.png (36.3 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:05 上传

    最简单的办法就是:

    一直撤销到不报错为止,然后重做。
    如果不行的话,请退回到备份版本。

    如果重复好几次,还是感觉没问题,就需要动态调试了(参上文)。
    打包
    该改的都改完了,该填的坑也都填好了。
    需要打包发布了(如果有账号的话)
    点击上方的“打包扩展程序”,输入扩展所在的文件夹
    点击打包扩展程序即可。
    至于私钥如果你不是第一次打包,上一次打包后会自动生成一个私钥。你可以用这个私钥重新打包(本质就类似安卓的签名)


    1594172900750.png (140.86 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:06 上传


    补充:
    [ol]
  • 每个私钥都标志这一个独立的插件,如果不同的插件用同一个私钥签名,会导致覆盖。(惨痛教训)
  • 因为Chrome的特性,无法直接安装没有在谷歌商店中发行的插件(除非签名经过官方许可,并且有第三方进行安装,比如下面的区别示意图)


    1594172950061.png (115.28 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:07 上传

    [/ol]

    如果是分享zip版未打包的插件,推荐先打包后再重命名。
    这样可以保证插件数据不会丢失
    更新的时候,因为有key系统会认为是在更新插件,不会导致多个版本共存
    (5555我才知道,所以现在。。)


    1594173380191.png (77.61 KB, 下载次数: 1)
    下载附件
    2020-7-10 23:07 上传

    新版本旧版本共存了。。。也就是说旧版本的设置需要手动转移到新版本(气哭)
    参考资料
    有问题或是遇到奇怪的API可以查阅。
    [table]
    [tr]
    内容[/td]
    链接[/td]
    作用[/td]
    [/tr]
    [tr]
    [td]GitHub翻译版

    下载次数, 下载附件

  • 额微粒波地   


    涛之雨 发表于 2020-7-9 13:43
    好的,(我可以趁机要张h大的签名么)
    别打我,别打我,不给就不给嘛。当我没说{:301_1008: ...



    01_avatar_middle.jpg (7.14 KB, 下载次数: 5)
    下载附件
    2020-7-9 13:54 上传

    冰.亦   


    沈唁 发表于 2020-7-18 10:02
    这个问题是官方bug,https://github.com/ovity/octotree/issues/987
    官方版本出现严重bug,正在下载、修复。
    更新后会替换到本帖中。
    https://github.com/ovity/octotree/issues/987


    update.png (23.88 KB, 下载次数: 1)
    下载附件
    2020-7-18 21:08 上传

    修改的办法:使用比较器对比代码,修改异常部分即可
    xiaomoge123   


    Hmily 发表于 2020-7-9 08:22
    MD的目录改了下,貌似可以跟着滑动了,但太长的好像还是无法定位,这个估计还的改css。
    如果修改了js,c ...

    直接修改了js插件是无法正常使用的,会提示下图的错误:

    重新打包后直接导入crx会报下面的错:

    至于检测的方法就是rsa公私钥,打包后和打包前解压后的文件除了那个清单json,其他都是一样的。
    清单里的key就类似安卓的Signatures签名,谷歌使用插件的时候会对签名进行验证(Chrome和安卓都是他们家的,规则也都一样,都是私钥签名),
    不过Chrome的开发者会在服务器进行备份,当然,修改后的是肯定无法上传了,审核过不了而且号好像也会没了5刀呢
    所以一般有三种方法,
    一就是本文中的办法:
    [color=]开发者模式
    ,然后直接加载文件夹。也是最简单的办法。
    每次打开Chrome都会有弹窗,可以通过【耍下】的Chrome++插件实现

    第二种是:利用第三方的软件导入自己打包好的插件,不过需要在谷歌那里
    备案企业证书
    (理论应该是可以劫持验证请求的吧,没分析过,而且第一种方法比较方便快捷,也就没有考虑了。)
    第三种就是直接用封装好的旧版本,73版之前的就行,很多封装好的绿色版,直接解压双击就能用。打包就带走,不过个人还喜欢尝鲜。
    图片我这就转存到吾爱
    啥时候支持像csdn之类的粘贴图片自动上传啊
    bsjasd   

    自古楼主坐沙发。码字码了好几天
    江湖虾米   


    xiaomoge123 发表于 2020-7-8 18:20
    楼主,对你来说,做款,划词翻译.划词复制文字.划词弹图标栏.一体的插件应该很容易,没找到这几个功能在一 ...

    其实我想弄个截图翻译的来着。。。不过技术有限。
    日后如果做的话会考虑弄一个并且入正(5刀申请个开发者账号)
    咳咳也就是说说。应该只是想想
    江湖虾米   

    慕名前来,学习浏览器插件的改法
    冰.亦   

    技术贴 支持一下
    bsjasd   

    手机也一样?
    xiaomoge123   

    楼主,对你来说,做款,划词翻译.划词复制文字.划词弹图标栏.一体的插件应该很容易,没找到这几个功能在一起的插件!
    您需要登录后才可以回帖 登录 | 立即注册