Mais um blog inútil.

Fail

Abril 20, 2009

arvorezinha em x86 2.0 - boot sector

Arquivado em: arvorezinha, assembly, coding, fail — dcoder @ 10:09

Olá sirs,

Para completar a colecção fiz a arvorezinha como boot sector, sem recorrer a chamadas ao sistema ou à BIOS. Assim até podem usar uma BIOS opensource e a arvorezinha continua a funcionar!

Eis o código:

BITS 16
ORG 0x7C00

start:
mov ax, 0xb800
mov es, ax
mov ax, 0x072a
mov bx, 5
mov dx, 1
xor di, di
_loop1:
mov cx, dx
rep stosw
add di, 160
sub di, dx
sub di, dx
inc dx
cmp dx, bx
jbe _loop1

_loop2:
in al,0x60 ; read from keyboard
cmp al, 1 ; is it escape?
jnz _loop2

jmp 0xFFFF:0000 ; reboot ;-)

; pad to 512
times 510-($-$$) db 0
dw 0xAA55 ; magic boot value

Assemblem com o NASM, e guardem o output de 512 bytes no sector 0 de um disco ou disquete ou CD. As últimas instruções antes do padding servem para esperar que o utilizador carregue na tecla ESC; após isto, reinicia.

Output testada no VMWare:

boot

Abril 17, 2009

Dedicação

Arquivado em: drama, fail, lulz, useless — spico @ 16:23

Oi.

Capitão COVIL
Capitão COVIL

Esta é uma dedicatória aos verdadeiros homens da cave : Dcoder e falso.

Abril 13, 2009

Arvorezinha em Ook!

Arquivado em: arvorezinha, coding, fail — madinfo @ 18:28

Aqui fica:

Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook? Ook. Ook! Ook! Ook? Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook! Ook! Ook? Ook! Ook. Ook?
Ook. Ook? Ook! Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook! Ook! Ook? Ook! Ook. Ook?
Ook. Ook? Ook! Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook! Ook! Ook? Ook!
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook.
Ook! Ook! Ook? Ook! Ook. Ook? Ook. Ook? Ook! Ook.

Compilador disponivel aqui: http://search.cpan.org/~jhi/Acme-Ook-0.11/lib/Acme/Ook.pm

Já de si é fail pq é perl…

Chama-se a isto a linguagem dos orangotangos…

orangotango

Olá FALSO

xchat... aquele fail...

Arquivado em: fail, useless — madinfo @ 09:25

Porque raio o XCHAT tem de origem dois tipos de letra para a nicklist e outro para o canal ? Depois dá o que podemos ver na seguinte foto:

snapshot6

Como podem ver tenho duas vezes o nick falso…..

Abril 4, 2009

Oi blol! Apeteceu-me fazer um post...

Arquivado em: fail — sadik @ 19:24

Ora viva! Ando a comer uma gaja toda boa com uma rata incrível! Isto seria o que eu diria se estivesse a falar no mirc, mas como não estou vou falar de outra coisa qualquer.  Pensando melhor era um cozido.

Cagay para vocês. Vou falar do mirc na mesma. Ora então, o mirc é uma coisa muito bonita, pois dá para encontrar pessoas fixes e gajas mais ou menos boas. Isto é o que eu escreveria se estivesse em 1997, mas a verdade é que estamos em 2009 e a realidade é outra.

Hoje em dia só vão para o mirc três tipos de pessoas que eu decidi englobar tudo no mesmo saco e chamar de grupo dos três G’s.  São eles, os Geeks, as Gordas e os Gays. Aqui vai uma pequena descrição de cada um.

GEEKS.

Os geeks nunca saíram do mirc e provavelmente nunca irão sair. Toda a gente sabe que a maioria dos geeks é um bocadinho antisocial e não gosta de sair da cave (Dongs what up?), de maneira que o irc é uma das melhores maneiras de socializar com outras pessoas, sem que seja necessário sair de casa. Além de que os outros geeks não nos julgam por ainda sermos virgens.

GORDAS.

Marine. É Preciso escrever mais? Ai é? Ok. As únicas gajas que se encontram no mirc hoje em dia são gajas assim para o fortezinhas. E há uma explicação perfeitamente razoável para isso. Por volta de 2000 e picos toda a gente começou a bazar do irc e a ir para o msn. E as gordas não foram excepção. O problema com o msn é que era preciso meter uma foto pessoal para as outras pessoas verem com quem estavam a falar. Quando o pessoal via que estava a teclar com uma baleia, assustavam-se e bloqueavam essa pessoa. De maneira que as gordas desistiram de ser rejeitadas e  voltaram para o mirc, para fazer aquilo que fazem melhor, fingir que são boas.

