<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: David Moya</title>
    <description>The latest articles on DEV Community by David Moya (@david_moya_5b6cdd8b4e1219).</description>
    <link>https://dev.to/david_moya_5b6cdd8b4e1219</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4032193%2F6c1dfc67-6557-42b7-99a6-b04d1e784fcc.png</url>
      <title>DEV Community: David Moya</title>
      <link>https://dev.to/david_moya_5b6cdd8b4e1219</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/david_moya_5b6cdd8b4e1219"/>
    <language>en</language>
    <item>
      <title>Practical Malware Analysis: Still the #1 Book in 2026?</title>
      <dc:creator>David Moya</dc:creator>
      <pubDate>Tue, 22 Sep 2026 14:00:00 +0000</pubDate>
      <link>https://dev.to/david_moya_5b6cdd8b4e1219/practical-malware-analysis-still-the-1-book-in-2026-17k4</link>
      <guid>https://dev.to/david_moya_5b6cdd8b4e1219/practical-malware-analysis-still-the-1-book-in-2026-17k4</guid>
      <description>&lt;p&gt;Every malware analysis reading list starts with the same book: &lt;em&gt;Practical Malware Analysis&lt;/em&gt; by Michael Sikorski and Andrew Honig. It was published in 2012. Fourteen years later, it is still the most recommended first book in the field.&lt;/p&gt;

&lt;p&gt;That raises a fair question: is a 2012 book still relevant when malware has evolved so much?&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Book Covers
&lt;/h2&gt;

&lt;p&gt;The book follows a structured progression from basic to advanced:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part 1: Static Analysis (Chapters 1-4)&lt;/strong&gt;&lt;br&gt;
Extract information from binaries without executing them. Strings, imports, PE sections, packer identification. Tools: PEiD, Dependency Walker, CFF Explorer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part 2: Dynamic Analysis (Chapters 5-7)&lt;/strong&gt;&lt;br&gt;
Run malware in a controlled environment and observe behavior. Process creation, file modifications, network connections, registry changes. Tools: Process Monitor, Wireshark, FakeNet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part 3: IDA Pro Deep Dive (Chapters 8-14)&lt;/strong&gt;&lt;br&gt;
Navigate disassembly, read control flow graphs, recognize API call patterns, and identify data structures. This is the largest section and where most of the learning happens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part 4: Anti-Analysis (Chapters 15-18)&lt;/strong&gt;&lt;br&gt;
Debugger detection, VM evasion, packers, and obfuscation. How malware fights back against your analysis.&lt;/p&gt;
&lt;h2&gt;
  
  
  The 60+ Labs Are the Real Value
&lt;/h2&gt;

&lt;p&gt;Each chapter includes lab exercises with purpose-built malware samples. These are not CTF challenges. They are designed to teach specific techniques:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lab 1-1: Basic static analysis of a DLL and EXE pair&lt;/li&gt;
&lt;li&gt;Lab 9-1: OllyDbg debugging with anti-debug bypass&lt;/li&gt;
&lt;li&gt;Lab 13-1: Data encoding with XOR and Base64&lt;/li&gt;
&lt;li&gt;Lab 18-1: Packed malware requiring manual unpacking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The samples ship with the book and solutions are available online. The structured progression from "run &lt;code&gt;strings&lt;/code&gt;" to "manually unpack and decrypt C2 config" is what makes this book work as a learning path.&lt;/p&gt;
&lt;h2&gt;
  
  
  What's Timeless
&lt;/h2&gt;

&lt;p&gt;The methodology. The book teaches you to think in a specific sequence:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Triage     → file, strings, imports (30 seconds)
2. Static     → PE structure, sections, entropy (5 minutes)
3. Dynamic    → Sandbox execution, behavioral indicators (15 minutes)
4. Deep dive  → Disassembly, debugging, decryption (hours)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This workflow applies to any malware, regardless of when it was written. The tools change, the thinking does not.&lt;/p&gt;

&lt;p&gt;Other timeless elements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PE format analysis (still the dominant executable format on Windows)&lt;/li&gt;
&lt;li&gt;x86 assembly patterns (function prologues, API calling conventions)&lt;/li&gt;
&lt;li&gt;C2 communication patterns (DNS, HTTP callbacks, custom protocols)&lt;/li&gt;
&lt;li&gt;Anti-analysis concepts (the cat-and-mouse game is the same, just more sophisticated)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's Outdated
&lt;/h2&gt;

&lt;p&gt;Be honest about the gaps:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Missing topic&lt;/th&gt;
&lt;th&gt;Why it matters in 2026&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fileless malware&lt;/td&gt;
&lt;td&gt;PowerShell, .NET in-memory execution dominate modern attacks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Go/Rust malware&lt;/td&gt;
&lt;td&gt;Statically linked, stripped binaries need different tooling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux/macOS&lt;/td&gt;
&lt;td&gt;Cloud and container malware is surging&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YARA/Sigma rules&lt;/td&gt;
&lt;td&gt;Detection engineering is now a core analyst skill&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ARM architecture&lt;/td&gt;
&lt;td&gt;Mobile and IoT malware&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI-assisted analysis&lt;/td&gt;
&lt;td&gt;LLM-powered disassembly annotation, automated triage&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The book assumes Windows x86 PE malware. That was 95% of the threat landscape in 2012. Today it is maybe 60-70%.&lt;/p&gt;

&lt;h2&gt;
  
  
  Should You Read It?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Yes, if&lt;/strong&gt; you are starting in malware analysis. No other single resource builds the foundational methodology as well. Read it, do every lab, and you will have a solid base.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Supplement with&lt;/strong&gt; modern resources for the gaps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go/Rust binaries: GoReSym, redress, and practice on modern samples from MalwareBazaar&lt;/li&gt;
&lt;li&gt;Linux malware: ELF analysis (readelf, objdump) and REMnux&lt;/li&gt;
&lt;li&gt;Detection engineering: YARA and Sigma rule writing&lt;/li&gt;
&lt;li&gt;Fileless attacks: PowerShell deobfuscation and .NET analysis with dnSpy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The book gives you the thinking framework. Modern tools and samples give you current relevance. You need both.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://malwareintel.es/blog/libros-malware/practical-malware-analysis/" rel="noopener noreferrer"&gt;MalwareIntel&lt;/a&gt;. MalwareIntel is a free threat intelligence platform monitoring 13 public CTI sources.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free resources:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://malwareintel.es/defense-kit/" rel="noopener noreferrer"&gt;Defense Kit&lt;/a&gt; — Sigma + YARA + IOCs per malware family&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://malwareintel.es/tools/detection-gap/" rel="noopener noreferrer"&gt;Detection Gap Analyzer&lt;/a&gt; — Check your MITRE ATT&amp;amp;CK coverage&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://malwareintel.es/assessment/" rel="noopener noreferrer"&gt;CTI Assessment&lt;/a&gt; — Rate your threat intel maturity in 5 min&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>La IA inventa datos: así detecto alucinaciones antes de usarlas</title>
      <dc:creator>David Moya</dc:creator>
      <pubDate>Fri, 18 Sep 2026 09:00:00 +0000</pubDate>
      <link>https://dev.to/david_moya_5b6cdd8b4e1219/la-ia-inventa-datos-asi-detecto-alucinaciones-antes-de-usarlas-12be</link>
      <guid>https://dev.to/david_moya_5b6cdd8b4e1219/la-ia-inventa-datos-asi-detecto-alucinaciones-antes-de-usarlas-12be</guid>
      <description>&lt;p&gt;La IA miente con confianza, formato perfecto y, a veces, citas inventadas. No lo hace con intención. Un modelo de lenguaje genera la continuación más probable de un texto; no consulta automáticamente una base universal de hechos verdaderos.&lt;/p&gt;

&lt;p&gt;Eso cambia mi forma de usarla. No trato a la IA como un oráculo. La trato como un colaborador rápido cuyo trabajo necesita un nivel de revisión proporcional al riesgo.&lt;/p&gt;

&lt;p&gt;Para resumir mis propias notas, el riesgo es bajo. Para citar una ley, calcular una cifra financiera o aconsejar sobre salud, la respuesta no se publica ni se ejecuta sin verificarla.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué aspecto tiene una alucinación
&lt;/h2&gt;

&lt;p&gt;No siempre es una afirmación absurda. Las más peligrosas parecen razonables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;una sentencia con número, fecha y tribunal que no existen;&lt;/li&gt;
&lt;li&gt;un enlace real cuyo contenido no respalda lo afirmado;&lt;/li&gt;
&lt;li&gt;una estadística plausible sin fuente primaria;&lt;/li&gt;
&lt;li&gt;una función de software que pertenece a otra versión;&lt;/li&gt;
&lt;li&gt;una conclusión correcta construida con datos inventados.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La fluidez no es evidencia. Tampoco lo son las comillas, una tabla o una bibliografía bien formateada.&lt;/p&gt;

&lt;p&gt;Cuando pido «háblame del mercado de formación en IA», dejo cientos de huecos. ¿Qué país? ¿Qué periodo? ¿Qué cuenta como formación? Si el modelo no tiene acceso a datos actuales, puede completar esos huecos. El primer control, por tanto, ocurre antes de recibir la respuesta.&lt;/p&gt;

&lt;h2&gt;
  
  
  Técnica 1: separar hechos, inferencias y dudas
&lt;/h2&gt;

&lt;p&gt;Uso este prompt cuando necesito un primer mapa de un tema:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Analiza la cuestión siguiente:
[pegar cuestión]

