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


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


Páginas: [1] 2 3 4 5 6 7 8 9 10
 1 
 en: Hoy a las 19:26 
Iniciado por Tachikomaia - Último mensaje por Tachikomaia
No me gustaba iniciarlas así, me parecía complicar en vano, hasta que recientemente me enteré de que iniciadas así en una función, se borran cuando termina. Es mejor que crearlas normal y luego borrarlas en una línea extra.

Así que me tomé la molestia de modificar un código para que funcione así. Pero falla en ciertos casos. Cuando cambio colores usando botones (el programa que estoy haciendo tiene esa opción), en este para incrementar un color (rojo, verde o azul):
Código
  1. // Usada en botones up de posibles colores de cuadraditos:
  2. function IncrementarColor (nroDeColorPosible, incremento, parte) {
  3. // nroDeColorPosible es qué elemento del array de...
  4. // colores posibles será modificado.
  5. // parte es qué parte del color: Rojo, verde o azul.
  6. var ShoweraModificar = "ShowerDePosibleColor"+nroDeColorPosible;
  7. trace ("ShoweraModificar: "+ShoweraModificar);
  8. var EvaluedShower = eval(ShoweraModificar);
  9. trace ("EvaluedShower: "+EvaluedShower);
  10. if (EvaluedShower != "Ninguno") {
  11. // Para modificar la parte indicada,
  12. // dividir el color en 3 partes:
  13. var Rojo = EvaluedShower.substr(0, 2);
  14. var Verde = EvaluedShower.substr(2, 2);
  15. var Azul = EvaluedShower.substr(4, 2);
  16. trace("Colores captados: "+Rojo+", "+Verde+", "+Azul);
  17. // Obtener la parte a incrementar:
  18. var EvaluedParte = eval(parte);
  19. trace ("EvaluedParte: "+EvaluedParte);
  20. // Convertirla en decimal:
  21. EvaluedParte = ConvertirHexEnDec(EvaluedParte);
  22. trace("Convertirla en decimal: "+EvaluedParte);
  23. // Incrementarla:
  24. EvaluedParte = Math.min(EvaluedParte+incremento, 255);
  25. trace("Incrementarla: "+EvaluedParte);
  26. // Convertirlo en hexadecimal:
  27. EvaluedParte = ConvertirDecEnHex(EvaluedParte);
  28. trace("Convertirla en hexadecimal: "+EvaluedParte);
  29. // Transferirla a la variable origen:
  30. set (parte, EvaluedParte);
  31. trace ("parte: "+parte+": "+EvaluedParte);
  32. // Para que la variable nroDeColorPosible pueda usarse...
  33. // en otras funciones:
  34. _level0.NroDeColorPosible = nroDeColorPosible;
  35. trace ("Variable copiada a lv0: NroDeColorPosible: "+nroDeColorPosible);
  36. trace("Rojo: "+Rojo);
  37. trace("Verde: "+Verde);
  38. trace("Azul: "+Azul);
  39. // Cambiar el color:
  40. ChangePosibleColor();
  41. }
  42. }
  43. function ChangePosibleColor () {
  44. trace("Ejecutando ChangePosibleColor");
  45. trace("Rojo: "+Rojo);
  46. trace("Verde: "+Verde);
  47. trace("Azul: "+Azul);
  48. // etc
  49. }

Ejemplo de salida siendo azul (si mal no recuerdo:
nroDeColorPosible es 0, podría ser otra cosa, no importa aquí mientras el valor se conserve
incremento es 1, idem
parte es "Azul" o 2, no me acuerdo, pero funcionaba):
Citar
ShoweraModificar: ShowerDePosibleColor0
EvaluedShower: 000000
Colores captados: 00, 00, 00
EvaluedParte: 00
Convertirla en decimal: 0
Incrementarla: 1
Convertirla en hexadecimal: 01
parte: Azul: 01
Variable copiada a lv0: NroDeColorPosible: 0
Rojo: 00
Verde: 00
Azul: 01
Ejecutando ChangePosibleColor
Rojo:
Verde:
Azul:
Vean que las variables Rojo, Verde y Azul ¡se pierden! Pero la función IncrementarColor aún no terminó ¿por ejecutar otra función dentro de ella, sus variables se pierden?

