Wednesday, December 17, 2025

Cloudflare's Most Abused Top-Level Domains (TLD) for 2025


Cloudflare’s report on the most abused top-level domains (TLDs) in 2025 is that it highlights which domain extensions are disproportionately used for malicious activity (like phishing, spam, and malware). This impacts trust in those TLDs, increases cybersecurity risks for users, and pressures registries and regulators to tighten controls.

Distrust in Certain Domains When a TLD (e.g., .xyz, .top, .info) is repeatedly flagged for abuse, users become wary of clicking links or engaging with websites under that extension. This damages the reputation of legitimate businesses using those domains.

Friday, December 12, 2025

.NET regular expressions that break Perl Compatible Regular Expressions (PCRE) standard


Examples of patterns that work in PCRE but break in .NET

The Perl Compatible Regular Expressions (PCRE) library is a set of functions that implement regular expression pattern matching using the same syntax and semantics as Perl 5. PCRE has its own native API, as well as a set of wrapper functions that correspond to the POSIX regular expression API.
The current version of PCRE2 is version 10.47 and released Oct 21, 2025.


Good news a clever programmer created a dotnet wrapper for the PCRE2 library used in Perl supporting 10.47https://github.com/ltrzesniewski/pcre-net/, 1st version v0.1.0 requires .NET 4.5 Framework.


Pattern Type PCRE        .NET        Why It Breaks
Possessive quantifiers❌ Not implemented
Variable‑length lookbehind.NET requires fixed length
Subroutine calls / recursionFeature not supported
Python‑style named groups.NET uses different syntax
Ungreedy mode ((?U))No equivalent in .NET
Recursive named groupsNot implemented
Modern Unicode properties.NET uses older Unicode
\R newline escape⚠️Only supported in newer .NET
Lookbehind with alternationVariable length


1. Possessive quantifiers (++, *+, ?+, {m,n}+)

PCRE supports:

^\w++$

Meaning: match a word string with no backtracking allowed.

✅ PCRE: Works ❌ .NET: Throws “quantifier following nothing” or treats ++ as literal + depending on context.

Why it breaks: .NET simply does not implement possessive quantifiers.


2. Variable‑length lookbehind

PCRE allows:

(?<=\w+)\d+

Meaning: match digits preceded by one or more word characters.

✅ PCRE: Works ❌ .NET: “Lookbehind assertion is not fixed length”

Why it breaks: .NET requires lookbehind to have a fixed, compile‑time length.


3. Subroutine calls / recursion

PCRE supports recursive patterns:

^(\w+|(\((?1)\)))+$

Used for matching nested parentheses.

✅ PCRE: Works ❌ .NET: “Unrecognized grouping construct”

Why it breaks: .NET does not support (?1), (?&name), or recursive patterns at all.


4. Python‑style named groups ((?P<name>...))

PCRE supports:

(?P<word>\w+)-(?P=word)

✅ PCRE: Works ❌ .NET: “Unrecognized grouping construct”

Why it breaks: .NET only supports (?<name>...) and (?'name'...).


5. Ungreedy mode modifier ((?U))

PCRE supports:

(?U)^.+$

Meaning: make all quantifiers lazy by default.

✅ PCRE: Works ❌ .NET: “Unrecognized inline modifier”

Why it breaks: .NET has no equivalent to PCRE’s global ungreedy mode.


6. Recursive named groups ((?&name))

PCRE:

(?<paren>\((?:[^()]++|(?&paren))*\))

✅ PCRE: Works ❌ .NET: Fails immediately

Why it breaks: .NET has no syntax for recursive named groups.


7. Newline escape \R in older .NET versions

PCRE:

^\R$

✅ PCRE: Works ❌ .NET (pre‑.NET 7): “Unrecognized escape sequence”

Why it breaks: .NET added \R only recently.


8. Lookbehind with alternation of different lengths

(?<=abc|z)\d+

✅ PCRE: Works ❌ .NET: “Lookbehind assertion is not fixed length”

Why it breaks: Alternation creates variable‑length lookbehind.


9. Unicode property escapes beyond Unicode 4.0.1

PCRE supports modern Unicode categories:

\p{Script=Greek}