Separa la respuesta en tres apartados:
1. HECHOS: afirmaciones que puedas respaldar con una fuente
   primaria identificable.
2. INFERENCIAS: conclusiones derivadas de esos hechos.
3. INCERTIDUMBRES: datos que no puedes confirmar o que pueden
   haber cambiado.

Para cada hecho incluye fuente, autor u organismo, título,
fecha y URL directa. Si no puedes verificar una fuente, escribe
"NO VERIFICADO". No inventes referencias ni rellenes huecos.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto no garantiza que las fuentes sean correctas. Sí obliga a que las afirmaciones verificables queden separadas de la interpretación. Después abro cada enlace y compruebo que el texto original diga realmente lo que la IA atribuye.&lt;/p&gt;

&lt;p&gt;Una referencia existe y aun así puede estar mal usada. Leo el párrafo relevante, reviso la fecha y busco el alcance: una encuesta de 80 empresas estadounidenses no demuestra automáticamente cómo se comportan todas las pymes españolas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Técnica 2: convertir la respuesta en una lista de comprobación
&lt;/h2&gt;

&lt;p&gt;Verificar un texto largo línea por línea es lento. Primero extraigo solo las afirmaciones que podrían cambiar una decisión:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TEXTO A REVISAR:
[pegar respuesta de la IA]

Extrae todas las afirmaciones factuales verificables. Prioriza
cifras, fechas, nombres propios, requisitos legales, citas,
capacidades de producto y comparaciones.

Devuelve una tabla con:
- ID
- Afirmación exacta
- Impacto si fuera falsa (alto/medio/bajo)
- Fuente necesaria para comprobarla
- Consulta de búsqueda recomendada

No evalúes todavía si son verdaderas.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Empiezo por las de impacto alto. Si preparo una presentación interna, que falle una fecha secundaria puede ser molesto. Si esa fecha define un plazo regulatorio, el mismo error puede cambiar una decisión y merece revisión primaria.&lt;/p&gt;

&lt;p&gt;Esta priorización evita dos extremos: confiar en todo o perder una hora verificando detalles decorativos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Técnica 3: pedir una revisión adversarial
&lt;/h2&gt;

&lt;p&gt;Una segunda pasada con la misma conversación tiende a conservar los supuestos iniciales. Para trabajos importantes abro una sesión nueva o uso otro modelo. No le pido «¿estás seguro?», porque suele responder con otra muestra de seguridad. Le doy el papel de revisor adversarial:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Actúa como revisor independiente. No intentes defender el texto.
Tu objetivo es encontrar motivos para NO publicarlo.

BORRADOR:
[pegar texto]

Identifica:
1. Afirmaciones sin respaldo.
2. Fuentes que deben abrirse y comprobarse.
3. Saltos lógicos entre evidencia y conclusión.
4. Datos posiblemente desactualizados.
5. Lenguaje que exprese certeza excesiva.

Propón una corrección para cada problema. No añadas ningún dato
nuevo que tampoco puedas verificar.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El valor de la segunda IA no es que sea infalible. Es que ofrece otra distribución de errores. Si ambos modelos coinciden, sigo necesitando una fuente; dos predicciones parecidas no convierten una frase en un hecho.&lt;/p&gt;

&lt;h2&gt;
  
  
  Un flujo concreto para investigar
&lt;/h2&gt;

&lt;p&gt;Mi proceso para un artículo con datos externos tiene cinco pasos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Defino qué pregunta quiero responder y el periodo relevante.&lt;/li&gt;
&lt;li&gt;Pido un mapa inicial con hechos, inferencias e incertidumbres.&lt;/li&gt;
&lt;li&gt;Convierto el borrador en afirmaciones verificables.&lt;/li&gt;
&lt;li&gt;Consulto las fuentes primarias: organismo oficial, documentación del fabricante, paper o datos originales.&lt;/li&gt;
&lt;li&gt;Reescribo con enlaces y un nivel de certeza honesto.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cuando una fuente no está disponible, no disimulo la ausencia. Puedo eliminar la afirmación, presentarla como hipótesis o explicar la limitación.&lt;/p&gt;

&lt;p&gt;Para resumir una fuente concreta uso una instrucción todavía más cerrada:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Responde usando únicamente el documento incluido abajo.

PREGUNTA: [pregunta]
DOCUMENTO: [pegar contenido]

Incluye para cada conclusión una cita literal breve y la sección
donde aparece. Si el documento no contiene la respuesta, di
"el documento no permite responder". No uses conocimiento
externo ni completes información ausente.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Así reduzco el espacio para inventar, aunque todavía compruebo que las citas sean literales.&lt;/p&gt;

&lt;h2&gt;
  
  
  Señales que me hacen parar
&lt;/h2&gt;

&lt;p&gt;Desconfío cuando aparecen cifras muy precisas sin metodología, referencias que no enlazan al documento original, nombres de estudios demasiado convenientes o frases como «está demostrado» sin explicar por quién. También paro cuando la respuesta evita reconocer incertidumbre en un asunto reciente o discutido.&lt;/p&gt;

&lt;p&gt;Otra señal es el cambio de respuesta al reformular la misma pregunta. Puedo probarlo así:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Revisa tu respuesta anterior. Enumera las tres afirmaciones con
mayor probabilidad de ser incorrectas o estar desactualizadas.
Explica qué evidencia primaria necesitarías para mantener cada
una. Si no tienes esa evidencia, retírala del texto revisado.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No uso este prompt como sello de calidad. Lo uso para descubrir puntos que merecen comprobación humana.&lt;/p&gt;

&lt;h2&gt;
  
  
  La regla depende del riesgo
&lt;/h2&gt;

&lt;p&gt;No todos los outputs requieren el mismo control. Clasifico el uso antes de empezar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bajo riesgo:&lt;/strong&gt; lluvia de ideas, reformulación, borradores internos. Revisión rápida.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Riesgo medio:&lt;/strong&gt; contenido público, análisis comercial, comparativas. Fuentes abiertas y contraste.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alto riesgo:&lt;/strong&gt; legal, salud, finanzas, empleo, seguridad. Especialista responsable, fuentes primarias y trazabilidad.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La IA acelera la producción. La responsabilidad no se transfiere al modelo. Quien firma, publica, recomienda o ejecuta sigue siendo una persona o una organización.&lt;/p&gt;

&lt;p&gt;En IAcademy enseñamos esta alfabetización práctica dentro de 290 módulos y 23 especializaciones. Los Founding Members entran desde 19 EUR —Itinerario 19, Pro 99 y Pro+Mentoría 249— con precio bloqueado hasta el 15 de octubre de 2026 y garantía de 30 días o 5 horas ahorradas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Si quieres ir más allá
&lt;/h2&gt;

&lt;p&gt;Empieza por los &lt;a href="https://iacedemy.com/free/" rel="noopener noreferrer"&gt;módulos gratuitos&lt;/a&gt; y consulta los &lt;a href="https://iacedemy.com/pricing/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=founding-oct2026" rel="noopener noreferrer"&gt;planes Founding&lt;/a&gt;. La próxima vez que uses una cifra generada por IA, abre primero la fuente original.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>llm</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Why Windows Internals by Russinovich Is Essential for Malware Analysts</title>
      <dc:creator>David Moya</dc:creator>
      <pubDate>Tue, 15 Sep 2026 14:00:00 +0000</pubDate>
      <link>https://dev.to/david_moya_5b6cdd8b4e1219/why-windows-internals-by-russinovich-is-essential-for-malware-analysts-3bkj</link>
      <guid>https://dev.to/david_moya_5b6cdd8b4e1219/why-windows-internals-by-russinovich-is-essential-for-malware-analysts-3bkj</guid>
      <description>&lt;p&gt;About 80% of malware in the wild targets Windows. If you analyze malware professionally, you will eventually hit a wall where your tools stop explaining &lt;em&gt;why&lt;/em&gt; something works. That wall is Windows internals knowledge, and this book is how you climb it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Book Is (and Is Not)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Windows Internals&lt;/strong&gt; by Mark Russinovich, David Solomon, and Alex Ionescu is not a malware analysis book. It is a 1,500+ page, two-volume deep dive into how Windows actually works at the kernel level: processes, memory, I/O, security, networking, and the registry.&lt;/p&gt;

&lt;p&gt;The reason it matters for malware analysis: every technique that malware uses (process injection, token manipulation, rootkit hooking, registry persistence) exploits a documented Windows mechanism. This book documents those mechanisms.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Chapters That Matter Most for Malware Analysis
&lt;/h2&gt;

&lt;p&gt;You do not need to read all 1,500 pages. Here is a prioritized reading guide:&lt;/p&gt;

&lt;h3&gt;
  
  
  Must-read (Part 1)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Chapter&lt;/th&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Processes &amp;amp; Threads&lt;/td&gt;
&lt;td&gt;EPROCESS, ETHREAD, job objects&lt;/td&gt;
&lt;td&gt;Understand process hollowing, injection, and how tools like Process Explorer work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory Management&lt;/td&gt;
&lt;td&gt;Virtual memory, page tables, memory-mapped files&lt;/td&gt;
&lt;td&gt;Essential for memory forensics with Volatility&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Tokens, ACLs, privileges, integrity levels, UAC&lt;/td&gt;
&lt;td&gt;Explains privilege escalation, token theft, and why some malware needs admin&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Read when needed (Part 2)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Chapter&lt;/th&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;th&gt;When to read&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;I/O System&lt;/td&gt;
&lt;td&gt;Drivers, IRPs&lt;/td&gt;
&lt;td&gt;When analyzing rootkits or malicious drivers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Networking&lt;/td&gt;
&lt;td&gt;Winsock, TDI, NDIS&lt;/td&gt;
&lt;td&gt;When reverse engineering C2 communication&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Registry&lt;/td&gt;
&lt;td&gt;Internal structure, hive format&lt;/td&gt;
&lt;td&gt;When investigating persistence mechanisms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How to Actually Apply It
&lt;/h2&gt;

