elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


Páginas: [1] 2 3 4 5 6 7 8 9 10
 1 
 en: Hoy a las 00:36 
Iniciado por El_Andaluz - Último mensaje por El_Andaluz


La jornada del lunes en la Casa Blanca tomó un giro inusual cuando, tras un pedido de McDonald’s en el Despacho Oval, Donald Trump ofreció una conferencia donde mezcló la guerra en Irán, críticas al papa León XIV y una polémica imagen suya como Jesús.

El presidente estadounidense, gran aficionado a la comida rápida, salió al jardín de la Casa Blanca para recibir un pedido de hamburguesas de manos de una empleada de la plataforma de entregas DoorDash.

«Tengo un pedido para usted, señor presidente», declaró la repartidora, Sharon Simmons, al entregarle las bolsas de papel.

«Esto no parece preparado, ¿verdad?», preguntó Trump a los periodistas después de recibir la entrega de Simmons, a quien la empresa describió como una abuela de diez nietos de Arkansas.

El acto fue concebido para destacar la política del republicano multimillonario Trump de «no impuestos sobre las propinas», que, según dijo, había supuesto una devolución de 11.000 dólares para Simmons este año.

Pero, como suele suceder con el republicano, la conversación derivó rápidamente hacia temas mucho más sensibles.

Trump había sido objeto de críticas después de que el domingo por la noche apareciera en su cuenta de Truth Social una imagen generada por IA, ya eliminada, en la que estaba representado como Jesús, poco después de criticar al papa León XIV por su postura sobre Irán.

«Sí la publiqué, y pensé que era yo como médico y que tenía que ver con la Cruz Roja», declaró Trump. «Se supone que soy yo como médico, haciendo que la gente mejore. Y yo hago que la gente mejore. Hago que la gente mejore mucho».

Las preguntas derivaron entonces hacia la guerra en Irán.

El bloqueo ordenado por Trump a los puertos iraníes entró en vigor poco más de dos horas antes de la rueda de prensa, tras el fracaso de las conversaciones en Pakistán durante el fin de semana.

Trump afirmó que Irán quiere «con muchas ganas» llegar a un acuerdo, que según él debe buscar impedir que Teherán se dote de un arma nuclear.

– Propinas –

Con la desconcertada repartidora todavía a su lado, Trump dejó claro además que no pensaba pedir disculpas al primer jefe de la Iglesia católica nacido en Estados Unidos.

«No hay nada por lo que disculparse. Está equivocado», dijo, un día después de arremeter contra el papa León XIV por oponerse a la guerra en Oriente Medio.

«El papa León dijo cosas que son incorrectas. Estaba muy en contra de lo que estoy haciendo con respecto a Irán, y no se puede tener un Irán (dotado de un arma) nuclear», apuntó Trump.

El presidente abordó luego uno de sus temas favoritos: la prohibición de las personas transgénero en las competiciones deportivas femeninas, preguntándole al respecto a Simmons.

«No tengo realmente una opinión sobre eso», respondió la repartidora. «Estoy aquí para hablar de la exención de impuestos a las propinas».

Los periodistas le preguntaron entonces si el personal de la Casa Blanca dejaba buenas propinas. Ella se encogió de hombros.

«Espere», dijo Trump, antes de meter la mano en el bolsillo del pantalón, sacar lo que parecía ser un billete de 100 dólares doblado y dárselo a Simmons.

«Gracias», le dijo sonriente el presidente al periodista. «¡Me lo recordó!»







 2 
 en: Ayer a las 18:26 
Iniciado por Ni idea - Último mensaje por Ni idea
Muchas gracias. La denuncia está puesta en la Policía Nacional y acabamos de enviar el último documento para el SPI (Sistema de protección de identidades). Nos han dicho que si pide un crédito al nombre de mi mujer les saltará un aviso cuando esté en ese registro.

Gracias por los enlaces que mandas. Ya hemos hecho todas esas cosas y ha seguido pudiendo entrar en el perfil de Google. Hemos cerrado su sesión unas 14 veces, tanto nosotras como atención al cliente de Orange, y en todos los casos ha abierto sesión a los 2 minutos, como si tuviera algún software que lo hace automáticamente. Esto incluso después de cambiar la contraseña de Google 3 veces. Ahora lleva 6 horas sin abrir la sesión, desde que descargamos Google Authentificator. El tiempo dirá si eso ha sido la solución.

También hemos borrado todos los mensajes de Gmail salvo los relativos a este asunto, para que no pueda encontrar datos nuestros o de nuestra familia o negocio. Y hemos eliminado todas las contraseñas que había en el perfil de Google, así como todas las tarjetas de Google Pay. Las cuentas las bloqueamos en cuanto nos dimos cuenta del robo. El llamó 17 veces al servicio telefónico del banco intentando operar, pero ya habíamos bloqueado las cuentas y los operadores estaban al tanto.

También estamos en contacto con la empresa de créditos rápidos, pero nos están toreando. Les hemos amenazado con acciones legales si conceden el crédito y les hemos mandado la denuncia ante la Policía Nacional para que vean que no mentimos. No sé qué haran.

Si a alguien se le ocurre qué más podemos hacer, agradecemos cualquier consejo. Nos preocupa especialmente que esté pidiendo créditos y le den alguno antes de la inclusión en el SPI.

Un saludo,
Lucía

 3 
 en: Ayer a las 18:14 
Iniciado por Eleкtro - Último mensaje por Eleкtro
Esta función sirve para resaltar (highlight) elementos de una página web utilizando la API de Selenium, inyectando un pequeño código javascript en la página. Muy útil para automatización, por ejemplo, para señalar mostrando una guía visual de los elementos en los que hace click.

La función provee 11 parámetros opcionales de personalización, entre ellos para la duración del efecto de resaltado, poder mostrar una flecha que rebota, la posición de la flecha, y poder mostrar un texto, el color de flecha y texto, tamaño de flecha y texto, color de fondo y opacidad.

Tanto el highlight como la flecha (un gráfico SVG) son efectos muy chulos.

Si la ventana del navegador se redimensiona, el highlight y la flecha actualizan su posición de forma automática.

Vaya por delante que el script de javascript lo ha escrito una IA, y se ha ido perfeccionando durante varias consultas, solucionando problemas e imperfecciones hasta llegar al estado actual.

Requisitos:
...y un navegador soportado por el webdriver.