Ejemplo más sencillo:
Código
  1. function GenerarTipo1ySumar () {
  2.   var a = random(10);
  3.   var b = random(10);
  4.   Sumar();
  5.   trace("Generados: "+a+", "+b);
  6. }
  7. // Supongamos que tengo generar tipo 2, 3, etc, distintas fomas de generar.
  8. function Sumar () {
  9.   Resultado = a+b;
  10.   trace("Suma: "+Resultado);
  11. }

Iba a preguntar si al hacer Sumar las variables se pierden, pero se me ocurrió una posible explicación: Las variables aún no se borraron, pero están dentro de la función así que para usarlas fuera no se las puede nombrar como si estuvieran en el lv0, no sé cómo habría que llamarlas pero... quizá GenerarTipo1ySumar.a y .b

¿Es así?

¿Entonces me conviene usar var si conviene que la variable se borre luego de la función, pero sólo si no es usada por otra dentro de ella?
Porque hacer referencias como esa que puse GenerarTipo1ySumar.a está un poco raro ¡y no serviría! ahora que me doy cuenta, porque si hay más funciones que usan Sumar entonces a Sumar habría que indicarle desde dónde está siendo llamada para que sepa el nombre que debe usar ¡un lío!

¿Es así?

Respuesta de GPT:
Citar
En ActionScript 1/2 (como en Flash 5), el uso de var define variables con alcance local a la función. Eso significa:

- Las variables declaradas con var existen solo mientras se ejecuta esa función y solo son visibles dentro de esa función.
- Al salir de la función, las variables locales quedan fuera de alcance (son recolectadas más adelante).
- Llamar otra función desde dentro no “borra” las variables locales; simplemente no están en el ámbito de la otra función.

Qué está pasando en tus ejemplos:

1) Caso IncrementarColor / ChangePosibleColor
- Rojo, Verde y Azul se declaran con var dentro de IncrementarColor.
- ChangePosibleColor es otra función, con su propio ámbito. Dentro de ChangePosibleColor, las variables locales de IncrementarColor no son visibles, por eso aparecen vacías en los traces.
- Antes de llamar ChangePosibleColor, sigues viendo los valores correctos porque aún estás dentro de IncrementarColor.

Cómo pasar esos valores correctamente:
- Pásalos como parámetros:
  function ChangePosibleColor(rojo, verde, azul) { trace(rojo, verde, azul); ... }
  y llamas ChangePosibleColor(Rojo, Verde, Azul);

- O almacénalos en un objeto/propiedad accesible (por ejemplo en this o en _level0, aunque usar niveles globales es frágil):
  this.Rojo = Rojo; this.Verde = Verde; this.Azul = Azul;
  y en ChangePosibleColor leer this.Rojo, etc. Asegúrate de qué es this en ese contexto.

- O usa un objeto ColorState para agruparlos y pasarlo completo:
  var color = { r: Rojo, v: Verde, a: Azul };
  ChangePosibleColor(color);

2) Caso GenerarTipo1ySumar / Sumar
- a y b están declaradas con var dentro de GenerarTipo1ySumar, por lo que Sumar no puede verlas. En Sumar, a y b son indefinidas, y Resultado = a + b dará NaN.
- La forma correcta es pasar los operandos como argumentos:
  function Sumar(a, b) {
    var Resultado = a + b;
    trace("Suma: " + Resultado);
    return Resultado;
  }
  function GenerarTipo1ySumar() {
    var a = random(10);
    var b = random(10);
    var res = Sumar(a, b);
    trace("Generados: " + a + ", " + b);
  }

Respondiendo a tus preguntas directas:

- “¿Se pierden las variables locales al llamar otra función?” No. Siguen existiendo en su propio ámbito, pero la otra función no las ve a menos que se las pases (parámetros) o las pongas en un ámbito compartido (propiedad de objeto/global).

