檔案總覽
📌 华为云又开始送1000元券活动了,上次没薅到的可以在来薅了共 11 樓
主帖拥有小目标
🕐 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

[圖片] https://t.wxp.me/i/2025/05/20/nqzsks.png

[圖片] https://t.wxp.me/i/2025/05/20/nr3zub.png

[圖片] https://t.wxp.me/i/2025/05/20/nr92xi.png

具体流程:

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远程桌面连接可以在本地资源中共享摄像头),在虚拟机内考,物理机查可避免切换窗口

[圖片] https://t.wxp.me/i/2025/05/20/nu0pzm.png

[圖片] https://t.wxp.me/i/2025/05/20/nus7r7.png

# 具体流程:

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远程桌面连接可以在本地资源中共享摄像头),在虚拟机内考,物理机查可避免切换窗口
#? 樓Moruy
🕐 2025-6-4 11:40:55
https://edu.huaweicloud.com/signup/a84b127961f4408bb69d560f48c5675d?medium=share_kfzlb&invitation=e66f0a469a0844e29f04edc899360109
#? 樓拥有小目标
🕐 2025-5-20 14:49:47
报名地址:

https://edu.huaweicloud.com/signup/a84b127961f4408bb69d560f48c5675d?medium=share_kfzlb&invitation=0ce9789ae6e94e008610f0f72788f031
#? 樓郑爽
🕐 2025-5-20 14:57:02
答案呢
#? 樓wushuiyin
🕐 2025-5-20 17:02:45
过程挺复杂 卖如何包过教程会不会需求更大
#? 樓rqp
🕐 2025-5-20 17:14:38
恩哼~
#? 樓拥有小目标
🕐 2025-5-22 11:36:24
wushuiyin 发表于 2025-5-20 17:02

过程挺复杂 卖如何包过教程会不会需求更大
#? 樓拥有小目标
🕐 2025-5-26 20:42:22
300到手
#? 樓拥有小目标
🕐 2025-5-28 10:42:54
# 华为云考试绕过切屏检测方法(非虚拟机)

> 在浏览器中安装油猴拓展

> 在油猴拓展里添加下面的脚本即可

> 实测可用:

> (除了华为云考试,雨课堂应该也可以用)

>

• > // ==UserScript==

• > // [url=home.php?mod=space&uid=5839]@name[/url] 通用阻止切屏检测

• > // @namespace http://tampermonkey.net/

• > // [url=home.php?mod=space&uid=73703]@version[/url] 0.1.0

• > // @description 尝试阻止各类网站的切屏、焦点丢失等检测

• > // @author nodeseek@小号 && Gemini

• > // @match http://*/*

• > // @match https://*/*

• > // @run-at document-start

• > // @grant unsafeWindow

• > // @license GPL-3.0

• > // ==/UserScript==

• >

