全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

IP归属甄别会员请立即修改密码
查看: 1477|回复: 18
打印 上一主题 下一主题

[美国VPS] 华为云又开始送1000元券活动了,上次没薅到的可以在来薅了

[复制链接]
跳转到指定楼层
1#
发表于 2025-5-20 14:47:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 拥有小目标 于 2025-5-20 14:53 编辑

# 上次送1000元券活动是3.11-5.11,错过就错过了
# 这次期限是5.20-6.08   公司或学校名字随便填一个就行

先报名(带AFF):点击报名、公司或学校名字随便填一个就行
https://edu.huaweicloud.com/signup/a84b127961f4408bb69d560f48c5675d?medium=share_kfzlb&invitation=0ce9789ae6e94e008610f0f72788f031

先报名(带AFF):点击报名、公司或学校名字随便填一个就行

https://edu.huaweicloud.com/signup/a84b127961f4408bb69d560f48c5675d?medium=share_kfzlb&invitation=0ce9789ae6e94e008610f0f72788f031





具体流程:
1:先报名(带AFF):点击报名、公司或学校名字随便填一个就行
2:领2张57元考试券
3:领1张37元考试券
4:买上面图片中2门58元的课程,使用57元券后另支付1元
5:考试合格2门,然后填问卷领券,可以领2张67和1张57元。
6:到这里,你应该已经领了6张考试券了,都买课考了,当然每个都要支付1元钱
7:通过任意5门,点击申请云原生入门开发者证书,可以获得2积分
8:点击填问卷领券,可以领2张37元考试代金券
9:到这里,你应该领过8张券了,全部都买课考试通过有16分,加上领开发者证书赠送2分,就18分了,1000元代金券到手。


考试技巧:
考试需要有摄像头监控,而且不能切浏览器,所以拥有两台电脑最好,一个查AI,一个考
没有摄像头,可以用手机代替,搜DroidCam软件
只有一台电脑,安装VMWare虚拟机或Hyper-V虚拟机,共享摄像头到虚拟机(Hyper-V远程桌面连接可以在本地资源中共享摄像头),在虚拟机内考,物理机查可避免切换窗口


# 具体流程:
1:先报名(带AFF):点击报名
2:领2张57元考试券
3:领1张37元考试券
4:买上面图片中2门58元的课程,使用57元券后另支付1元
5:考试合格2门,然后填问卷领券,可以领2张67和1张57元。
6:到这里,你应该已经领了6张考试券了,都买课考了,当然每个都要支付1元钱
7:通过任意5门,点击申请云原生入门开发者证书,可以获得2积分
8:点击填问卷领券,可以领2张37元考试代金券
9:到这里,你应该领过8张券了,全部都买课考试通过有16分,加上领开发者证书赠送2分,就18分了,1000元代金券到手。

考试技巧:
考试需要有摄像头监控,而且不能切浏览器,所以拥有两台电脑最好,一个查AI,一个考
没有摄像头,可以用手机代替,搜DroidCam软件
只有一台电脑,安装VMWare虚拟机或Hyper-V虚拟机,共享摄像头到虚拟机(Hyper-V远程桌面连接可以在本地资源中共享摄像头),在虚拟机内考,物理机查可避免切换窗口
推荐
发表于 2025-6-4 11:40:55 | 只看该作者
https://edu.huaweicloud.com/signup/a84b127961f4408bb69d560f48c5675d?medium=share_kfzlb&invitation=e66f0a469a0844e29f04edc899360109
2#
 楼主| 发表于 2025-5-20 14:49:47 | 只看该作者
报名地址:


https://edu.huaweicloud.com/signup/a84b127961f4408bb69d560f48c5675d?medium=share_kfzlb&invitation=0ce9789ae6e94e008610f0f72788f031
4#
发表于 2025-5-20 17:02:45 | 只看该作者
过程挺复杂 卖如何包过教程会不会需求更大
6#
 楼主| 发表于 2025-5-22 11:36:24 | 只看该作者
wushuiyin 发表于 2025-5-20 17:02
过程挺复杂 卖如何包过教程会不会需求更大

有教程脚本,就是发不上来
8#
 楼主| 发表于 2025-5-28 10:42:54 | 只看该作者
