DEV Community

Andres Avalos Gallegos
Andres Avalos Gallegos

Posted on

RDRIR: Real Danger Ramdom In Ruby

# RDRIR - Real Danger Random In Ruby
# 
# ADVERTENCIA: Este generador de números "aleatorios" funciona
# leyendo memoria cruda del heap de MRI a través de la dirección
# de un objeto Random recién creado. Esto significa:
#
#   - Puede segfaultear el proceso sin previo aviso
#   - El comportamiento depende de la versión/build de Ruby
#   - El GC puede mover el objeto entre su creación y la lectura,
#     provocando lecturas de memoria que ya no pertenecen a nadie
#   - No hay ninguna garantía de qué hay en ese offset de memoria
#
# Úsalo únicamente si tu propósito es aprender sobre Fiddle,
# punteros crudos e internals de MRI — jamás en producción,
# y mucho menos para nada que huela a seguridad o criptografía.
# Bajo licensia MIT por Qmaker/Andrès Àvalos Gallegos

require 'fiddle'; def extract_rute(obj_str); m = obj_str.match(/0x\h+/); m ? m[0] : nil; end; $solo_num = ->(s) { s.to_s.tr("^0-9", "").to_i }; def realramdom(min, max); s = Random.new($solo_num.call(Time.new.to_f)); hex = extract_rute(s.to_s); return rand(min..max) if !hex; ptr = Fiddle::Pointer.new(hex.to_i(16)); val = ptr[16, 8].unpack1('q').abs; min + (val % (max - min + 1)); end; puts realramdom(1, 100)
Enter fullscreen mode Exit fullscreen mode

Nota: es solo educativo

Top comments (0)