✅ PCRE: Works ❌ .NET: “Unknown property”

Why it breaks: .NET’s regex engine is tied to older Unicode property tables.


Thursday, December 11, 2025

How to run CrystalDiskInfo on Windows Start-up - Boot Silently



CrystalDiskInfo is effective, reliable, and widely used for monitoring drives health including SSDs.
However, with new memory-chip based solid state drive (SSD)  failures do not happen in an analog fashion like the old spindle hard-drives. SSDs have a finite number of write cycles before the memory cells degrade, although modern SSDs use techniques like wear leveling to prolong their lifespan.

Download latest version 9.7.2  
▼ https://psychz.dl.sourceforge.net/project/crystaldiskinfo/9.7.2/CrystalDiskInfo9_7_2.exe?viasf=1

⚠️ What CDI does not do

  • It cannot predict exact SSD failure dates. No SMART tool canSSDs fail unpredictably once cells wear out.

  • It may not show proprietary vendor‑specific metrics Some SSD makers expose extra data only through their own tools (e.g., Samsung Magician, WD Dashboard). Tom’s Hardware notes that manufacturers often provide deeper diagnostics.

  • It doesn’t test performance or speed That’s CrystalDiskMark, a separate tool.

Most SSDs expose standardized SMART attributes that let you estimate remaining life. These include:


Key SSD SMART Attributes

  • Total Bytes Written (TBW) How much data has been written to the drive so far.

  • Percentage Used / Wear Leveling Count A controller‑calculated estimate of how much of the drive’s write endurance has been consumed.

  • Media Wearout Indicator (MWI) Enterprise SSDs often report this as a value from 100 (new) to 0 (end of life).

  • Reallocated Sector Count Shows if the drive has started remapping worn‑out blocks.


Below is a table of the attributes you mentioned and whether CrystalDiskInfo reports them.

SSD AttributeReported by CrystalDiskInfo?Notes
Total Bytes Written (TBW)YesUsually shown as “Total Host Writes” or “NAND Writes” depending on drive.
Percentage Used / Wear Leveling CountYesNVMe drives show “Percentage Used”; SATA drives show “Wear Leveling Count”.
Media Wearout Indicator (MWI)OftenCommon on enterprise SSDs; may not appear on consumer drives.
Reallocated Sector CountYesStandard SMART attribute for both HDDs and SSDs.


Running CrystalDiskInfo requires admin rights to read SMART data, so when you schedule it through Task Scheduler, Windows triggers UAC unless the task is configured to bypass it. 


CrystalDiskInfo Startup Setting

To enable CrystalDiskInfo to run on start-up choose Function -> Startup and Keep in System Tray (to keep minimized on boot). 





CrystalDiskInfo actually creates a task, you can edit it.


1. Open Task Scheduler

  • Press Win + R

  • Type: taskschd.msc

  • Press Enter

2. Create a new Task (not a Basic Task)

  • In the right panel, click Create Task… (Do not choose “Create Basic Task” — it hides the options you need.)

3. Configure the General tab

  • Name: CrystalDiskInfo

  • Description: optional

  • Security options:

    • Run whether user is logged on or not

    • Run with highest privileges

  • “Configure for”: Windows 7/10/11 in the name, may end with Server....

This is the part that allows the task to elevate without a UAC prompt.

4. Configure the Triggers tab

  • Click New…

  • Choose when you want it to run (daily, at logon, etc.)

  • Click OK

Each trigger you add will run the task silently.

5. Configure the Actions tab

  • Click New…

  • Action: Start a program

  • Program/script: Browse to your CrystalDiskInfo folder and select:

"C:\Program Files (x86)\CrystalDiskInfo\DiskInfo64.exe"
  • Add arguments: \Startup but \Silent works better

This suppresses the UI completely.

  • Click OK

6. Configure the Conditions tab (optional)

Adjust as needed. Most people leave these alone.

7. Configure the Settings tab

Recommended:

  • Allow task to be run on demand (then you can test it by choosing Run in Actions Panel Right)

  • Run task as soon as possible after a scheduled start is missed

8. Save the task

  • Click OK

  • Windows will prompt for your account password

    • This is required so the task can run elevated without UAC.