# 华为云考试绕过切屏检测方法(非虚拟机)
> 在浏览器中安装油猴拓展
> 在油猴拓展里添加下面的脚本即可
> 实测可用:
> (除了华为云考试,雨课堂应该也可以用)
>
  1. > // ==UserScript==
  2. > // [url=home.php?mod=space&uid=5839]@name[/url]         通用阻止切屏检测
  3. > // @namespace    http://tampermonkey.net/
  4. > // [url=home.php?mod=space&uid=73703]@version[/url]      0.1.0
  5. > // @description  尝试阻止各类网站的切屏、焦点丢失等检测
  6. > // @author       nodeseek@小号 && Gemini
  7. > // @match        http://*/*
  8. > // @match        https://*/*
  9. > // @run-at       document-start
  10. > // @grant        unsafeWindow
  11. > // @license      GPL-3.0
  12. > // ==/UserScript==
  13. >
  14. > (function () {
  15. >     'use strict';
  16. >     const window = unsafeWindow; // 使用原始 window 对象
  17. >
  18. >     // 黑名单事件,这些事件的监听器将被阻止
  19. >     const blackListedEvents = new Set([
  20. >         "visibilitychange", // 页面可见性改变
  21. >         "blur",             // 元素或窗口失去焦点
  22. >         "focus",            // 元素或窗口获得焦点 (某些检测可能反向利用focus)
  23. >         "pagehide",         // 页面隐藏(例如导航到其他页面)
  24. >         "freeze",           // 页面被冻结 (较新的事件)
  25. >         "resume",           // 页面从冻结状态恢复 (较新的事件)
  26. >         "mouseleave",       // 鼠标移出元素(通常是 document 或 body)
  27. >         "mouseout",         // 鼠标移出元素(更通用的移出,但要小心副作用)
  28. >         // "focusout",      // 元素将要失去焦点(与blur类似,但更通用,看情况添加)
  29. >         // "focusin",       // 元素将要获得焦点(与focus类似,看情况添加)
  30. >     ]);
  31. >
  32. >     // 白名单属性,这些属性在 document 对象上将被伪造
  33. >     const spoofedDocumentProperties = {
  34. >         hidden: { value: false, configurable: true },
  35. >         mozHidden: { value: false, configurable: true }, // Firefox (旧版)
  36. >         msHidden: { value: false, configurable: true },  // Internet Explorer
  37. >         webkitHidden: { value: false, configurable: true }, // Chrome, Safari, Opera (旧版 Blink/WebKit)
  38. >         visibilityState: { value: "visible", configurable: true },
  39. >         hasFocus: { value: () => true, configurable: true }
  40. >     };
  41. >
  42. >     // 需要清空/置空的事件处理器属性 (on-event handlers)
  43. >     const eventHandlersToNullifyDocument = [
  44. >         "onvisibilitychange",
  45. >         "onblur",
  46. >         "onfocus",
  47. >         "onmouseleave",
  48. >         "onmouseout",
  49. >         // "onfocusout",
  50. >         // "onfocusin",
  51. >         "onpagehide",
  52. >         "onfreeze",
  53. >         "onresume"
  54. >     ];
  55. >
  56. >     const eventHandlersToNullifyWindow = [
  57. >         "onblur",
  58. >         "onfocus",
  59. >         "onpagehide",
  60. >         "onpageshow", // 有些检测可能通过 pageshow 结合 persisted 属性判断
  61. >         "onfreeze",
  62. >         "onresume",
  63. >         "onmouseleave", // window 也有 onmouseleave
  64. >         "onmouseout"
  65. >     ];
  66. >
  67. >     const isDebug = false; // 设置为 true 以启用调试日志
  68. >     const scriptPrefix = "[通用阻止切屏检测]";
  69. >     const log = console.log.bind(console, `%c${scriptPrefix}`, 'color: #4CAF50; font-weight: bold;');
  70. >     const warn = console.warn.bind(console, `%c${scriptPrefix}`, 'color: #FFC107; font-weight: bold;');
  71. >     const error = console.error.bind(console, `%c${scriptPrefix}`, 'color: #F44336; font-weight: bold;');
  72. >     const debug = isDebug ? log : () => { };
  73. >
  74. >     /**
  75. >      * 伪装函数的 toString 方法,使其看起来像原始函数。
  76. >      * @param {Function} modifiedFunction 被修改的函数
  77. >      * @param {Function} originalFunction 原始函数
  78. >      */
  79. >     function patchToString(modifiedFunction, originalFunction) {
  80. >         if (typeof modifiedFunction !== 'function' || typeof originalFunction !== 'function') {
  81. >             warn("patchToString: 传入的参数不是函数。", modifiedFunction, originalFunction);
  82. >             return;
  83. >         }
  84. >         try {
  85. >             const originalToStringSource = Function.prototype.toString.call(originalFunction);
  86. >             modifiedFunction.toString = () => originalToStringSource;
  87. >
  88. >             // 进一步伪装 toString.toString
  89. >             const originalToStringToStringSource = Function.prototype.toString.call(originalFunction.toString);
  90. >             Object.defineProperty(modifiedFunction.toString, 'toString', {
  91. >                 value: () => originalToStringToStringSource,
  92. >                 enumerable: false,
  93. >                 configurable: true, // 保持可配置,以防万一
  94. >                 writable: false
  95. >             });
  96. >             debug(`patchToString applied for: ${originalFunction.name || 'anonymous function'}`);
  97. >         } catch (e) {
  98. >             error("patchToString failed:", e, "for function:", originalFunction.name);
  99. >         }
  100. >     }
  101. >
  102. >
  103. >     /**
  104. >      * 劫持并修改对象的 addEventListener 方法。
  105. >      * @param {EventTarget} targetObject 要劫持的对象 (window, document, Element)
  106. >      * @param {string} objectName 用于日志记录的对象名称
  107. >      */
  108. >     function patchAddEventListener(targetObject, objectName) {
  109. >         if (!targetObject || typeof targetObject.addEventListener !== 'function') {
  110. >             warn(`Cannot patch addEventListener for invalid target: ${objectName}`);
  111. >             return;
  112. >         }
  113. >         const originalAddEventListener = targetObject.addEventListener;
  114. >
  115. >         targetObject.addEventListener = function (type, listener, optionsOrCapture) {
  116. >             if (blackListedEvents.has(type.toLowerCase())) {
  117. >                 log(`BLOCKED ${objectName}.addEventListener: ${type}`);
  118. >                 return undefined; // 阻止添加黑名单中的事件监听器
  119. >             }
  120. >             debug(`ALLOWED ${objectName}.addEventListener: ${type}`, listener, optionsOrCapture);
  121. >             return originalAddEventListener.call(this, type, listener, optionsOrCapture);
  122. >         };
  123. >
  124. >         patchToString(targetObject.addEventListener, originalAddEventListener);
  125. >         log(`${objectName}.addEventListener patched.`);
  126. >     }
  127. >
  128. >     /**
  129. >      * 劫持并修改对象的 removeEventListener 方法 (可选,但建议一起修改)。
  130. >      * @param {EventTarget} targetObject 要劫持的对象
  131. >      * @param {string} objectName 用于日志记录的对象名称
  132. >      */
  133. >     function patchRemoveEventListener(targetObject, objectName) {
  134. >         if (!targetObject || typeof targetObject.removeEventListener !== 'function') {
  135. >             warn(`Cannot patch removeEventListener for invalid target: ${objectName}`);
  136. >             return;
  137. >         }
  138. >         const originalRemoveEventListener = targetObject.removeEventListener;
  139. >
  140. >         targetObject.removeEventListener = function (type, listener, optionsOrCapture) {
  141. >             if (blackListedEvents.has(type.toLowerCase())) {
  142. >                 log(`Original call to ${objectName}.removeEventListener for blacklisted event '${type}' would have been ignored by our addEventListener patch anyway. Allowing native call if needed.`);
  143. >                 // 即使我们阻止了 addEventListener,原始的 removeEventListener 仍然应该能安全调用
  144. >                 // 因为如果监听器从未被添加,调用 remove 也无害。
  145. >             }
  146. >             debug(`PASSTHROUGH ${objectName}.removeEventListener: ${type}`, listener, optionsOrCapture);
  147. >             return originalRemoveEventListener.call(this, type, listener, optionsOrCapture);
  148. >         };
  149. >         patchToString(targetObject.removeEventListener, originalRemoveEventListener);
  150. >         log(`${objectName}.removeEventListener patched.`);
  151. >     }
  152. >
  153. >
  154. >     /**
  155. >      * 修改对象上的属性,使其返回伪造的值。
  156. >      * @param {object} targetObject 目标对象 (e.g., document)
  157. >      * @param {object} propertiesToSpoof 属性描述对象
  158. >      * @param {string} objectName 对象名称
  159. >      */
  160. >     function spoofProperties(targetObject, propertiesToSpoof, objectName) {
  161. >         if (!targetObject) {
  162. >             warn(`Cannot spoof properties for invalid target: ${objectName}`);
  163. >             return;
  164. >         }
  165. >         for (const prop in propertiesToSpoof) {
  166. >             if (Object.prototype.hasOwnProperty.call(propertiesToSpoof, prop)) {
  167. >                 try {
  168. >                     Object.defineProperty(targetObject, prop, propertiesToSpoof[prop]);
  169. >                     debug(`Spoofed ${objectName}.${prop}`);
  170. >                 } catch (e) {
  171. >                     error(`Failed to spoof ${objectName}.${prop}:`, e);
  172. >                 }
  173. >             }
  174. >         }
  175. >         log(`${objectName} properties spoofed.`);
  176. >     }
  177. >
  178. >     /**
  179. >      * 清空或置空对象上的事件处理器属性。
  180. >      * @param {object} targetObject 目标对象
  181. >      * @param {string[]} eventHandlerNames 事件处理器名称数组
  182. >      * @param {string} objectName 对象名称
  183. >      */

  184. > })();