• > (function () {

• > 'use strict';

• > const window = unsafeWindow; // 使用原始 window 对象

• >

• > // 黑名单事件,这些事件的监听器将被阻止

• > const blackListedEvents = new Set([

• > "visibilitychange", // 页面可见性改变

• > "blur", // 元素或窗口失去焦点

• > "focus", // 元素或窗口获得焦点 (某些检测可能反向利用focus)

• > "pagehide", // 页面隐藏(例如导航到其他页面)

• > "freeze", // 页面被冻结 (较新的事件)

• > "resume", // 页面从冻结状态恢复 (较新的事件)

• > "mouseleave", // 鼠标移出元素(通常是 document 或 body)

• > "mouseout", // 鼠标移出元素(更通用的移出,但要小心副作用)

• > // "focusout", // 元素将要失去焦点(与blur类似,但更通用,看情况添加)

• > // "focusin", // 元素将要获得焦点(与focus类似,看情况添加)

• > ]);

• >

• > // 白名单属性,这些属性在 document 对象上将被伪造

• > const spoofedDocumentProperties = {

• > hidden: { value: false, configurable: true },

• > mozHidden: { value: false, configurable: true }, // Firefox (旧版)

• > msHidden: { value: false, configurable: true }, // Internet Explorer

• > webkitHidden: { value: false, configurable: true }, // Chrome, Safari, Opera (旧版 Blink/WebKit)

• > visibilityState: { value: "visible", configurable: true },

• > hasFocus: { value: () => true, configurable: true }

• > };

• >

• > // 需要清空/置空的事件处理器属性 (on-event handlers)

• > const eventHandlersToNullifyDocument = [

• > "onvisibilitychange",

• > "onblur",

• > "onfocus",

• > "onmouseleave",

• > "onmouseout",

• > // "onfocusout",

• > // "onfocusin",

• > "onpagehide",

• > "onfreeze",

• > "onresume"

• > ];

• >

• > const eventHandlersToNullifyWindow = [

• > "onblur",

• > "onfocus",

• > "onpagehide",

• > "onpageshow", // 有些检测可能通过 pageshow 结合 persisted 属性判断

• > "onfreeze",

• > "onresume",

• > "onmouseleave", // window 也有 onmouseleave

• > "onmouseout"

• > ];

• >

• > const isDebug = false; // 设置为 true 以启用调试日志

• > const scriptPrefix = "[通用阻止切屏检测]";

• > const log = console.log.bind(console, `%c${scriptPrefix}`, 'color: #4CAF50; font-weight: bold;');

• > const warn = console.warn.bind(console, `%c${scriptPrefix}`, 'color: #FFC107; font-weight: bold;');

• > const error = console.error.bind(console, `%c${scriptPrefix}`, 'color: #F44336; font-weight: bold;');

• > const debug = isDebug ? log : () => { };

• >

• > /**

• > * 伪装函数的 toString 方法,使其看起来像原始函数。

• > * @param {Function} modifiedFunction 被修改的函数

• > * @param {Function} originalFunction 原始函数

• > */

• > function patchToString(modifiedFunction, originalFunction) {

• > if (typeof modifiedFunction !== 'function' || typeof originalFunction !== 'function') {

• > warn("patchToString: 传入的参数不是函数。", modifiedFunction, originalFunction);

• > return;

• > }

• > try {

• > const originalToStringSource = Function.prototype.toString.call(originalFunction);

• > modifiedFunction.toString = () => originalToStringSource;

• >

• > // 进一步伪装 toString.toString

• > const originalToStringToStringSource = Function.prototype.toString.call(originalFunction.toString);

• > Object.defineProperty(modifiedFunction.toString, 'toString', {

• > value: () => originalToStringToStringSource,

• > enumerable: false,

• > configurable: true, // 保持可配置,以防万一

• > writable: false

• > });

• > debug(`patchToString applied for: ${originalFunction.name || 'anonymous function'}`);

• > } catch (e) {

• > error("patchToString failed:", e, "for function:", originalFunction.name);

• > }

• > }

• >

• >

• > /**

• > * 劫持并修改对象的 addEventListener 方法。

• > * @param {EventTarget} targetObject 要劫持的对象 (window, document, Element)

• > * @param {string} objectName 用于日志记录的对象名称

• > */

• > function patchAddEventListener(targetObject, objectName) {

• > if (!targetObject || typeof targetObject.addEventListener !== 'function') {

• > warn(`Cannot patch addEventListener for invalid target: ${objectName}`);

• > return;

• > }

• > const originalAddEventListener = targetObject.addEventListener;

• >

• > targetObject.addEventListener = function (type, listener, optionsOrCapture) {

• > if (blackListedEvents.has(type.toLowerCase())) {

• > log(`BLOCKED ${objectName}.addEventListener: ${type}`);

• > return undefined; // 阻止添加黑名单中的事件监听器

• > }

• > debug(`ALLOWED ${objectName}.addEventListener: ${type}`, listener, optionsOrCapture);

• > return originalAddEventListener.call(this, type, listener, optionsOrCapture);

• > };

• >

• > patchToString(targetObject.addEventListener, originalAddEventListener);

• > log(`${objectName}.addEventListener patched.`);

• > }

• >

• > /**

• > * 劫持并修改对象的 removeEventListener 方法 (可选,但建议一起修改)。

• > * @param {EventTarget} targetObject 要劫持的对象

• > * @param {string} objectName 用于日志记录的对象名称

• > */

• > function patchRemoveEventListener(targetObject, objectName) {

• > if (!targetObject || typeof targetObject.removeEventListener !== 'function') {

• > warn(`Cannot patch removeEventListener for invalid target: ${objectName}`);

• > return;

• > }

• > const originalRemoveEventListener = targetObject.removeEventListener;

• >

• > targetObject.removeEventListener = function (type, listener, optionsOrCapture) {

• > if (blackListedEvents.has(type.toLowerCase())) {

• > log(`Original call to ${objectName}.removeEventListener for blacklisted event '${type}' would have been ignored by our addEventListener patch anyway. Allowing native call if needed.`);

• > // 即使我们阻止了 addEventListener,原始的 removeEventListener 仍然应该能安全调用

• > // 因为如果监听器从未被添加,调用 remove 也无害。

• > }

• > debug(`PASSTHROUGH ${objectName}.removeEventListener: ${type}`, listener, optionsOrCapture);

• > return originalRemoveEventListener.call(this, type, listener, optionsOrCapture);

• > };

• > patchToString(targetObject.removeEventListener, originalRemoveEventListener);

• > log(`${objectName}.removeEventListener patched.`);

• > }

• >

• >

• > /**

• > * 修改对象上的属性,使其返回伪造的值。

• > * @param {object} targetObject 目标对象 (e.g., document)

• > * @param {object} propertiesToSpoof 属性描述对象

• > * @param {string} objectName 对象名称

• > */

• > function spoofProperties(targetObject, propertiesToSpoof, objectName) {

• > if (!targetObject) {

• > warn(`Cannot spoof properties for invalid target: ${objectName}`);

• > return;

• > }

• > for (const prop in propertiesToSpoof) {

• > if (Object.prototype.hasOwnProperty.call(propertiesToSpoof, prop)) {

• > try {

• > Object.defineProperty(targetObject, prop, propertiesToSpoof[prop]);

• > debug(`Spoofed ${objectName}.${prop}`);

• > } catch (e) {

• > error(`Failed to spoof ${objectName}.${prop}:`, e);

• > }

• > }

• > }

• > log(`${objectName} properties spoofed.`);

• > }

• >

• > /**

• > * 清空或置空对象上的事件处理器属性。

• > * @param {object} targetObject 目标对象

• > * @param {string[]} eventHandlerNames 事件处理器名称数组

• > * @param {string} objectName 对象名称

• > */



• > })();
#? 樓拥有小目标
🕐 2025-5-28 10:46:44
• > function nullifyEventHandlers(targetObject, eventHandlerNames, objectName) {

• > if (!targetObject) {

• > warn(`Cannot nullify event handlers for invalid target: ${objectName}`);

• > return;

• > }

• > eventHandlerNames.forEach(handlerName => {

• > try {

• > Object.defineProperty(targetObject, handlerName, {

• > get: () => {

• > debug(`Access to ${objectName}.${handlerName} (get), returning undefined.`);

• > return undefined;

• > },

• > set: (newHandler) => {

• > log(`Attempt to set ${objectName}.${handlerName} blocked.`);

• > if (typeof newHandler === 'function') {

• > // 可以选择性地调用 newHandler,或者完全阻止

• > // debug(`(Blocked) Handler function was:`, newHandler);

• > }

• > },

• > configurable: true // 保持可配置,以便脚本可以多次运行或被其他脚本修改

• > });

• > debug(`Nullified ${objectName}.${handlerName}`);

• > } catch (e) {

• > error(`Failed to nullify ${objectName}.${handlerName}:`, e);

• > }

• > });

• > log(`${objectName} on-event handlers nullified.`);

• > }