GAYS.

Como toda a gente sabe, ser paneleiro em Portugal não deve ser pêra doce, neste caso, banana doce. Ah Ah. De maneira que os gays acabam por viver uma vida dupla para poder satisfazer a sua necessidade de piroca. De dia são bué machos que comem as gajas todas, e à noite vão para o mirc com o nick PapA_PichaS para ver se engatam algum preto que lhes martele a peida até sair líquido anal.

E pronto, aqui está a minha teoria dos 3 G’s. Espero que tenham gostado. Um grande bem haja! *******

Setembro 2, 2008

midnightBSD

Arquivado em: fail, useless — drune @ 18:49

Bom, estava eu aqui a divagar pela Interweb e pelo IRC, quando o bot IONews do #linuxhelp me dá uma noticia maravilhosa, uma distribuição nova de BSD: MidnightBSD.

Ora o MeiaNoite BSD deve ser algo de extraordinário pensei eu, meia noite e BSD na mesma palavra só pode ser algo admirável no mínimo. Decidi abrir o website do meianoiteBSD pensando que me ia surpreender ainda mais, e claro está, fiquei boqueaberto pois o slogan é “BSD for everyone”. Boa! pensei eu, agora também há um BSD para toda a gente usar no desktop, já estava como imaginam a salivar mais que o cão do Pavlov.

Bom,o site está bem desenhado e pensei eu: “mas será que isto é mesmo virado para o desktop?”. Como calculam as minhas retincências nesta matéria são altas e decidi abrir os screenshots para ver como se parecia. “Algum KDE4 com o compiz e um theme escuro” ..pensei eu.

Bom, não poderia estar mais enganado e aqui teem o meianoiteBSD em todo o seu explandor no desktop:

[imagem perdida]
MeiaNoiteBSD

Abril 27, 2008

Amadores

Arquivado em: coding, drama, fail, useless — dcoder @ 01:10

O FiSH é uma valente seca para se compilar - é um facto. Em particular quando se fala em compilá-lo num SO opensores numa arquitectura não x86. A biblioteca MIRACL que aquilo usa é essencialmente o problema aqui. Portanto a escolha lógica é acabar com esta biblioteca e usar uma ligeiramente mais decente.

Agora, a biblioteca em si não é nada má. Para fins criptográficos provê montes de coisas úteis que seriam feitas à mão de outro modo – números aleatórios seguros, curvas elípticas (e construção de boas curvas - poucas bibliotecas são minimamente úteis neste aspecto), além de possuir hashing (SHA-2) e encriptação (AES) incorporados. No entanto, o processo de compilação é absolutamente deixado ao acaso e a documentação é como deixar o Bear Grylls no deserto sem um hotel por perto.

Obviamente eu não fui o primeiro a ter esta ideia. Nos próprios fórums já foi sugerido múltiplas vezes esta mudança, e aparentemente alguém já a fez. Mas vamos lá olhar para este patch com olhos de ver:

int DH1080_gen(char *priv_key, char *pub_key)
{
…..

+ mpz_t mpz_privkey, mpz_prime, mpz_pubkey, mpz_base;
+ gmp_randstate_t randstate;
// #\#\#\#\#\* RNG START #*#*#*#*#*
time((time_t *)&seed);
+ gmp_randinit_default(randstate);
+ gmp_randseed_ui(randstate, seed);
+ mpz_urandomb(mpz_privkey, randstate, 1080);
+ gmp_randclear(randstate);
seed=0;
// #\#\#\#\#\* RNG END #*#*#*#*#*
….

}

Aparentemente o nosso génio, além de utilizar a função errada (deveria ser mpz_urandomm) para gerar números entre 0 e mpz_prime exclusive (mpz_prime sendo o primo que define o grupo onde estamos a trabalhar e por sua vez define a dificuldade do problema no caso de uma implementação em condições), não verifica se a chave pública criada é 0 ou 1 (o que arruinaria ligeiramente a segurança nesse caso estupidamente remoto). Mas aqui a maior falha é utilizar a data do sistema como seed para a chave privada. Sim, todas as chaves possíveis criadas com este patch estão dependentes de um valor de 32 bits (que na prática pode ser reduzido muito mais – é um timestamp). Parece-me que alguém não faz ideia do que está a fazer (aparentemente uma situação generalizada na indústria da segurança, diga-se de passagem).