复制代码
9#
 楼主| 发表于 2025-5-28 10:46:44 | 只看该作者
  1. >     function nullifyEventHandlers(targetObject, eventHandlerNames, objectName) {
  2. >         if (!targetObject) {
  3. >             warn(`Cannot nullify event handlers for invalid target: ${objectName}`);
  4. >             return;
  5. >         }
  6. >         eventHandlerNames.forEach(handlerName => {
  7. >             try {
  8. >                 Object.defineProperty(targetObject, handlerName, {
  9. >                     get: () => {
  10. >                         debug(`Access to ${objectName}.${handlerName} (get), returning undefined.`);
  11. >                         return undefined;
  12. >                     },
  13. >                     set: (newHandler) => {
  14. >                         log(`Attempt to set ${objectName}.${handlerName} blocked.`);
  15. >                         if (typeof newHandler === 'function') {
  16. >                              // 可以选择性地调用 newHandler,或者完全阻止
  17. >                              // debug(`(Blocked) Handler function was:`, newHandler);
  18. >                         }
  19. >                     },
  20. >                     configurable: true // 保持可配置,以便脚本可以多次运行或被其他脚本修改
  21. >                 });
  22. >                 debug(`Nullified ${objectName}.${handlerName}`);
  23. >             } catch (e) {
  24. >                 error(`Failed to nullify ${objectName}.${handlerName}:`, e);
  25. >             }
  26. >         });
  27. >         log(`${objectName} on-event handlers nullified.`);
  28. >     }
  29. >
  30. >     // --- 开始执行 ---
  31. >
  32. >     log("Script starting...");
  33. >
  34. >     // 1. 劫持 window 和 document 的 addEventListener/removeEventListener
  35. >     patchAddEventListener(window, "window");
  36. >     patchRemoveEventListener(window, "window"); // 也 patch removeEventListener 以保持一致性
  37. >     patchAddEventListener(document, "document");
  38. >     patchRemoveEventListener(document, "document");
  39. >
  40. >     // 2. 修改 document 的属性
  41. >     spoofProperties(document, spoofedDocumentProperties, "document");
  42. >
  43. >     // 3. 置空 document 和 window 上的事件处理器
  44. >     nullifyEventHandlers(document, eventHandlersToNullifyDocument, "document");
  45. >     nullifyEventHandlers(window, eventHandlersToNullifyWindow, "window");
  46. >
  47. >     // 4. 对于 document.body,需要等待 DOMContentLoaded
  48. >     // 使用 MutationObserver 确保 body 存在时立即 patch,比 DOMContentLoaded 更早且更可靠
  49. >     const observer = new MutationObserver((mutations, obs) => {
  50. >         if (document.body) {
  51. >             patchAddEventListener(document.body, "document.body");
  52. >             patchRemoveEventListener(document.body, "document.body");
  53. >             // 对于 document.body,也可以考虑 nullify onmouseleave, onmouseout 等
  54. >             nullifyEventHandlers(document.body, ["onmouseleave", "onmouseout", "onblur", "onfocus"], "document.body");
  55. >             log("document.body patched via MutationObserver.");
  56. >             obs.disconnect(); // 完成任务后断开观察者
  57. >         }
  58. >     });
  59. >
  60. >     if (document.body) { // 如果 body 已经存在 (不太可能在 document-start,但以防万一)
  61. >         patchAddEventListener(document.body, "document.body");
  62. >         patchRemoveEventListener(document.body, "document.body");
  63. >         nullifyEventHandlers(document.body, ["onmouseleave", "onmouseout", "onblur", "onfocus"], "document.body");
  64. >         log("document.body patched directly.");
  65. >     } else {
  66. >         observer.observe(document.documentElement || document, { childList: true, subtree: true });
  67. >     }
  68. >
  69. >
  70. >     // 5. 调试:劫持计时器 (如果 isDebug 为 true)
  71. >     if (isDebug) {
  72. >         const originalSetInterval = window.setInterval;
  73. >         window.setInterval = function(...args) {
  74. >             const id = originalSetInterval.apply(this, args);
  75. >             debug("calling window.setInterval", id, args);
  76. >             return id;
  77. >         };
  78. >         patchToString(window.setInterval, originalSetInterval);
  79. >
  80. >         const originalSetTimeout = window.setTimeout;
  81. >         window.setTimeout = function(...args) {
  82. >             const id = originalSetTimeout.apply(this, args);
  83. >             debug("calling window.setTimeout", id, args);
  84. >             return id;
  85. >         };
  86. >         patchToString(window.setTimeout, originalSetTimeout);
  87. >         log("Timer functions (setInterval, setTimeout) wrapped for debugging.");
  88. >     }
  89. >
  90. >     log("Script execution finished. Monitoring active.");
  91. >