• >

• > // --- 开始执行 ---

• >

• > log("Script starting...");

• >

• > // 1. 劫持 window 和 document 的 addEventListener/removeEventListener

• > patchAddEventListener(window, "window");

• > patchRemoveEventListener(window, "window"); // 也 patch removeEventListener 以保持一致性

• > patchAddEventListener(document, "document");

• > patchRemoveEventListener(document, "document");

• >

• > // 2. 修改 document 的属性

• > spoofProperties(document, spoofedDocumentProperties, "document");

• >

• > // 3. 置空 document 和 window 上的事件处理器

• > nullifyEventHandlers(document, eventHandlersToNullifyDocument, "document");

• > nullifyEventHandlers(window, eventHandlersToNullifyWindow, "window");

• >

• > // 4. 对于 document.body,需要等待 DOMContentLoaded

• > // 使用 MutationObserver 确保 body 存在时立即 patch,比 DOMContentLoaded 更早且更可靠

• > const observer = new MutationObserver((mutations, obs) => {

• > if (document.body) {

• > patchAddEventListener(document.body, "document.body");

• > patchRemoveEventListener(document.body, "document.body");

• > // 对于 document.body,也可以考虑 nullify onmouseleave, onmouseout 等

• > nullifyEventHandlers(document.body, ["onmouseleave", "onmouseout", "onblur", "onfocus"], "document.body");

• > log("document.body patched via MutationObserver.");

• > obs.disconnect(); // 完成任务后断开观察者

• > }

• > });

• >

• > if (document.body) { // 如果 body 已经存在 (不太可能在 document-start,但以防万一)

• > patchAddEventListener(document.body, "document.body");

• > patchRemoveEventListener(document.body, "document.body");

• > nullifyEventHandlers(document.body, ["onmouseleave", "onmouseout", "onblur", "onfocus"], "document.body");

• > log("document.body patched directly.");

• > } else {

• > observer.observe(document.documentElement || document, { childList: true, subtree: true });

• > }

• >

• >

• > // 5. 调试:劫持计时器 (如果 isDebug 为 true)

• > if (isDebug) {

• > const originalSetInterval = window.setInterval;

• > window.setInterval = function(...args) {

• > const id = originalSetInterval.apply(this, args);

• > debug("calling window.setInterval", id, args);

• > return id;

• > };

• > patchToString(window.setInterval, originalSetInterval);

• >

• > const originalSetTimeout = window.setTimeout;

• > window.setTimeout = function(...args) {

• > const id = originalSetTimeout.apply(this, args);

• > debug("calling window.setTimeout", id, args);

• > return id;

• > };

• > patchToString(window.setTimeout, originalSetTimeout);

• > log("Timer functions (setInterval, setTimeout) wrapped for debugging.");

• > }

• >

• > log("Script execution finished. Monitoring active.");

• >
#? 樓拥有小目标
🕐 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)多或者少开放端口不得分