Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Rekomendowane odpowiedzi

Opublikowano

Założenia:
-Brak struktur
-Zero headerów
-Maksymalnie dwie wywołane funkcje

-Jedna zdeklarowana funkcja

-Zero zdefiniowanych.
-Mindfuck

 

Potwór:
 

#define DWORD unsigned long

int main(int argc, char** argv)
{
    DWORD peb = 0;
    char *base;
    const char *module = "KERNEL32.DLL";
    const char *fname1 = "GetStdHandle";
    DWORD func1;
    const char *fname2 = "WriteConsoleA";
    DWORD func2;
    DWORD *curr;
    DWORD *end;
    DWORD i;
    int written;

#ifdef __GNUC__
    __asm__ __volatile__(
        "movl %%fs:0x30, %0"
        :"=r"(peb)
        );
#else
    __asm
    {
        mov ebx, fs:[0x30]
        mov peb, ebx
    }
#endif
    curr = (DWORD*)(*(DWORD*)((*(DWORD*)(peb + 12)) + 0x4*5));
    end = (DWORD*)(*(DWORD*)((*(DWORD*)(peb + 12)) + 0x4*6));
    do
    {
        char temp = 0;
        DWORD i = 0;
        do
        {
            temp = ((char*)*(curr + 10))[i*2];
            if(temp >= 'a' && temp <= 'z')
                temp -= ' ';

            if(temp != module[i])
                goto next;

            if(!module[i])
                break;
            i++;
        }while(temp != 0);
        base = *(char**)(curr + 0x4);
        break;
next:
        curr = (DWORD*)*curr;
    }while(end != curr);

    if(!base)
        return 1;

#define GetProc(_name, _len, _func)\
    if(len == _len)\
    {\
    for(j = 0; j < _len; j++)\
    if(name[j] != _name[j])\
    goto errf1;\
    _func = (DWORD)base + ((DWORD*)(base + *(DWORD*)((*(DWORD*)(base + *((DWORD*) base + 0xF) + 0x78) + base) + 0x1C)))[((short*)(base + *(DWORD*)((*(DWORD*)(base + *((DWORD*) base + 0xF) + 0x78) + base) + 0x24)))[i]];\
    }

    for(i = 0; i < *(DWORD*)((*(DWORD*)(base + *((DWORD*) base + 0xF) + 0x78) + base) + 0x18); i++)
    {
        char *name = ((char**)(base + *(DWORD*)((*(DWORD*)(base + *((DWORD*) base + 0xF) + 0x78) + base) + 0x20)))[i] + (DWORD)base;
        DWORD len;
        DWORD j;
        for(len = 0; len < 0xFFFF; len++)
            if(name[len] == 0)
                break;
        GetProc(fname1, 12, func1);
        GetProc(fname2, 13, func2);
errf1:        
        continue;
    }
#undef GetProc
    ((int (__stdcall*)(void*, const void *, int, int*, void*))func2)(((void* (__stdcall*)(int))func1)(-11), "Hello World!", 12, &written, 0);

    return 0;
}

Licencja:
"Róbta se, co chceta"

Nie pomagam na PW, od tego macie forum!!!

 

#PHP-things

 

 

08FMpDu.png

 

Opublikowano

Lol :D Ty serio powalony jesteś haha, jeszcze czegoś takiego nie widziałem :P

 

Polecił byś jakiś kurs odnośnie wstawek assemblera ?

Opublikowano

@up, odpal jego kod na Windowsie :)

 

@edit, mój też mogę bez asma zrobić, ale będzie działać tylko na tym samym kernel32.dll(PEB na sztywno).

 

@edit2, jego kod działa na innej zasadzie.

Nie pomagam na PW, od tego macie forum!!!

 

#PHP-things

 

 

08FMpDu.png

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...