# WordPress Malware Removal: Emergency Hack Fix

> WordPress malware removal for a hacked site: learn the warning signs, the first steps, and how to restore your site and Google rankings. Read

- URL: https://medikabyte.com/wordpress-hacked-or-malware-removal/
- Diperbarui: 2026-10-16
- Penulis: MedikaByte
- Penerbit: MedikaByte (B2B digital agency)

Skip to content

[**ADTYAA** Technology & Digital Systems](https://medikabyte.com/)

**EN**

**ID**

**中文**

Consultation

[Capabilities](https://medikabyte.com/#capabilities)
[Expertise](https://medikabyte.com/#expertise)
[Approach](https://medikabyte.com/#approach)
[Proof](https://medikabyte.com/#proof)
[About](https://medikabyte.com/#about)
[Essentials](https://medikabyte.com/essentials/)
Consultation

# WordPress Hacked? *Emergency Malware Removal Guide for Business Websites*

By Adtyaa 9 October 2026 7 min read

WordPress malware removal becomes urgent the moment a site shows a redirect, a Google warning, or a sudden drop in traffic. Every hour online with an infected site costs trust, rankings, and sales. This guide shows how to recognize an infection, what to do first, and how a professional cleanup restores the site and keeps it secure.

**Key takeaway**

Do not delete files at random. For WordPress malware removal, keep a copy, find the entry point, remove malware and backdoors together, then harden the site and ask Google to review it.

![Security team reviewing a system hacked alert on monitors before starting WordPress malware removal](https://medikabyte.com/wp-content/uploads/2026/10/WordPress-hacked-atau-malware-removal.jpg)

A security team reviews a hacked-site alert before the malware removal begins.

## Signs your WordPress site needs malware removal

The common signs are visitors redirected to unfamiliar pages, spam pages in search results (sometimes in other languages such as Japanese), browser or Google warnings, unknown administrator accounts, and hosting suspensions. Google documents how it treats compromised sites in its [hacked websites guide](https://developers.google.com/search/docs/monitor-debug/security/hacked).

Acting early matters because an infection spreads to more files, damages search rankings, and can expose customer data. The cost of waiting is almost always higher than the cost of a prompt cleanup.

## Emergency WordPress malware removal service: what a cleanup covers

An emergency WordPress malware removal service should be scoped in writing around four connected workstreams, so you know exactly what is done and how it is verified.

### Scan and isolate

A full backup copy is taken, then files, database, and users are scanned to map the infection.

### Malware and backdoor removal

Malicious scripts, injected code, and hidden backdoors are removed together, not one at a time.

### Restore and verify

Core files are restored, content and media are preserved, and the site is retested end to end.

### Blacklist and search recovery

Google warnings are resolved and a review is requested through Search Console.

## Clean hacked WordPress site fast: the first steps

To clean a hacked WordPress site fast, start by preserving evidence. Take a full backup of the infected state before changing anything, because it shows how the attacker got in and protects your content if a step goes wrong.

Next, secure access: change passwords from a clean device, and review every administrator and FTP account. Then bring in a specialist, because removing visible malware while a backdoor stays in place only leads to reinfection.

- Take a backup copy of the infected site and database.
- Change passwords for WordPress, hosting, FTP, and the database.
- Follow the official [WordPress hardening guide](https://developer.wordpress.org/advanced-administration/security/hardening/) once the site is clean.

## WordPress security cleanup expert: hardening after malware removal

A WordPress security cleanup expert looks for the cause, not only the symptom. Typical entry points are outdated plugins or themes, nulled (pirated) themes, weak or reused credentials, and unprotected admin areas.

Once the cause is closed, hardening reduces the chance of a repeat after WordPress malware removal: updates, least-privilege roles, two-factor sign-in, and a web application firewall in front of the site.

- Cloudflare and WAF rules to filter malicious traffic before it reaches the server.
- Two-factor sign-in and tighter user roles for every administrator.
- Scheduled backups and monitoring so a new problem is seen early.

## Professional WordPress hack repair: restoring rankings and trust

Professional WordPress hack repair does not end when WordPress malware removal is complete. The search and trust side of the site needs its own recovery:

- Remove spam URLs and injected pages from the site and the index.
- Check Search Console for security issues and manual actions.
- Request a review once the site is verified clean.
- Resubmit the sitemap and watch crawl and ranking data.
- Keep monitoring for a period after recovery.

Security is part of the wider digital system, which is why [security and infrastructure](https://medikabyte.com/#capabilities) sits next to engineering and growth in the same practice.

## WordPress malware removal agency: how to evaluate a provider

When comparing a WordPress malware removal agency, look for clarity rather than claims: a written scope, a clear account of what is cleaned and verified, root-cause analysis, hardening included in the work, and direct senior involvement instead of a hand-off chain.

That is the working model at ADTYAA: scope in writing before work begins, priority handling for emergencies, and ongoing maintenance available afterwards. See the [approach](https://medikabyte.com/#approach) for how an engagement runs.

### Is your WordPress site hacked right now?

Send your website address and a short description of what you see. Emergency cases are handled as priority requests, you receive a written scope before work begins, and every enquiry is answered within 24 hours.

[Request emergency help](https://wa.me/6281411188809) Send a project brief

## Frequently asked questions

**Can malware be removed without losing my content?**

Yes. A full backup is taken first, and the cleanup targets malicious code while posts, pages, media, and the database content are preserved.

**My site is flagged by Google. Can that be fixed?**

Yes. Once the site is clean, the issue is resolved in Search Console and a review is requested. Timing depends on Google’s review.

**Will the site be hacked again after the cleanup?**

The work includes finding the entry point and hardening the site, which lowers the risk of reinfection. Monitoring and maintenance can be added after delivery.

**What do you need to get started?**

Your website address and a short description of what you see. Access details are shared securely once we agree to work together. International clients are served remotely in English.

Project brief

## Share your requirement.

Describe what you are building, what is not performing, or what needs to improve. I will review the brief and respond within 24 hours.

WhatsApp / Phone [0814 111 888 09](tel:+6281411188809)

Email [hallo@adtyaa.cloud](mailto:hallo@adtyaa.cloud)

Base **Jakarta, Indonesia**

Location

## Find us on Google Maps.

In-person meetings are by appointment. Please message first so a time can be confirmed.

### DJURAGAN IKLAN ID

Founded by ADTYAA

Jl. Green Pramuka City No.9 13, RT.13/RW.9, Rawasari, Kec. Cempaka Putih, Kota Jakarta Pusat, DKI Jakarta 10570

#### Opening hours

Mon, Wed to Sat 08:00 – 21:30

Tuesday 08:00 – 21:00

Sunday 09:00 – 21:30

[Get directions](https://www.google.com/maps/dir/?api=1&destination=-6.1883766,106.8732792&destination_place_id=ChIJKcjnOqb1aS4RfbYD_EKMv84)
[Chat on WhatsApp](https://wa.me/6281411188809)
[Call now](tel:+6281411188809)

Build what your business depends on.

## Let’s build something worth depending on.

One accountable technology partner across engineering, growth, security, and digital infrastructure.

Request a consultation [Explore capabilities](https://medikabyte.com/#capabilities)

[**ADTYAA**](https://medikabyte.com/)

Digital Systems & Technology Consultancy

Aditya

Founder & Technology Strategist

Djuragan Iklan

Navigate

- [Capabilities](https://medikabyte.com/#capabilities)
- [Expertise](https://medikabyte.com/#expertise)
- [Approach](https://medikabyte.com/#approach)
- [About](https://medikabyte.com/#about)
- Location
- Contact

Capabilities

- [Software Engineering](https://medikabyte.com/#capabilities)
- [Digital Engineering](https://medikabyte.com/#capabilities)
- [Growth Systems](https://medikabyte.com/#capabilities)
- [Security & Infrastructure](https://medikabyte.com/#capabilities)
- [Medical SEO](https://medikabyte.com/#medical)
- [Custom Plugins](https://medikabyte.com/essentials/)
- [Custom Themes](https://medikabyte.com/essentials/)
- [Add-ons & Care Plans](https://medikabyte.com/essentials/)

Contact

[WhatsApp](https://wa.me/6281411188809)
[hallo@adtyaa.cloud](mailto:hallo@adtyaa.cloud)
Jakarta, Indonesia

ADTYAA

© 2026 ADTYAA. All rights reserved.

[Essentials](https://medikabyte.com/essentials/)

[Chat on WhatsApp](https://wa.me/6281411188809)

var D = {"skip":["Skip to content","Lewati ke konten","跳到主要内容"],"menu":["Menu","Menu","菜单"],"lang.group":["Language","Bahasa","语言"],"nav.cap":["Capabilities","Keahlian","核心能力"],"nav.work":["Expertise","Spesialisasi","行业专长"],"nav.app":["Approach","Pendekatan","合作流程"],"nav.proof":["Proof","Bukti","实绩"],"nav.about":["About","Tentang","关于"],"nav.ess":["Essentials","Essentials","Essentials"],"nav.cta":["Consultation","Konsultasi","预约咨询"],"nav.contact":["Contact","Kontak","联系我们"],"bag.aria":["ADTYAA Essentials: services, themes, plugins, and add-ons","ADTYAA Essentials: jasa, tema, plugin, dan add-on","ADTYAA Essentials：服务、主题、插件与附加服务"],"hero.cta1":["Request a consultation","Jadwalkan konsultasi","预约咨询"],"hero.cta2":["Explore capabilities","Jelajahi keahlian","了解核心能力"],"hero.role":["Founder & Technology Strategist","Founder & Technology Strategist","创始人 · 技术战略顾问"],"cap4.title":["Software Engineering","Software Engineering","软件工程"],"cap1.title":["Digital Engineering","Digital Engineering","数字工程"],"cap2.title":["Growth Systems","Growth Systems","增长体系"],"cap3.title":["Security & Infrastructure","Security & Infrastructure","安全与基础设施"],"opt.med":["Medical SEO","SEO Medis","医疗 SEO"],"opt.other":["Other / Not sure yet","Lainnya / Belum yakin","其他 / 尚未确定"],"contact.label":["Project brief","Brief proyek","项目简报"],"contact.title":["Share your requirement.","Sampaikan kebutuhan Anda.","请告诉我们您的需求。"],"contact.copy":["Describe what you are building, what is not performing, or what needs to improve. I will review the brief and respond within 24 hours.","Jelaskan apa yang sedang Anda bangun, apa yang belum berjalan optimal, atau apa yang perlu ditingkatkan. Saya akan mempelajari brief dan merespons dalam 24 jam.","请描述您正在构建的内容、表现不佳之处或需要改进的方面。我会审阅简报并在 24 小时内回复，咨询以英文进行。"],"contact.wa":["WhatsApp / Phone","WhatsApp / Telepon","WhatsApp / 电话"],"contact.loc":["Base","Lokasi","所在地"],"contact.city":["Jakarta, Indonesia","Jakarta, Indonesia","印度尼西亚 · 雅加达"],"form.name":["Name *","Nama *","姓名 *"],"form.email":["Email","Email","邮箱"],"form.wa":["WhatsApp","WhatsApp","WhatsApp"],"form.url":["Website","Website","网站"],"form.service":["Capability *","Keahlian *","所需能力 *"],"form.choose":["Choose a capability","Pilih keahlian","请选择能力方向"],"form.eng":["Engagement","Jenis kerja sama","合作类型"],"form.time":["Timeline","Target waktu","时间安排"],"form.choose2":["Choose one","Pilih salah satu","请选择"],"form.msg":["Project / problem","Proyek / masalah","项目 / 问题"],"form.sendwa":["Send via WhatsApp","Kirim lewat WhatsApp","通过 WhatsApp 发送"],"form.sendmail":["Send via email","Kirim lewat email","通过邮件发送"],"form.note":["Your brief opens in WhatsApp or your email application. Nothing is stored on this page.","Brief Anda terbuka di WhatsApp atau aplikasi email, siap dikirim. Tidak ada data yang disimpan di halaman ini.","您的简报将在 WhatsApp 或邮件应用中打开，供您发送。本页面不会保存任何数据。"],"eng.1":["One-time fix or setup","Perbaikan atau setup sekali jalan","一次性修复或设置"],"eng.2":["Full project","Proyek penuh","完整项目"],"eng.3":["Ongoing monthly support","Dukungan bulanan berkelanjutan","持续月度支持"],"eng.4":["Not sure yet","Belum yakin","尚未确定"],"time.1":["As soon as possible","Secepatnya","尽快"],"time.2":["Within 1 month","Dalam 1 bulan","1 个月内"],"time.3":["Within 3 months","Dalam 3 bulan","3 个月内"],"time.4":["Flexible","Fleksibel","灵活"],"f.err":["Please enter your name and choose a capability first.","Isi nama dan pilih keahlian terlebih dahulu.","请先填写姓名并选择能力方向。"],"f.okwa":["Opening WhatsApp...","Membuka WhatsApp...","正在打开 WhatsApp…"],"f.okmail":["Opening your email application...","Membuka aplikasi email Anda...","正在打开邮件应用…"],"m.name":["Name","Nama","Name"],"m.email":["Email","Email","Email"],"m.wa":["WhatsApp","WhatsApp","WhatsApp"],"m.url":["Website","Website","Website"],"m.service":["Capability","Keahlian","Capability"],"m.eng":["Engagement","Jenis kerja sama","Engagement"],"m.time":["Timeline","Target waktu","Timeline"],"m.msg":["Message","Pesan","Message"],"m.subject":["Project enquiry","Permintaan proyek","Project enquiry"],"loc.label":["Location","Lokasi","地点"],"loc.title":["Find us on Google Maps.","Temukan kami di Google Maps.","在 Google 地图上找到我们。"],"loc.lead":["In-person meetings are by appointment. Please message first so a time can be confirmed.","Pertemuan langsung dengan janji temu. Kirim pesan terlebih dahulu agar waktunya dapat dikonfirmasi.","现场会面需提前预约。请先发送消息以确认时间。"],"loc.founded":["Founded by ADTYAA","Founded by ADTYAA","由 ADTYAA 创立"],"loc.hours":["Opening hours","Jam operasional","营业时间"],"loc.d1":["Mon, Wed to Sat","Sen, Rab sampai Sab","周一、周三至周六"],"loc.d2":["Tuesday","Selasa","周二"],"loc.d3":["Sunday","Minggu","周日"],"loc.dir":["Get directions","Petunjuk arah","获取路线"],"loc.wa":["Chat on WhatsApp","Chat via WhatsApp","通过 WhatsApp 洽谈"],"loc.call":["Call now","Telepon sekarang","立即致电"],"loc.map":["DJURAGAN IKLAN ID on Google Maps","DJURAGAN IKLAN ID di Google Maps","DJURAGAN IKLAN ID 的 Google 地图位置"],"final.label":["Build what your business depends on.","Bangun sistem yang diandalkan bisnis Anda.","构建您的业务所依赖的系统。"],"final.title":["Let's build something worth depending on.","Mari bangun sesuatu yang layak diandalkan.","让我们共同构建值得依赖的系统。"],"final.copy":["One accountable technology partner across engineering, growth, security, and digital infrastructure.","Satu partner teknologi yang akuntabel untuk engineering, growth, keamanan, dan infrastruktur digital.","一个对结果负责的技术合作方，覆盖工程、增长、安全与数字基础设施。"],"foot.nav":["Navigate","Navigasi","导航"],"foot.cap":["Capabilities","Keahlian","核心能力"],"foot.con":["Contact","Kontak","联系"],"foot.plugins":["Custom Plugins","Plugin Kustom","定制插件"],"foot.themes":["Custom Themes","Tema Kustom","定制主题"],"foot.addons":["Add-ons & Care Plans","Add-on & Paket Perawatan","附加服务与维护计划"],"foot.rights":["All rights reserved.","Hak cipta dilindungi.","保留所有权利。"],"dock.group":["Quick contact","Kontak cepat","快速联系"],"dock.wa":["Chat on WhatsApp","Chat via WhatsApp","通过 WhatsApp 洽谈"],"dock.maps":["Open in Google Maps","Buka di Google Maps","在 Google 地图中打开"],"dock.call":["Call now","Telepon sekarang","立即致电"],"wa.general":["Hi Adtyaa, I found your article on WordPress Hacked or Malware Removal and I need help with my website.","Hi Adtyaa, I found your article on WordPress Hacked or Malware Removal and I need help with my website.","Hi Adtyaa, I found your article on WordPress Hacked or Malware Removal and I need help with my website."],"wa.article":["Hi Adtyaa, I read your article on WordPress Hacked or Malware Removal. My WordPress site was hacked and I need emergency malware removal.","Hi Adtyaa, I read your article on WordPress Hacked or Malware Removal. My WordPress site was hacked and I need emergency malware removal.","Hi Adtyaa, I read your article on WordPress Hacked or Malware Removal. My WordPress site was hacked and I need emergency malware removal."],"a.home":["Home","Beranda","首页"],"a.crumb":["WordPress Hacked or Malware Removal","WordPress Hacked atau Malware Removal","WordPress 被黑与恶意软件清除"],"a.h1a":["WordPress Hacked?","WordPress Hacked?","WordPress 被黑了？"],"a.h1b":["Emergency Malware Removal Guide for Business Websites","Panduan Emergency Malware Removal untuk Website Bisnis","企业网站恶意软件紧急清除指南"],"a.m1":["By Adtyaa","Oleh Adtyaa","作者：Adtyaa"],"a.m2":["9 October 2026","9 Oktober 2026","2026 年 10 月 9 日"],"a.m3":["7 min read","Baca 7 menit","阅读约 7 分钟"],"a.lead":["WordPress malware removal becomes urgent the moment a site shows a redirect, a Google warning, or a sudden drop in traffic. Every hour online with an infected site costs trust, rankings, and sales. This guide shows how to recognize an infection, what to do first, and how a professional cleanup restores the site and keeps it secure.","WordPress malware removal menjadi mendesak begitu website menampilkan redirect, peringatan Google, atau penurunan trafik mendadak. Setiap jam website terinfeksi masih online mengorbankan kepercayaan, ranking, dan penjualan. Panduan ini menunjukkan cara mengenali infeksi, langkah pertama yang perlu dilakukan, dan bagaimana pembersihan profesional memulihkan website serta menjaganya tetap aman.","一旦网站出现跳转、Google 警告或流量骤降，WordPress 恶意软件清除（WordPress malware removal）就变得刻不容缓。被感染的网站每多在线一小时，就多损失一分信任、排名与销售。本文说明如何识别感染、第一时间该做什么，以及专业清除如何恢复网站并保持其安全。"],"a.key.t":["Key takeaway","Intinya","核心要点"],"a.key.c":["Do not delete files at random. For WordPress malware removal, keep a copy, find the entry point, remove malware and backdoors together, then harden the site and ask Google to review it.","Jangan menghapus file secara acak. Untuk WordPress malware removal, simpan salinannya, temukan titik masuknya, bersihkan malware dan backdoor sekaligus, lalu perkuat website dan minta Google meninjaunya.","不要随意删除文件。进行 WordPress 恶意软件清除时，先保留副本，找出入侵入口，同时清除恶意软件与后门，再加固网站并请求 Google 重新审核。"],"a.img.alt":["Security team reviewing a system hacked alert on monitors before starting WordPress malware removal","Tim keamanan meninjau peringatan sistem diretas di monitor sebelum memulai pembersihan malware WordPress","安全团队在开始清除 WordPress 恶意软件前，查看显示器上的系统被入侵警报"],"a.img.cap":["A security team reviews a hacked-site alert before the malware removal begins.","Tim keamanan meninjau peringatan website diretas sebelum pembersihan malware dimulai.","安全团队在恶意软件清除开始前查看网站被黑警报。"],"a.toc":["In this article","Dalam artikel ini","本文内容"],"toc1":["Signs your site has been hacked","Tanda website Anda diretas","网站被黑的迹象"],"toc2":["What an emergency cleanup covers","Cakupan pembersihan darurat","紧急清除包含哪些工作"],"toc3":["The first steps to take","Langkah pertama yang diambil","第一时间的处理步骤"],"toc4":["Hardening after the cleanup","Penguatan setelah pembersihan","清除后的加固"],"toc5":["Restoring rankings and trust","Memulihkan ranking dan kepercayaan","恢复排名与信任"],"toc6":["How to evaluate a provider","Cara menilai penyedia jasa","如何评估服务商"],"toc7":["Frequently asked questions","Pertanyaan yang sering diajukan","常见问题"],"s1.h":["Signs your WordPress site needs malware removal","Tanda website WordPress Anda perlu malware removal","WordPress 网站需要清除恶意软件的迹象"],"s1.p1":["The common signs are visitors redirected to unfamiliar pages, spam pages in search results (sometimes in other languages such as Japanese), browser or Google warnings, unknown administrator accounts, and hosting suspensions. Google documents how it treats compromised sites in its [hacked websites guide<\/a>.","Tanda yang paling umum: pengunjung diarahkan ke halaman asing, halaman spam muncul di hasil pencarian (kadang berbahasa lain seperti Jepang), peringatan dari browser atau Google, akun administrator yang tidak dikenal, dan suspend dari hosting. Google menjelaskan cara menangani situs yang diretas dalam](https://developers.google.com/search/docs/monitor-debug/security/hacked) [panduan hacked websites<\/a>.","常见迹象包括：访客被跳转到陌生页面、搜索结果中出现垃圾页面（有时是日文等其他语言）、浏览器或 Google 警告、出现不明管理员账户，以及主机被暂停。Google 在其](https://developers.google.com/search/docs/monitor-debug/security/hacked) [被黑网站指南<\/a>中说明了对受感染网站的处理方式。"],"s1.p2":["Acting early matters because an infection spreads to more files, damages search rankings, and can expose customer data. The cost of waiting is almost always higher than the cost of a prompt cleanup.","Bertindak lebih awal penting karena infeksi menyebar ke lebih banyak file, merusak ranking pencarian, dan dapat mengekspos data pelanggan. Biaya menunda hampir selalu lebih besar daripada biaya pembersihan yang cepat.","尽早处理很重要，因为感染会扩散到更多文件、损害搜索排名，并可能暴露客户数据。拖延的代价几乎总是高于及时清除的成本。"],"s2.h":["Emergency WordPress malware removal service: what a cleanup covers","Layanan emergency WordPress malware removal: apa saja yang dikerjakan","WordPress 恶意软件紧急清除服务：包含哪些工作"],"s2.p":["An emergency WordPress malware removal service should be scoped in writing around four connected workstreams, so you know exactly what is done and how it is verified.","Layanan emergency WordPress malware removal sebaiknya dituliskan lingkupnya dalam empat alur kerja yang saling terhubung, agar Anda tahu persis apa yang dikerjakan dan bagaimana diverifikasi.","WordPress 恶意软件紧急清除服务，应以书面形式围绕四条相互衔接的工作线界定范围，让您清楚了解做了什么、如何验证。"],"s2.1t":["Scan and isolate","Pindai dan isolasi","扫描与隔离"],"s2.1c":["A full backup copy is taken, then files, database, and users are scanned to map the infection.","Salinan cadangan lengkap dibuat, lalu file, database, dan pengguna dipindai untuk memetakan infeksi.","先完整备份，再扫描文件、数据库与用户，摸清感染范围。"],"s2.2t":["Malware and backdoor removal","Pembersihan malware dan backdoor","恶意软件与后门清除"],"s2.2c":["Malicious scripts, injected code, and hidden backdoors are removed together, not one at a time.","Script berbahaya, kode injeksi, dan backdoor tersembunyi dibersihkan bersamaan, bukan satu per satu.","恶意脚本、注入代码与隐藏后门一并清除，而非逐个处理。"],"s2.3t":["Restore and verify","Pemulihan dan verifikasi","恢复与验证"],"s2.3c":["Core files are restored, content and media are preserved, and the site is retested end to end.","File inti dipulihkan, konten dan media dipertahankan, dan website diuji ulang dari ujung ke ujung.","恢复核心文件，保留内容与媒体，并对网站进行端到端复测。"],"s2.4t":["Blacklist and search recovery","Blacklist dan pemulihan pencarian","黑名单与搜索恢复"],"s2.4c":["Google warnings are resolved and a review is requested through Search Console.","Peringatan Google diselesaikan dan peninjauan diajukan melalui Search Console.","解决 Google 警告，并通过 Search Console 提交重新审核。"],"s3.h":["Clean hacked WordPress site fast: the first steps","Bersihkan website WordPress yang diretas dengan cepat: langkah pertama","快速清理被黑的 WordPress 网站：第一步"],"s3.p1":["To clean a hacked WordPress site fast, start by preserving evidence. Take a full backup of the infected state before changing anything, because it shows how the attacker got in and protects your content if a step goes wrong.","Untuk membersihkan website WordPress yang diretas dengan cepat, mulai dengan menyimpan bukti. Buat cadangan lengkap kondisi terinfeksi sebelum mengubah apa pun, karena itu menunjukkan bagaimana penyerang masuk dan melindungi konten bila ada langkah yang keliru.","要快速清理被黑的 WordPress 网站，先从保留证据开始。在改动任何内容之前，对受感染状态做完整备份，它能显示攻击者如何进入，也能在操作出错时保护您的内容。"],"s3.p2":["Next, secure access: change passwords from a clean device, and review every administrator and FTP account. Then bring in a specialist, because removing visible malware while a backdoor stays in place only leads to reinfection.","Berikutnya, amankan akses: ganti password dari perangkat yang bersih, lalu periksa setiap akun administrator dan FTP. Setelah itu libatkan spesialis, karena menghapus malware yang terlihat sementara backdoor masih ada hanya akan menyebabkan infeksi ulang.","接着保护访问权限：用干净的设备更换密码，并检查每个管理员与 FTP 账户。然后交给专业人员处理，因为只清除可见的恶意软件而留下后门，只会导致再次感染。"],"s3.l1":["Take a backup copy of the infected site and database.","Buat salinan cadangan website dan database yang terinfeksi.","备份受感染的网站与数据库。"],"s3.l2":["Change passwords for WordPress, hosting, FTP, and the database.","Ganti password WordPress, hosting, FTP, dan database.","更换 WordPress、主机、FTP 与数据库密码。"],"s3.l3":["Follow the official](https://developers.google.com/search/docs/monitor-debug/security/hacked) [WordPress hardening guide<\/a> once the site is clean.","Ikuti](https://developer.wordpress.org/advanced-administration/security/hardening/) [panduan hardening WordPress<\/a> resmi setelah website bersih.","网站清理完成后，参照官方的](https://developer.wordpress.org/advanced-administration/security/hardening/) [WordPress 加固指南<\/a>。"],"s4.h":["WordPress security cleanup expert: hardening after malware removal","Ahli WordPress security cleanup: penguatan setelah malware removal","WordPress 安全清理专家：恶意软件清除后的加固"],"s4.p1":["A WordPress security cleanup expert looks for the cause, not only the symptom. Typical entry points are outdated plugins or themes, nulled (pirated) themes, weak or reused credentials, and unprotected admin areas.","Ahli WordPress security cleanup mencari penyebab, bukan hanya gejala. Titik masuk yang umum adalah plugin atau tema yang usang, tema nulled (bajakan), kredensial yang lemah atau dipakai ulang, dan area admin yang tidak terlindungi.","WordPress 安全清理专家会追查原因，而不只是处理症状。常见入口包括过期的插件或主题、盗版（nulled）主题、薄弱或重复使用的凭据，以及缺乏保护的后台。"],"s4.p2":["Once the cause is closed, hardening reduces the chance of a repeat after WordPress malware removal: updates, least-privilege roles, two-factor sign-in, and a web application firewall in front of the site.","Setelah penyebab ditutup, hardening mengurangi kemungkinan terulang setelah WordPress malware removal: update, peran dengan hak akses minimum, login dua faktor, dan web application firewall di depan website.","堵住原因后，加固能降低 WordPress 恶意软件清除之后再次发生的概率：及时更新、最小权限角色、双因素登录，以及部署在网站前端的 Web 应用防火墙。"],"s4.l1":["Cloudflare and WAF rules to filter malicious traffic before it reaches the server.","Cloudflare dan aturan WAF untuk menyaring trafik berbahaya sebelum mencapai server.","通过 Cloudflare 与 WAF 规则，在恶意流量到达服务器前将其过滤。"],"s4.l2":["Two-factor sign-in and tighter user roles for every administrator.","Login dua faktor dan peran pengguna yang lebih ketat untuk setiap administrator.","为每位管理员启用双因素登录并收紧用户角色。"],"s4.l3":["Scheduled backups and monitoring so a new problem is seen early.","Backup terjadwal dan pemantauan agar masalah baru terlihat sejak dini.","定期备份与监测，让新问题尽早被发现。"],"s5.h":["Professional WordPress hack repair: restoring rankings and trust","Professional WordPress hack repair: memulihkan ranking dan kepercayaan","专业 WordPress 被黑修复：恢复排名与信任"],"s5.p1":["Professional WordPress hack repair does not end when WordPress malware removal is complete. The search and trust side of the site needs its own recovery:","Professional WordPress hack repair tidak berhenti ketika WordPress malware removal selesai. Sisi pencarian dan kepercayaan website memerlukan pemulihannya sendiri:","专业的 WordPress 被黑修复并不会在 WordPress 恶意软件清除完成后结束。网站在搜索与信任层面还需要单独的恢复："],"s5.l1":["Remove spam URLs and injected pages from the site and the index.","Hapus URL spam dan halaman injeksi dari website dan indeks.","从网站与索引中清除垃圾 URL 与被注入的页面。"],"s5.l2":["Check Search Console for security issues and manual actions.","Periksa Search Console untuk masalah keamanan dan tindakan manual.","在 Search Console 中检查安全问题与人工处置。"],"s5.l3":["Request a review once the site is verified clean.","Ajukan peninjauan setelah website terverifikasi bersih.","确认网站干净后提交重新审核。"],"s5.l4":["Resubmit the sitemap and watch crawl and ranking data.","Kirim ulang sitemap dan pantau data crawl serta ranking.","重新提交站点地图，并观察抓取与排名数据。"],"s5.l5":["Keep monitoring for a period after recovery.","Lanjutkan pemantauan selama beberapa waktu setelah pemulihan.","恢复后持续监测一段时间。"],"s5.p2":["Security is part of the wider digital system, which is why](https://developer.wordpress.org/advanced-administration/security/hardening/) [security and infrastructure<\/a> sits next to engineering and growth in the same practice.","Keamanan adalah bagian dari sistem digital yang lebih luas, itulah sebabnya](https://medikabyte.com/#capabilities) [security dan infrastruktur<\/a> berada bersama engineering dan growth dalam satu praktik.","安全是整个数字系统的一部分，这也是](https://medikabyte.com/#capabilities) [安全与基础设施<\/a>与工程、增长同属一个业务体系的原因。"],"s6.h":["WordPress malware removal agency: how to evaluate a provider","WordPress malware removal agency: cara menilai penyedia jasa","WordPress 恶意软件清除服务机构：如何评估服务商"],"s6.p1":["When comparing a WordPress malware removal agency, look for clarity rather than claims: a written scope, a clear account of what is cleaned and verified, root-cause analysis, hardening included in the work, and direct senior involvement instead of a hand-off chain.","Saat membandingkan WordPress malware removal agency, cari kejelasan, bukan klaim: lingkup tertulis, penjelasan yang jelas tentang apa yang dibersihkan dan diverifikasi, analisis akar masalah, hardening yang termasuk dalam pekerjaan, dan keterlibatan langsung tenaga senior, bukan rantai serah-terima.","比较 WordPress 恶意软件清除服务机构时，应看重清晰度而非口号：书面范围、对清除与验证内容的明确说明、根因分析、包含加固的服务内容，以及资深人员直接参与而非层层转交。"],"s6.p2":["That is the working model at ADTYAA: scope in writing before work begins, priority handling for emergencies, and ongoing maintenance available afterwards. See the](https://medikabyte.com/#capabilities) [approach<\/a> for how an engagement runs.","Itulah model kerja di ADTYAA: lingkup tertulis sebelum pekerjaan dimulai, penanganan prioritas untuk keadaan darurat, dan perawatan berkelanjutan sesudahnya. Lihat](https://medikabyte.com/#approach) [pendekatan kami<\/a> untuk memahami alur kerja sama.","这正是 ADTYAA 的工作方式：开工前确定书面范围，紧急情况优先处理，之后可提供持续维护。合作如何进行，请见](https://medikabyte.com/#approach) [合作流程<\/a>。"],"cta.t":["Is your WordPress site hacked right now?","Apakah website WordPress Anda sedang diretas?","您的 WordPress 网站现在被黑了吗？"],"cta.c":["Send your website address and a short description of what you see. Emergency cases are handled as priority requests, you receive a written scope before work begins, and every enquiry is answered within 24 hours.","Kirim alamat website dan deskripsi singkat tentang apa yang Anda lihat. Kasus darurat ditangani sebagai permintaan prioritas, Anda menerima lingkup tertulis sebelum pekerjaan dimulai, dan setiap pesan dibalas dalam 24 jam.","请发送网站地址，并简要描述您看到的情况。紧急情况按优先请求处理，开工前您会收到书面范围，每条咨询均在 24 小时内回复。"],"cta.b1":["Request emergency help","Minta bantuan darurat","申请紧急处理"],"cta.b2":["Send a project brief","Kirim brief proyek","提交项目简报"],"faq.h":["Frequently asked questions","Pertanyaan yang sering diajukan","常见问题"],"q1":["Can malware be removed without losing my content?","Apakah malware bisa dibersihkan tanpa kehilangan konten?","清除恶意软件会丢失我的内容吗？"],"r1":["Yes. A full backup is taken first, and the cleanup targets malicious code while posts, pages, media, and the database content are preserved.","Bisa. Cadangan lengkap dibuat lebih dulu, dan pembersihan menargetkan kode berbahaya sementara posting, halaman, media, dan isi database dipertahankan.","不会。先做完整备份，清除针对的是恶意代码，文章、页面、媒体与数据库内容均予以保留。"],"q2":["My site is flagged by Google. Can that be fixed?","Website saya ditandai oleh Google. Bisakah diperbaiki?","我的网站被 Google 标记了，能解决吗？"],"r2":["Yes. Once the site is clean, the issue is resolved in Search Console and a review is requested. Timing depends on Google's review.","Bisa. Setelah website bersih, masalah diselesaikan di Search Console dan peninjauan diajukan. Waktunya bergantung pada proses peninjauan Google.","可以。网站清理干净后，在 Search Console 中处理问题并提交重新审核，耗时取决于 Google 的审核进度。"],"q3":["Will the site be hacked again after the cleanup?","Apakah website bisa diretas lagi setelah dibersihkan?","清理之后网站还会再次被黑吗？"],"r3":["The work includes finding the entry point and hardening the site, which lowers the risk of reinfection. Monitoring and maintenance can be added after delivery.","Pekerjaan mencakup menemukan titik masuk dan memperkuat website, yang menurunkan risiko infeksi ulang. Pemantauan dan perawatan dapat ditambahkan setelah serah terima.","服务包含查明入侵入口并加固网站，从而降低再次感染的风险。交付后还可加入监测与维护。"],"q4":["What do you need to get started?","Apa yang dibutuhkan untuk memulai?","开始处理需要准备什么？"],"r4":["Your website address and a short description of what you see. Access details are shared securely once we agree to work together. International clients are served remotely in English.","Alamat website dan deskripsi singkat tentang apa yang Anda lihat. Data akses dibagikan dengan aman setelah kita sepakat bekerja sama. Klien internasional dilayani jarak jauh dalam bahasa Inggris.","您的网站地址与对现象的简要描述。确认合作后，访问信息将通过安全方式共享。国际客户以英文远程服务。"],"au.name":["Adtyaa, Founder of](https://medikabyte.com/#approach) [DJURAGAN IKLAN ID<\/a>","Adtyaa, Founder of](https://maps.app.goo.gl/YRw1yaWB5xfHcjwq5) [DJURAGAN IKLAN ID<\/a>","Adtyaa，](https://maps.app.goo.gl/YRw1yaWB5xfHcjwq5) [DJURAGAN IKLAN ID<\/a> 创始人"],"au.bio":["Builds, secures, and repairs WordPress websites, and runs SEO and digital advertising for business clients.","Membangun, mengamankan, dan memperbaiki website WordPress, serta menjalankan SEO dan digital advertising untuk klien bisnis.","为企业客户构建、加固与修复 WordPress 网站，并提供 SEO 与数字广告服务。"],"au.cta":["Request emergency help","Minta bantuan darurat","申请紧急处理"],"au.alt":["Adtyaa, author of the WordPress Hacked or Malware Removal guide","Adtyaa, penulis panduan WordPress Hacked atau Malware Removal","Adtyaa，《WordPress 被黑与恶意软件清除》指南作者"]}; var LI = { en: 0, id: 1, zh: 2 }; var L = "en"; var PHONE = "6281411188809", MAIL = "hallo@adtyaa.cloud";](https://maps.app.goo.gl/YRw1yaWB5xfHcjwq5)

function $(sel, ctx) { return Array.prototype.slice.call((ctx || root).querySelectorAll(sel)); } function byId(id) { return document.getElementById(id); } function t(key, lang) { var e = D[key]; if (!e) { return key; } var v = e[LI[lang || L]]; return (v === undefined || v === "") ? e[0] : v; } function msgLang() { return "en"; } function waUrl(m) { return "https://wa.me/" + PHONE + "?text=" + encodeURIComponent(m); }

/* ---------- language (EN default, ID, 中文) ---------- */ var scLoaded = false; function loadSC() { if (scLoaded) { return; } scLoaded = true; var l = document.createElement("link"); l.rel = "stylesheet"; l.href = "https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&display=swap"; document.head.appendChild(l); } function apply() { if (L === "zh") { loadSC(); } document.documentElement.setAttribute("lang", L === "zh" ? "zh-Hans" : L); root.setAttribute("data-l", L); $("[data-i18n]").forEach(function (el) { el.textContent = t(el.getAttribute("data-i18n")); }); $("[data-i18n-html]").forEach(function (el) { el.innerHTML = t(el.getAttribute("data-i18n-html")); }); $("[data-i18n-alt]").forEach(function (el) { el.setAttribute("alt", t(el.getAttribute("data-i18n-alt"))); }); $("[data-i18n-title]").forEach(function (el) { el.setAttribute("title", t(el.getAttribute("data-i18n-title"))); }); $("[data-i18n-aria]").forEach(function (el) { el.setAttribute("aria-label", t(el.getAttribute("data-i18n-aria"))); }); $("[data-wa]").forEach(function (el) { el.setAttribute("href", waUrl(t(el.getAttribute("data-wa"), msgLang()))); }); $("[data-lang]").forEach(function (b) { b.setAttribute("aria-pressed", b.getAttribute("data-lang") === L ? "true" : "false"); }); var st = byId("fs"); if (st) { st.textContent = ""; st.classList.remove("err"); } }

root.addEventListener("click", function (e) { var b = e.target.closest ? e.target.closest("[data-lang]") : null; if (!b) { return; } L = b.getAttribute("data-lang"); apply(); });

(function initLang() { var pick = null; try { var q = new URLSearchParams(window.location.search || "").get("lang"); if (q && LI[q] !== undefined) { pick = q; } } catch (x) {} if (pick) { L = pick; } })();

/* ---------- header + mobile menu ---------- */ var hd = byId("hd"), bg = byId("bg"), mn = byId("mn"); var bar = root.querySelector(".prog span"); var ticking = false; function onScroll() { ticking = false; if (hd) { hd.classList.toggle("sc", window.scrollY > 8); } if (bar) { var h = document.documentElement.scrollHeight - window.innerHeight; var p = h > 0 ? Math.min(1, Math.max(0, window.scrollY / h)) : 0; bar.style.transform = "scaleX(" + p.toFixed(4) + ")"; } } window.addEventListener("scroll", function () { if (!ticking) { ticking = true; window.requestAnimationFrame(onScroll); } }, { passive: true }); onScroll();

function closeMenu() { if (mn) { mn.classList.remove("on"); } if (bg) { bg.setAttribute("aria-expanded", "false"); } } if (bg && mn) { bg.addEventListener("click", function () { var on = mn.classList.toggle("on"); bg.setAttribute("aria-expanded", on ? "true" : "false"); }); mn.addEventListener("click", function (e) { if (e.target.closest && e.target.closest("a")) { closeMenu(); } }); } document.addEventListener("keydown", function (e) { if (e.key === "Escape") { closeMenu(); } }); window.addEventListener("resize", function () { if (window.innerWidth > 1000) { closeMenu(); } });

/* ---------- contact form (no server) ---------- */ var form = byId("cf"); if (form) { var fs = byId("fs"); var val = function (id) { var el = byId(id); return el ? el.value.trim() : ""; }; var optText = function (id) { var el = byId(id); if (!el || !el.value) { return ""; } var key = el.options[el.selectedIndex].getAttribute("data-i18n"); return key ? t(key, msgLang()) : el.options[el.selectedIndex].text; }; var setStatus = function (key, err) { fs.textContent = key ? t(key) : ""; fs.classList.toggle("err", !!err); }; var validate = function () { var ok = true; ["f-name", "f-service"].forEach(function (id) { var el = byId(id), bad = !el.value.trim(); el.setAttribute("aria-invalid", bad ? "true" : "false"); if (bad) { ok = false; } }); return ok; }; var compose = function () { var ml = msgLang(), lines = [t("wa.general", ml), ""]; var add = function (k, v) { if (v) { lines.push(t(k, ml) + ": " + v); } }; add("m.name", val("f-name")); add("m.email", val("f-email")); add("m.wa", val("f-wa")); add("m.url", val("f-url")); add("m.service", optText("f-service")); add("m.eng", optText("f-eng")); add("m.time", optText("f-time")); var m = val("f-msg"); if (m) { lines.push(""); lines.push(t("m.msg", ml) + ":"); lines.push(m); } return lines.join("\n"); }; byId("send-wa").addEventListener("click", function () { if (!validate()) { setStatus("f.err", true); return; } setStatus("f.okwa", false); window.open(waUrl(compose()), "_blank", "noopener"); }); byId("send-mail").addEventListener("click", function () { if (!validate()) { setStatus("f.err", true); return; } setStatus("f.okmail", false); var subject = t("m.subject", msgLang()) + " - " + val("f-name"); window.location.href = "mailto:" + MAIL + "?subject=" + encodeURIComponent(subject) + "&body=" + encodeURIComponent(compose()); }); form.addEventListener("submit", function (e) { e.preventDefault(); byId("send-wa").click(); }); ["f-name", "f-service"].forEach(function (id) { var el = byId(id); var clear = function () { if (el.value.trim()) { el.setAttribute("aria-invalid", "false"); } }; el.addEventListener("input", clear); el.addEventListener("change", clear); }); }

apply();

/* ---------- motion (respects reduced motion) ---------- */ var reduce = window.matchMedia && window.matchMedia("(prefers-reduced-motion: reduce)").matches;

/* ---------- particle field (article header + final CTA) ---------- */ function initFx(host) { if (!host) { return; } var cv = document.createElement("canvas"); cv.className = "fx"; cv.setAttribute("aria-hidden", "true"); host.insertBefore(cv, host.firstChild); var ctx = cv.getContext("2d"); if (!ctx) { return; } var W = 1, H = 1, stars = [], dust = [], nodes = [], mx = -9999, my = -9999, onScreen = true; var sprite = document.createElement("canvas"); sprite.width = sprite.height = 48; var sg = sprite.getContext("2d"), grad = sg.createRadialGradient(24, 24, 0, 24, 24, 24); grad.addColorStop(0, "rgba(255,243,209,1)"); grad.addColorStop(.25, "rgba(230,200,140,.55)"); grad.addColorStop(1, "rgba(201,164,92,0)"); sg.fillStyle = grad; sg.fillRect(0, 0, 48, 48); function rnd(a, b) { return a + Math.random() * (b - a); } function seed() { var a = W * H, i; stars = []; dust = []; nodes = []; for (i = 0; i < Math.round(a / 9000); i++) { stars.push({ x: rnd(0, W), y: rnd(0, H), r: rnd(.3, 1.05), p: rnd(0, 6.28), s: rnd(.5, 1.6) }); } for (i = 0; i < Math.round(Math.min(46, 16 + a / 42000)); i++) { dust.push({ x: rnd(0, W), y: rnd(0, H), r: rnd(1.4, 3.6), vy: rnd(.1, .38), vx: rnd(-.07, .07), a: rnd(.25, .65), p: rnd(0, 6.28) }); } for (i = 0; i < Math.round(Math.min(64, Math.max(20, a / 24000))); i++) { nodes.push({ x: rnd(0, W), y: rnd(0, H), vx: rnd(-.12, .12), vy: rnd(-.1, .1) }); } } function size() { var r = host.getBoundingClientRect(), dpr = Math.min(window.devicePixelRatio || 1, 2); W = Math.max(1, r.width); H = Math.max(1, r.height); cv.width = Math.round(W * dpr); cv.height = Math.round(H * dpr); ctx.setTransform(dpr, 0, 0, dpr, 0, 0); seed(); draw(0, true); } function draw(t, still) { var i, j, n, m, dx, dy, d, al; ctx.clearRect(0, 0, W, H); for (i = 0; i < stars.length; i++) { n = stars[i]; al = .2 + .6 * (.5 + .5 * Math.sin(t * .001 * n.s + n.p)); ctx.fillStyle = "rgba(243,232,205," + (al * .75).toFixed(3) + ")"; ctx.beginPath(); ctx.arc(n.x, n.y, n.r, 0, 6.2832); ctx.fill(); } for (i = 0; i < nodes.length; i++) { n = nodes[i]; if (!still) { n.x += n.vx; n.y += n.vy; if (n.x < -10) { n.x = W + 10; } else if (n.x > W + 10) { n.x = -10; } if (n.y < -10) { n.y = H + 10; } else if (n.y > H + 10) { n.y = -10; } } for (j = i + 1; j < nodes.length; j++) { m = nodes[j]; dx = n.x - m.x; dy = n.y - m.y; if (dx > 150 || dx < -150 || dy > 150 || dy < -150) { continue; } d = Math.sqrt(dx * dx + dy * dy); if (d < 150) { ctx.strokeStyle = "rgba(217,188,130," + ((1 - d / 150) * .2).toFixed(3) + ")"; ctx.lineWidth = .7; ctx.beginPath(); ctx.moveTo(n.x, n.y); ctx.lineTo(m.x, m.y); ctx.stroke(); } } dx = n.x - mx; dy = n.y - my; d = Math.sqrt(dx * dx + dy * dy); if (d < 190) { ctx.strokeStyle = "rgba(246,231,189," + ((1 - d / 190) * .5).toFixed(3) + ")"; ctx.lineWidth = .9; ctx.beginPath(); ctx.moveTo(n.x, n.y); ctx.lineTo(mx, my); ctx.stroke(); } ctx.fillStyle = "rgba(230,205,150,.7)"; ctx.beginPath(); ctx.arc(n.x, n.y, 1.25, 0, 6.2832); ctx.fill(); } for (i = 0; i < dust.length; i++) { n = dust[i]; if (!still) { n.y -= n.vy; n.x += n.vx + Math.sin(t * .0006 + n.p) * .12; if (n.y < -12) { n.y = H + 12; n.x = rnd(0, W); } } ctx.globalAlpha = n.a * (.65 + .35 * Math.sin(t * .0012 + n.p)); ctx.drawImage(sprite, n.x - n.r * 3, n.y - n.r * 3, n.r * 6, n.r * 6); } ctx.globalAlpha = 1; } function loop(ts) { if (onScreen && !document.hidden) { draw(ts, false); } window.requestAnimationFrame(loop); } size(); if ("ResizeObserver" in window) { new ResizeObserver(function () { size(); }).observe(host); } else { window.addEventListener("resize", size); } if (reduce) { return; } if ("IntersectionObserver" in window) { new IntersectionObserver(function (es) { es.forEach(function (en) { onScreen = en.isIntersecting; }); }, { rootMargin: "100px" }).observe(host); } host.addEventListener("pointermove", function (e) { var r = host.getBoundingClientRect(); mx = e.clientX - r.left; my = e.clientY - r.top; }); host.addEventListener("pointerleave", function () { mx = -9999; my = -9999; }); window.requestAnimationFrame(loop); } initFx(root.querySelector(".ah")); initFx(root.querySelector(".final")); if (reduce || !("IntersectionObserver" in window)) { return; } if (!document.body.classList.contains("elementor-editor-active")) { root.classList.add("js"); var rv = new IntersectionObserver(function (es) { es.forEach(function (en) { if (!en.isIntersecting) { return; } en.target.classList.add("in"); rv.unobserve(en.target); }); }, { threshold: 0, rootMargin: "0px 0px -6% 0px" }); $(".rv").forEach(function (el) { rv.observe(el); }); } })();

tetap bisa diseleksi/disalin. */ (function(){ 'use strict'; if(window.__cgOn)return;window.__cgOn=1; if(document.body&&document.body.classList.contains('elementor-editor-active'))return;

var doc=document,root=doc.documentElement; var EDITABLE="input,textarea,select,[contenteditable='true']"; var COPYABLE='.cm,address'; var WM_MS=5000; /* lama watermark tampil setelah screenshot terdeteksi */ var wm=null,wmTimer=0;

root.classList.add('cg-on');

function inEditable(el){return !!(el&&el.closest&&el.closest(EDITABLE))} function block(e){e.preventDefault()}

/* ---------- Watermark screenshot ---------- */ function showWatermark(){ if(!wm){ if(!doc.body)return; wm=doc.createElement('div'); wm.className='cg-wm'; wm.setAttribute('aria-hidden','true'); doc.body.appendChild(wm); } root.classList.add('cg-shot'); clearTimeout(wmTimer); wmTimer=setTimeout(function(){root.classList.remove('cg-shot')},WM_MS); }

/* ---------- Print ---------- */ function printOn(){root.classList.add('cg-print')} function printOff(){root.classList.remove('cg-print')} window.addEventListener('beforeprint',printOn); window.addEventListener('afterprint',printOff); if(window.matchMedia){ var mq=window.matchMedia('print'); var onMq=function(e){e.matches?printOn():printOff()}; if(mq.addEventListener)mq.addEventListener('change',onMq); else if(mq.addListener)mq.addListener(onMq); }

/* ---------- Mouse / seleksi ---------- */ doc.addEventListener('contextmenu',function(e){ if(!inEditable(e.target))block(e); });

doc.addEventListener('dragstart',block);

doc.addEventListener('selectstart',function(e){ var t=e.target&&e.target.nodeType===1?e.target:(e.target&&e.target.parentElement); if(inEditable(t)||(t&&t.closest&&t.closest(COPYABLE)))return; block(e); });

/* ---------- Keyboard ---------- */ doc.addEventListener('keydown',function(e){ var k=e.code,mod=e.ctrlKey||e.metaKey,stop=false;

/* Screenshot: PrintScreen, Cmd+Shift+3/4/5/6 (Mac), Win+Shift+S */ if(k==='PrintScreen'||e.key==='PrintScreen'|| (e.metaKey&&e.shiftKey&&(k==='Digit3'||k==='Digit4'||k==='Digit5'||k==='Digit6'||k==='KeyS'))){ showWatermark(); }

if(k==='F12'){ stop=true; }else if(mod&&!e.altKey&&(k==='KeyP'||(!e.shiftKey&&(k==='KeyS'||k==='KeyU')))){ stop=true; /* Ctrl/Cmd + P (print), S, U */ }else if( (mod&&e.shiftKey&&(k==='KeyI'||k==='KeyJ'||k==='KeyC'))|| /* Ctrl/Cmd + Shift + I, J, C */ (e.metaKey&&e.altKey&&(k==='KeyI'||k==='KeyJ'||k==='KeyC'||k==='KeyU')) /* Cmd + Option + I, J, C, U (Mac) */ ){ stop=true; } if(stop){block(e);e.stopPropagation()} },true);

/* Di Windows, PrintScreen sering hanya mengirim keyup */ doc.addEventListener('keyup',function(e){ if(e.code==='PrintScreen'||e.key==='PrintScreen')showWatermark(); },true);

/* Desktop saja: bila panel dev tools terbuka (docked), bersihkan console saat jendela di-resize */ if(window.matchMedia&&window.matchMedia('(hover:hover) and (pointer:fine)').matches){ var raf=0; window.addEventListener('resize',function(){ if(raf)return; raf=requestAnimationFrame(function(){ raf=0; if((window.outerWidth-window.innerWidth>200||window.outerHeight-window.innerHeight>260)&&window.console&&console.clear){console.clear()} }); },{passive:true}); } }());