复制代码
10#
 楼主| 发表于 2025-5-28 10:48:20 | 只看该作者
> 这次发考证券快多了,直接考完6个
>![image](https://t.wxp.me/i/2025/05/22/ier9kh.webp
)

> 理论考试偏技术性问题,直接全部问`gemini 2.5pro`能一遍过,因此就不放理论考试题目了
>
> 开虚拟机或者远程桌面或者scrcpy连接手机防切屏检测,推荐搭配chrome插件:[超级复制](https://chromewebstore.google.com/detail/supercopy-%E8%B6%85%E7%BA%A7%E5%A4%8D%E5%88%B6/onepmapfbjohnegdmfhndpefjkppbjkm),直接就能复制,省的ocr题目
>
> `实验考试`操作就是`docker` `kubectl` 那些命令,不会也能问gemini,下面放了题目,如果有不懂的直接扔给ai让生成命令就行
> 前5个认证都有实验考试,不过实验考试证书不会生成,38的微认证应该都没有实验考试
> **有些槽点**:
>
> 1. 实验考试的云服务器默认安全组没开22端口,要先去安全组放行,建议直接`一键放通常用端口`,省事
>
> 2. 容器拉不下来,要配置镜像地址
>    `华为云控制台`-`容器镜像服务 SWR`-`镜像资源`-`镜像中心`-`镜像加速器` 可直接复制命令配置华为源
> ![image](https://t.wxp.me/i/2025/05/22/ifhjzg.jpeg
)
>
> 但是华为源有的镜像还没有,我用的`1panel`的镜像源:
>
> ```bash
> sudo vim /etc/docker/daemon.json
> ```
>
> ```json
> {
>   "registry-mirrors": ["https://docker.1panel.live"]
> }
> ```
>
> ```bash
> sudo systemctl daemon-reload
> sudo systemctl restart docker
> docker info
> ```
>
> 3. `kubectl`配置文件可以这样上传:
>
> ```bash
> user@sandbox:~/Downloads$ ls
> cce-k8s-kubeconfig.yaml
> user@sandbox:~/Downloads$ realpath cce-k8s-kubeconfig.yaml
> /home/Downloads/cce-k8s-kubeconfig.yaml
> user@sandbox:~/Downloads$ scp /home/Downloads/cce-k8s-kubeconfig.yaml [email protected]:/home
> ```
>
> 4. 云数据库RDS安全组也没放开,记得放端口,还有绑定弹性IP
> 5. 不知道官方故意还是写错了,写的镜像niginx:1.7.9,不过不影响考试步骤,就按niginx:1.7.9来吧
>
> 附实验考试题目和AI答案(人工进行了订正,如有错误请再问AI详细的命令):
>
> ```
> 云原生基础设施之容器入门
> ```
>
> ------
>
>
> 任务1:dockerfile构建容器镜像
>
> 得分点:能正确创建名为httpd:v1的镜像,并正常运行。
>
> 其中dockerfile的部分参数如下:
>
> ```
> ① 基础镜像:httpd
>
> ② 维护者:[email protected]
>
> ③ 端口:80
>
> ④ 运行命令:echo "dockerfile test"> /usr/local/apache2/htdocs/index.html
> ```
>
> ⑤ 以下为dockerfile模板,可根据此模板修改内容:
>
> ```dockerfile
> FROM centos:centos7
>
> MAINTAINER [email protected]
>
> EXPOSE 80
>
> RUN yum install -y httpd vi && yum clean all
> ```
>
> 使用docker run以该镜像运行容器,并借助-p参数指定访问端口为80。在浏览器内输入http://EIP:80。出现`dockerdile test`文字则证明任务完成。
>
> 本任务中需注意以下内容:
>
> (1)使用错误的命名不得分
>
> (2)多或者少开放端口不得分
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2025-9-8 06:51 , Processed in 0.065585 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表