Inquiridor
Como exibir hexadecimal apenas após o EntryPoint

Discussão Geral
-
Olá
Após muito ajuda, consegui um código para encontrar o OP (EntryPoint) de um arquivo.
Uso o código a baixo para exibir TODO o hexadecimal de um arquivo:
Dim bytes As Byte() = File.ReadAllBytes(TextBox1.Text) Dim hex As String() = Array.ConvertAll(bytes, Function(b) b.ToString("X2")) RichTextBox1.Text = String.Join("", hex).Trim.Replace(" ", "")
Como posso exibir o código apenas a partir do entrypoint, limitando por tamanho? Ex.: 50 caracteres (ou mais) após o entrypoint?
Desde já agradeço.
Todas as Respostas
-
Utilize BinaryReader para apontar ao offset descrito no entry point conforme:
br.BaseStream.Seek(Endereco_EntryPoint, SeekOrigin.Begin)
Leia os bytes em um buffer conforme:
Dim Buffer As String Buffer = Encoding.UTF8.GetString(br.ReadBytes(50))
-
Olá
E como uso o BinaryReader? Ta me dando erro
"O processo não pode acessar o arquivo 'C:\xxxx' porque ele está sendo usado por outro processo.".
Ficou:
Using br As BinaryReader = New BinaryReader(File.Open(TextBox1.Text, FileMode.Open)) br.BaseStream.Seek(EntryPoint1, SeekOrigin.Begin) Dim Buffer As String Buffer = Encoding.UTF8.GetString(br.ReadBytes(50)) RichTextBox1.Text = Buffer.Trim.Replace(" ", "") End Using
- Editado Eliseu5 quinta-feira, 10 de setembro de 2015 18:05
-
-
-
-
Você deve usar notação hexadecimal conforme &H0000641A no VB.NET, "0000641A" é interpretado como string.
Complementando o outro post sobre Entry Point que você encerrou sem meu retorno?!?!
No caso do UPX, você pode calcular o Entry Point utilizando a fórmula:
Variável 1 = AddressOfEntryPoint da estrutura IMAGE_OPTIONAL_HEADER(código que postei no outro post)
Variável 2 = VirtualAddress da estrutura IMAGE_SECTION_HEADER da seção UPX1
Variável 3 = PointerToRawData da estrutura IMAGE_SECTION_HEADER da seção UPX1
Endereço Entry Point = (Variável 1 - Variável 2) + Variável 3
Nos outros packers(não parei para analisar) não vai fugir muito desta regra, pois criam suas próprias seções e a única lógica que o "interpretador de PE do Windows" possui para executar o código inicial seria com este algoritmo, pois tudo se baseia nas características da seção, caso possuir a flag IMAGE_SCN_CNT_CODE indica que se trata de código para execução.- Editado André Renato Furtado sábado, 12 de setembro de 2015 03:53
-
Olá Maniaxe
(1). Entendii :) ... mas e como passo " Buffer = Encoding.UTF8.GetString(br.ReadBytes(50))" para RichTextBox? Tentei: " RichTextBox1.Text = Buffer" mas não aparece nada.
(2). Vou usar o método para encontrar o EntryPoint onde o arquivo será carregado (OpenRead), depois carrego o hexadecimal (BinaryReader), então ele pode dar erro dizendo que o arquivo está em uso. Não posso usar o BinaryReader como somente leitura ou sei lá para evitar este erro?
(3). E quando ao OEP também agradeço, vou dar uma estudada.
- Editado Eliseu5 domingo, 13 de setembro de 2015 21:21
-