- “¿Puedo referirme como GenerarTipo1ySumar.a?” No en AS1/2. Las variables locales no son propiedades del objeto función. No puedes acceder a ellas desde fuera; no existe esa sintaxis para cerrar sobre el stack de la función.

- “¿Conviene usar var?” Sí. Úsalo siempre para variables locales temporales. Para compartir datos entre funciones:
  - Pasa parámetros y devuelve resultados (mejor práctica).
  - O usa propiedades de un objeto contenedor (this, un MovieClip, o un objeto “modelo”).
  - Evita depender de _level0 salvo que sea intencional y controlado.

Notas específicas de Flash 5/AS1:
- eval() y set() funcionan, pero son frágiles. Mejor usa objetos y arrays en lugar de construir nombres de variables como strings.
- Si estás armando nombres como "ShowerDePosibleColor0", considera guardar esos valores en un array: var ShowerDePosibleColor = ["000000", "ffcc00", ...]; y acceder por índice.
- Evita variables globales implícitas (asignar sin var). Pueden chocar nombres y dificultan el mantenimiento.

Refactor breve del primer caso sin eval/set:

- Supón un array de colores hex string:
  var coloresPosibles = ["000000","000000",...];

- Incremento:
  function IncrementarColor(idx, inc, parte) {
    var hex = coloresPosibles[idx]; // "rrggbb"
    var r = hex.substr(0,2);
    var g = hex.substr(2,2);
    var b = hex.substr(4,2);

    var map = { Rojo:"r", Verde:"g", Azul:"b" };
    var key = map[parte]; // "r"/"g"/"b"

    var val = ConvertirHexEnDec((key=="r")?r:(key=="g")?g:b);
    val = Math.min(val + inc, 255);
    var hexVal = ConvertirDecEnHex(val);

    if (key=="r") r = hexVal;
    else if (key=="g") g = hexVal;
    else b = hexVal;

    coloresPosibles[idx] = r+g+b;
    ChangePosibleColor(r, g, b, idx);
  }

  function ChangePosibleColor(r, g, b, idx) {
    trace("Rojo: " + r);
    trace("Verde: " + g);
    trace("Azul: " + b);
    // actualizar UI del índice idx...
  }

Conclusión:
- var no borra variables “antes de tiempo” por llamar otra función; simplemente respeta el alcance local.
- Para que otra función use esos valores, pásalos como parámetros o guárdalos en un lugar compartido conocido. Evita eval/set y variables globales implícitas.

No le veo sentido a pasar parámetros que voy a borrar, prefiero que las variables estén en el lv0 y las borro, así no tengo que andar pasando cosas, que supongo es un gasto extra.

Bue... duda resuelta supongo.

 2 
 en: Hoy a las 18:43 
Iniciado por Tachikomaia - Último mensaje por Tachikomaia
Hazlo por IA, yo he utilizado Copilot:
Por curiosidad y quizá para otro caso (pues este ya se resolvió): ¿Cuales son los pasos a seguir? O sea, yo uso GPT en Poe y Deepseek ¿sirven? ¿les doy el link y lo hacen?

 3 
 en: Hoy a las 17:59 
Iniciado por Kahi - Último mensaje por Danielㅤ
Recupera lo que guardaste en la nube, mírate este vídeo

Hola, justamente el usuario pregunta sobre cómo recuperar archivos multimedia y no archivos remotos (externos es decir en la nube), por lo tanto no tiene copias en la nube.

Kahi, no sé si podrás recuperarlos, pero podrías probar con Disk Diggger, lo que si no utilices ese celular, es decir no descargues nada, ni le pases archivos a ese celular ni saques fotos, nada de uso multimedia porque si lo haces mientras más archivos le guardes menos probabilidades tendrás de recuperar tus archivos ya que se sobre escribe la memoria.


Saludos

 4 
 en: Hoy a las 17:48 
Iniciado por Flamer - Último mensaje por Flamer
Esta bien ese metodo si pudiera ponerte like te pusiera EdePC

 5 
 en: Hoy a las 14:39 
Iniciado por 4aaw - Último mensaje por 4aaw
De acuerdo.

 6 
 en: Hoy a las 11:26 
Iniciado por Kahi - Último mensaje por .xAk.
Recupera lo que guardaste en la nube, mírate este vídeo

 7 
 en: Hoy a las 05:00 
Iniciado por Kahi - Último mensaje por Kahi
Hola buenas noches tengo una pregunta ,restaure mi celular de fabrica y quiero recuperar fotos y videos . Se puede ? Es necesario tener el celular con root? Es un samsung a71 :

 8 
 en: Hoy a las 03:54 
Iniciado por Flamer - Último mensaje por EdePC
Le eché un par de ojos y es un crackme bien enredado, seguramente por estar el delphi, con DeDe se tiene muuuucho más claro, pero x64dbg te pierdes, con OllyDBG puedes buscar los nombres de los eventos y se ven algo más claros, con IDA también se ven algo más claros.

Tan solo aclarar el uso de sbb, en el libro de Caos Reptante se describe brevemente, lo normal es verlo acompañado de un sub, eax, y edx, todo esto se utiliza para restar números mayores a 32bits (4Bytes), si uno conoce las instrucciones mul y div lo entiende un poco mejor porque esas instrucciones usan a edx y eax a la vez.

Al final se llega a la conclusión de:

Siendo una posible contraseña:

123456789123456789
01B69B4B ACD05F15
      x              y

Se tiene que obtener que:

x - 028E18DE = x xor 0796E723
y - B882ECC7 = y xor C88FFFC7

En caso del "Binary Paste" para aplicar la Fuerza Bruta en x64dbg sería así:



Hay que restarle 1 a ese ECX resultante porque se le aumenta +1 en el código independientemente de la comparación correcta

Y pensando en QWORDS que es como es en realidad sería:

Contraseña:
365495262636504647
5128001 40897647
            x

Se tiene que obtener que:

                x xor 0796E723 C88FFFC7 = x - 028E18DE B882ECC7
05128001 40897647 xor 0796E723 C88FFFC7 = 05128001 40897647 - 028E18DE B882ECC7
                      02846722 88068980 = 02846722 88068980


Si, porque la combinación de sub y sbb sirven para restar números mayores a 32bit, como 05128001 40897647 - 028E18DE B882ECC7 no se puede con los registros de 32bit se separa la parte alta en EDX y la parte baja en EAX y se opera:

Código
  1. mov edx, 05128001
  2. mov eax, 40897647
  3.  
  4. sub eax, B882ECC7 ; eax = 88068980 ; Carry Flag = 1
  5. sbb edx, 028E18DE ; edx = 02846723 - Carry Flag = 02846722

Resultado: 02846722 88068980



140897647-
 B882ECC7
 --------
 88068980


Ese 1 lo puse en rojo porque me lo presté para completar la resta, eso activa al Carry Flag para restárselo al siguiente resultado y dar el resultado correcto.

 9 
 en: Hoy a las 01:34 
Iniciado por dpx06 - Último mensaje por Danielㅤ
Hola compañeros!

Yo estoy en el Internet desde el año 2011 aproximadamente, aquí en el foro tengo una cuenta con mi nombre de usuario real pero no recuerdo la contraseña porque esa cuenta la he usado pocas veces, habría que pedirle al brujo que me cambie la contraseña.

Y con ésta cuenta que tengo actualmente estoy desde el 9 de octubre de 2020, vaya que ha pasado el tiempo ya voy a cumplir 5 años.

Mi otra cuenta aquí en el foro es de mucho antes, de agosto de 2013!

Si así es, hay muchos compañeros que ya no se los ve en el foro y otros que hasta hace un tiempo todavía frecuentaban, solo espero que estén bien y se los extraña, siempre andaban ayudando o haciendo sus aportes.


Saludos a todos!!

 10 
 en: Hoy a las 01:02 
Iniciado por 4aaw - Último mensaje por Danielㅤ
Hola,

1). En esos casos hay una opción de Reportar abuso o similar.

2). No, no es posible.


Saludos

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