Código
  1. ''' <summary>
  2. ''' Draws an animated highlight overlay over the specified web element
  3. ''' using javascript executed via <see cref="IJavaScriptExecutor"/>.
  4. ''' <para></para>
  5. ''' The overlay is automatically removed from the DOM after <paramref name="durationMs"/> milliseconds.
  6. ''' </summary>
  7. '''
  8. ''' <example> This is a code example.
  9. ''' <code language="VB">
  10. ''' Dim elemment As IWebElement = driver.FindElement(By.Id("submit-btn"))
  11. ''' HighlightElement(driver, elemment,
  12. '''                  labelText:="Click here",
  13. '''                  labelForeColor:="red",
  14. '''                  showArrow:=True,
  15. '''                  arrowSize:=24,
  16. '''                  arrowAlignment:=ContentAlignment.MiddleLeft,
  17. '''                  arrowColor:="red",
  18. '''                  borderColor:="red",
  19. '''                  fillColor:="white",
  20. '''                  fillOpacity:=0.4,
  21. '''                  durationMs:=3000)
  22. ''' </code>
  23. ''' </example>
  24. '''
  25. ''' <param name="driver">
  26. ''' Active <see cref="IWebDriver"/> instance. Must implement
  27. ''' <see cref="IJavaScriptExecutor"/>; otherwise an <see cref="InvalidCastException"/> will be thrown.
  28. ''' </param>
  29. '''
  30. ''' <param name="element">
  31. ''' The DOM element to highlight. Its position is determined at runtime
  32. ''' via <c>getBoundingClientRect()</c>, accounting for current scroll offsets.
  33. ''' </param>
  34. '''
  35. ''' <param name="labelText">
  36. ''' Optional. The text displayed centered inside the overlay box.
  37. ''' </param>
  38. '''
  39. ''' <param name="labelFontSize">
  40. ''' Optional. The initial font size for <paramref name="labelText"/>, in pixels.
  41. ''' <para></para>
  42. ''' Note: The font size auto-shrinks down up to 6px if the text overflows the element's bounds.
  43. ''' <para></para>
  44. ''' Default value is <c>14</c>.
  45. ''' </param>
  46. '''
  47. ''' <param name="labelForeColor">
  48. ''' Optional. The CSS color value for the label text (e.g. <c>"black"</c>, <c>"#fff"</c>).
  49. ''' <para></para>
  50. ''' Default value is <c>"black"</c>.
  51. ''' </param>
  52. '''
  53. ''' <param name="showArrow">
  54. ''' Optional. A value indicating whether to render an animated arrow pointing
  55. ''' toward the element from the side set by <paramref name="arrowAlignment"/> parameter.
  56. ''' </param>
  57. '''
  58. ''' <param name="arrowAlignment">
  59. ''' Optional. A <see cref="ContentAlignment"/> value that controls which side of the element
  60. ''' the arrow appears on and the direction it points.
  61. ''' <para></para>
  62. ''' Note: This value has no effect if <paramref name="showArrow"/> is <see langword="False"/>
  63. ''' <para></para>
  64. ''' Default value is <see cref="ContentAlignment.MiddleLeft"/>.
  65. ''' </param>
  66. '''
  67. ''' <param name="arrowSize">
  68. ''' Optional. The square size (width x height) of the arrow bounding box, in pixels.
  69. ''' <para></para>
  70. ''' Default value is <c>30</c>.
  71. ''' </param>
  72. '''
  73. ''' <param name="arrowColor">
  74. ''' Optional. The CSS color value for the arrow (e.g. <c>"black"</c>, <c>"#fff"</c>).
  75. ''' <para></para>
  76. ''' Default value is <c>"darkred"</c>.
  77. ''' </param>
  78. '''
  79. ''' <param name="borderColor">
  80. ''' Optional. The CSS color value for the overlay border (e.g. <c>"black"</c>, <c>"#fff"</c>).
  81. ''' <para></para>
  82. ''' Default value is <c>"red"</c>.
  83. ''' </param>
  84. '''
  85. ''' <param name="fillColor">
  86. ''' Optional. The CSS color value to fill the overlay background (e.g. <c>"black"</c>, <c>"#fff"</c>).
  87. ''' <para></para>
  88. ''' Default value is <c>"white"</c>.
  89. ''' </param>
  90. '''
  91. ''' <param name="fillOpacity">
  92. ''' Optional. The opacity of the background overlay, from <c>0.0</c> (transparent) to <c>1.0</c> (opaque).
  93. ''' <para></para>
  94. ''' Default value is <c>0.4</c>.
  95. ''' </param>
  96. '''
  97. ''' <param name="durationMs">
  98. ''' Optional. The duration before the overlay (and arrow, if shown) are removed from the DOM, in milliseconds.
  99. ''' <para></para>
  100. ''' Default value is <c>3000</c> (3 seconds).
  101. ''' </param>
  102. <DebuggerStepThrough>
  103. Public Shared Function HighlightElement(driver As IWebDriver,
  104.                                        element As IWebElement,
  105.                                        Optional labelText As String = Nothing,
  106.                                        Optional labelFontSize As Integer = 14,
  107.                                        Optional labelForeColor As String = "black",
  108.                                        Optional showArrow As Boolean = True,
  109.                                        Optional arrowAlignment As ContentAlignment = ContentAlignment.MiddleLeft,
  110.                                        Optional arrowSize As Integer = 30,
  111.                                        Optional arrowColor As String = "darkred",
  112.                                        Optional borderColor As String = "red",
  113.                                        Optional fillColor As String = "white",
  114.                                        Optional fillOpacity As Double = 0.4,
  115.                                        Optional durationMs As Integer = 3000) As Boolean
  116.  
  117.    ArgumentNullException.ThrowIfNull(driver)
  118.  
  119.    ArgumentNullException.ThrowIfNull(element)
  120.  
  121.    Try
  122.        Dim probeHandle As String = driver.CurrentWindowHandle
  123.    Catch ex As Exception
  124.        Throw New InvalidOperationException("WebDriver session is no longer available.", ex)
  125.    End Try
  126.  
  127.    Try
  128.        Dim probeTag As String = element.TagName
  129.        If Not element.Displayed Then
  130.            Return False
  131.        End If
  132.  
  133.    Catch ex As StaleElementReferenceException
  134.        Throw New InvalidOperationException("Target element is stale or detached from the DOM.", ex)
  135.  
  136.    Catch ex As WebDriverException
  137.        Throw New InvalidOperationException("Target element is not accessible through the WebDriver.", ex)
  138.  
  139.    End Try
  140.  
  141.    Dim js As IJavaScriptExecutor = TryCast(driver, IJavaScriptExecutor)
  142.    If js Is Nothing Then
  143.        Throw New NotSupportedException("The provided IWebDriver does not implement IJavaScriptExecutor.")
  144.    End If
  145.  
  146.    Dim script As String = "
  147. try {
  148.    return (function(el,
  149.                     labelText, labelFontSize, labelForeColor,
  150.                     showArrow, arrowAlignment, arrowSize, arrowColor,
  151.                     borderColor, fillColor, fillOpacity,
  152.                     durationMs) {
  153.  
  154.    if (!el || !(el instanceof Element) || !el.isConnected) { return 'no-element'; }
  155.  
  156.    let r  = el.getBoundingClientRect();
  157.    if (!r || (r.width === 0 && r.height === 0)) { return 'zero-rect'; }
  158.  
  159.    let sx = window.scrollX, sy = window.scrollY;
  160.    let cx = r.left + sx + r.width  / 2;
  161.    let cy = r.top  + sy + r.height / 2;
  162.  
  163.    // Overlay box — positioned and sized to wrap the element with a small padding
  164.    let overlay = document.createElement('div');
  165.    overlay.style.cssText = [
  166.        'position:absolute',
  167.        'left:'   + (r.left + sx - 5) + 'px',
  168.        'top:'    + (r.top  + sy - 5) + 'px',
  169.        'width:'  + (r.width  + 10)   + 'px',
  170.        'height:' + (r.height + 10)   + 'px',
  171.        'border:3px solid ' + borderColor,
  172.        'border-radius:8px',
  173.        'box-shadow:0 0 20px ' + borderColor,
  174.        'z-index:999998',
  175.        'pointer-events:none',
  176.        'display:flex',
  177.        'align-items:center',
  178.        'justify-content:center',
  179.        'box-sizing:border-box',
  180.        'overflow:hidden'
  181.    ].join(';');
  182.    document.body.appendChild(overlay);
  183.  
  184.    // Fill div — opacity only affects background, not the border
  185.    let fill = document.createElement('div');
  186.    fill.style.cssText = 'position:absolute;' +
  187.                         'inset:0;' +
  188.                         'background:' + fillColor + ';' +
  189.                         'opacity:' + fillOpacity + ';' +
  190.                         'z-index:0;';
  191.    overlay.appendChild(fill);
  192.  
  193.    // Label — auto-shrinks font size until text fits inside the overlay
  194.    let lbl = null;
  195.    if (labelText) {
  196.        let lbl = document.createElement('div');
  197.        lbl.textContent = labelText;
  198.        lbl.style.cssText = 'position:relative;' +
  199.                            'z-index:1;' +
  200.                            'width:100%;' +
  201.                            'box-sizing:border-box;' +
  202.                            'white-space:normal;' +
  203.                            'word-break:break-word;' +
  204.                            'text-align:center;' +
  205.                            'color:' + labelForeColor + ';' +
  206.                            'font-size:' + labelFontSize + 'px;' +
  207.                            'font-weight:bold;' +
  208.                            'padding:2px 4px;' +
  209.                            'border-radius:4px;';
  210.        overlay.appendChild(lbl);
  211.        let fs = labelFontSize;
  212.        while (fs > 6 && lbl.scrollHeight > overlay.clientHeight) {
  213.            fs--;
  214.            lbl.style.fontSize = fs + 'px';
  215.        }
  216.    }
  217.  
  218.    // Arrow — SVG polygon rotated via CSS to point toward the element from its position.
  219.    // Two nested divs: arrowWrap handles position + bounce animation,
  220.    // arrowInner handles rotation so both transforms don't conflict.
  221.    let arrowWrap = null;
  222.    if (showArrow) {
  223.        let styleTag = document.createElement('style');
  224.        styleTag.textContent =
  225.            '@keyframes bML {from{transform:translateX( 0px)} to{transform:translateX(-8px)}}' +
  226.            '@keyframes bMR {from{transform:translateX( 0px)} to{transform:translateX( 8px)}}' +
  227.            '@keyframes bTC {from{transform:translateY( 0px)} to{transform:translateY(-8px)}}' +
  228.            '@keyframes bBC {from{transform:translateY( 0px)} to{transform:translateY( 8px)}}' +
  229.            '@keyframes bTL {from{transform:translate(0,0)} to{transform:translate(-6px,-6px)}}' +
  230.            '@keyframes bTR {from{transform:translate(0,0)} to{transform:translate( 6px,-6px)}}' +
  231.            '@keyframes bBL {from{transform:translate(0,0)} to{transform:translate(-6px, 6px)}}' +
  232.            '@keyframes bBR {from{transform:translate(0,0)} to{transform:translate( 6px, 6px)}}';
  233.        document.head.appendChild(styleTag);
  234.  
  235.        // rot: CSS rotation so the arrow always points TOWARD the element from its side.
  236.        // anim: bounce keyframe name matching the arrow's side.
  237.        // Both are constant for the lifetime of the highlight — assigned once here,
  238.        // never inside updatePosition (which would restart the animation every tick).
  239.        let staticCfg = {
  240.            'MiddleLeft'   : { rot:  '0', anim:'bML' },
  241.            'MiddleRight'  : { rot:'180', anim:'bMR' },
  242.            'TopCenter'    : { rot: '90', anim:'bTC' },
  243.            'BottomCenter' : { rot:'270', anim:'bBC' },
  244.            'TopLeft'      : { rot: '45', anim:'bTL' },
  245.            'TopRight'     : { rot:'135', anim:'bTR' },
  246.            'BottomLeft'   : { rot:'315', anim:'bBL' },
  247.            'BottomRight'  : { rot:'225', anim:'bBR' }
  248.        }[arrowAlignment] || { rot:'0', anim:'bML' };
  249.  
  250.        arrowWrap = document.createElement('div');
  251.        arrowWrap.style.cssText = 'position:absolute;' +
  252.                                  'width:' + arrowSize + 'px;' +
  253.                                  'height:' + arrowSize + 'px;' +
  254.                                  'z-index:999999;pointer-events:none;';
  255.        arrowWrap.style.animation = staticCfg.anim + ' 0.4s ease-in-out infinite alternate';
  256.  
  257.        arrowInner = document.createElement('div');
  258.        arrowInner.style.cssText = 'width:' + arrowSize + 'px;' +
  259.                                   'height:' + arrowSize + 'px;' +
  260.                                   'transform:rotate(' + staticCfg.rot + 'deg);' +
  261.                                   'transform-origin:center center;';
  262.  
  263.        // Arrow shape: rectangular shaft + concave arrowhead.
  264.        arrowInner.innerHTML = '<svg viewBox=\'0 0 48 40\' width=\'' + arrowSize + '\' height=\'' + arrowSize + '\' xmlns=\'http://www.w3.org/2000/svg\'>' +
  265.                               '<polygon points=\'0,16 30,16 24,4 48,20 24,36 30,24 0,24\' fill=\'' + arrowColor + '\'/>' +
  266.                               '</svg>';
  267.  
  268.        arrowWrap.appendChild(arrowInner);
  269.        document.body.appendChild(arrowWrap);
  270.    }
  271.  
  272.    // updatePosition — recalculates overlay and arrow placement on every tick,
  273.    // so the highlight stays glued to the element when the user scrolls,
  274.    // resizes the window, or the page reflows dynamically.
  275.    function updatePosition() {
  276.        try {
  277.            if (!el || !el.isConnected) { return; }
  278.  
  279.            let r  = el.getBoundingClientRect();
  280.            let sx = window.scrollX, sy = window.scrollY;
  281.  
  282.            overlay.style.left   = (r.left + sx - 5) + 'px';
  283.            overlay.style.top    = (r.top  + sy - 5) + 'px';
  284.            overlay.style.width  = (r.width  + 10) + 'px';
  285.            overlay.style.height = (r.height + 10) + 'px';
  286.  
  287.            // Auto-shrink the label font size until it fits inside the overlay,
  288.            // recomputed on each tick because the box can be resized by the user.
  289.            if (lbl) {
  290.                let fs = labelFontSize;
  291.                lbl.style.fontSize = fs + 'px';
  292.                while (fs > 6 && lbl.scrollHeight > overlay.clientHeight) {
  293.                    fs--;
  294.                    lbl.style.fontSize = fs + 'px';
  295.                }
  296.            }
  297.  
  298.            if (arrowWrap && arrowInner) {
  299.                // ax/ay: absolute position of the arrow bounding box, recomputed each tick.
  300.                // d: diagonal inset — compensates the 45° rotation so the visible tip sits
  301.                //    exactly `marginDiagonal` pixels away from the element border, regardless of arrowSize.
  302.                // marginStraight: clearance for MiddleLeft/MiddleRight/TopCenter/BottomCenter.
  303.                // marginDiagonal: clearance for TopLeft/TopRight/BottomLeft/BottomRight.
  304.                let cx             = r.left + sx + r.width  / 2;
  305.                let cy             = r.top  + sy + r.height / 2;
  306.                let d              = arrowSize * (0.5 - Math.SQRT2 / 4);
  307.                let marginStraight = 8;
  308.                let marginDiagonal = 4;
  309.                let cfg = {
  310.                    'MiddleLeft'   : { ax: r.left   + sx - arrowSize - marginStraight,     ay: cy - arrowSize / 2 },
  311.                    'MiddleRight'  : { ax: r.right  + sx + marginStraight,                 ay: cy - arrowSize / 2 },
  312.                    'TopCenter'    : { ax: cx - arrowSize / 2,                             ay: r.top    + sy - arrowSize - marginStraight },
  313.                    'BottomCenter' : { ax: cx - arrowSize / 2,                             ay: r.bottom + sy + marginStraight },
  314.                    'TopLeft'      : { ax: r.left   + sx - arrowSize + d - marginDiagonal, ay: r.top    + sy - arrowSize + d - marginDiagonal },
  315.                    'TopRight'     : { ax: r.right  + sx - d + marginDiagonal,             ay: r.top    + sy - arrowSize + d - marginDiagonal },
  316.                    'BottomLeft'   : { ax: r.left   + sx - arrowSize + d - marginDiagonal, ay: r.bottom + sy - d + marginDiagonal },
  317.                    'BottomRight'  : { ax: r.right  + sx - d + marginDiagonal,             ay: r.bottom + sy - d + marginDiagonal }
  318.                }[arrowAlignment] || {
  319.                    ax: r.left + sx - arrowSize - marginStraight, ay: cy - arrowSize / 2
  320.                };
  321.  
  322.                arrowWrap.style.left = cfg.ax + 'px';
  323.                arrowWrap.style.top  = cfg.ay + 'px';
  324.                // Note: animation and rotation are set ONCE outside this function —
  325.                // reassigning them each tick would restart the CSS animation and
  326.                // freeze the arrow on its first frame.
  327.            }
  328.        } catch (e) { /* swallow — next tick will retry */ }
  329.    }
  330.  
  331.    updatePosition();
  332.    let intervalId = setInterval(updatePosition, 100);
  333.  
  334.    // Cleanup — remove all injected DOM nodes after the specified duration
  335.    setTimeout(function() {
  336.        overlay.remove();
  337.        if (arrowWrap) arrowWrap.remove();
  338.    }, durationMs);
  339.  
  340.      return 'ok';
  341. })(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4],
  342.   arguments[5], arguments[6], arguments[7], arguments[8], arguments[9],
  343.   arguments[10], arguments[11]);
  344.  
  345. } catch (e) {
  346.  return 'js-error:' + (e && e.message ? e.message : String(e));
  347. }
  348. "
  349.  
  350.    Dim result As Object
  351.    Try
  352.        result = js.ExecuteScript(script, element,
  353.                              labelText, labelFontSize, labelForeColor,
  354.                              showArrow, arrowAlignment.ToString(), arrowSize, arrowColor,
  355.                              borderColor, fillColor, fillOpacity.ToString(CultureInfo.InvariantCulture),
  356.                              durationMs)
  357.  
  358.    Catch ex As StaleElementReferenceException
  359.        Throw New InvalidOperationException("Element became stale during highlight script execution.", ex)
  360.  
  361.    Catch ex As WebDriverException
  362.        Throw New InvalidOperationException("WebDriver failed to execute the highlight script.", ex)
  363.  
  364.    End Try
  365.  
  366.    Dim status As String = If(result?.ToString(), String.Empty)
  367.  
  368.    Select Case status
  369.        Case "ok"
  370.            Return True
  371.  
  372.        Case "no-element", "zero-rect"
  373.            Return False
  374.  
  375.        Case Else
  376.            If status.StartsWith("js-error:", StringComparison.Ordinal) Then
  377.                Throw New InvalidOperationException($"Highlight javascript failed in the browser: {status.Substring(9)}")
  378.            End If
  379.  
  380.            Throw New InvalidOperationException($"Highlight javascript returned an unexpected status: '{status}'.")
  381.    End Select
  382.  
  383. End Function

Ejemplo de uso:
Código
  1. Dim elemment As IWebElement = driver.FindElement(By.Id("submit-btn"))
  2. HighlightElement(driver, elemment,
  3.                 labelText:="Click here",
  4.                 labelForeColor:="red",
  5.                 showArrow:=True,
  6.                 arrowSize:=24,
  7.                 arrowAlignment:=ContentAlignment.MiddleLeft,
  8.                 arrowColor:="red",
  9.                 borderColor:="red",
  10.                 fillColor:="white",
  11.                 fillOpacity:=0.4,
  12.                 durationMs:=3000)

 4 
 en: Ayer a las 17:57 
Iniciado por Eleкtro - Último mensaje por Eleкtro
El siguiente script, desarrollado en PowerShell (y apoyado en soluciones de IAs), sirve para realizar un diagnóstico específico del estado de seguridad del sistema durante el arranque (boot), verificando múltiples mecanismos críticos de protección en Windows y mostrando su estado de forma clara y estructurada.

Este script está diseñado como una herramienta de auditoría simple y rápida que permite identificar ciertas configuraciones inseguras, protecciones deshabilitadas o mecanismos vulnerables que puedan comprometer la integridad del sistema.





Boot Security Diagnostic.ps1
Código
  1. # Boot Security Diagnostic v1.0 by ElektroStudios
  2.  
  3. $Host.UI.RawUI.WindowTitle = "Boot Security Diagnostic v1.0 by ElektroStudios"
  4.  
  5. # Set window size (Width, Height)
  6. $Host.UI.RawUI.WindowSize = New-Object System.Management.Automation.Host.Size(85, 50)
  7. $Host.UI.RawUI.BufferSize = New-Object System.Management.Automation.Host.Size(150, 300)
  8.  
  9. # Check for Admin Privileges
  10. if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
  11.    Write-Host "ERROR: RUN AS ADMINISTRATOR" -ForegroundColor Red
  12.    pause
  13.    exit
  14. }
  15.  
  16. # --- Helper Functions ---
  17.  
  18. function Write-Separator {
  19.    Write-Host ("=" * 66) -ForegroundColor DarkCyan
  20. }
  21.  
  22. function Write-SectionHeader {
  23.    param([string]$Title)
  24.    Write-Host ""
  25.    Write-Host "[$Title]" -ForegroundColor Yellow
  26.    Write-Host ""
  27. }
  28.  
  29. function Write-Field {
  30.    param(
  31.        [string]$Label,
  32.        [string]$Value,
  33.        [string]$Color = "White"
  34.    )
  35.    $padding = 37 - $Label.Length
  36.    if ($padding -lt 1) { $padding = 1 }
  37.    $spaces = " " * $padding
  38.    Write-Host "  $Label$spaces : " -NoNewline
  39.    Write-Host $Value -ForegroundColor $Color
  40. }
  41.  
  42. # ============================================================
  43. # HEADER
  44. # ============================================================
  45.  
  46. Write-Separator
  47. Write-Host ("BOOT SECURITY DIAGNOSTIC").PadLeft(44).PadRight(66) -ForegroundColor Cyan
  48. Write-Separator
  49.  
  50. # ============================================================
  51. # OPERATING SYSTEM
  52. # ============================================================
  53.  
  54. Write-SectionHeader "OPERATING SYSTEM"
  55. $os = Get-CimInstance Win32_OperatingSystem
  56. Write-Field "Caption" $os.Caption.Trim() "White"
  57. Write-Field "Version" $os.Version.Trim() "White"
  58. try {
  59.    $displayVersion = (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name "DisplayVersion" -ErrorAction SilentlyContinue).DisplayVersion.Trim()
  60.    if ($displayVersion) {
  61.        Write-Field "Display Version" $displayVersion "White"
  62.    }
  63. } catch {}
  64. Write-Field "Architecture" $os.OSArchitecture.Trim() "White"
  65. Write-Field "Boot Device" $os.BootDevice.Trim() "White"
  66. Write-Field "System Device" $os.SystemDevice.Trim() "White"
  67. Write-Field "System Drive" $os.SystemDrive.Trim() "White"
  68. Write-Field "Windows Directory" $os.WindowsDirectory.Trim() "White"
  69. Write-Field "Last Boot Up Time" $os.LastBootUpTime "White"
  70.  
  71. # ============================================================
  72. # CPU
  73. # ============================================================
  74.  
  75. Write-SectionHeader "CPU"
  76. $cpu = Get-CimInstance Win32_Processor
  77. Write-Field "Caption" $cpu.Name.Trim() "White"
  78.  
  79. $brand = "Virtualization"
  80. if ($cpu.Caption -match "AMD") {
  81.    $brand = "Virtualization (AMD-V)"
  82. } elseif ($cpu.Caption -match "Intel") {
  83.    $brand = "Virtualization (Intel VT-X)"
  84. }
  85. if ($cpu.VirtualizationFirmwareEnabled) {
  86.    Write-Field "$($brand)" "ENABLED" "Green"
  87. } else {
  88.    Write-Field "$($brand)" "DISABLED" "Red"
  89. }
  90.  
  91. try {
  92.    if ($cpu.Caption -match "AMD") {
  93.        Write-Field "KVA Shadow (Meltdown Mitigation)" "NOT REQUIRED FOR AMD CPU" "Green"
  94.    } elseif ($cpu.Caption -match "Intel") {
  95.        $kva = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" -Name "FeatureSettingsOverride" -ErrorAction SilentlyContinue
  96.        $kvaShadowDisabled = ($null -ne $kva.FeatureSettingsOverride) -and (($kva.FeatureSettingsOverride -band 0x02) -ne 0)
  97.  
  98.        if ($kvaShadowDisabled) {
  99.            Write-Field "KVA Shadow (Meltdown Mitigation)" "DISABLED (UNPROTECTED)" "Red"
  100.        } else {
  101.            Write-Field "KVA Shadow (Meltdown Mitigation)" "ENABLED (PROTECTED)" "Green"
  102.        }
  103.    }
  104. } catch {
  105.    Write-Field "KVA Shadow" "QUERY FAILED" "Yellow"
  106. }
  107.  
  108. # ============================================================
  109. # BIOS
  110. # ============================================================
  111.  
  112. Write-SectionHeader "BIOS"
  113.  
  114. # Firmware Type (UEFI vs Legacy)
  115. try {
  116.    Add-Type -TypeDefinition @"
  117.        using System;
  118.        using System.Runtime.InteropServices;
  119.        public class FW {
  120.            [DllImport("kernel32.dll", SetLastError=true)]
  121.            public static extern uint GetFirmwareType(ref uint FirmwareType);
  122.        }
  123. "@ -ErrorAction SilentlyContinue
  124.    [uint32]$fwResult = 0
  125.    [FW]::GetFirmwareType([ref]$fwResult) | Out-Null
  126.    switch ($fwResult) {
  127.        1 { Write-Field "Firmware Type" "BIOS (Legacy)" "Yellow" }
  128.        2 { Write-Field "Firmware Type" "UEFI" "Green" }
  129.        default { Write-Field "Firmware Type" "UNKNOWN ($fwResult)" "Yellow" }
  130.    }
  131. } catch {
  132.    Write-Field "Firmware Type" "QUERY FAILED" "Yellow"
  133. }
  134.  
  135. # Secure Boot
  136. try {
  137.    $secureBootState = Confirm-SecureBootUEFI
  138.    if ($secureBootState) {
  139.        Write-Field "Secure Boot" "ENABLED" "Green"
  140.    } else {
  141.        Write-Field "Secure Boot" "DISABLED" "Red"
  142.    }
  143. } catch {
  144.    Write-Field "Secure Boot" "NOT SUPPORTED / LEGACY BIOS" "Red"
  145. }
  146.  
  147. # ============================================================
  148. # DRIVER SIGNATURE ENFORCEMENT (DSE)
  149. # ============================================================
  150.  
  151. Write-SectionHeader "DRIVER SIGNATURE ENFORCEMENT (DSE)"
  152.  
  153. $bcdOutput = ""
  154. try {
  155.    $bcdOutput = bcdedit /enum "{current}" 2>&1 | Out-String
  156. } catch {}
  157.  
  158. # bcdedit testsigning
  159. try {
  160.    if ($bcdOutput -match "testsigning\s+Yes") {
  161.        Write-Field "Test Signing     (Boot Option)" "ENABLED (Test Mode / DSE partial bypass)" "Red"
  162.    } else {
  163.        Write-Field "Test Signing     (Boot Option)" "DISABLED" "Green"
  164.    }
  165.  
  166. } catch {
  167.    Write-Field "Test Signing     (Boot Option)" "bcdedit QUERY FAILED" "Red"
  168. }
  169.  
  170. # bcdedit nointegritychecks
  171. try {
  172.    if (-not ($bcdOutput -match "nointegritychecks\s+Yes")) {
  173.        Write-Field "Integrity Checks (Boot Option)" "ENABLED" "Green"
  174.    } else {
  175.        Write-Field "Integrity Checks (Boot Option)" "DISABLED (DSE full bypass)" "Red"
  176.    }
  177.  
  178. } catch {
  179.    Write-Field "Integrity Checks (Boot Option)" "bcdedit QUERY FAILED" "Red"
  180. }
  181.  
  182. # Live kernel query via NtQuerySystemInformation
  183. $CodeIntegrityDefinition = @"
  184.    using System;
  185.    using System.Runtime.InteropServices;
  186.  
  187.    public class CI {
  188.        [StructLayout(LayoutKind.Sequential)]
  189.        public struct SYSTEM_CODEINTEGRITY_INFORMATION {
  190.            public uint Length;
  191.            public uint CodeIntegrityOptions;
  192.        }
  193.  
  194.        [DllImport("ntdll.dll")]
  195.        public static extern int NtQuerySystemInformation(int SystemInformationClass, ref SYSTEM_CODEINTEGRITY_INFORMATION SystemInformation, uint SystemInformationLength, out uint ReturnLength);
  196.  
  197.        public static uint GetOptions() {
  198.            SYSTEM_CODEINTEGRITY_INFORMATION info = new SYSTEM_CODEINTEGRITY_INFORMATION();
  199.            info.Length = (uint)Marshal.SizeOf(typeof(SYSTEM_CODEINTEGRITY_INFORMATION));
  200.            uint retLen;
  201.            NtQuerySystemInformation(103, ref info, info.Length, out retLen);
  202.            return info.CodeIntegrityOptions;
  203.        }
  204.    }
  205. "@
  206.  
  207. Add-Type -TypeDefinition $CodeIntegrityDefinition -ErrorAction SilentlyContinue
  208.  
  209. # Flag Constants:
  210. # 0x01 = CODE_INTEGRITY_OPTION_ENABLED
  211. # 0x02 = CODE_INTEGRITY_OPTION_TESTSIGNING
  212.  
  213. # NtQuerySystemInformation testsigning
  214. try {
  215.    $options = [CI]::GetOptions()
  216.    $testSigningEnabled = ($options -band 0x02) -ne 0
  217.    if ($testSigningEnabled) {
  218.        Write-Field "Test Signing     (Live System)" "ENABLED (Test Mode / DSE partial bypass)" "Red"
  219.  
  220.    } else {
  221.        Write-Field "Test Signing     (Live System)" "DISABLED" "Green"
  222.    }
  223. } catch {
  224.    Write-Field "Test Signing     (Live System)" "NtQuerySystemInformation QUERY FAILED" "Red"
  225. }
  226.  
  227. # NtQuerySystemInformation nointegritychecks
  228. try {
  229.    $options = [CI]::GetOptions()
  230.    $ciEnabled = ($options -band 0x01) -ne 0
  231.    if ($ciEnabled) {
  232.        Write-Field "Integrity Checks (Live System)" "ENABLED" "Green"
  233.    } else {
  234.        Write-Field "Integrity Checks (Live System)" "DISABLED (DSE full bypass)" "Red"
  235.    }
  236. } catch {
  237.    Write-Field "Integrity Checks (Live System)" "NtQuerySystemInformation QUERY FAILED" "Red"
  238. }
  239.  
  240. # ============================================================
  241. # WINDOWS HYPERVISOR
  242. # ============================================================
  243.  
  244. Write-SectionHeader "WINDOWS HYPERVISOR"
  245.  
  246. # Hypervisor-Enforced Code Integrity (HVCI)
  247. try {
  248.    $hvciReg = (Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" -Name "Enabled" -ErrorAction SilentlyContinue).Enabled
  249.    if ($hvciReg -eq 1) {
  250.        Write-Field "HV-Enforced Code Integrity (HVCI)" "ENABLED" "Green"
  251.    } elseif ($hvciReg -eq 0) {
  252.        Write-Field "HV-Enforced Code Integrity (HVCI)" "DISABLED" "Red"
  253.    } else {
  254.        Write-Field "HV-Enforced Code Integrity (HVCI)" "NOT DETECTED" "Red"
  255.    }
  256. } catch {
  257.    Write-Field "HV-Enforced Code Integrity (HVCI)" "REGISTRY QUERY FAILED" "Red"
  258. }
  259.  
  260. # Virtualization Based Security (VBS)
  261. try {
  262.    $regVbs = (Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard" -Name "EnableVirtualizationBasedSecurity" -ErrorAction SilentlyContinue).EnableVirtualizationBasedSecurity
  263.    if ($regVbs -eq 1) {
  264.        Write-Field "Virtualization Based Security (VBS)" "ENABLED" "Green"
  265.    } elseif ($regVbs -eq 0) {
  266.        Write-Field "Virtualization Based Security (VBS)" "DISABLED" "Red"
  267.    } else {
  268.        Write-Field "Virtualization Based Security (VBS)" "NOT DETECTED" "Red"
  269.    }
  270. } catch {
  271.    Write-Field "Virtualization Based Security (VBS)" "REGISTRY QUERY FAILED" "Red"
  272. }
  273.  
  274. # Credential Guard
  275. try {
  276.    $credGuard = (Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\CredentialGuard" -Name "Enabled" -ErrorAction SilentlyContinue).Enabled
  277.    if ($credGuard -eq 1) {
  278.        Write-Field "Credential Guard" "ENABLED" "Green"
  279.    } elseif ($credGuard -eq 0) {
  280.        Write-Field "Credential Guard" "DISABLED" "Red"
  281.    } else {
  282.        Write-Field "Credential Guard" "NOT DETECTED" "Red"
  283.    }
  284. } catch {
  285.    Write-Field "Credential Guard" "REGISTRY QUERY FAILED" "Red"
  286. }
  287.  
  288. # Device Guard
  289. try {
  290.    $dg = Get-CimInstance -ClassName Win32_DeviceGuard -Namespace "root\Microsoft\Windows\DeviceGuard" -ErrorAction SilentlyContinue
  291.    if ($dg) {
  292.        switch ($dg.VirtualizationBasedSecurityStatus) {
  293.            0 { Write-Field "Device Guard" "DISABLED" "Red" }
  294.            1 { Write-Field "Device Guard" "ENABLED (NOT RUNNING)" "Yellow" }
  295.            2 { Write-Field "Device Guard" "ENABLED AND RUNNING" "Green" }
  296.            default { Write-Field "Device Guard" "UNKNOWN ($($dg.VirtualizationBasedSecurityStatus))" "Red" }
  297.        }
  298.    } else {
  299.        Write-Field "Device Guard" "NOT DETECTED" "Red"
  300.    }
  301. } catch {
  302.    Write-Field "Device Guard" "WMI QUERY FAILED" "Red"
  303. }
  304.  
  305. # ============================================================
  306. # TRUSTED PLATFORM MODULE (TPM)
  307. # ============================================================
  308.  
  309. Write-SectionHeader "TRUSTED PLATFORM MODULE (TPM)"
  310.  
  311. try {
  312.    $tpm = Get-CimInstance -Namespace "root\CIMv2\Security\MicrosoftTpm" -ClassName Win32_Tpm -ErrorAction SilentlyContinue
  313.    if ($tpm) {
  314.        Write-Field "TPM Present" "YES" "Green"
  315.        # Write-Field "TPM Activated" $(if ($tpm.IsActivated_InitialValue) { "YES" } else { "NO" }) $(if ($tpm.IsActivated_InitialValue) { "Green" } else { "Red" })
  316.        Write-Field "TPM Enabled" $(if ($tpm.IsEnabled_InitialValue) { "YES" } else { "NO" }) $(if ($tpm.IsEnabled_InitialValue) { "Green" } else { "Red" })
  317.        Write-Field "TPM Version" $tpm.SpecVersion.Split(',')[0].Trim() "White"
  318.    } else {
  319.        Write-Field "TPM Present" "NOT DETECTED" "Red"
  320.    }
  321. } catch {
  322.    Write-Field "TPM Present" "WMI QUERY FAILED" "Red"
  323. }
  324.  
  325. # ============================================================
  326. # KERNEL DIRECT MEMORY ACCESS (DMA) PROTECTION
  327. # ============================================================
  328.  
  329. Write-SectionHeader "KERNEL DIRECT MEMORY ACCESS (DMA) PROTECTION"
  330.  
  331. # DMA Group Policy
  332. $dmaPolicy = (Get-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Kernel DMA Protection" -Name "ExternalDeviceEnumeration" -ErrorAction SilentlyContinue).ExternalDeviceEnumeration
  333.  
  334. if ($null -ne $dmaPolicy) {
  335.    switch ($dmaPolicy) {
  336.        0 {
  337.            $policyText = "BLOCK ALL"
  338.            $policyColor = "Green"
  339.        }
  340.        1 {
  341.            $policyText = "BLOCK UNTIL USER LOG-IN"
  342.            $policyColor = "Green"
  343.        }
  344.        2 {
  345.            $policyText = "ALLOW ALL"
  346.            $policyColor = "Red"
  347.        }
  348.        default {
  349.            $policyText = "UNKNOWN ($dmaPolicy)"
  350.            $policyColor = "Yellow"
  351.        }
  352.    }
  353.    Write-Field "Kernel DMA Group Policy (GPO)" $policyText $policyColor
  354. } else {
  355.    Write-Field "Kernel DMA Group Policy (GPO)" "NOT DEFINED" "Red"
  356. }
  357.  
  358. # Check if hardware and kernel are actually executing it
  359. try {
  360.    $dg = Get-CimInstance -ClassName Win32_DeviceGuard -Namespace "root\Microsoft\Windows\DeviceGuard" -ErrorAction SilentlyContinue
  361.  
  362.    if ($dg.DMAProtectionInUse) {
  363.        Write-Field "Kernel DMA Protection Service" "RUNNING / ACTIVE" "Green"
  364.    } else {
  365.        # If not running, VT-d / AMD-Vi is likely missing or disabled in BIOS
  366.        Write-Field "Kernel DMA Protection Service" "NOT RUNNING / INACTIVE" "Red"
  367.    }
  368. } catch {
  369.    Write-Field "Kernel DMA Protection Service" "WMI QUERY FAILED" "Red"
  370. }
  371.  
  372. Write-SectionHeader "EARLY LAUNCH ANTI-MALWARE (ELAM)"
  373.  
  374. try {
  375.    $elamDrivers = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\EarlyLaunch" -Name "BackupPath" -ErrorAction SilentlyContinue
  376.    if ($elamDrivers) {
  377.        Write-Field "ELAM Backup Path" $elamDrivers.BackupPath.Trim() "White"
  378.    }
  379. } catch {}
  380.  
  381. try {
  382.    $bootDrivers = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\EarlyLaunch" -ErrorAction SilentlyContinue
  383.    $elamPolicy = (Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\CI" -Name "BootDriverPolicy" -ErrorAction SilentlyContinue).BootDriverPolicy
  384.    switch ($elamPolicy) {
  385.        $null   { Write-Field "Boot Driver Policy" "NOT SET (OS default)" "Yellow" }
  386.        8       { Write-Field "Boot Driver Policy" "GOOD AND UNKNOWN" "Green" }
  387.        1       { Write-Field "Boot Driver Policy" "GOOD ONLY" "Green" }
  388.        3       { Write-Field "Boot Driver Policy" "GOOD AND BAD (permissive)" "Red" }
  389.        7       { Write-Field "Boot Driver Policy" "ALL DRIVERS" "Red" }
  390.        default { Write-Field "Boot Driver Policy" "CUSTOM ($elamPolicy)" "Yellow" }
  391.    }
  392. } catch {
  393.    Write-Field "Boot Driver Policy" "QUERY FAILED" "Red"
  394. }
  395.  
  396. # ============================================================
  397. # LOCAL SECURITY AUTHORITY (LSA) PROTECTION
  398. # ============================================================
  399.  
  400. Write-SectionHeader "LOCAL SECURITY AUTHORITY (LSA) PROTECTION"
  401.  
  402. try {
  403.    $lsa = (Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name "RunAsPPL" -ErrorAction SilentlyContinue).RunAsPPL
  404.    switch ($lsa) {
  405.        1       { Write-Field "Run As Protected Process Light (PPL)" "ENABLED" "Green" }
  406.        2       { Write-Field "Run As Protected Process Light (PPL)" "ENABLED (UEFI Lock)" "Green" }
  407.        0       { Write-Field "Run As Protected Process Light (PPL)" "DISABLED (credential dumping risk)" "Red" }
  408.        $null   { Write-Field "Run As Protected Process Light (PPL)" "NOT CONFIGURED (default = disabled)" "Red" }
  409.        default { Write-Field "Run As Protected Process Light (PPL)" "UNKNOWN ($lsa)" "Yellow" }
  410.    }
  411. } catch {
  412.    Write-Field "Run As Protected Process Light (PPL)" "REGISTRY QUERY FAILED" "Red"
  413. }
  414.  
  415. # ============================================================
  416. # DATA EXECUTION PREVENTION (DEP)
  417. # ============================================================
  418.  
  419. Write-SectionHeader "DATA EXECUTION PREVENTION (DEP)"
  420. try {
  421.    if ($os.DataExecutionPrevention_Available) {
  422.        switch ($os.DataExecutionPrevention_SupportPolicy) {
  423.            0 { Write-Field "DEP Policy" "Always Off (vulnerable)" "Red" }
  424.            1 { Write-Field "DEP Policy" "Always On (maximum protection)" "Green" }
  425.            2 { Write-Field "DEP Policy" "Opt-In (limited protection)" "Yellow" }
  426.            3 { Write-Field "DEP Policy" "Opt-Out (protected with exclusions)" "Green" }
  427.            default { Write-Field "DEP Policy" "UNKNOWN ($($os.DataExecutionPrevention_SupportPolicy))" "Yellow" }
  428.        }
  429.    } else {
  430.        Write-Field "DEP Hardware Support" "NOT SUPPORTED BY CPU" "Red"
  431.    }
  432. } catch {
  433.    Write-Field "DEP Hardware Support" "QUERY FAILED" "Red"
  434. }
  435.  
  436. # ============================================================
  437. # BITLOCKER ENCRYPTION
  438. # ============================================================
  439.  
  440. Write-SectionHeader "BITLOCKER ENCRYPTION"
  441.  
  442. try {
  443.    $volumes = Get-BitLockerVolume -ErrorAction SilentlyContinue
  444.    if ($volumes) {
  445.        foreach ($vol in $volumes) {
  446.            $status = $vol.ProtectionStatus
  447.            $color = if ($status -eq "On") { "Green" } else { "Red" }
  448.            $label = "Volume $($vol.MountPoint)"
  449.            Write-Field $label "$($vol.VolumeStatus) (Protection: $status)" $color
  450.        }
  451.    } else {
  452.        Write-Field "BitLocker" "NO VOLUMES FOUND" "Yellow"
  453.    }
  454. } catch {
  455.    Write-Field "BitLocker" "NOT AVAILABLE / QUERY FAILED" "Red"
  456. }
  457.  
  458. # ============================================================
  459. # FOOTER
  460. # ============================================================
  461.  
  462. Write-Host ""
  463. Write-Separator
  464. Write-Host ("END OF DIAGNOSTIC").PadLeft(44).PadRight(66) -ForegroundColor Cyan
  465. Write-Separator
  466. Write-Host ""
  467. Write-Host "Press any key to exit..."
  468. $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

Nota: Solo he tenido oportunidad de probarlo en una CPU AMD, y con la configuración actual de mi sistema, por lo que no puedo asegurar algún posible error o falso positivo en la información mostrada al usar este script bajo una CPU Intel, aunque en principio no debería.

 5 
 en: Ayer a las 17:20 
Iniciado por El_Andaluz - Último mensaje por El_Andaluz



A esta hora ya ha entrado en vigor el bloqueo ordenado por el presidente de EEUU, Donald Trump, al tráfico marítimo de entrada y salida en los puertos iraníes (previsto para este lunes a partir de las 16.00 horas en la España peninsular) por el estrecho de Ormuz. Trump, en su red social, acaba de amenazar con "eliminar de inmediato" a cualquier buque iraní que se salte el bloqueo que militares estadounidenses han iniciado. "Advertencia: Si cualquiera de estos buques se acerca lo más mínimo a nuestro bloqueo, será eliminado de inmediato, utilizando el mismo sistema de neutralización que empleamos contra los narcotraficantes en embarcaciones en alta mar. Es rápido y brutal". Horas antes, las Fuerzas Armadas iraníes advirtieron de que "la imposición por parte de Estados Unidos de restricciones a la circulación de buques en aguas internacionales es un acto ilegal y equivale a piratería. Si la seguridad de los puertos de la República Islámica de Irán en el golfo Pérsico y el mar de Omán se ve amenazada, ningún puerto en estas aguas estará a salvo", han afirmado. Por su parte, el primer ministro de Israel, Benjamin Netanyahu, ha asegurado este lunes que el alto el fuego entre Irán y Estados Unidos "podría romperse de un momento a otro".




 6 
 en: Ayer a las 17:02 
Iniciado por Ni idea - Último mensaje por Mr.Byte
Hola,
Citar
4. ¿Qué hariais vosotros en este caso?
Primer paso, poner una denuncia del robo a la policía.
Segundo , ver los dispositivos con acceso a la cuenta:

https://support.google.com/accounts/answer/3067630?hl=es

Cerrar los que no son los que uso, comprueba el numero de teléfono o email de rescate sea el vuestro
Citar
¿Cómo es posible que siga teniendo ese acceso después de cambiada la sim?
cambiar contraseña.

Citar
2. ¿Qué puedo hacer para impedir que nadie acceda al perfil de Google desde otros dispositivos (el que usa ahora y en general en el futuro)?

https://support.google.com/accounts/answer/7684753?hl=es&ref_topic=7189123&sjid=5197327122773256968-EU

Citar
¿Qué interés tiene este hombre en tener acceso al perfil de Google? ¿Qué daño puede hacer desde ahí?
No puedo contestarte a la primera, y en la segunda, dependera de sus conocimientos y de lo que encuentre en el movil.

 7 
 en: Ayer a las 15:03 
Iniciado por Ni idea - Último mensaje por Ni idea
Hola, chicos,

no se si aceptais solicitudes de ayuda por parte del publico en general, pero no se a quien recurrir. El sabado 11 de abril le robaron mi movil a mi mujer. Bloqueamos las cuentas y hoy lunes hicimos copia de la sim. En teoría eso inactiva la sim anterior, pero el ladron debe de haber hecho copia o haber accedido a la cuenta Google desde otro dispositivo, porque no para de cambiar la contraseña de Google y abrir sesiones después de que se las cerremos. Hemos instalado Google Authentificator en el movil que tiene la nueva sim, a ver si funciona. También hemos borrado las contraseñas guardadas en el perfil de Google.

Este hombre ya ha solicitado al menos un crédito en uno de estos sitios de créditos rápidos. Por suerte enviaron un email y pudimos verlo desde otro dispositivo y lo estamos luchando.

Me preocupa que tenga tanto interés por mantener abierta una sesión de Google. Mis preguntas son:

1. ¿Qué interés tiene este hombre en tener acceso al perfil de Google? ¿Qué daño puede hacer desde ahí?
2. ¿Qué puedo hacer para impedir que nadie acceda al perfil de Google desde otros dispositivos (el que usa ahora y en general en el futuro)?
3. ¿Cómo es posible que siga teniendo ese acceso después de cambiada la sim?
4. ¿Qué hariais vosotros en este caso?

Muchas gracias,
Lucía

 8 
 en: 12 Abril 2026, 21:35 pm 
Iniciado por PriscillaMorillo - Último mensaje por PriscillaMorillo
Hola! Tengo una cuestionante para mi proyecto web.
¿De qué manera la analítica de datos y el Big Data influyen en la planificación estratégica de las empresas a través de herramientas web?

 9 
 en: 12 Abril 2026, 11:05 am 
Iniciado por El_Andaluz - Último mensaje por El_Andaluz

«Irán no ha aceptado las condiciones de Estados Unidos», ha declarado JD Vance, vicepresidente de Estados Unidos, tras una larga sesión de negociación con representantes del país persa en busca de la paz en Oriente Medio. El punto de máximo desencuentro, según la Casa Blanca, es que Teherán «no renuncia a tener un arma nuclear». Vance, que ya está de regreso desde Islamabad (Pakistán), no ha dado por cerrada la vía del diálogo, pero ahora la incertidumbre planea sobre la frágil tregua de dos semanas acordada entre las dos partes.

Tanto Irán como Estados Unidos están ofreciendo diferentes razones para el fracaso de las conversaciones de paz. Según los medios de comunicación estatales iraníes, «las exigencias» de EE UU frustraron las conversaciones para poner fin a la guerra.

«A pesar de varias iniciativas de la delegación iraní, las demandas irrazonables de la parte estadounidense impidieron el progreso de las negociaciones. Así terminaron las negociaciones», difundió la emisora estatal iraní IRIB en una publicación en Telegram.

Mientras tanto, Estados Unidos asegura que fueron «flexibles» y «complacientes». Vance dijo que el presidente de Estados Unidos, Donald Trump, le pidió que «fuera a Islamabad de buena fe e hiciera su mejor esfuerzo para llegar a un acuerdo. Lo hicimos y, desafortunadamente, no pudimos hacer ningún progreso».

Vance ha agradecido la mediación de Pakistán y ha querido dejar claro que su propuesta era «muy sencilla» y cuáles eran las líneas rojas. Sobre la mesa han estado el bloqueo del estrecho de Ormuz y la extensión del alto el fuego a Líbano, donde Israel continúa atacando, pero el punto de máximo desencuentro ha sido el programa nuclear del país persa.

El incipiente proceso de paz, en una jornada que duró 21 horas, queda en suspenso, aunque Vance ha reconocido que, al menos, ha mantenido un contacto positivo con la delegación iraní, lo que deja una puerta abierta a futuros contactos. Pakistán ha pedido a ambas partes que cumplan su compromiso con el alto el fuego alcanzado el pasado miércoles. «Es imperativo», ha remarcado el ministro de Asuntos Exteriores, Ishaq Dar, en un comunicado tras las conversaciones.

Desde Teherán, el portavoz del ministerio de Asuntos Exteriores iraní ha señalado que «las conversaciones se desarrollaron en un ambiente de desconfianza», y que era «lógico» que no se pudiera llegar a un acuerdo en una sola sesión.





 10 
 en: 12 Abril 2026, 01:20 am 
Iniciado por El_Andaluz - Último mensaje por El_Andaluz


El presidente de Estados Unidos, Donald Trump, advirtió este sábado a China que tendrá "grandes problemas" si se confirman los reportes de que se prepara para enviar armas a Irán.

"Si China hace eso, China va a tener grandes problemas", dijo a la prensa en la Casa Blanca antes de volar hacia Florida.

El líder republicano reaccionó así al ser preguntado por la información publicada por la cadena CNN según la cual los servicios de inteligencia estadounidenses han detectado que China se está preparando para entregar nuevos sistemas de defensa aérea a Irán.

La inteligencia estadounidense también cree que Irán estaría utilizando el alto el fuego temporal vigente como una oportunidad para reabastecer ciertos sistemas de armas con la ayuda de socios como Pekín. Trump tiene previsto viajar en mayo a Pekín para reunirse con su homólogo chino, Xi Jinping.

Estados Unidos e Irán iniciaron este sábado en Islamabad negociaciones para poner fin a la guerra iniciada el pasado 28 de febrero, unas conversaciones en las que participaron el vicepresidente estadounidense, JD Vance, y el presidente del Parlamento iraní, Mohamad Baqer Qalibaf.

Se trata del contacto cara a cara de más alto nivel entre Estados Unidos e Irán desde que ambos países rompieron sus relaciones por la revolución islámica de 1979.




Páginas: [1] 2 3 4 5 6 7 8 9 10
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines