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


 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


  Mostrar Mensajes
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ... 216
11  Seguridad Informática / Seguridad / Re: Como proteger una cartera Bitcoin en: 19 Noviembre 2020, 01:18
Consérvala como oro en paño; el Bitcoin se está disparando.

Así es, la verdad en momento quería invertir pero también sonaban y siguen sonando muchas noticias de estafas por internet con respecto a comprar bitcoin, muchos sitios hackeados incluso hace 9 años. Me arrepiento de no haberlo hecho, pero ni modo ya pasó.

Saludos!

12  Seguridad Informática / Seguridad / Re: Como proteger una cartera Bitcoin en: 18 Noviembre 2020, 19:13
AlbertoBSD Muy bueno. La billetera 1HQ3Go3ggs8pFnXuHVHRytPCq5fGG8Hbhx no sería tuya?  :silbar:

No ya quisiera si hubiese sido mía la hubiera protegido mejor desde el principio.

Mi cartera es la siguiente: 1H3TAVNZFZfiLUp9o9E93oTVY9WgYZ5knX

Lamentablemente yo me interese en este tema tan solo semana y media antes de que dejaran en ceros la cartera mencionada, no me dio oportunidad de intentar crackearla con mi metodo directo al KEY AES256, es decir omitiendo el KeyDerivation.

He hecho un video explicando los métodos de ataque y mostrando como la edición del nDeriveIterations hace totalmente inviable los métodos por fuerza bruta.


Saludos!
13  Programación / Programación C/C++ / Re: Hacer Ping en codigo C y que cree un txt con los resultados de cada IP en: 18 Noviembre 2020, 12:20
Yo en lo personal nunca delegaba el trabajo a herramientas del sistema y nunca las llamaría por "system(......)" y aunque ese código posiblemente funcione es ineficiente.

Código
  1. void arrancarPing(const char* ip)
  2. {
  3.    char command[255] = {0};
  4.  
  5.    sprintf(command, "ping %s > ping2.txt", ip);
  6.    system(command);
  7. }

Es de lo más ineficiente que existe. Mi recomendación es que no utilices ese código, ya que te cierra la mente a otras posibilidades.

Yo en lo personal dependiendo del sistema operativo buscaría la librería exacta de mi sistema para realizar ping de forma nativa, es decir buscaría como generar paquetes ICMP directamente desde código fuente.

En windows

https://docs.microsoft.com/en-us/windows/win32/api/icmpapi/nf-icmpapi-icmpsendecho

En linux:

https://www.geeksforgeeks.org/ping-in-c/

FreeBSD

https://github.com/freebsd/freebsd/blob/master/sbin/ping/ping.c


Esto te sirve mucho por que aprendes a programar para un sistema u otro y también sirve por que aprenderias como funciona el protocolo ICMP.

Saludos!
14  Programación / Programación C/C++ / Re: Linked List en: 18 Noviembre 2020, 04:52
De que, siempre que tengas problemas con este tipo de estructuras utiliza algun diagrama para validar lo que estás haciendo, ayuda muchísimo.

Saludos!
15  Programación / Programación C/C++ / Re: Linked List en: 18 Noviembre 2020, 04:31
El problema que tienes es el siguiente, imagina que tienes una lista como la que sigue

[1]->[2]->[3]->[4]

Y quieres insertar uno nuevo después de [1] efectivamente después de [1] estas insertando un [5] pero a [5] nunca le dices que el Next es [2] y por lo tanto se pierde el "Link" que tenían y deja de ser linked list...

Espero que con eso veas como solucionarlo.

Los pasos son, guardar el next después de [1] y agregarlo al elemento que acabas de agregar en este caso seria [5]->next = [2]


Saludos!
16  Programación / Programación C/C++ / Re: Linked List en: 18 Noviembre 2020, 04:08
pero los elementos que estaban después ya no los imprime.