&lt;p&gt;Reading about EPROCESS structures is useless if you do not connect it to real analysis. Here is how to bridge theory and practice:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Process hollowing (CreateProcess + WriteProcessMemory)
&lt;/h3&gt;

&lt;p&gt;The book explains how &lt;code&gt;CreateProcess&lt;/code&gt; builds the EPROCESS structure and maps the executable. Malware creates a process in suspended state, unmaps the original image, writes its payload, and resumes. Knowing the internal sequence tells you exactly where to set breakpoints in a debugger.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Token manipulation
&lt;/h3&gt;

&lt;p&gt;Chapter on Security explains access tokens, impersonation levels, and privilege constants. When you see malware calling &lt;code&gt;AdjustTokenPrivileges&lt;/code&gt; or &lt;code&gt;DuplicateTokenEx&lt;/code&gt;, the book tells you what those tokens contain and what the attacker gains.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Memory forensics
&lt;/h3&gt;

&lt;p&gt;The Memory Management chapter maps directly to Volatility plugins. Understanding VADs (Virtual Address Descriptors) and PTE (Page Table Entries) makes Volatility output meaningful instead of just rows of hex.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sysinternals: The Companion Toolkit
&lt;/h2&gt;

&lt;p&gt;Russinovich created Sysinternals. The book frequently references these tools, and they are your daily drivers for dynamic analysis:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Process Explorer  → Live process tree, DLL list, handles
Process Monitor   → Real-time file/registry/network activity
Autoruns          → Persistence mechanisms across 30+ locations
TCPView           → Active network connections per process
Handle            → Open handles (files, registry keys, mutexes)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These tools are the practical application layer of the book. If the book explains &lt;em&gt;how&lt;/em&gt; Windows manages processes, Process Explorer lets you &lt;em&gt;see&lt;/em&gt; it happening.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Honest Downsides
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It is dense.&lt;/strong&gt; Some chapters read like kernel source documentation. Take breaks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No malware examples.&lt;/strong&gt; You have to make the connections yourself. Pair it with Practical Malware Analysis for the applied side.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two volumes, expensive.&lt;/strong&gt; The 7th edition covers Windows 10/11, which is what you want.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Verdict
&lt;/h2&gt;

&lt;p&gt;If you are serious about malware analysis on Windows, this book is not optional. It is the difference between knowing &lt;em&gt;what&lt;/em&gt; malware does and understanding &lt;em&gt;why&lt;/em&gt; it works. Read Part 1 first, keep Part 2 as a reference, and use Sysinternals daily.&lt;/p&gt;

&lt;p&gt;Pair it with &lt;a href="https://malwareintel.es/blog/libros-malware/practical-malware-analysis/" rel="noopener noreferrer"&gt;Practical Malware Analysis&lt;/a&gt; for the hands-on complement.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://malwareintel.es/blog/libros-malware/windows-internals-russinovich/" rel="noopener noreferrer"&gt;MalwareIntel&lt;/a&gt;. MalwareIntel is a free threat intelligence platform monitoring 13 public CTI sources.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free resources:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://malwareintel.es/defense-kit/" rel="noopener noreferrer"&gt;Defense Kit&lt;/a&gt; — Sigma + YARA + IOCs per malware family&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://malwareintel.es/tools/detection-gap/" rel="noopener noreferrer"&gt;Detection Gap Analyzer&lt;/a&gt; — Check your MITRE ATT&amp;amp;CK coverage&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://malwareintel.es/assessment/" rel="noopener noreferrer"&gt;CTI Assessment&lt;/a&gt; — Rate your threat intel maturity in 5 min&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Curso interactivo de APIs: de base a nivel profesional</title>
      <dc:creator>David Moya</dc:creator>
      <pubDate>Sun, 13 Sep 2026 09:00:06 +0000</pubDate>
      <link>https://dev.to/david_moya_5b6cdd8b4e1219/curso-interactivo-de-apis-de-base-a-nivel-profesional-2k69</link>
      <guid>https://dev.to/david_moya_5b6cdd8b4e1219/curso-interactivo-de-apis-de-base-a-nivel-profesional-2k69</guid>
      <description>&lt;p&gt;Las APIs son el idioma común de la integración moderna: cada LLM se consume por API, cada agente llama a herramientas que son endpoints, cada webhook devuelve el control a tu sistema. Y sin embargo, mucha gente que trabaja con ellas no ha repasado nunca los fundamentos: qué convierte una API en un contrato, por qué 401 no es 403, qué problema resuelve Problem Details, o por qué el riesgo número uno del OWASP API Security Top 10 no está en la ruta sino en el objeto.&lt;/p&gt;

&lt;p&gt;He estado revisando &lt;strong&gt;Básicos API&lt;/strong&gt;, un curso interactivo gratuito publicado en GitHub Pages, y me ha sorprendido su enfoque. No es un tutorial de "cómo llamar a una API REST"; es un recorrido completo por el ciclo de vida de una API real, apoyado en fuentes primarias (RFC 9110, RFC 9457, OpenAPI 3.2.0, OAuth 2.0 BCP) y con práctica en el navegador.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lo que cubre
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Un mapa interactivo del ecosistema API&lt;/strong&gt; con 14 componentes: cliente, contrato, gateway, autenticación, validación, handler, datos, respuesta, rate limit, webhooks, observabilidad, versionado y amenazas. Cada nodo explica sus hechos clave con enlaces a la especificación.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Un simulador de 9 pasos&lt;/strong&gt; desde el caso de uso hasta la operación en producción, con un caso guía consistente (consultar pedidos de un usuario) y comprobaciones concretas en cada etapa.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anatomía técnica&lt;/strong&gt;: endpoint, contrato, auth, validación, errores, operación y evolución, con matices que delatan experiencia real ("un gateway no sustituye autorización en el servicio", "un webhook también es una API y debe firmarse").&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Un laboratorio local que audita endpoints&lt;/strong&gt;: describes método, ruta, auth, estado, cabeceras y cuerpo JSON, y obtienes un informe con hallazgos. Detecta rutas verbales, falta de versión, ausencia de paginación, credenciales reutilizables, CORS abierto, SQL en cabeceras y claves sensibles como passwordHash o isAdmin en el cuerpo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Una checklist puntuada del OWASP API Security Top 10&lt;/strong&gt;: BOLA vale 30 puntos, auth débil 28, exposición excesiva y mass assignment 24... llegas a un nivel de riesgo bajo, medio o alto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quiz de 8 preguntas&lt;/strong&gt; con explicación inmediata, guía de repaso, glosario y 15 referencias oficiales filtrables.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Por qué me importa desde el lado de la IA
&lt;/h2&gt;

&lt;p&gt;Las mismas APIs que habilitan la integración habilitan el ataque. Un agente con un token de scopes amplios es exactamente el escenario de "scopes amplios elevan el impacto de tokens filtrados". El curso convierte el OWASP API Top 10 en señales que puedes marcar y puntuar sobre cualquier API que mantengas — incluida la que conecta tu próximo agente.&lt;/p&gt;

&lt;p&gt;Todo es HTML, CSS y JavaScript plano, sin frameworks ni cuentas, y el análisis ocurre íntegramente en tu navegador. En el artículo completo desgloso el curso sección a sección y propongo un plan de estudio de tres días.&lt;/p&gt;

&lt;p&gt;Lee el artículo completo en IAcademy&lt;/p&gt;

&lt;p&gt;Lee el artículo completo en IAcademy: &lt;a href="https://iacedemy.com/blog/curso-interactivo-apis/" rel="noopener noreferrer"&gt;https://iacedemy.com/blog/curso-interactivo-apis/&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Curso interactivo de firewalls: análisis en profundidad</title>
      <dc:creator>David Moya</dc:creator>
      <pubDate>Sun, 13 Sep 2026 09:00:00 +0000</pubDate>
      <link>https://dev.to/david_moya_5b6cdd8b4e1219/curso-interactivo-de-firewalls-analisis-en-profundidad-g5l</link>
      <guid>https://dev.to/david_moya_5b6cdd8b4e1219/curso-interactivo-de-firewalls-analisis-en-profundidad-g5l</guid>
      <description>&lt;h2&gt;
  
  
  Un firewall no protege por magia: aplica política sobre tráfico observable
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://pedri77.github.io/Basic_Firewalls/" rel="noopener noreferrer"&gt;Basic Firewalls&lt;/a&gt; es un curso interactivo en español que enseña firewalls desde la perspectiva defensiva: política, zonas, ACLs, filtrado con estado, NAT, proxies, WAF, NGFW, logging y revisión operativa.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lo que lo hace diferente
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Un &lt;strong&gt;mapa interactivo&lt;/strong&gt; con once componentes del ecosistema (de la política al zero trust) conectados por relaciones reales: los logs convergen en todo, la revisión alimenta la política.&lt;/li&gt;
&lt;li&gt;Un &lt;strong&gt;simulador de decisión de flujo&lt;/strong&gt; en seis pasos: entrada por zona, normalización, coincidencia de reglas, inspección profunda, acción y evidencia. Es la parte que falta en la mayoría de cursos: qué pasa &lt;em&gt;dentro&lt;/em&gt; del motor.&lt;/li&gt;
&lt;li&gt;Una &lt;strong&gt;anatomía de regla en siete partes&lt;/strong&gt;: origen, destino, servicio, acción, estado, logging y ciclo de vida. Esa séptima parte (propiedad y caducidad) es la que separa un diseño serio de una lista de puertos.&lt;/li&gt;
&lt;li&gt;Un &lt;strong&gt;laboratorio local&lt;/strong&gt; donde describes tu regla en lenguaje natural y un motor con heurísticas te devuelve decisión, severidad, puntuación de riesgo y hallazgos. Bloquea RDP desde Internet, detecta puertos de base de datos, DNS sin control y lenguaje excesivamente amplio.&lt;/li&gt;
&lt;li&gt;Una &lt;strong&gt;checklist de dieciséis riesgos&lt;/strong&gt; en cinco modos: exposición, deriva, visibilidad y capa 7. La categoría &lt;em&gt;deriva&lt;/em&gt; (reglas sombra, excepciones eternas, cambios sin ticket) nombra los riesgos que aparecen meses después del despliegue.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Por qué importa si trabajas con IA
&lt;/h3&gt;

&lt;p&gt;Desplegar un servicio de inferencia local o una API de modelo plantea primero una pregunta de firewall: por dónde entra el tráfico y quién llega a cada puerto. Zonas de administración separadas, terminación en DMZ, reglas específicas para bases de datos vectoriales: en cloud, los grupos de seguridad son ACLs con otro nombre, y la deriva de excepciones existe igual.&lt;/p&gt;

&lt;h3&gt;
  
  
  Construcción
&lt;/h3&gt;

&lt;p&gt;HTML, CSS y JavaScript plano, sin frameworks ni build, con Cytoscape.js para el grafo y fallback si la CDN falla. Todo el contenido educativo vive como estructuras de datos legibles en &lt;code&gt;script.js&lt;/code&gt;, lo que facilita reutilizar la mecánica.&lt;/p&gt;

&lt;p&gt;Repositorio: &lt;a href="https://github.com/pedri77/Basic_Firewalls" rel="noopener noreferrer"&gt;pedri77/Basic_Firewalls&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lee el artículo completo en IAcademy&lt;/p&gt;

&lt;p&gt;Lee el artículo completo en IAcademy: &lt;a href="https://iacedemy.com/blog/curso-interactivo-firewalls/" rel="noopener noreferrer"&gt;https://iacedemy.com/blog/curso-interactivo-firewalls/&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Modelo OSI: guía interactiva de las 7 capas</title>
      <dc:creator>David Moya</dc:creator>
      <pubDate>Sat, 12 Sep 2026 07:30:06 +0000</pubDate>
      <link>https://dev.to/david_moya_5b6cdd8b4e1219/modelo-osi-guia-interactiva-de-las-7-capas-45g7</link>
      <guid>https://dev.to/david_moya_5b6cdd8b4e1219/modelo-osi-guia-interactiva-de-las-7-capas-45g7</guid>
      <description>&lt;h2&gt;
  
  
  Del «no conecta» a una hipótesis comprobable
&lt;/h2&gt;

&lt;p&gt;Cuando una conexión falla, el mensaje visible suele ser ambiguo: tiempo de espera, servidor no encontrado, conexión rechazada o una respuesta imposible de interpretar. El modelo OSI convierte ese caos en un mapa de siete niveles. En vez de cambiar configuraciones al azar, permite preguntar qué parte del recorrido funciona y dónde aparece la primera evidencia de fallo.&lt;/p&gt;

&lt;p&gt;El curso &lt;strong&gt;Modelo OSI interactivo&lt;/strong&gt; de David presenta las siete capas mediante varias vistas complementarias. El explorador reúne función, PDU, ejemplos, dispositivos y pistas de memoria. El mapa relaciona capas con protocolos, documentos oficiales y organismos de normalización. El simulador permite seguir la encapsulación al enviar, desde Aplicación hasta Física, y la desencapsulación al recibir, en sentido inverso. Finalmente, un quiz de seis preguntas ofrece corrección y explicación inmediatas.&lt;/p&gt;

&lt;p&gt;La secuencia esencial es sencilla de recordar: las capas superiores manejan datos; Transporte usa segmentos; Red, paquetes; Enlace, tramas; y Física, bits. Pero el valor no está en recitarla. Está en convertirla en un procedimiento de diagnóstico.&lt;/p&gt;

&lt;p&gt;Pensemos en un agente de inteligencia artificial que no consigue llamar a una API. En Red preguntamos si el destino se resuelve y existe una ruta. En Transporte comprobamos si abre el puerto correcto o aparece un timeout. En Presentación revisamos TLS, codificación y JSON. En Sesión observamos si el contexto o token sigue vigente. En Aplicación examinamos endpoint, método, credenciales, cuota y carga útil. Si recibimos un 401, ya sabemos que muchas responsabilidades inferiores funcionaron lo suficiente para obtener una respuesta HTTP; el foco debe subir, no volver al cable.&lt;/p&gt;

&lt;p&gt;El curso es una web estática construida con HTML, CSS y JavaScript plano. Cytoscape.js alimenta el grafo, con una alternativa estática si no carga. No hay backend, cuenta ni persistencia de puntuación: al recargar, el quiz se reinicia. Solo la preferencia de tema claro u oscuro queda guardada. Esa sencillez mantiene el foco en aprender.&lt;/p&gt;

&lt;p&gt;Una forma concreta de estudiarlo es dividir el trabajo en tres sesiones. Primero, recorrer las capas y anotar función, PDU, ejemplos y una pregunta de diagnóstico. Después, usar el simulador en ambos sentidos y predecir qué información se añade o se retira antes de avanzar. Por último, completar el quiz y aplicar el mapa a un incidente: distinguir un fallo de resolución, un puerto inaccesible, un certificado inválido, un JSON incompatible o un error HTTP. La puntuación importa menos que poder justificar por qué cada síntoma pertenece a una responsabilidad distinta. El mapa incluye además referencias a ISO, ITU-T, RFC, IEEE, Ecma y especificaciones abiertas de Microsoft, una buena puerta de entrada para contrastar el resumen con fuentes primarias.&lt;/p&gt;

&lt;p&gt;OSI no es una reproducción rígida de Internet. TCP/IP agrupa funciones y algunos protocolos modernos atraviesan fronteras pedagógicas. Aun así, continúa siendo un excelente lenguaje común para desarrolladores, operaciones y seguridad: ayuda a clasificar síntomas, pedir evidencias y evitar soluciones peligrosas, como desactivar TLS ante un error de certificado.&lt;/p&gt;

&lt;p&gt;Lee el artículo completo en IAcademy&lt;/p&gt;

&lt;p&gt;Lee el artículo completo en IAcademy: &lt;a href="https://iacedemy.com/blog/modelo-osi-guia-interactiva/" rel="noopener noreferrer"&gt;https://iacedemy.com/blog/modelo-osi-guia-interactiva/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>computerscience</category>
      <category>learning</category>
      <category>networking</category>
    </item>
    <item>
      <title>Seguridad en sistemas IA: el curso Basic Seguridad IA, a fon</title>
      <dc:creator>David Moya</dc:creator>
      <pubDate>Sat, 12 Sep 2026 07:30:00 +0000</pubDate>
      <link>https://dev.to/david_moya_5b6cdd8b4e1219/seguridad-en-sistemas-ia-el-curso-basic-seguridad-ia-a-fon-57kp</link>
      <guid>https://dev.to/david_moya_5b6cdd8b4e1219/seguridad-en-sistemas-ia-el-curso-basic-seguridad-ia-a-fon-57kp</guid>
      <description>&lt;p&gt;Cuando empecé a integrar LLMs en proyectos reales descubrí que el problema no era el modelo: era todo lo que había alrededor. El prompt al que pegábamos cualquier cosa, el RAG que indexaba documentos sin curar, el agente con permisos de más "para que funcionara". &lt;strong&gt;Basic Seguridad IA&lt;/strong&gt; es un curso interactivo gratuito que ordena exactamente ese territorio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué cubre
&lt;/h2&gt;

&lt;p&gt;El curso parte de una tesis sencilla: un sistema IA es software, datos, decisiones y permisos trabajando juntos, y la seguridad aparece cuando cada pieza tiene límites claros. Con esa base, presenta un grafo navegable de ocho activos (prompt, datos, modelo, RAG, herramientas, identidad, monitorización y el sistema), ocho amenazas con severidad y controles (prompt injection, divulgación sensible, poisoning en RAG, agencia excesiva, salida insegura, cadena de suministro, abuso del modelo y sobreconfianza), y seis etapas de controles por ciclo de vida.&lt;/p&gt;

&lt;p&gt;La joya es el &lt;strong&gt;laboratorio de exposición&lt;/strong&gt;: configuras un caso con cuatro dimensiones (datos usados, fuente de contexto, acciones del sistema y supervisión) y observas cómo el nivel de riesgo escala en vivo. La ejecución de herramientas suma 3 puntos por sí sola; la supervisión humana es el único factor que resta.&lt;/p&gt;

&lt;h2&gt;
  
  
  Normativa incluida
&lt;/h2&gt;

&lt;p&gt;No se queda en lo técnico: siete marcos normativos (AI Act, RGPD y LOPDGDD, AEPD, ENS, AESIA, NIS2 y ciberresiliencia) con obligaciones concretas y enlaces a las fuentes oficiales en BOE y EUR-Lex. Más una checklist persistente de 14 puntos y un quiz con explicación inmediata.&lt;/p&gt;

&lt;p&gt;Todo es HTML, CSS y JavaScript plano sin frameworks, así que el código mismo es material de estudio si además desarrollas.&lt;/p&gt;

&lt;p&gt;Lee el artículo completo en IAcademy.&lt;/p&gt;

&lt;p&gt;Lee el artículo completo en IAcademy: &lt;a href="https://iacedemy.com/blog/curso-interactivo-seguridad-ia/" rel="noopener noreferrer"&gt;https://iacedemy.com/blog/curso-interactivo-seguridad-ia/&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>YARA Rules for Beginners: Writing Your First Malware Detection Signature</title>
      <dc:creator>David Moya</dc:creator>
      <pubDate>Fri, 11 Sep 2026 10:59:34 +0000</pubDate>
      <link>https://dev.to/david_moya_5b6cdd8b4e1219/yara-rules-for-beginners-writing-your-first-malware-detection-signature-1db4</link>
      <guid>https://dev.to/david_moya_5b6cdd8b4e1219/yara-rules-for-beginners-writing-your-first-malware-detection-signature-1db4</guid>
      <description>&lt;h1&gt;
  
  
  YARA Rules for Beginners: Writing Your First Malware Detection Signature
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; YARA is a pattern-matching engine used by malware analysts, incident responders, and SOC teams to identify malicious files based on textual or binary signatures. In this tutorial, you'll learn YARA's syntax, write your first rule against a real-world sample (the EICAR test file and a WannaCry-style indicator), test it with the &lt;code&gt;yara&lt;/code&gt; CLI, and avoid common pitfalls like false positives and performance bottlenecks. By the end, you'll have a working detection signature and a mental model for iterating on it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is YARA and Why Should You Care?
&lt;/h2&gt;

&lt;p&gt;YARA is a free, open-source tool originally developed by Victor Alvarez at VirusTotal. It lets you describe malware families in a readable, rule-based syntax and then scan files, memory, or processes to see if they match. Think of it as &lt;code&gt;grep&lt;/code&gt; for binary data — but with boolean logic, wildcards, regex, and a scoring system.&lt;/p&gt;

&lt;p&gt;It's used everywhere:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VirusTotal&lt;/strong&gt; uses YARA to tag samples.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MalwareBazaar&lt;/strong&gt; and &lt;strong&gt;MISP&lt;/strong&gt; distribute YARA rules alongside IOCs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EDR and AV vendors&lt;/strong&gt; embed YARA-style logic (or an equivalent) in their engines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Incident responders&lt;/strong&gt; drop YARA into Velociraptor, Loki, or THOR to sweep endpoints for known threats.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you work in threat intel or DFIR, YARA is a baseline skill. For a broader overview of how YARA fits alongside Sigma and Suricata in a detection stack, this &lt;a href="https://malwareintel.es/blog/cti-inteligencia/ioc-deteccion-yara-sigma-suricata/" rel="noopener noreferrer"&gt;YARA rules guide&lt;/a&gt; covers the detection-triangle concept well.&lt;/p&gt;

&lt;p&gt;Let's write a rule.&lt;/p&gt;




&lt;h2&gt;
  
  
  Anatomy of a YARA Rule
&lt;/h2&gt;

&lt;p&gt;Every YARA rule has three parts (plus optional metadata):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rule RuleName
{
    meta:
        author = "you"
        description = "what it detects"
        date = "2024-01-01"

    strings:
        $a = "malicious string"
        $b = { 4D 5A 90 00 }        // hex
        $c = /regex[0-9]{3}/i        // regex

    condition:
        $a and $b
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Key rules:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Rule names&lt;/strong&gt; must start with a letter or underscore and contain only alphanumerics and underscores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strings&lt;/strong&gt; start with &lt;code&gt;$&lt;/code&gt;. You can have up to 10,000 of them per rule (but don't).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Condition&lt;/strong&gt; is a boolean expression returning true or false.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modifiers&lt;/strong&gt; like &lt;code&gt;nocase&lt;/code&gt;, &lt;code&gt;wide&lt;/code&gt;, &lt;code&gt;ascii&lt;/code&gt;, &lt;code&gt;fullword&lt;/code&gt; change how strings match.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  String types at a glance
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Text&lt;/td&gt;
&lt;td&gt;&lt;code&gt;$a = "cmd.exe"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Case-sensitive by default&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Text + &lt;code&gt;nocase&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;$a = "cmd.exe" nocase&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Case-insensitive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wide&lt;/td&gt;
&lt;td&gt;&lt;code&gt;$a = "cmd.exe" wide&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;UTF-16LE — common in Windows binaries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hex&lt;/td&gt;
&lt;td&gt;&lt;code&gt;$a = { 4D 5A }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Raw bytes, supports wildcards &lt;code&gt;??&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regex&lt;/td&gt;
&lt;td&gt;&lt;code&gt;$a = /https?:\/\/[a-z0-9.]+/i&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Slower than plain strings&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Condition operators
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Logical: &lt;code&gt;and&lt;/code&gt;, &lt;code&gt;or&lt;/code&gt;, &lt;code&gt;not&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Comparison: &lt;code&gt;==&lt;/code&gt;, &lt;code&gt;!=&lt;/code&gt;, &lt;code&gt;&amp;lt;&lt;/code&gt;, &lt;code&gt;&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;=&lt;/code&gt;, &lt;code&gt;&amp;gt;=&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Counting: &lt;code&gt;#a &amp;gt; 5&lt;/code&gt; (string &lt;code&gt;$a&lt;/code&gt; appears more than 5 times)&lt;/li&gt;
&lt;li&gt;Size: &lt;code&gt;filesize &amp;lt; 1MB&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Location: &lt;code&gt;$a at 0&lt;/code&gt; (string is at offset 0)&lt;/li&gt;
&lt;li&gt;Sets: &lt;code&gt;any of them&lt;/code&gt;, &lt;code&gt;all of ($a*)&lt;/code&gt;, &lt;code&gt;2 of ($b*)&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Writing Your First Rule: The EICAR Test File
&lt;/h2&gt;

&lt;p&gt;EICAR is a harmless 68-byte string that AV engines intentionally flag as malware. It's perfect for a first rule because the signature is unambiguous.&lt;/p&gt;

&lt;p&gt;The EICAR string is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create &lt;code&gt;eicar.yar&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rule EICAR_Test_File
{
    meta:
        author = "dev.to reader"
        description = "Detects the EICAR antivirus test file"
        reference = "https://www.eicar.org/download-anti-malware-testfile/"
        date = "2024-11-01"

    strings:
        $eicar = "X5O!P%@AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*"

    condition:
        $eicar
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note the escaped backslashes: because YARA strings interpret &lt;code&gt;\&lt;/code&gt; as an escape character, a literal backslash must be &lt;code&gt;\\&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Save the EICAR payload:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'X5O!P%%@AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; sample.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install YARA (Ubuntu/Debian):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;yara
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yara eicar.yar sample.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EICAR_Test_File sample.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You just wrote and executed a detection rule. If it doesn't match, verify the file contents with &lt;code&gt;xxd sample.txt&lt;/code&gt; — off-by-one characters are the usual culprit.&lt;/p&gt;




&lt;h2&gt;
  
  
  A More Realistic Example: Detecting WannaCry-Style Indicators
&lt;/h2&gt;

&lt;p&gt;The EICAR rule is trivial. Real malware families require layered logic — anchoring on file structure, unique strings, and behavioral telltales.&lt;/p&gt;

&lt;p&gt;WannaCry (2017) spread via EternalBlue (MS17-010), encrypted files with AES-128, and demanded Bitcoin payment. Its binary contains several distinctive artifacts. Even though AV coverage is universal now, it's a great teaching sample because its indicators are well-documented.&lt;/p&gt;

&lt;p&gt;Here's a simplified rule inspired by public WannaCry detections:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rule WannaCry_Ransomware_Indicators
{
    meta:
        author = "dev.to reader"
        description = "Detects WannaCry-style dropper artifacts"
        reference = "https://www.cisa.gov/news-events/alerts/2017/05/12/wannacrypt-ransomware"
        date = "2024-11-01"
        tlp = "white"

    strings:
        // PE header
        $mz = { 4D 5A }

        // WannaCry kill switch domains (historical)
        $killswitch = "iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com" nocase
        $killswitch2 = "ifferfsodp9ifjaposdfjhgosurijfaewrwergwea.com" nocase

        // Ransom note filename
        $note = "@Please_Read_Me@.txt" nocase

        // Bitcoin wallet strings used in the original campaign
        $btc1 = "13AM4VW2dhxYgXeQepoHkHSQuy6NgaEb94"
        $btc2 = "12t9YDPgwueZ9NyMgw519p7AA8isjr6SMw"

        // Tor client artifacts
        $tor = "taskdl.exe" nocase
        $tor2 = "taskse.exe" nocase

        // Encryption-related imports
        $crypto = "CryptEncrypt" ascii
        $crypto_w = "CryptEncrypt" wide

    condition:
        $mz at 0 and
        (2 of ($killswitch*) or
         $note or
         any of ($btc*) or
         (2 of ($tor*) and 1 of ($crypto*)))
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's unpack the design choices:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;$mz at 0&lt;/code&gt;&lt;/strong&gt; anchors the file as a PE. Without it, a text file quoting the BTC address would match — a textbook false positive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;nocase&lt;/code&gt; on domains&lt;/strong&gt; catches case variations that survive string obfuscation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;any of ($btc*)&lt;/code&gt;&lt;/strong&gt; uses wildcarded set matching, so adding more wallets later is cheap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The condition is an OR of independent clusters.&lt;/strong&gt; Malware mutates; requiring all indicators would miss variants. Requiring &lt;em&gt;some&lt;/em&gt; combination balances recall and precision.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;$crypto&lt;/code&gt; and &lt;code&gt;$crypto_w&lt;/code&gt;&lt;/strong&gt; handle both ASCII and UTF-16LE import tables; Windows API strings often appear in either form.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This rule is intentionally illustrative — production rules would also factor in entropy, PE section anomalies, and signed-certificate checks. For a broader writeup on building detection logic from threat intel feeds, the team at &lt;a href="https://blog.riskitera.com" rel="noopener noreferrer"&gt;Riskitera's blog&lt;/a&gt; publishes hands-on analyses worth following if you want to see how rule authors source their indicators.&lt;/p&gt;

&lt;p&gt;Test it against any WannaCry sample in a safe sandbox (never on a production host):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yara &lt;span class="nt"&gt;-r&lt;/span&gt; wannacry.yar /path/to/samples/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Flags you'll use often:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;-r&lt;/code&gt; — recurse directories&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-s&lt;/code&gt; — print matching strings (essential for tuning)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-w&lt;/code&gt; — disable warnings&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-p N&lt;/code&gt; — parallel scan with N threads&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-d name=value&lt;/code&gt; — define external variables&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example with string output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yara &lt;span class="nt"&gt;-s&lt;/span&gt; wannacry.yar suspicious.exe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll see exactly which strings fired, which tells you whether the match is real or a coincidental string in an unrelated binary.&lt;/p&gt;




&lt;h2&gt;
  
  
  Best Practices for YARA Rule Quality
&lt;/h2&gt;

&lt;p&gt;Writing a rule that matches once is easy. Writing one that survives in production for years is hard. These habits matter:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Anchor on file structure
&lt;/h3&gt;

&lt;p&gt;Always include &lt;code&gt;uint16(0) == 0x5A4D&lt;/code&gt; (MZ header) when targeting Windows executables. For scripts, anchor on shebangs. For documents, anchor on magic bytes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;condition:
    uint16(0) == 0x5A4D and
    filesize &amp;lt; 5MB and
    $unique_string
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Prefer multiple short strings over one long one
&lt;/h3&gt;

&lt;p&gt;Long strings break on trivial mutations. Four independent 8–15 byte strings joined by &lt;code&gt;3 of them&lt;/code&gt; are more robust.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Use &lt;code&gt;fullword&lt;/code&gt; and &lt;code&gt;nocase&lt;/code&gt; deliberately
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;fullword&lt;/code&gt; prevents &lt;code&gt;cmd.exe&lt;/code&gt; from matching inside &lt;code&gt;xcmd.exe&lt;/code&gt;. &lt;code&gt;nocase&lt;/code&gt; triples performance cost in some engines — use when case obfuscation is realistic (domain names, CLI arguments), not for every string.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Beware of common strings
&lt;/h3&gt;

&lt;p&gt;Strings like &lt;code&gt;"This program cannot be run in DOS mode"&lt;/code&gt; and &lt;code&gt;"kernel32.dll"&lt;/code&gt; appear in millions of benign files. Never condition on them alone. Combine with a &lt;code&gt;filesize&lt;/code&gt; bound or a rare companion string.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Add metadata and TLP
&lt;/h3&gt;

&lt;p&gt;Future-you will thank present-you. Include &lt;code&gt;author&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;, &lt;code&gt;date&lt;/code&gt;, &lt;code&gt;reference&lt;/code&gt;, &lt;code&gt;hash&lt;/code&gt; (of the reference sample), and &lt;code&gt;tlp&lt;/code&gt;. Most sharing platforms (MISP, OpenCTI, ThreatFox) parse these fields.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Test for false positives before publishing
&lt;/h3&gt;

&lt;p&gt;Run your rule against a clean corpus — &lt;code&gt;/usr/bin&lt;/code&gt; on Linux, &lt;code&gt;C:\Windows\System32&lt;/code&gt; on Windows — and confirm zero hits. A quick smoke test:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yara &lt;span class="nt"&gt;-r&lt;/span&gt; myrule.yar /usr/bin 2&amp;gt;/dev/null | &lt;span class="nb"&gt;head&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If anything matches, inspect it with &lt;code&gt;-s&lt;/code&gt; and tighten the condition.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Version your rules
&lt;/h3&gt;

&lt;p&gt;Track changes in Git. Use semantic versioning on rule sets. A rule you tweak to catch variant B might silently stop catching variant A.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Use &lt;code&gt;include&lt;/code&gt; and modules
&lt;/h3&gt;

&lt;p&gt;YARA supports modules like &lt;code&gt;pe&lt;/code&gt;, &lt;code&gt;math&lt;/code&gt;, &lt;code&gt;hash&lt;/code&gt;, and &lt;code&gt;elf&lt;/code&gt; that expose parsed file metadata:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import "pe"
import "hash"

rule Suspicious_Packed_PE
{
    condition:
        pe.is_pe and
        pe.number_of_sections &amp;gt; 0 and
        for any section in pe.sections : (
            section.characteristics &amp;amp; pe.SECTION_MEM_EXECUTE and
            math.entropy(section.offset, section.size) &amp;gt; 7.0
        ) and
        hash.md5(0, filesize) != "d41d8cd98f00b204e9800998ecf8427e"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's a real, generic heuristic: packed executables often exhibit high entropy in executable sections, which is a common sign of runtime unpacking.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common Pitfalls and How to Avoid Them
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Forgetting to escape backslashes.&lt;/strong&gt; &lt;code&gt;"C:\Windows"&lt;/code&gt; in YARA is a literal backslash followed by &lt;code&gt;W&lt;/code&gt;. You want &lt;code&gt;"C:\\Windows"&lt;/code&gt;. Regex strings use different escaping.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using &lt;code&gt;$a&lt;/code&gt; without context in &lt;code&gt;condition&lt;/code&gt;.&lt;/strong&gt; YARA treats &lt;code&gt;$a&lt;/code&gt; as "string defined AND found." If you write &lt;code&gt;not $a&lt;/code&gt;, it returns true when &lt;code&gt;$a&lt;/code&gt; is undefined — probably not what you meant. Use explicit &lt;code&gt;#a == 0&lt;/code&gt; for clarity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overusing regex.&lt;/strong&gt; Regex is slow and error-prone. Prefer hex wildcards &lt;code&gt;{ 4D 5A ?? ?? 00 }&lt;/code&gt; for binary signatures and &lt;code&gt;nocase&lt;/code&gt; strings for text.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ignoring &lt;code&gt;filesize&lt;/code&gt;.&lt;/strong&gt; Limiting to &lt;code&gt;filesize &amp;lt; 10MB&lt;/code&gt; often eliminates a huge class of false positives (archives, media files) without losing real matches.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scanning the filesystem blindly.&lt;/strong&gt; On production endpoints, scan only file types you can act on (executables, scripts, office docs) and exclude caches. Use &lt;code&gt;-N&lt;/code&gt; to skip &lt;code&gt;.git&lt;/code&gt;, &lt;code&gt;node_modules&lt;/code&gt;, and the like.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Copying rules without attribution.&lt;/strong&gt; Public rules from vendors and researchers carry licenses and TLP markings. Respect them.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;YARA is a deceptively simple language that scales from one-line text matches to complex PE-aware heuristics. The path to competence is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Write a trivial rule&lt;/strong&gt; (EICAR) to learn syntax.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model a real family&lt;/strong&gt; (WannaCry) to learn layered conditions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test against clean corpora&lt;/strong&gt; to build intuition for false positives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Iterate with &lt;code&gt;-s&lt;/code&gt; output&lt;/strong&gt; to see &lt;em&gt;why&lt;/em&gt; something matched.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version and document&lt;/strong&gt; so your rules survive the next analyst.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The tooling is straightforward: &lt;code&gt;apt install yara&lt;/code&gt;, drop a &lt;code&gt;.yar&lt;/code&gt; file, run &lt;code&gt;yara rule.yar target&lt;/code&gt;. The craft is in the condition blocks. Start small, anchor on structure, and treat every rule as a hypothesis you have to falsify against a clean system before trusting it on an infected one.&lt;/p&gt;

&lt;p&gt;Once you're comfortable, look into YARA-X (the Rust rewrite from VirusTotal), integrate rules into your SIEM or EDR, and pair them with behavioral detections. Static signatures catch known families; behavioral logic catches their mutations. You want both.&lt;/p&gt;

</description>
      <category>yara</category>
      <category>malware</category>
      <category>security</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Deja de usar la IA como un buscador glorificado</title>
      <dc:creator>David Moya</dc:creator>
      <pubDate>Fri, 11 Sep 2026 09:00:00 +0000</pubDate>
      <link>https://dev.to/david_moya_5b6cdd8b4e1219/deja-de-usar-la-ia-como-un-buscador-glorificado-802</link>
      <guid>https://dev.to/david_moya_5b6cdd8b4e1219/deja-de-usar-la-ia-como-un-buscador-glorificado-802</guid>
      <description>&lt;p&gt;El 90 % de la gente usa ChatGPT como un buscador glorificado. Escribe una frase, espera una respuesta brillante y se decepciona cuando recibe generalidades.&lt;/p&gt;

&lt;p&gt;No suele fallar el modelo. Falla el encargo.&lt;/p&gt;

&lt;p&gt;Si le digo a una persona nueva en mi equipo «dame ideas para el negocio», tampoco puede adivinar qué vendo, a quién, con qué presupuesto ni para qué fecha necesito resultados. La IA parte con la misma desventaja, pero rellena los huecos con una seguridad que hace parecer útil una respuesta mediocre.&lt;/p&gt;

&lt;p&gt;La buena noticia es que corregirlo no exige programar. Exige aprender a dar un buen brief.&lt;/p&gt;

&lt;h2&gt;
  
  
  El antes y el después
&lt;/h2&gt;

&lt;p&gt;Este es el tipo de prompt que veo cada día:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dame ideas para mi negocio.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La respuesta será una lista intercambiable: publicar en redes, crear una newsletter, colaborar con influencers. Podría servir para una cafetería, una consultora o una tienda de zapatos.&lt;/p&gt;

&lt;p&gt;Ahora prueba esto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Eres un consultor senior de estrategia con 15 años de
experiencia en SaaS B2B.

Contexto: vendemos software de control horario a empresas
españolas de 20 a 100 empleados. Facturamos 18.000 EUR al mes,
el 70 % de los leads llega por Google Ads y el churn mensual es
el 4 %. Tenemos dos desarrolladores y una persona de marketing.

Tarea: propón tres iniciativas para crecer durante los próximos
90 días sin aumentar el gasto publicitario.

Para cada iniciativa incluye impacto esperado, esfuerzo,
principal riesgo y primera acción esta semana.

Formato: tabla. Máximo 500 palabras. No propongas abrir nuevos
países ni contratar personal.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No hay magia. He añadido rol, contexto, tarea, formato y restricciones. La IA ya no necesita inventar el escenario y puede dedicar su capacidad a resolverlo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Los siete componentes de un prompt profesional
&lt;/h2&gt;

&lt;p&gt;Yo uso una lista de siete componentes. No incluyo siempre los siete, pero los reviso antes de enviar una petición importante.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Rol.&lt;/strong&gt; Desde qué especialidad debe abordar el problema.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contexto.&lt;/strong&gt; Qué necesita saber sobre la empresa, audiencia o situación.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tarea.&lt;/strong&gt; Una acción concreta expresada con un verbo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Formato.&lt;/strong&gt; Tabla, lista, email, JSON o cualquier salida que pueda usar directamente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Restricciones.&lt;/strong&gt; Límites de longitud, alcance, presupuesto o temas prohibidos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ejemplos.&lt;/strong&gt; Muestras de lo que consideras correcto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tono.&lt;/strong&gt; El registro que necesita la audiencia.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Una plantilla reutilizable evita empezar desde cero:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Rol: actúa como [perfil y experiencia relevante].

Contexto:
- Empresa/proyecto: [datos]
- Audiencia: [quién recibirá el resultado]
- Objetivo: [qué decisión o acción debe facilitar]

Tarea: [un verbo + un entregable concreto].

Formato: [estructura exacta].
Restricciones: [límites y exclusiones].
Tono: [registro].

Antes de responder, indica qué dato crítico falta. Si no falta
ninguno, entrega directamente el resultado.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La última frase es útil porque evita que el modelo finja precisión cuando el encargo está incompleto.&lt;/p&gt;

&lt;h2&gt;
  
  
  Los ejemplos enseñan mejor que los adjetivos
&lt;/h2&gt;

&lt;p&gt;Pedir «un texto profesional y cercano» deja mucho margen. Dos ejemplos reales definen mejor el patrón que diez adjetivos. Esta técnica se llama &lt;em&gt;few-shot prompting&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Imagina que quiero clasificar tickets de soporte. En vez de describir durante un párrafo cada categoría, muestro decisiones anteriores:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Clasifica cada ticket como FACTURACIÓN, SOPORTE o VENTA.

Ejemplos:
"Necesito cambiar el CIF de la factura" -&amp;gt; FACTURACIÓN
"La exportación CSV se queda al 80 %" -&amp;gt; SOPORTE
"¿Tenéis precio para 40 usuarios?" -&amp;gt; VENTA

Ticket nuevo:
"Nos han cobrado dos veces la renovación"

Responde solo con la categoría y una frase de justificación.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El modelo ve el formato, las etiquetas válidas y el criterio. Esto mejora especialmente tareas repetitivas: clasificar solicitudes, adaptar titulares, extraer campos o mantener una voz editorial.&lt;/p&gt;

&lt;h2&gt;
  
  
  Una tarea por prompt
&lt;/h2&gt;

&lt;p&gt;Otro error habitual es pedir investigar, decidir, redactar y maquetar en una sola instrucción. Cuantas más operaciones mezclo, menos control tengo sobre cada una.&lt;/p&gt;

&lt;p&gt;Para una propuesta comercial prefiero tres pasos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PASO 1
Analiza este briefing y extrae en una tabla: problema,
resultado deseado, requisitos, restricciones, dudas abiertas y
criterios de compra. No redactes aún la propuesta.

BRIEFING:
[pegar texto]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reviso la tabla y corrijo cualquier interpretación equivocada. Después pido el esquema de la propuesta. Solo cuando ese esquema es correcto solicito la redacción final. Este encadenamiento tarda unos minutos más que el mega-prompt, pero ahorra rehacer un documento entero.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo mejoro un prompt que ya existe
&lt;/h2&gt;

&lt;p&gt;No intento escribir el prompt perfecto a la primera. Uso la propia IA como revisora, sin delegarle la decisión final:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Evalúa el prompt siguiente antes de ejecutarlo.

PROMPT:
[pegar prompt]

Detecta:
1. Ambigüedades que obliguen a hacer suposiciones.
2. Contexto que falte.
3. Conflictos entre instrucciones.
4. Un formato de salida más útil.

Después escribe una versión mejorada. No inventes datos: marca
cada dato necesario como [POR COMPLETAR].
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La clave está en revisar las marcas &lt;code&gt;[POR COMPLETAR]&lt;/code&gt;. Si permito que el modelo complete esos datos, vuelvo al punto de partida: una respuesta elegante construida sobre suposiciones.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mi regla práctica
&lt;/h2&gt;

&lt;p&gt;Antes de pulsar Enter me hago una pregunta: ¿una persona competente que acaba de llegar al equipo podría ejecutar este encargo sin preguntarme nada esencial?&lt;/p&gt;

&lt;p&gt;Si la respuesta es no, añado contexto. Si no sabría cuándo ha terminado, aclaro la tarea. Si podría entregar algo que no puedo usar, especifico el formato. Si existen límites reales, los escribo.&lt;/p&gt;

&lt;p&gt;Eso es prompting profesional. No consiste en memorizar palabras secretas ni en escribir instrucciones kilométricas. Consiste en reducir ambigüedad y convertir una intención difusa en un encargo verificable.&lt;/p&gt;

&lt;p&gt;En IAcademy hemos organizado esta habilidad dentro de 290 módulos y 23 especializaciones. Los Founding Members pueden entrar desde 19 EUR —Itinerario 19, Pro 99 y Pro+Mentoría 249— con el precio bloqueado hasta el 15 de octubre de 2026. La garantía es de 30 días o de 5 horas ahorradas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Si quieres ir más allá
&lt;/h2&gt;

&lt;p&gt;Puedes empezar con los &lt;a href="https://iacedemy.com/free/" rel="noopener noreferrer"&gt;recursos gratuitos&lt;/a&gt; y ver los &lt;a href="https://iacedemy.com/pricing/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=founding-oct2026" rel="noopener noreferrer"&gt;planes Founding&lt;/a&gt;. Elige un proceso real de esta semana y mejora ese prompt antes de aprender otra técnica.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>chatgpt</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Curso interactivo de HTTP: guía completa</title>
      <dc:creator>David Moya</dc:creator>
      <pubDate>Fri, 11 Sep 2026 07:30:05 +0000</pubDate>
      <link>https://dev.to/david_moya_5b6cdd8b4e1219/curso-interactivo-de-http-guia-completa-neo</link>
      <guid>https://dev.to/david_moya_5b6cdd8b4e1219/curso-interactivo-de-http-guia-completa-neo</guid>
      <description>&lt;p&gt;Cuando un agente de inteligencia artificial consulta una herramienta, una aplicación llama a una API o un navegador solicita una página, HTTP suele convertir la intención en una operación concreta. El curso Básicos HTTP interactivo ayuda a entender ese contrato sin reducirlo a una lista de verbos y códigos.&lt;/p&gt;

&lt;p&gt;El recorrido comienza con un mapa del ecosistema. Conecta agente de usuario, URI, origen, transporte, petición, cabeceras, intermediarios, caché, servidor y respuesta. También incorpora las políticas del navegador y la superficie de ataque. Esa visión es útil porque muchos errores atribuidos a «la API» pertenecen en realidad a DNS, TLS, una CDN, una regla de caché o una cabecera aceptada fuera de su frontera de confianza.&lt;/p&gt;

&lt;p&gt;Después, una ruta de siete pasos sigue la petición desde la preparación de la URI hasta la aplicación de CORS, cookies y CSP en el navegador. La anatomía del mensaje distingue línea inicial, campos, contenido, respuesta y versiones. HTTP/1.1, HTTP/2 y HTTP/3 conservan la semántica, aunque cambien el framing, la multiplexación y el transporte.&lt;/p&gt;

&lt;p&gt;El laboratorio es el centro práctico. Permite cargar y editar una petición o respuesta cruda. El analizador reconoce método, objetivo, versión, estado, cabeceras y cuerpo; después señala problemas de caché, cookies y seguridad. Detecta, entre otros casos, Content-Length duplicado, Transfer-Encoding junto a Content-Length, cookies sin atributos defensivos, CORS peligroso, cabeceras Forwarded, falta de Host y ausencia de HSTS o CSP.&lt;/p&gt;

&lt;p&gt;El curso también presenta ocho riesgos frecuentes y un quiz de cinco preguntas con corrección inmediata. La evaluación cubre GET, 304, request smuggling, multiplexación de HTTP/2 y Vary. La preferencia de tema se conserva, pero el progreso del quiz no persiste tras recargar, una distinción importante al describir exactamente la experiencia.&lt;/p&gt;

&lt;p&gt;El valor pedagógico está en relacionar elementos. Cache-Control no se estudia solo: se contrasta con Authorization, Set-Cookie, ETag y Vary. CORS no se confunde con autorización. TLS protege el tránsito, pero no corrige una política de caché pública ni una cookie accesible desde JavaScript. Forwarded puede describir el cliente original, aunque solo resulta confiable cuando un proxy controlado elimina el valor entrante y lo reconstruye.&lt;/p&gt;

&lt;p&gt;Una forma útil de estudiar el recurso es predecir antes de pulsar «Analizar». Se puede eliminar Host de la petición, duplicar Content-Length con valores distintos o retirar Secure de la cookie de respuesta. Al cambiar una sola condición cada vez, la advertencia deja de ser teoría y se convierte en una relación visible entre configuración y riesgo. Después conviene llevar ese mismo método a una traza real, siempre eliminando tokens y datos privados. El objetivo no es memorizar todas las RFC, sino saber dónde mirar y cómo separar semántica, transporte, navegador e infraestructura.&lt;/p&gt;

&lt;p&gt;Para profesionales de IA, la lección es directa: un token en Authorization, un 429, una redirección o una respuesta privada almacenada en una caché compartida cambian el comportamiento y la seguridad del sistema. HTTP no es simple fontanería. Es parte del contrato, del modelo de confianza y del diagnóstico.&lt;/p&gt;

&lt;p&gt;Lee el artículo completo en IAcademy&lt;/p&gt;

&lt;p&gt;Lee el artículo completo en IAcademy: &lt;a href="https://iacedemy.com/blog/curso-interactivo-http/" rel="noopener noreferrer"&gt;https://iacedemy.com/blog/curso-interactivo-http/&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Curso interactivo de HTTP y HTTPS: TLS en la práctica</title>
      <dc:creator>David Moya</dc:creator>
      <pubDate>Fri, 11 Sep 2026 07:30:00 +0000</pubDate>
      <link>https://dev.to/david_moya_5b6cdd8b4e1219/curso-interactivo-de-http-y-https-tls-en-la-practica-101b</link>
      <guid>https://dev.to/david_moya_5b6cdd8b4e1219/curso-interactivo-de-http-y-https-tls-en-la-practica-101b</guid>
      <description>&lt;h2&gt;
  
  
  HTTPS protege el canal, no la aplicación
&lt;/h2&gt;

&lt;p&gt;He analizado a fondo &lt;a href="https://pedri77.github.io/Basicos_HTTP-S/" rel="noopener noreferrer"&gt;Básicos HTTP/S&lt;/a&gt;, un curso interactivo que enseña HTTP y HTTPS desde lo básico hasta nivel profesional. Su modelo mental de partida condensa todo: &lt;strong&gt;HTTP define mensajes. TLS protege el canal. HTTPS une ambos.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El curso recorre el ecosistema completo con un mapa conceptual interactivo de trece nodos (incluido, acertadamente, el atacante en la ruta) y un simulador de nueve pasos que sigue la vida de una petición: URL y origen, resolución DNS, transporte TCP o QUIC, handshake TLS, validación de certificado, negociación ALPN, solicitud cifrada, respuesta con políticas y caché del navegador.&lt;/p&gt;

&lt;p&gt;Lo más útil es el &lt;strong&gt;laboratorio local&lt;/strong&gt;: introduces una URL, el estado TLS observado, el estado del certificado y un bloque de cabeceras, y un motor de análisis que corre íntegramente en tu navegador evalúa esquema, HSTS, redirecciones de downgrade, cookies sin Secure o HttpOnly, Cache-Control en rutas sensibles, CORS incompatible con credenciales y Alt-Svc con HTTP/3. Todo sin enviar un byte a ningún servidor.&lt;/p&gt;

&lt;p&gt;Completan el conjunto un checklist ponderado de ocho señales de riesgo (login por HTTP: 30 puntos; error de certificado aceptado: 28; redirección a http://: 24...), un quiz autocorregido de ocho preguntas con explicación, quince referencias RFC/IANA filtrables y un glosario esencial.&lt;/p&gt;

&lt;p&gt;Para quien trabaja con IA, el ángulo es directo: cada vez que un agente llama a una API de terceros, la clave y los datos viajan en mensajes HTTP. Un certificado autofirmado puede cifrar, pero no autentica. Un token en la query string acaba en logs e historial aunque el canal vaya cifrado. Y desactivar la verificación de certificados "solo en desarrollo" es exactamente el fallo que este curso enseña a no cometer.&lt;/p&gt;

&lt;p&gt;Detalle técnico que aprecio: la app es código abierto, HTML/CSS/JS plano sin frameworks ni build, con escapeHtml aplicado a todo el contenido dinámico — un curso de seguridad web que se protege a sí mismo de inyección de HTML.&lt;/p&gt;

&lt;p&gt;Lee el artículo completo en IAcademy&lt;/p&gt;

&lt;p&gt;Lee el artículo completo en IAcademy: &lt;a href="https://iacedemy.com/blog/curso-interactivo-https/" rel="noopener noreferrer"&gt;https://iacedemy.com/blog/curso-interactivo-https/&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Curso interactivo de email: SPF, DKIM y DMARC</title>
      <dc:creator>David Moya</dc:creator>
      <pubDate>Thu, 10 Sep 2026 07:30:06 +0000</pubDate>
      <link>https://dev.to/david_moya_5b6cdd8b4e1219/curso-interactivo-de-email-spf-dkim-y-dmarc-26ip</link>
      <guid>https://dev.to/david_moya_5b6cdd8b4e1219/curso-interactivo-de-email-spf-dkim-y-dmarc-26ip</guid>
      <description>&lt;h2&gt;
  
  
  El correo es infraestructura, no solo una interfaz
&lt;/h2&gt;

&lt;p&gt;Pulsamos «Enviar» y parece que el mensaje salta de una aplicación a otra. En realidad intervienen un cliente MUA, un servidor de submission MSA, uno o varios MTA, consultas DNS, un agente de entrega MDA y el buzón final. El curso interactivo Básicos Email convierte esa cadena invisible en un mapa que se puede explorar y en una simulación de siete pasos.&lt;/p&gt;

&lt;p&gt;La lección más importante es separar el mensaje RFC 5322 del sobre SMTP. El From visible pertenece al mensaje; MAIL FROM pertenece al sobre y se utiliza para rebotes y SPF. Por eso &lt;code&gt;spf=pass&lt;/code&gt; no significa automáticamente que el dominio mostrado al usuario sea auténtico. DKIM añade una firma verificable sobre cabeceras y cuerpo. DMARC conecta esos resultados con el dominio del From mediante alineación y permite publicar una política.&lt;/p&gt;

&lt;p&gt;El curso no se limita a definiciones. Su laboratorio permite pegar cabeceras o cargar una muestra con Return-Path, Received, Authentication-Results, From, Reply-To, Message-ID y Content-Type. El análisis ocurre localmente en el navegador. Señala ausencias, discrepancias de dominios, resultados de SPF, DKIM y DMARC, número de saltos y presencia de ESMTPS. Son pistas orientativas, no un veredicto forense.&lt;/p&gt;

&lt;p&gt;También propone una evaluación de phishing que combina nombre visible, dominios parecidos, Reply-To distinto, fallos de autenticación, urgencia, enlaces engañosos, adjuntos peligrosos y rutas Received incoherentes. El enfoque es acertado: ninguna señal aislada basta. Incluso un DKIM válido puede firmar contenido malicioso, y DMARC no detecta dominios visualmente similares ni analiza adjuntos.&lt;/p&gt;

&lt;p&gt;Para quienes construimos agentes de IA, este conocimiento es operacional. El agente puede generar contenido y conectarse a un proveedor, pero alguien debe autorizar la fuente en SPF, habilitar DKIM y asegurar que al menos un mecanismo se alinee con el From para DMARC. Cambiar de proveedor o subdominio obliga a revisar esa cadena. La automatización amplifica tanto los aciertos como los errores de configuración.&lt;/p&gt;

&lt;p&gt;La experiencia está construida con HTML, CSS y JavaScript plano, sin backend ni instalación. Incluye ocho preguntas autocorregidas con explicación inmediata. No guarda progreso: la puntuación vive en memoria; solo persiste la preferencia de tema. Es un recurso directo para pasar de «el correo llega» a entender por qué llega, qué identidad acredita y qué revisar cuando algo parece sospechoso.&lt;/p&gt;

&lt;p&gt;Lee el artículo completo en IAcademy&lt;/p&gt;

&lt;p&gt;Lee el artículo completo en IAcademy: &lt;a href="https://iacedemy.com/blog/curso-interactivo-email/" rel="noopener noreferrer"&gt;https://iacedemy.com/blog/curso-interactivo-email/&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