Mas enfim, não se pode apenas criticar. Com o intuito de parecer ligeiramente menos hipócrita, coloco aqui a minha própria modificação que utiliza um método ligeiramente mais seguro para a geração de chaves (no código original, era criado e seedado um novo csprng por cada troca – qual a necessidade?). Utilizo a cifra ISAAC para a geração de números aleatórios (não se pode ser muito mais judeu que isto, eh?), e esta é alimentada com 256 bytes do /dev/urandom (caso queiram portar para Windows podem facilmente utilizar a RtlGenRandom) misturados com a SHA-256 do blow.ini e do irssi.conf. É então gerado um número e certificamo-nos que este se encontra no intervalo [2; prime1080-1].

Para a aritmética uso a GMP. Alterei apenas o plugin para irssi, mas quaisquer alterações são facilmente movidas para as outras versões. Deixo o licenciamento para quem não tem mais nada em que pensar.

Download

Nota: Se estiverem a usar Ubuntu e não conseguirem compilar, a culpa não é minha.

Nota2: Se são verdadeiramente paranóicos, estão a utilizar a ferramenta errada. A troca de chaves como é implementada no FiSH (puro Diffie-Hellman) é vulnerável a ataques man-in-the-middle, uma vez que não existe qualquer autenticação; se querem algo minimamente seguro, talvez o SILC não seja um mau começo.

Abril 19, 2008

Já sou homem! II

Arquivado em: fail, openbsd, osx — falso @ 17:56

Estou meio desapontado com o OpenBSD no mac, e portanto tive de vir blogar sobre isso.

1º Não tem Virtual Terminals, ou seja só se tem um terminal na consola.
2º Não ha rato na consola, o wsmoused nem é compilado no macppc.
3º O monitor não se desliga passado um tempo sem mexer no teclado ou no rato (deixei a compilar coisas durante a noite, e quando acordei o monitor continuava ligado).
4º A compilação das coisas leva MUITO mais tempo em comparação com o OSX.
5º ???
6º FAILURE

Abril 17, 2008

Cracking X-Chat -- part ii

Arquivado em: coding, cracking, drama, fail, useless — dcoder @ 23:21

Aparentemente saiu uma nova versão do xcrap, 2.8.7a. Eu reparei nisto e lembrei-me que houve um post do falso ha uns tempos que falava de como crackar opensores. Infelizmente, não tenho muito tempo por isso vou ser sucinto.

O leitor assíduo facilmente vai descompactar o executável (é uma versão antiga do UPX) e encontrar a função de interesse (sub_4018CD).

Aqui encontramos o algoritmo de verificação, que consiste essencialmente em:

Hash = SHA-1(Linha3|Linha4|Linha4)

E = 0x25F86508483EFD

N = 0xB5BA27D856CCBE6B61CFE96A387D8E265A65897510AE91212634A7397432D1B2407604CAFA9DC77EF29A87B86D938748E0C4921D46C3AC4BCE7E00EECDFCF782DBD0D44C46C9057724CCF7DEDF36924E4683721FF55EDC570C4C71927887D67C1B1488A33E0B3F64160701B2390C3B3F278490B22DE9906A65B9DFBDF4E838870EFD5851DC0B2C94E444E0B1D2DAAA5C6060D3976E170BB8692111E26D178871008AE42EE250A856D2354102B57F560420AC9F89D004AF761341764FBEDD194A27AF6F34B9C0E3A48013734C6CBD3C216CFAD9B1F3DFDB76FE8519C78E3E95F3C4B39006111DE983C88D72CD4613D4CB852D36244D7B8D4AB15C740415382735

GoodSignature = 00 01 FF FF … (tem de ter 256 bytes (2048 bit) … FF FF 00 30 21 30 09 06 05 2B 0E 03 02 1A 05 00 04 14 | Hash

if (Linha2 ^ E (mod N) == GoodSignature) return GOOD else return BAD

OK, então temos basicamente uma assinatura digital baseada em RSA com 2048 bits. Não existem exploits óbvias (padding, expoente baixo, …) que se possam aproveitar; portanto, para fazer um keygen temos de alterar a chave pública. Escolham uma e substituam no sítio apropriado (public_key_n). Para gerar uma chave válida, temos então:

void generate_key(void)

{

char LInha1[] = “# Designed and implemented exclusively for the lulz”;

char Linha2[1024];

char Linha3[] = “Some Jew”;

char Linha4[] = “Crap”;

char Linha5[] = “More crap”;

HCRYPTPROV hProv;

HCRYPTHASH hHash;

unsigned char appendage[] = {00, 30, 21, 30, 09, 06, 05, 2B, 0E, 03, 02, 1A, 05, 00, 04, 14};

unsigned char good_signature[256];

unsigned char sha[32];

unsigned long tmp = 20;

mpz_t n, d, c;

memset(Linha2, 0, sizeof(Linha2)*sizeof(Linha2[0]));

CryptAcquireContext(&hProv, 0, 0, 1, 0xF0000000);
CryptCreateHash(hProv, 0x00008004, 0, 0, &hHash);
CryptHashData(hHash, Line3, strlen(Line3), 0);
CryptHashData(hHash, Line4, strlen(Line4), 0);
CryptHashData(hHash, Line5, strlen(Line5), 0);
CryptGetHashParam(hHash, 2, sha, &tmp, 0);
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);

memset(good_signature, 0xFF, 256);

memcpy(good_signature+220, appendage, sizeof(appendage));

memcpy(good_signature+236, sha, 20);

good_signature[0] = 0;

good_signature[1] = 1;

mpz_init_set_str(n, “9AFF449090074D691910719D0B384FDA86FAB987938E74CB6E6A91BE6086A8E11BDBD2EF7C1F3761EEBC3AB171F2FB9A79BD8A3CFBAD54A707F39FB8E804A0F4874447BE66550E9D444C496D251FF2402DC8DBAD7352124633F5CAF43A3971362B4466F28AAB1C2A1E81F36B8EE5E6284DD9645E500083B0B9102D559A57A52F0E831F7B39B630DC9B479E3914F34F33363A2075F372E650B94D230528A998D1613C097D78C1C66AE647E0DCF9590E3CA012C3A26614F851AE520163699044F6E8F71B8EDA7091DFDB4745FE27A806EF56E6B7B7175B7859B1725ACF6A03CC941DFED8773AA02DF350C3C0479744411B7F1CD625F5BF4F76E38DD42AC4901A89”, 16);

mpz_init_set_str(d, “36C70BF3DDBD70026346284E9E40E0B1637DD2FF8506F959772CBCEE7F2613A8697D8B822C6849753541DFAECA891A50C0F515E42F1BC8DFF2F48452BA27D29602E572DC9676512F1631AEF655C8F37C03C9E9E5E532CABE4ABD0E0495FA1556AC484D2F5F6E8AF08F934C80CC8D0369215FA2E5F73C0648509867BE61B766C716D84934F76699FAD81EC04E78E88CCC592D59B183361F35B2F3A0F2FEDC17F94F73831111984E5AB2AFCCC019090E4A48AB6CFE249066EFA6D02A4A9EA8369E60EF45A2CC921AE66C52CA1D273EB0355BAC9FD7598258FF94ED311100E732D22224B3744C3ABBB6BA4995781B8427D2BBF605488AC20E19483C10894283506D”, 16);

mpz_init(c);

mpz_powm(c, c, d, n);

printf("%s\n", Linha1);

gmp_printf("%Zd\n", c);

printf("%s\n", Linha3);

printf("%s\n", Linha4);

printf("%s\n", Linha5);

mpz_clear(n);

mpz_clear(d);

mpz_clear(c);

}

Disclaimer: este código foi feito de cabeça e nem sequer o tentei compilar. Se não funcionar, DESCUBRAM porquê!

Note-se que o autor implementou duas verificações para prevenir a alteração do executável (e assim também, da chave).

Primeira:

UPX0:004081EE loc_4081EE: ; CODE XREF: sub_4081BA+45j
UPX0:004081EE movzx edi, ds:public_key_n[ecx]
UPX0:004081F5 add edi, edx
UPX0:004081F7 shl edi, 1
UPX0:004081F9 inc ecx
UPX0:004081FA cmp ecx, 40h
UPX0:004081FD mov edx, edi
UPX0:004081FF jb short loc_4081EE
UPX0:00408201 cmp edx, 0B3A690A6h
UPX0:00408207 pop edi
UPX0:00408208 jz short loc_40822B

Segunda:

UPX0:00425A7A loc_425A7A: ; CODE XREF: sub_425A14+74j
UPX0:00425A7A movzx edx, byte ptr [eax]
UPX0:00425A7D imul ecx, 1Fh
UPX0:00425A80 add ecx, edx
UPX0:00425A82 dec eax
UPX0:00425A83 cmp eax, offset sub_401000
UPX0:00425A88 jnz short loc_425A7A
UPX0:00425A8A cmp ecx, 1D9AB667h
UPX0:00425A90 jz short locret_425A98

Certifiquem-se que corrigem isto quando alterarem o executável.

Já agora, a IDB comentada.

Um bem haja para todos.

Fevereiro 12, 2008

Dia dos namorados

Arquivado em: fail — mirage @ 15:50

O que mais me chateia nesta época é a substituição parcial do spam aos male enhancers pelo das prendas, que é completamente lulz-less.