Código
  1. void insertAfter(int llave, int dato) {
  2.    struct node *l,*t;
  3.  
Código
  1.     if (start == NULL) { // Primera vez
  2.      start = t;//t en este punto no esta inicializado a nada.
  3.  
17  Programación / Programación C/C++ / Re: Linked List en: 18 Noviembre 2020, 03:48
Pues claro que no lo puedes generar por que esta vacía esa función.

Código
  1. void insertAfter(int llave, int dato) {
  2.  
  3. }

Llevas algo de ese parte ?
18  Seguridad Informática / Seguridad / Como proteger una cartera Bitcoin en: 18 Noviembre 2020, 01:45
Como proteger una cartera Bitcoin

No sabemos qué pasará en el futuro, es decir no sabemos si nos robaran la cartera o la perderemos en algún USB y alguien la encontrara. Tampoco sabemos la cantidad de poder de computo que existira.

Pero además de tener cifrada nuestra cartera con un buen passphrase de más de 40 caracteres, se puede lograr una mejor seguridad, para en el caso de que sea robada sea inviable que por medio de fuerza bruta directo contra el passphrase.

Nuestra Cartera está protegida con el resultado de un hash sha512 derivado N veces a partir de nuestro Passphrase y un salt.

Es decir:

Código:
(key,IV) = PBKDF2_algo("sha512",passphrase+salt,N);

Normalmente el cliente bitcoin-core calcula ese N de tal forma que la Operación en total no lleve más de 1 Segundo

¿Por que? ¿Por que ponérsela fácil a los crackers de wallets?

Se puede editar el código fuente del bitcoin-core de tal forma que cuando nosotros cambiemos el passphrase este utilice un número N tal que N el proceso completo de PBKDF2_algo lleve al menos uno o dos minutos por passphare, es un pequeño precio de espera. Y el resultado será sumamente desalentador para quien se robe o encuentre la cartera.

¿Como hacer esta modificacion?

Si revisamos la versión estable y actual al dia de hoy, el bitcoin core 0.20 el archivo wallet.cpp tiene la solución:

https://github.com/bitcoin/bitcoin/blob/0.20/src/wallet/wallet.cpp En la linea 322 tenemos lo siguiente:

Código
  1. bool CWallet::ChangeWalletPassphrase(const SecureString& strOldWalletPassphrase, const SecureString& strNewWalletPassphrase)
  2. {
  3.    bool fWasLocked = IsLocked();
  4.  
  5.    {
  6.        LOCK(cs_wallet);
  7.        Lock();
  8.  
  9.        CCrypter crypter;
  10.        CKeyingMaterial _vMasterKey;
  11.        for (MasterKeyMap::value_type& pMasterKey : mapMasterKeys)
  12.        {
  13.            if(!crypter.SetKeyFromPassphrase(strOldWalletPassphrase, pMasterKey.second.vchSalt, pMasterKey.second.nDeriveIterations, pMasterKey.second.nDerivationMethod))
  14.                return false;
  15.            if (!crypter.Decrypt(pMasterKey.second.vchCryptedKey, _vMasterKey))
  16.                return false;
  17.            if (Unlock(_vMasterKey))
  18.            {
  19.                int64_t nStartTime = GetTimeMillis();
  20.                crypter.SetKeyFromPassphrase(strNewWalletPassphrase, pMasterKey.second.vchSalt, pMasterKey.second.nDeriveIterations, pMasterKey.second.nDerivationMethod);
  21.                pMasterKey.second.nDeriveIterations = static_cast<unsigned int>(pMasterKey.second.nDeriveIterations * (100 / ((double)(GetTimeMillis() - nStartTime))));
  22.  
  23.                nStartTime = GetTimeMillis();
  24.                crypter.SetKeyFromPassphrase(strNewWalletPassphrase, pMasterKey.second.vchSalt, pMasterKey.second.nDeriveIterations, pMasterKey.second.nDerivationMethod);
  25.                pMasterKey.second.nDeriveIterations = (pMasterKey.second.nDeriveIterations + static_cast<unsigned int>(pMasterKey.second.nDeriveIterations * 100 / ((double)(GetTimeMillis() - nStartTime)))) / 2;
  26.  
  27.                if (pMasterKey.second.nDeriveIterations < 25000)
  28.                    pMasterKey.second.nDeriveIterations = 25000;
  29.  
  30.                WalletLogPrintf("Wallet passphrase changed to an nDeriveIterations of %i\n", pMasterKey.second.nDeriveIterations);
  31.  
  32.                if (!crypter.SetKeyFromPassphrase(strNewWalletPassphrase, pMasterKey.second.vchSalt, pMasterKey.second.nDeriveIterations, pMasterKey.second.nDerivationMethod))
  33.                    return false;
  34.                if (!crypter.Encrypt(_vMasterKey, pMasterKey.second.vchCryptedKey))
  35.                    return false;
  36.                WalletBatch(*database).WriteMasterKey(pMasterKey.first, pMasterKey.second);
  37.                if (fWasLocked)
  38.                    Lock();
  39.                return true;
  40.            }
  41.        }
  42.    }
  43.  
  44.    return false;
  45. }

Y solo tendria que quedar de la siguiente manera:

Código
  1. bool CWallet::ChangeWalletPassphrase(const SecureString& strOldWalletPassphrase, const SecureString& strNewWalletPassphrase)
  2. {
  3.    bool fWasLocked = IsLocked();
  4.  
  5.    {
  6.        LOCK(cs_wallet);
  7.        Lock();
  8.  
  9.        CCrypter crypter;
  10.        CKeyingMaterial _vMasterKey;
  11.        for (MasterKeyMap::value_type& pMasterKey : mapMasterKeys)
  12.        {
  13.            if(!crypter.SetKeyFromPassphrase(strOldWalletPassphrase, pMasterKey.second.vchSalt, pMasterKey.second.nDeriveIterations, pMasterKey.second.nDerivationMethod))
  14.                return false;
  15.            if (!crypter.Decrypt(pMasterKey.second.vchCryptedKey, _vMasterKey))
  16.                return false;
  17.            if (Unlock(_vMasterKey))
  18.            {
  19.                pMasterKey.second.nDeriveIterations = 133707331;
  20.  
  21.                WalletLogPrintf("Wallet passphrase changed to an nDeriveIterations of %i\n", pMasterKey.second.nDeriveIterations);
  22.  
  23.                if (!crypter.SetKeyFromPassphrase(strNewWalletPassphrase, pMasterKey.second.vchSalt, pMasterKey.second.nDeriveIterations, pMasterKey.second.nDerivationMethod))
  24.                    return false;
  25.                if (!crypter.Encrypt(_vMasterKey, pMasterKey.second.vchCryptedKey))
  26.                    return false;
  27.                WalletBatch(*database).WriteMasterKey(pMasterKey.first, pMasterKey.second);
  28.                if (fWasLocked)
  29.                    Lock();
  30.                return true;
  31.            }
  32.        }
  33.    }
  34.  
  35.    return false;
  36. }

Si quitamos todo lo relacionado con el calculo del tiempo y agregamos la linea:

Código
  1. pMasterKey.second.nDeriveIterations = 133707331;

En mi caso con el bitcoin-core oficial recompilado y con un procesador Intel Xeon CPU E3-1271 v3 @ 3.60GHz cambiar el passphrase toma alrededor de un minuto

Saludos!

19  Programación / Programación General / Re: O.S en: 17 Noviembre 2020, 23:33
Personalmente recomiendo:

FreeBSD o Slackware

Son versiones bastante personalizables y pueden quedar muy compactas.

Saludos!
20  Programación / Programación C/C++ / Re: Escribir fichero dejándolo accesible en: 14 Noviembre 2020, 20:45
Depende de como lo maneje el sistema operativo, ahorita mismo acabo de testear este código en windows 10,

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5.  
  6. int main() {
  7. char buffer[200];
  8. FILE *archivo = fopen("archivo.txt","w");
  9. fprintf(archivo,"Log....\n");
  10. fgets(buffer,200,stdin); //Pausa
  11. fclose(archivo);
  12. }
  13.  

Y aparece el archivo en el navegador mientras el programa se sigue ejecutando, pero si lo abro con el bloc de notas apare en blanco, no es si no hasta que terminó el programa y vuelvo a abrir el archivo este ya aparece con el texto "Log..." Pero no me marca error ni me dice que este ocupado antes de finalizar el programa.

Saludos
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ... 216
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines