Del'Arco

The Pixel Company

Archive for the ‘informática’ Category

Criando Cheats: Prelúdio

without comments

Estudo programação à anos e sempre tive maior interesse no que se refere à arte expressa em pixels. Que sou grande fã de jogos eletrônicos (um mid-core gamer, não casual, nem hardcore) não há dúvidas… e essa paixão estende-se além do ato de jogar e apreciar momentos únicos, que apenas orientais extraterresters (leia Miyamoto) conseguem proporcionar.

Senta que lá vem história

Como todo bom gamer, não me contento em socar o último chefe e sair falando na escola (hoje em dia é twiter, né?) “ZEREI/TERMINEI/FECHEI MAIS UM JOGO”. Pq? A mágica está nos detalhes! Os detalhes que muitas vezes não percebemos quando jogamos pela primeira vez. Aquele canto que não serviu pra NADA durante o jogo, mas que estava lá para ser explorado.

smw_special_zone

Qual apaixonado por games que terminou Super Mario World e não fez questão de conseguir os 100%? Ou quis passar todas as fases do “ESPECIAL” que não tinham relação alguma com o final do jogo?

Quem já jogou The Legend Of Zelda: Ocarina Of Time e não quis pegar as 100 gold skultullas mesmo sabendo que os rupees ilimitados (que vc tem direito ao final da quest) não valem o esforço?

Mesmo sentindo ausência da mágica nos jogos atuais, ainda não consigo “aposentar” um jogo logo após terminá-lo.

Atualmente faço questão de TER o video-game para poder jogá-lo (adquiri um Super Nintendo recentemente e já estou cotando um Megadrive), mas é impossível comprar todos os cartuchos, até pq alguns nem são comercializados hj em dia (Atari, Nintendinho etc). Então, como todo gamer que possui um computador e sabe da existência dos emuladores (ZSNES!), baixei muitos jogos e terminei cada um deles.

Antes de continuar, queria deixar claro que não sou a favor da pirataria, apesar não ser completamente contra (tudo é relativo…).

Quem conhece um, sabe que a maior virtude do programador é a curiosidade. É claro que não fiquei apenas no “Load Rom/Save State/Load State” do ZSNES. Com o tempo fui descobrindo cada funcionalidade e o que me chamou a atenção foram os códigos que podiam ser inseridos para modificar a jogabilidade ou algum estado do jogo. Testei centenas de códigos em dezenas de jogos e chegou uma hora que não tinha como não me perguntar: como um código esquisito daquele (na época eu não sabia o que era base hexadecimal) podia fazer tanto “estrago” no jogo? E eu sabia que não podia ser nada projetado/previsto pelos programadores do jogo, pois não eram códigos digitados no controle (como uma sequencia de botões), ou inseridos no menu “cheat”.

Nesa fase, fiquei apenas na curiosidade mesmo, pois o material online sobre o asusnto era escasso e meu acesso à internet, mto raro. Tempos depois, qdo comprei o jogo Diablo (o 1 mesmo) e descobri que era possível jogar com outras pessoas na internet, passei várias madrugadas (contava os minutos antes das 00:00h para poder conectar) jogando com os, como diria o bomba, “amiguinhos virtuais“. Até que um gringo filho de uma borboleta entrou na minha “sala“, zerou todos meus stats e removeu todos os meus itens. Não que eu não tenha chutado o cachorro por isso, mas ao passar o susto (raiva, ódio e outros sentimentos sem nome), fui procurar saber sobre códigos/trapaças para Diablo (o termo cheater era novidade pra mim). Qual não foi minha surpresa ao descobrir que o tal programinha BoBaFeTT’s Diablo Trainer podia editar, não só os stats e itens, como podia acrescentar itens que nem mesmo existiam no jogo. Aquela curiosidade sobre como funcionavam os códigos no emulador ZSENS voltou repentinamente, somada ao incrivel fato de poder adicionar elementos que o jogo não possuia originalmente. Devo ter ficado uns 2 dias sem dormir para poder testar todas as opções e armas.

[OFF] Btw, até hj não sei se desligaram os servidores de Diablo I ou se me baniram da Battle.net mesmo u.u [/OFF]

cheating1

Como nesse tempo eu já havia começado a programar, eu sabia que os stats, pontos de vida e mana estavam armazenados em variáveis e que o cheater, de alguma forma, alterava essas variáveis. Mas também não passou disso, pois muitos conceitos importantes ainda não me eram claros. Como um processo consegue “modificar” a memória de outro?

Então comecei a estudar o comportamento de outros cheaters, como o editor de saves de pokemon para gameboy, ou um executável modificado do jogo freecell que permitia mover qualquer carta para qualquer lugar. Cada um deles funcionando de uma forma diferente.

Aí, veio um amigão da escola e me convenceu de que eu só ia conseguir fazer esse tipo de coisa quando eu programasse fluentemente em Assembly e pudesse fazer qlq coisa em C. O que NÃO é verdade!!!

Depois disso, só voltei a me interessar pelo assunto uns 5 anos depois.
Em 2004 ou 2005 (não lembro) criei copiei e compilei um cheater em Visual Basic 6 para um MMORPG-modinha da época. Como eu apenas modifiquei alguns fontes que peguei na internet, não entendia completamente o que estava acontecendo. Ao ler artigos sobre o assunto e estudar o fonte, entendi que o código simplesmente modificava alguns dados que estavam armazenados na memória utilizada pelo jogo… há! é assim que aquele maldito bobafeet funcionava então!

Passou um tempo, o cheater já estava famoso aqui na minha cidade e muitas lan-houses passaram a usá-lo. Esses “bons jogadores” sempre pediam para adicionar algum feature, tipo que o cheater possa jogar sozinho enquanto ele vê um video educativo no www.***tube.com. Mas tudo bem, moleques de 12 anos não precisam saber a diferença entre cheater e bot ;)
O final infeliz dessa história eu deixo pra outro post.

Com as atualizações constantes do jogo, eu tb precisava atualizar os endereços de memória modificados pelo cheater, então as coisas começaram a fazer mais sentido. Utilizava o ArtMoney pra escanear a memória do jogo e atualizava a lista de endereços, coisa simples. Nesse processo de escanear e procurar novos endereços, comecei a perceber que vários outros locais armazenavam informações úteis para futuras funções do cheater. E com toda a curiosidade que um programador deve ter, fucei em cada canto do jogo para descobrir mais sobre o funcionamento do mesmo.

E meu cheater?

Pra que serviu toda essa lengalenga? Pra deixar claro que não adianta copiar e compilar os códigos postados aqui. Talvez vc consiga fazer um cheater lecalzinho pra algum jogo, mas só isso. Pra aprender, vc PRECISA ter a curiosidade. A curiosidade matou o gato, mas ensinou ele a utilizar mto bem as outras 6 vidas.

Então, no próximo post vou tentar passar o pouco que sei sobre o tipo de cheater que eu considero mais fácil: os que editam a memória.

Written by Leandro Del'Arco

junho 7th, 2010 at 2:35 pm

Info Deku É’Rolla

without comments

Hoje, 16/01/10, resolvi visitar o site Unidev (portal para desenvolvedores de jogos) para ler as notícias, ver projetos e tentar ajudar alguém no forum. Apesar de já estar ciente desde o dia 13 com o post No More Mr Nice Google do Cardoso, resolvi ler a notícia que tratava do cyber ataque contra o Google e a outras dezenas de empresas.

Ao ler a notícia inteira, dei graças a Deus que ela foi copiada do site da Info (abril.com.br, não dou link pra fdp), pois ainda prezo pelo portal que frequento desde o começo da década.

O autor do texto, Maurício Moraes foi muito infeliz em vários trechos. Os próprios leitores do site afirmam, em seus comentários, que o texto é extremamente tendencioso e nada imparcial.

O ataque lançado por crackers da China contra o Google foi fatal.

Foi fatal? Corram para as colinas! Sensacionalismo barato…

Os crackers acessaram pelo menos duas contas do Gmail, ambas mantidas por ativistas chineses que lutam em defesa dos direitos humanos. Os criminosos conseguiram ler o assunto das mensagens. Isso pode ser o suficiente para descobrir muita coisa sigilosa. Ah, não acabou ainda. O Gmail de “dúzias” de contas de ativistas chineses que vivem nos Estados Unidos, na Europa e na China era acessado regularmente por terceiros. Isso é gravíssimo.

Então, vamos raciocinar um pouco, coisa que o senhor Moraes não é capaz. Para um ataque que conseguiu “bagunçar” o google e outras dezenas de empresas decentes (Adobe, por exemplo), vc deve concordar que foram necessários vários experts com equipamentos de ponta ou, no mínimo, muito potentes. Não estou supondo, como o próprio google, que o responsável foi o governo chinês, senão poderia dizer que a mão-de-obra e recursos utilizados para o ataque foram praticamente ilimitados.

Okay, então temos um PUTA TIME COM AK-47’s invadindo uma escolinha e só conseguem levar 2 pirulitos? Isso, os responsáveis conseguiram acessar apenas 2 (sim, DUAS) contas do GMail E de forma RESTRITA, ou seja, só conseguiram ler o assunto das mensagens. Tudo bem que pelo assunto podemos deduzir um milhão de coisas, mas pqp! São apenas DUAS (DUAS!!!) contas em 87364357623423963896. Devo lembrar o senhor Moraes que “pelo menos duas contas” não é a mesma coisa que “apenas duas contas”.

Como a empresa explicou no blog oficial, as outras contas, que eram acessadas regularmente por terceiros, foram alvo de pura imbecilidade dos usuários que baixam o “sua esposa num encontro de casais para swing.src” ou caem em qlq outro tipo de phishing. Qual a culpa da empresa nesses casos? Claro que “é gravíssimo”, Sr. Moraes…

O Sr. Moraes usa chapéu de alumínio para evitar que o governo americano leia seus pensamentos, mas afinal devemos ou não nos preocupar? Acho que o google sempre fez um ótimo trabalho. É a única empresa que cria serviços REALMENTE úteis e que nenhuma outra tem interesse em criar, como o google maps. Também tenta inovar, com o Google Earth, mostrando o relevo no fundo dos oceanos. Tudo isso, disponível para qualquer “moraes” com acesso à internet! DE GRAÇA! É, nunca dei um centavo diretamente para o google… e vc? De acordo com o post no blog oficial, a empresa aprendeu com o ataque e já está trabalhando no problema para que não aconteça novamente. Melhor do que aprender com os erros é saber admití-los. Que outra empresa desse porte diria que teve propriedade intelectual roubada? No máximo um “acessaram uma área restrita da intranet com nenhuma informação relevante”.

Fica a minha opinião sobre o texto do cara ali de cima (que não merecia ter o nome citado mais de uma vez aqui) e sobre a empresa que mais se destacou nos últimos anos, inovou a internet e ainda tem planos para tornar nossa navegação algo muito mais prazeroso.

Written by Leandro Del'Arco

janeiro 16th, 2010 at 3:11 pm

Arquivos escondidos em JPG’s

without comments

Qual a diferença entre essas duas imagens?

mario1

3.17 KB

mario_jpg_rar

76.9 KB

Aparentemente só o tamanho, mas ao abrir a segunda imagem com o WinRAR, vc vai encontrar algo além do italiano bigodudo.

Como isso é possível? Coisa mais simples do mundo:

jgp_plus_rar

Que jogar um monte de bytes (arquivo) no final de outro monte de bytes (outro arquivo) é possível, tudo bem, todo mundo já sabia. O que eu não sabia era que o WinRAR conseguia achar o trecho compactado sem saber exatamente onde ele começa. Com certeza deve existir alguma flag que indica onde fica esse trecho. Okay, deixo a parte nerd do post para outra hora.

Tá, legal… e dái?

Veja bem, isso não serve pra p**** nenhuma, certo? Errado!
A internet é uma terra sem lei, mas algumas pessoas insistem em tentar controlar o que vc faz ou deixa de fazer. Então, alguma mente desocupada teve a, diga-se de passagem, ótima idéia de camuflar conteúdo ilegal em imagens inocentes e hospedar em um desses serviços de armazenagem grátis (como o imageshack.us).

Pode não parecer muita coisa, pois vc baixa seus filmes educativos por torrent, mas com os grandes trackers indo pro saco uma hora a festa acaba (ou fica mais difícil de arrumar convite).

Okay, vc tá dizendo que eu posso baixar Doom 4 camuflado num JPG? É impossível ter um JPG de 10+ GB hospedado, qualquer imbecil vai perceber que não se trata de uma imagem.

Correto, mas e se esses GB’s fossem divididos em pequenas partes de, vamos supor, 2 MB cada… e cada uma dessas partes fosse hospedada como uma imagem diferente? No final, só será necessário “juntar” os pedaços para assistir o novo episódio de House.

É claro que um software gerenciando tudo isso deixaria as coisas mais fáceis, mas não conheço nenhum =/
Por isso comecei um projeto simples (iShare, em C#) que faz o básico:

  • Divide o arquivo-alvo em quantas partes de tamanho Y (especificado pelo usuário) forem necessárias;
  • Adiciona uma imagem random no começo de cada parte;
  • Armazena as imagens em algum serviço online, ou disco virtual;
  • Cria uma lista de links para as imagens que compõem o arquivo-alvo;
  • Baixa as imagens;
  • Remove as imagens, deixando só as partes;
  • Junta” as partes.

Pena que parei com o projeto antes de terminar os itens listados em vermelho. Se houver interesse, posto o source pra quem quiser terminar.

Para quem for utilizar essa técnica, uma dica é utilizar o Wordpress, fiz um teste a um ano e a imagem de 7.5 MB está lá até hoje. Quem quiser testar, baixe essa imagem (clique com o botão direito e em Salvar link…), depois tente abrir com o WinRAR.

Enfim, como faço a gambiarra?

O modo mais simples é:

  • Copie a imagem que vc deseja usar para camuflar o seu RAR para seu C:\
  • Copie seu RAR que será camuflado para seu C:\
  • Escolha um nome para a imagem que será criada contando o RAR (gambiarra.jpg ou gambi.jpg, para os íntimos)
  • Abra o menu Iniciar e clique em Executar e digite “cmd”, sem aspas
  • Clique em Ok e um prompt de comando aparecerá
  • Digite: copy /b c:\<sua_imagem.jpg> + c:\<seu_rar.rar> c:\gambi.jpg

No case, se sua imagem original tem o nome A.JPG e seu RAR tem o nome B.JPG, ficaria: copy /b C:\A.JPG + C:\B.RAR C:|GAMBI.JPG

Para quem programa em C:

#include <stdio.h>

int main(int ac, char ** av)
{
    FILE *jpg, *rar, *out;
    char c;

    jpg = fopen("./arquivo.jpg", "rb");
    rar = fopen("./arquivo.rar", "rb");
    out = fopen("./imagem.jpg",  "wb");

    while(!feof(jpg))
        fputc(fgetc(jpg), out);

    while(!feof(rar))
        fputc(fgetc(rar), out);

    fclose(jpg);
    fclose(rar);
    fclose(out);
}

Ou para quem programa em VB (5 ou 6):


sub main()

Dim f1() As Byte
Dim f2() As Byte

Open ".\arquivo.jpg" For Binary As #1
ReDim f1(LOF(1))
Get #1, , f1
Close #1

Open ".\arquivo.rar" For Binary As #1
ReDim f2(LOF(1))
Get #1, , f2
Close #1

Open ".\imagem.jpg" For Binary As #1
Put #1, , f1
Put #1, , f2
Close #1

Por enquanto, para músicas e ROM’s de Super Nintendo, funciona muito bem ;)

Written by Leandro Del'Arco

outubro 13th, 2009 at 12:21 am