News - Page 76 - Mente Binária
Lista de instruções Intel e AMD para fácil "parsing"
By Leandro Fróes, in News, February 12, 2018
No final de 2015 o programador Mahdi Safsafi decidiu listar todas as instruções da Intel e da AMD e colocar num repositório no github vários conjuntos de instruções, incluindo SSE5 e 3DNow! Estas estão listadas em formato XML. Segundo o autor a ideia principal é justamente essa, ter um repositório com uma lista de fácil parsing, ou seja, simples de ser lida por um script ou programa.
A documentação é extremamente simples e de fácil entendimento. Foram usadas algumas notações da própria Intel para indicar, por exemplo, se uma instrução suporta certo modo de operação. Exemplo:
V - Supported. I - Not supported. N.E- Indicates an instruction syntax is not encodable in 64-bit mode (it may represent part of a sequence of valid instructions in other modes).
Pode ser que essa notícia soe um pouco estranha pra você, que pode se perguntar: Qual seria a utilidade de uma lista parseável de instruções? Um exemplo onde esta lista pode ser útil é num script que pode analisar estes dados e ti prover informações da propria documentação em um piscar de olhos. Para exemplificar isto fiz um código em Python que simplesmente abre o arquivo XML, lê seus campos e imprime seus valores na tela de uma forma -organizada-. Veja:
import xml.etree.ElementTree as x tree = x.parse('AZ.xml') root = tree.getroot() for child in root.iter('ins'): attr1 = child.attrib.get('x32m', None) attr2 = child.attrib.get('x64m', None) opc = child.attrib.get('openc', None) m = child.find('mnem').text arg = child.find('args').text dsc = child.find('dscrp').text print '32 bits Mode: ' + format(attr1) print '64 bits Mode: ' + format(attr2) print 'Mnemonic: ' + format(m) print 'Args: ' + format (arg) print 'Openc: ' + format(opc) print 'Description: ' + format(dsc) print '----------------------------'
A saída ficaria mais ou menos assim:
... 32 bits Mode:V 64 bits Mode:RVM Mnemonic:VPSRLD Args:ymm1,ymm2,xmm3/m128 Openc:None Description:Shift doublewords in ymm2 right by amount specified in xmm3/m128 while shifting in 0s. ---------------------------- 32 bits Mode:V 64 bits Mode:VMI Mnemonic:VPSRLD Args:ymm1,ymm2,imm8 Openc:None Description:Shift doublewords in ymm2 right by imm8 while shifting in 0s. ---------------------------- 32 bits Mode:V 64 bits Mode:RVM Mnemonic:VPSRLQ Args:ymm1,ymm2,xmm3/m128 Openc:None Description:Shift quadwords in ymm2 right by amount specified in xmm3/m128 while shifting in 0s. ---------------------------- 32 bits Mode:V 64 bits Mode:VMI Mnemonic:VPSRLQ Args:ymm1,ymm2,imm8 Openc:None Description:Shift quadwords in ymm2 right by imm8 while shifting in 0s. ---------------------------- 32 bits Mode:V 64 bits Mode:V Mnemonic:PSUBB Args:mm,mm/m64 Openc:None Description:Subtract packed byte integers in mm/m64 from packed byte integers in mm. ---------------------------- 32 bits Mode:V 64 bits Mode:V Mnemonic:PSUBB Args:xmm1,xmm2/m128 Openc:None Description:Subtract packed byte integers in xmm2/m128 from packed byte integers in xmm1. ---------------------------- 32 bits Mode:V 64 bits Mode:V Mnemonic:PSUBW Args:mm,mm/m64 Openc:None Description:Subtract packed word integers in mm/m64 from packed word integers in mm. ---------------------------- ...
Isso me lembrou uma ferramenta escrita pelo Fernando chamada bashacks(mais especificamente a função bh_asminfo), onde a ideia é a mesma.
Infelizmente o projeto que contém esta lista foi descontinuado agora no fim de 2017, mas o autor já foi rápido e iniciou um novo chamado opcodesDB, que pelo visto suporta JSON. Já pensou no tanto de coisas que poderíamos fazer com estes bancos de dados parseáveis?
By Fernando Mercês, in News, February 2, 2018
Nesta sexta-feira a desenvolvedora de software Hex-Rays atualizou a versão do IDA, seu disassembler. A versão gratuita do IDA não era atualizada desde a versão 5.0, enquanto a versão paga seguiu passando pela 6.0, 6.5, etc até chegar à versão 7.0 atual. Como este software tem um custo alto, esta é uma notícia muito boa para estudantes e entusiastas em engenharia reversa que querem ter um gostinho de como funciona este poderoso analisador estático (ok, sabemos que o IDA também pode depurar, mas sua principal função é disassemblar código ).
O IDA freeware está disponível para Windows, Linux e macOS e pode ser baixado aqui.
Em breve faremos alguns vídeos sobre o uso desse disassembler, mas até lá, você já não tem desculpa pra não baixar e começar a conhecê-lo!
Ferramenta testa reuso de credenciais em websites
By Fernando Mercês, in News, December 11, 2017
Dados os ocorridos recentes sobre vazamento de dados como o caso da Netshoes, resolvi compartilhar mais uma ferramenta, desta vez um programa em Python que recebe um endereço de e-mail como argumento e busca por leaks que o envolvam. Adicionalmente, de posse de alguma senha vazada, é possível testar o reuso de credenciais em diferentes serviços.
O nome do software é Cr3dOv3r, disponibilizado sob a licença livre MIT. Aqui encontrei uma minha de Instagram (que não utilizo), que possui uma senha vazada anteriormente, conforme visto na imagem. Vale a pena conferir seus e-mails aí!
Palestras da REcon 2017 em Montreal disponíveis!
By Fernando Mercês, in News, November 27, 2017
Todas as palestras ministradas na REcon, a maior conferência sobre engenharia reversa do mundo, que aconteceu em Montreal este ano estão disponíveis (slides e vídeos), inclusive no YouTube. Dentre as várias apresentações interessantes está a Crypton Exposing malware deepest secrets, das pesquisadores Julia Karpin e Anna Dorfman da F5. Na palestra elas comentam que a ferramenta reduziu de várias horas (talvez dias) para apenas alguns minutos o trabalho de descriptografar arquivos de configuração de malware como o ZeusVM, Citadel e outros. Além disso, a palestra é muito divertida!
Claro que não pára por aí! Tem gente falando de SGX, ER em hardware, celulares e muito mais! Não perde: https://recon.cx/2017/montreal/slides/
Em tempo, as palestras da REcon são ministradas em Inglês e infelizmente não há legenda disponível.
By Fernando Mercês, in News, November 20, 2017
De olho nos vazamentos de dados
By Fernando Mercês, in News, November 13, 2017
Mais um banco de dados de dados vazados tornou-se público recentemente. Desta vez foi uma invasão ocorrida no site CafeMon, um portal que concentra informações para mulheres que são mães, como uma rede social. De acordo com o projeto Have I Been Pwned, em 2014 2.6 milhões de e-mails e senhas em texto claro foram vazadas do portal.
Apesar de o portal não ser tão famoso no Brasil, aproveitamos a oportunidade para indicar a nossos leitores o uso do serviço gratuito Have I Been Pwned. Nele você pode digitar seus endereços de e-mail e monitorá-los, a fim de ser consultar e ser informado caso eles apareçam em algum vazamento público ou dump colocado na Internet (normalmente em sites como o Pasetbin). Por exemplo, o meu e-mail do GMail já apareceu em dois vazamentos:
O primeiro passo é entrar com minha conta em cada um destes serviços e alterar a senha. Depois clicar em Notify me when I get pwned para que eu receba um e-mail caso meu endereço apareça num novo vazamento. Vale também utilizar serviços como o 1Password, Lastpass ou Dashlane para gerenciar senhas fortes e não utilizar senhas iguais para diferentes serviços pois se eu usasse por exemplo a mesma senha no GMail que utilizo no site da Adobe, conforme imagem, poderia ter tido meu e-mail ownado.
Fica esperto, pois estamos sujeitos à estes vazamentos mesmo (a responsabilidade sobre a segurança desse tipo de dados é das empresas), mas podemos ajudar a evitar maiores problemas com ajuda deste site.
Biblioteca em Python para instrumentação de binários
By Fernando Mercês, in News, November 6, 2017
A QuarksLab liberou recentemente o que chamou de LIEF, uma biblioteca multiplataforma para parsear binários Mach-O, ELF e PE. Funciona de forma similar à nossa libpe, mas liberaram wrapper pra Python, suporte à escrita, etc. Devo dizer que tem muito mais funções.
Segue um exemplo em Python usando a LIEF para extrair informações de um PE com saída similar à do readpe, do toolkit to pev:
import lief pe = lief.parse('churrasco.exe') print(pe) A saída é:
Dos Header ========== Magic: 5a4d Used Bytes In The LastPage: 90 File Size In Pages: 3 Number Of Relocation: 0 Header Size In Paragraphs: 4 Minimum Extra Paragraphs: 0 Maximum Extra Paragraphs: ffff Initial Relative SS: 0 Initial SP: b8 Checksum: 0 Initial IP: 0 Initial Relative CS: 0 Address Of Relocation Table: 40 Overlay Number: 0 OEM id: 0 OEM info: 0 Address Of New Exe Header: e0 Rich Header =========== Key: d089bb0a - ID: 0x9100 Build ID: 0x7809 Count: 1 - ID: 0x8400 Build ID: 0x7809 Count: 41 - ID: 0x1000 Build ID: 0x0000 Count: 100 - ID: 0x7b00 Build ID: 0xc627 Count: 7 - ID: 0x8300 Build ID: 0x7809 Count: 93 - ID: 0x9500 Build ID: 0x7809 Count: 18 - ID: 0x0000 Build ID: 0x0000 Count: 0 Header ====== Signature: 50 45 0 0 Machine: I386 Number Of Sections: 3 Pointer To Symbol Table: 0 Number Of Symbols: 0 Size Of Optional Header: e0 Characteristics: RELOCS_STRIPPED - EXECUTABLE_IMAGE - CHARA_32BIT_MACHINE Time Date Stamp: 4be33f4a ... Tem muita coisa legal na LIEF. Experimenta substituir a linha print(pe) por help(pe) para ver todas as opções do que dá pra fazer com um PE e testa também com os outros formatos. Você vai se surpreender.