-
Posts
1,645 -
Joined
-
Last visited
-
Days Won
234
Fernando Mercês last won the day on January 15
Fernando Mercês had the most liked content!
More about me
- GitHub
- Twitter/X
- Website
Recent Profile Visitors
Fernando Mercês's Achievements
497
Reputation
-
Que loucura. Data/hora para o PC nunca é simples. haha Que bom que resolveu! 🙂
-
Nunca vi isso não... o que tive no Windows é problema com a sincronização da hora. Resolvi assim (como administrador no Prompt de Comando): tzutil /s "E. South America Standard Time" w32tm /config /manualpeerlist:pool.ntp.org,0x8 /syncfromflags:MANUAL net stop w32time net start w32time w32tm /resync /rediscover Não sei se vai ajudar no teu caso, mas pode servir para embasar uma busca pela solução. Abraço!
-
Um Debugador ASSEMBLY (NASM) para Iniciante
Fernando Mercês replied to Jorge Luiz Gouveia Sousa's topic in Assembly
gdb ./teste Aí começa. Dá uma busca por "gdb básico" no Google. Tem vários tutoriais e vídeos. Em tempo: removi seu post perguntando se tem alguém para ajudar. Não precisa postar isso tá? O post com a pergunta tá implica que você tá pedindo ajuda. 😉 Abraço. -
Um Debugador ASSEMBLY (NASM) para Iniciante
Fernando Mercês replied to Jorge Luiz Gouveia Sousa's topic in Assembly
Oi Jorge. Pelo NASM não dá, mas o GDB debuga qualquer executável ELF, inclusive programas compilados com NASM. Certamente te atende. 😉 -
Opa, o include com nome do arquivo é necessário sim. Mas depois disso você tem que utilizar a macro, ou seja, “chamá-la”. Em outras palavras, digitar o nome dela. 🙂 O SEGFAULT é porque o programa não chamou a SYS_exit(), mas quando você usar as macros vai parar. 😉 Abraço!
-
Opa, no hello.asm você inclui dois arquivos que definem as macros, mas você não as utiliza. É preciso usá-las digitando seu nome. 😉 Falta também um : depois de MSG_SIZE. Abraço!
-
untilA MiniDebConf acontecerá de 1 a 4 de maio no Centro de Inovação do Jaraguá em Maceió - AL. A MiniDebConf é um evento aberto a todas as pessoas, independente do seu nível de conhecimento sobre Debian. O mais importante será reunir a comunidade para celebrar um dos maiores projeto de Software Livre no mundo, por isso queremos receber desde usuários(as) inexperientes que estão iniciando o seu contato com o Debian até Desenvolvedores(as) oficiais do projeto. Ou seja, estão todos(as) convidados(as)! Mais informações e inscrições: https://maceio.mini.debconf.org/
-
Bom dia! Já viu nosso menteb.in/guia? 🙂
-
Como criar uma função em NASM
Fernando Mercês replied to Jorge Luiz Gouveia Sousa's topic in Assembly
Beleza. Nesse caso, saiba que você vai precisar de uma instrução JMP no final do procedimento para voltar para onde estava. Algo assim: _start: ; código jmp soma depois_da_soma: ; código soma: ; código jmp depois_da_soma Do contrário o fluxo vai para a soma e não volta para onde deveria. Ao invés disso, vai continuar para a próxima instrução depois da última instrução do seu rótulo soma. O mesmo deve ser feito para os outros rótulos. Alternativamente, você pode por uma coisa depois da outra, sem saltos, só para começar (depois você implementa os saltos): _start: soma: ; código int_para_string: ; código imprimir: ; código final: ; código Agora vamos aos problemas nos seus rótulos: Em int_para_string, você não vai usar nenhuma syscall, por isso não tem que ter aquele int 0x80 ali. Em imprimir, você tá usando a syscall write (eax=4). Ela precisa de três parâmetros: O file descriptor (fd) onde você quer escrever, em ebx (no caso como você quer imprimir na tela, ebx precisa ser 1). O endereço do buffer para ser escrito, em ecx. O tamanho do buffer a ser escrito, em edx. Ou seja, antes de chegar na int 0x80 dela, você precisa desses três parâmetros configurados. Logo, você precisa de uma terceira "variável" na seção .data para o resultado, ou pode sobrescrever a sua x ou y. No início do rótulo de imprimir você pode fazer: mov byte [resultado], al mov ebx, resultado A primeira instrução vai pegar o byte que está em AL (a parte baixa de AX, que é a parte baixa de EAX), que conterá o seu 0x36 (6 + '0') e copiar para o buffer resultado (como disse antes, se quiser usar o próprio x ou y, fique à vontade pois nesse momento você não precisará mais deles). A segunda vai pegar o endereço de resultado e por em ebx, que é o que a syscall write precisa. O tamanho do buffer será 1 também, pois você vai imprimir apenas um caractere. Então você precisa por 1 em edx antes de chegar na int 0x80 do imprimir, que vai chamar a write. Depois que isso funcionar a gente segue aumentando o programa com a lógica que você quer, o que acha? 🙂 PS.: Tem um botão para postar código aqui no fórum. No editor, é o botão <>. Fica bem melhor de lermos se você utilizá-lo, e será mais fácil te ajudar. 😉 Abraço. -
Como criar uma função em NASM
Fernando Mercês replied to Jorge Luiz Gouveia Sousa's topic in Assembly
Oi @Jorge Luiz Gouveia Sousa, beleza? Recomendo começar pela função de soma(), que é mais simples que a int_para_string(). Outra coisa, você tá trabalhando em Intel 32-bits e há convenções de chamadas estabelecidas para esta arquitetura. Veja: Para complementar, leia aqui também: https://mentebinaria.gitbook.io/engenharia-reversa/assembly/funcoes-e-pilha No entanto, não vejo problema em você criar a sua própria convenção de chamadas para fins de estudo. No caso, o jeito que você escolheu para passar os argumentos para a função tá sendo via registradores (EAX e EBX no seu exemplo). Depois disso você vai precisar da instrução CALL e no fim da sua função, a instrução RET. Já que você começou assim (passando argumentos via registradores), pode seguir depois você muda para uma convenção mais convencional se quiser. Tenta aí e volta com o que conseguiu que a gente ajuda mais. 😉 Abraço e bons estudos! Muito legal o desafio! -
Conheça as pessoas que concluíram o Do zero Ao Um 2024
Fernando Mercês posted uma notícia in Institutional
É com muita emoção que reporto a conclusão de mais uma turma do projeto Do Zero Ao Um, nosso programa de formação de pessoas negras para a área de segurança da informação. Estamos na edição número três deste projeto e estamos igualmente felizes com o impacto que ele tem gerado em nossa sociedade. Foram quatro meses de muito aprendizado para nós e de muita entrega para os alunos e alunas do programa, que estudaram Introdução à Computação, Matemática, Windows, Inglês Instrumental, Programação, Soft Skills, Redes, Nuvem, Introdução à Segurança, Segurança de Redes e Data Centers, Segurança de Endpoints e Análise de Logs, totalizando 250 horas de estudo. Uma baita jornada, que exigiu um grande comprometimento de todos os envolvidos. Falando nos envolvidos, formamos alunos maravilhosos, homens e mulheres negras que confiaram seu tempo ao nosso cuidado e com quem desenvolvemos relações permanentes de parceria. A equipe foi composta por: 11 docentes Mais de 20 mentores/as Equipe Mente Binária Essa galera super comprometida contribuiu para que as seguintes pessoas concluírem o curso com mais de 70% de aproveitamento: Alex Rangel, de Porto Alegre/RS Amabelle Brena, de Aquiraz/CE Cesar Augusto, de São Paulo/SP Danilo Moura, de Sumaré/SP Davi Santos, de São Gonçalo/RJ Ednilson Calixto, de Pernambuco/PE Gabriela Ferraz, de Aquiraz/CE Gustavo Nunes, de Marabá/PA Italo Alexandre, do Rio de Janeiro/RJ Jamily Gonçalves, de Paulista/PE Kaique Sampaio, do Rio de Janeiro/RJ Leonardo Santos, de Pedras de Fogo/PB Louise Ferreira, de Mesquita/RJ Luã Moura, do Rio de Janeiro/RJ Marcela Apolinario, de Salvador/BA Marcelo Henrique, de Salvador/BA Marcio Ribeiro Dos Santos, de Praia Grande/SP Midian Brandão, de Itanhangá/RJ Natacha Cruz, de São Paulo/SP Patrick Dinganga, de São Paulo/SP Ricardo Barboza, de Vicentina/MS Vanessa Ferraz, de São Paulo/SP Wesley Cristian, de Itapecerica da Serra/SP Yuri Miranda, do Rio de Janeiro/RJ Agora a segurança da informação ganha mais 24 pessoas negras aptas a continuarem sua jornada na área, mas algumas delas precisam do seu apoio também (a maioria não está na área ainda)! Segue nossas sugestões para você fazer parte disso: Fale na sua empresa sobre este programa e sugira que abram vagas de júnior ou trainee para receberem alguns dos nossos alunos e alunas. Se você é responsável por criar as oportunidades na sua empresa, considere receber as pessoas que formamos aqui! São maravilhosas e só precisam de uma oportunidade. Faça um post na sua rede social preferida linkando este texto para aumentar a chance de contatos profissionais que possam oferecer oportunidades. Adicione essas pessoas na sua rede no LinkedIn (links acima, no nome da pessoa). Se permita conhecê-las. 💚 Doe para o projeto do ano que vem. Gostaria de agradecer a todas as pessoas que se envolveram neste processo. Foi muito lindo e muito prazeroso fazer parte disso. E só foi possível graças a você que ajudou, que deu aula, assistiu aula, fez reunião, mentorou, coordenou, abriu sala, deu ingresso para evento, deu livro, doou seu tempo, doou dinheiro, promoveu, enfim, fez sua parte. A Mente Binária é sobre isso mesmo. É sobre dar apoio, dar acesso, ir junto. Não há lugar melhor para estar do que no meio de gente boa e munida de boas intenções. Vamos em frente! E que venham as contratações e o Do Zero Ao Um 2025! 🙌- 2 comments
-
- 12
-
- do zero ao um
- carreira
-
(and 2 more)
Tagged with:
-
Brasil, fim da década de 90. A internet já oferecia muitos riscos aos nossos sistemas com Windows 95, 98 e Millennium Edition (ME), que poderiam ser facilmente invadidos por "hackers" (sempre eles). A maioria dos usuários, com internet discada ou banda larga, tinha um IP público direto no modem do computador, o que de fato os deixaram bastante expostos. Às vezes bastava um pacotinho mal formado para desligar alguém da internet por exemplo, técnica que ficou conhecida como "ping da morte". 😄 Pensando em tornar a internet mais segura, dois desenvolvedores brasileiros, "skymans" e "skull", criaram o Xô BoBus, um software escrito em Visual Basic 6 que monitorava as portas de rede no computador, avisava se alguém tentava conectar e derrubava o possível invasor. O software funcionou bem e se tornou bastante conhecido. Tem inclusiva uma entrada modesta na Wikipédia. O nome do Xô BoBus vem de dois malwares conhecidos da época: Back Orifice (BO) e NetBus. A ideia era espantar estes e outros malwares, intenção que a interjeição "xô" comunica perfeitamente. O Xô BoBus alertava se qualquer processo utilizasse bibliotecas para acesso ao rede ou abrisse portas e quem usava podia indicar um nível de confiança no processo, como mostra a Figura 1. Figura 1 - Xô BoBus detectando o uso da Winsock por parte do próprio Windows Havia muitos outros recursos, mas um dos mais legais era a monitoração "ativa" de portas. O Xô BoBus efetivamente escutava nas portas protegidas. Isso pode ser questionável, mas impedia que programas maliciosos o fizessem e também permitia que o Xô BoBus respondesse a tentativas de ataque (na verdade qualquer pacote enviado para as portas monitoradas). Na figura 2, mando um texto com o netcat a partir do meu sistema principal para uma máquina virtual de Windows 98 SE com o Xô BoBus instalado. O software "segurava" a conexão e mantinha o atacante "preso" nela. Poderia até responder com uma mensagem. Genial. Figura 2 - Xô BoBus parando o "ataque" ❤️ Por admirar o trabalho destes dois, a um tempo atrás eu tentei contato via e-mail com ambos, mas o domínio xobobus.com.br estava fora do ar já. Foi aí que tive a ideia de registrá-lo com o objetivo de manter viva esta memória da internet brasileira. Então baixei o conteúdo do site de 2001 do Wayback Machine, dei uma modernizada no código usando o ChatGPT para reescrever os fontes em HTML5 e pus tudo no ar de novo, com todos os links funcionando, inclusive os de download do programa e atualizações. O site segue o mesmo: xobobus.com.br, com os textos integrais, suporte a TLS e links ajustados. Se você tem contato com um dos desenvolvedores, por favor fale com a gente. Eu adoraria conversar com eles num programa do Papo Binário e claro, transferir o domínio para eles se assim desejarem. Em tempo, tem algum outro projeto brasileiro que você gostaria que não "sumisse" da internet? Conta aí nos comentários. 😉
-
Bom dia! Bem vindo/a! 🙂 Por favor, leia este tópico primeiro: Aí depois é só voltar aqui e expor sua dúvida e código até onde foi que ajudamos! 😉 Abraço!
-
Fiquei travado em 2 exercícios de CTF
Fernando Mercês replied to Ikkipnx's topic in Challenges and CTF
Oi @Ikkipnx. O que você já explorou do site? Abraço! -
Analisando arquivos desconhecidos com o Hiewix
Fernando Mercês posted um artigo in Reverse Engineering
Talvez você conheça o Hiew (abreviação de Hacker's View), um poderoso editor hexadecimal que reconhece formatos de executáveis como PE e ELF e é capaz de editar suas características, disassemblar código em x86 e ARM e muito mais. Se ainda não conhece, comenta aí que num momento oportuno volto para falar mais dele. 😉 Neste artigo apresento o Hiewix, um novo programa feito pelo mesmo desenvolvedor do Hiew, Eugeny Suslikov, mais conhecido por seu nick SEN. Nesta leitura, você vai descobrir: Para que serve o Hiewix e o problema que ele vem resolver. Os poderes e limitações do Hiewix. Se vale a pena ou não comprá-lo. 💸 O Hiewix é para os momentos em que você não conhece a estrutura de determinado arquivo binário. Logo, seu intuito não é servir para editar arquivos PE, ELF ou Mach-O. Na real, a versão atual nem é capaz de modificar arquivos abertos, mas sim de trabalhar para reconhecer, com a sua ajuda, arquivos desconhecidos. Nada melhor que um exemplo para entender o poder do Hiewix. Recomendo acompanhar o artigo baixando a versão demo do Hiewix no site oficial e a ISO do Math Invaders para extrair o GAME.PAK que vamos utilizar como exemplo. Considere um formato de arquivo binários, ou seja, cuja estrutura e conteúdo não sejam facilmente deduzíveis, utilizado num jogo qualquer. O nome do nosso arquivo é GAME.PAK, então vamos chamá-lo de arquivo PAK, mas não conhecemos sua estrutura ainda. A figura 1 mostra a tela do Hiewix v1.10.633 ao abrir o arquivo pela primeira vez. Figura 1 - Tela inicial do Hiewix ao abrir o arquivo GAME.PAK O Hiewix nos dá algumas opções iniciais para carregar o arquivo: Main parser é o parser principal. O padrão é Binary(internal), que não faz nenhuma análise no arquivo. É nossa única opção numa primeira vez. Base address configura o primeiro endereço mostrado na tela do Hiewix para o conteúdo do arquivo. Por exemplo, se você digitar "10" (sem aspas), o primeiro byte do arquivo começará no endereço 0x10 e todos os comandos do Hiewix vão trabalhar a partir deste endereço base. Codesize permite configurar, se o arquivo contiver bytecode, (bytes que representam instruções para a CPU) o tipo de código para 16, 32 ou 64-bits. O Hiewix assume a arquitetura x86. Para arquivos de dados, a opção é Data. Second parser permite carregar um segundo parser além do principal para rodar sobre o arquivo. Mais sobre parsers em breve. Ao clicar em OK com as opções padrão selecionadas somos apresentados a uma tela bem parecida com a de um editor hexadecimal comum, mostrada na figura 2. Figura 2 - arquivo GAME.PAK aberto no Hiewix NOTA: Se ao bater o olho nos bytes deste arquivo você achou esse formato familiar, provavelmente já fez engenharia reversa em jogos antigos ou assistiu a um dos vídeos sobre a engenharia reversa que fiz no jogo Math Invaders (veja a parte 1 e a parte 2). Na parte 1, usei o Kaitai Struct e o Hiew. Já na parte 2, utilizei também o ImHex editor. Na época ainda não tinha Hiewix. 😄 O Hiewix criou um segmento padrão de dados de tamanho 0x15EB759, que no caso é o tamanho total do arquivo (22,984,537 bytes). Este segmento, assim como outros que porventura sejam criados, só fazem sentido na interface do Hiewix e servem para organizar diferentes segmentos de dados ou código que você descubra. Nada no arquivo é alterado com a criação deles. Alías, lembre-se: o Hiewix abre o arquivo com permissão de leitura somente. Uma vez o arquivo aberto, cabe a nós entender sua estrutura. Isso pode ser feito diretamente para formatos simples, mas formatos mais complexos podem exigir a engenharia reversa do executável que abre o arquivo analisado. Conforme formos compreendendo os dados no arquivo, vamos dando comandos no Hiewix que reflitam o que entendemos sobre tais dados. Comandos do Hiewix Os comandos são para você descrever o tipo de dado no qual o cursor se encontra. Por exemplo, por conta da análise deste arquivo PAK que já fiz, sei que os primeiros quatro bytes deste arquivo representam uma DWORD (double word), ou seja, um número de 4 bytes que nos diz quantos arquivos existem neste .PAK (o .PAK é uma espécie de sistema de arquivos rústico implementado num único arquivo que contém vários arquivos). Para descobrir como cheguei a esta conclusão, assista os vídeos de engenharia reversa no Math Invaders. 😉 Se os primeiros quatro bytes são uma DWORD, eu dou um clique no primeiro byte da DWORD (0x56 na figura 3) e clico no pequeno botão de um balãozinho com as lestras dd (de define dword) para produzir o efeito mostrado na figura 3. Figura 3 - Primeira DWORD definida com o Hiewix no GAME.PAK Perceba o efeito: O Hiewix pula uma linha na visualização após o fim da DWORD (ou seja, após o quarto byte) e muda a representação na coluna da direita para "dd 00000056", que indica que ela é uma DWORD e seu valor é 0x56 em little-endian. Ao definir números, é possível ter algum controle sobre sua representação. Por exemplo, posso selecionar os mesmos quatro bytes da minha DWORD e clicar novamente no botão dd para definir um array de um elemento com representação decimal. Dessa forma, o valor é apresentado em decimal na coluna da direita, como mostra a figura 4. Figura 4 - DWORD redefinida como array de um elemento com visualização em decimal A ideia é que você vá descrevendo os conjuntos de bytes do arquivo com os comandos disponíveis no Hiewix, o que me lembra bastante o IDA, da Hex-Rays. Os principais comandos disponíveis no Hiewix estão a seguir (o texto do ícone de cada botão, quando existe, está entre parênteses): Name (ab), define um nome para o byte, que aparecerá na aba Names, mostrada como Names(0) na Figura 2. Code (add), diz que o byte deve ser interpretado como código. Está desabilitado pois estamos num segmento de dados. Byte (db), define um byte. Word (dw), define uma WORD de dois bytes. Dword (dd), define uma DWORD de quatro bytes. Qword (dq), define uma QWORD de oito bytes. Float (df), define o tipo de dados float para números reais. Double (dF), define o tipo de dados double para números reais. Dump, ainda não entendi. 😄 Byteline, define um conjunto de bytes sem interpretação. Asciiz (a), define uma string ASCII. Unicode, define uma string Unicode. Comment line, insere um comentário acima da linha. Comment on line, insere um comentário à direita da linha (na coluna da direita). A figura 5 mostra as três primeiras entradas do arquivo PAK totalmente definidas e com comentários e nomes criados. Figura 5 - Definições dos campos da estrutura do PAK O texto em vermelho descreve o tipo de definição que usei, ou seja, os botões que apertei para definir os dados. Como também usei nomes, a aba Names à esquerda mostra os quatro nomes que defini. A ideia é poder dar um duplo-clique no endereço do nome (coluna address) para que o Hiewix navegue direto para lá. Também é possível marcar pontos como favoritos no arquivo que serão mostrados na aba Bookmarks. Para isso, basta selecionar o byte desejado clicar à esquerda da linha. Com estes poderes, o Hiewix nos permite ter uma visualização muito melhor do conteúdo do arquivo. Algo similar aos Templates no 010 Editor ou às structs do Kaitai Struct. A diferença é que o Hiewix nos permite criar a estrutura interativamente e não só programaticamente. Criando parsers Na versão paga, você até pode salvar o estado atual (com suas definições feitas) para este arquivo específico e depois carregá-lo. No entanto, se uma definição se repete muito (como é o caso das 86 entradas neste arquivo PAK) ou se você precisar abrir outros arquivos com a mesma estrutura, não faria sentido ter que definir todos os campos manualmente. Para estes casos, o Hiewix oferece o recurso de criação de parsers, ou seja, de pequenos programas que irão entender o conteúdo do arquivo para você. O software oferece duas APIs, uma em C e outra em Lua para tal. O pacote da versão paga vem com um exemplo em C++ um pouco difícil de entender e um esqueleto em Lua, sem um exemplos completo. Com alguma luta, consegui escrever um parser em C/C++ e compilá-lo com o Visual Studio 2022. O código basicamente automatiza o que fizemos na mão, mas com algumas ressalvas. A principal função é a ParseFile(), que mostro abaixo: /* * Math Invaders' PAK file parser for Hiewix * Author: mer0x36 * Date: December 2024 * * Compile with: * cl pak.cpp /link /out:pak.hwx32 kernel32.lib Hiewix32.lib /dll /subsystem:windows * * Then copy te pak.hwx32 to Hiewix root folder and load the PAK file * You can download the GAME.PAK file from * https://archive.org/details/MathInvaders (it's in the ISO file) */ #include <fcntl.h> #include <inttypes.h> #include <io.h> #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include <sys/types.h> #include "HiewixExport.h" // API version: 110 #define NAME_LEN 64 // Compile with: // cl pak.cpp /link /out:pak.hwx32 kernel32.lib Hiewix32.lib /dll /subsystem:windows long __stdcall DllMain(void *hModule, unsigned long reason, void *lpReserved) { return 1; } HWX_EXPORT int ApiVersionUsed() { return HWX_API_VERSION; } HWX_EXPORT unsigned long HwxID() { return 0; } HWX_EXPORT const wchar_t *HwxTitle() { return L"Math Invaders PAK"; } HWX_EXPORT unsigned long HwxFlags() { return 0; } // PAK entry struct typedef struct { char name[NAME_LEN]; uint32_t offset; } entry; HWX_EXPORT bool IKnowThisFile(HWX_PREFILE_DATA *p_hwx_prefile_data) { p_hwx_prefile_data->_decode_engine = decode_engine_none; return true; } HWX_EXPORT bool ParseFile(HWX_FILE_DATA *p_hwx_file_data) { uint32_t nentries = 0; __int64 addr = 0; struct _stat st; const int file_index = p_hwx_file_data->_file_index; // Read the first DWORD from the file as it contains its number of entries int fd = ::_wopen(p_hwx_file_data->_filename, _O_RDONLY); if (fd == -1) return false; if ( ::_read(fd, &nentries, sizeof(nentries)) != sizeof(nentries) ) return false; // We'll use st.st_size to get the filesize if (::_fstat(fd, &st) != 0) return false; ::_close(fd); // Adds a data segment for the PAK header const __int64 headerSize = (nentries + 1) * sizeof(entry) + sizeof(uint32_t); HwxFileAddDataSegment(file_index, 0, 0, headerSize, 0); HwxFileSegmentName(file_index, 0, L"PAK_Header"); HwxFileSegmentCollapse(file_index, 0, false); // Adds a data segment for the PAK contents (right after header) HwxFileAddDataSegment(file_index, headerSize, headerSize, st.st_size-headerSize, 0); HwxFileSegmentName(file_index, headerSize, L"PAK_Contents"); HwxFileSegmentCollapse(file_index, headerSize, false); // Add a comment above the first line HwxFileCommentline(file_index, 0, L"PAK file start"); // Set number format to decimal HwxFileMakeDec(file_index); // Define a Dword HwxFileMakeDword(file_index, addr); // Set number format back to hex (default) HwxFileMakeHex(file_index); HwxFileCommentOnline(file_index, addr, L"number of entries"); addr += sizeof(uint32_t); // Loop that defines the entries for (int i=0; i < nentries; i++) { // Define a string, a comment, then advances 16 bytes HwxFileMakeStringAsciiz(file_index, addr, NAME_LEN); HwxFileCommentOnline(file_index, addr, L"file path"); addr += NAME_LEN; // Define a DWORD, a comment, then advances 4 bytes HwxFileMakeDword(file_index, addr); HwxFileCommentOnline(file_index, addr, L"file offset"); addr += sizeof(uint32_t); } return true; } O código completo será disponibilizado em breve. Após compilado, o arquivo é uma DLL com extensão .hwx32 que deve ser colocado no diretório raiz do Hiewix. Dessa forma, ao abrir um novo arquivo, será possível escolher o nosso parser personalizado como mostra a figura 6. Figura 6 - Nosso parser personalizado para escolha ao carregar um novo arquivo O resultado você vê na figura 7. O arquivo é totalmente parseado (sim, um neologismo - e por que não?), dois segmentos são criados e vários comentários feitos. Figura 7 - PAK parseado com nosso parser personalizado Neste parser optei por não criar nomes para o código ficar menor. Ao invés de nomes, criei um segundo segmento, algo que só parece ser possível através da API por enquanto. Já dá para perceber o poder que o Hiewix tem. Imagine que você pode criar parsers para qualquer tipo de arquivo que desejar. Se somar o poder o Kaitai Struct (que emite parsers em C++), fica mais poderoso ainda. No entanto, o Hiewix ainda está em desenvolvimento e é possível que muitas coisas mudem, inclusive na API, então recomendo segurar sua peteca antes de sair por aí criando parsers. Vale a pena comprar? O software me pareceu muito bom, mas há alguns pontos que requerem atenção na minha opinião, embora as coisas possam mudar muito em breve. São eles: Prós Velocidade. O Hiewix é escrito em C/C++ como tudo o que o SEN faz. E tudo acontece muito rápido no software. Isso é algo que eu valorizo muito, especialmente depois da invasão destes apps escritos em JavaScript para desktop que são uma carroça. Há quatro opções para marcar um endereço: nome, comentário acima da linha, comentário à direita da linha e favorito (bookmark). Muito legal essa versatilidade e muito similar ao Hiew, com o comentário acima talvez inspirado no IDA? Possibilidade de rodar um segundo parser, deixando ainda mais versátil. A API também sugere parsers reentrantes, mas não encontrei muita informação a respeito. A criação de tabelas (abas na parte de baixo da janela), que não mostrei aqui, mas é exibida na captura de tela aqui (abas Header, Dir, Sections, etc). Para um software pago, o preço é razoável: 50 dólares (aproximadamente R$ 300,00) por um ano e você renova se quiser as atualizações depois deste período. Para quem trabalha com arquivos desconhecidos com frequência, pode justificar o investimento. Contras Em minha opinião, o software ainda vai amadurecer. Há um pequeno bug na visualização das colunas e não dá para controlar o tamanho da janela inicial do software (basta ir no menu Options e clicar em Save as default), por exemplo. Outros recursos dos quais senti a falta: Criação de novos segmentos através da interface gráfica. Possibilidade de exportar os bytes, como no Hiew. Redefinir uma Dword como decimal pela API como fiz na interface gráfica. Bem, pode ser que haja uma maneira, mas ainda não descobri (basta usar HwxFileMakeDec() e depois voltar para hexadecimal com a HwxFileMakeHex()). Suporte a outras arquiteturas além de x86 para segmentos de código. A API, por enquanto, me pareceu um pouco difícil de usar e não há documentação além de um arquivo de cabeçalho com os protótipos das funções da API. Como todos os outros softwares do SEN, o Hiewix é nativo para Windows, mas consegui rodá-lo no Ubuntu com Wine sem problemas aparentes. Espero que este artigo tenha sido útil para conhecer esta nova ferramenta e/ou como uma introdução no conceito de parsing de arquivos binários. Como sempre, fique junto e lembre-se que você pode apoiar a Mente Binária para que artigos como esse continuem sendo publicados. Um abraço e happy hacking! Atualização em 10/12/2024: O autor do software leu o artigo e entrou em contato explicando alguns dos "contras".-
- 1
-
- engenharia reversa
- ferramentas
-
(and 1 more)
Tagged with: