Ir para conteúdo
  • Cadastre-se
VictorNeves

O uso da tabela ASCII na ofuscação de palavras

Posts Recomendados

Olá pessoal,

Esse é meu primeiro post no fórum, vim trazer um método de ofuscação de palavras.
O objetivo é contribuição para a comunidade com conhecimento.

Meses atrás houve um malware que ofuscava TODAS as Strings usando os códigos da tabela ASCII, pode parecer simples, mas a forma que ele usou foi bastante interessante.
O método dele deixava bem estressante a reverse. Ele colocou TODAS as strings ofuscadas numa única tripa gigantesca de número.

O método consiste em transformar cada caractere no seu código ASCII e juntar em uma String só.
Para desfazer o processo, voce precisa saber onde cada código referente à cada letra está.
Vamos montar a palavra 'victor', a representação de cada letra é pelos seguintes números:

v 118
i 105
c 99
t 116
o 111
r 114

A ofuscação seria: 11810599116111114
Porém, perceba, alguns caracteres possuem 3 outros 2 casas numéricas. Então na hora de desfazer, voce tem que saber o lugar de CADA caractere, o reverso seria o exemplo de código a seguir (vou fazer de modo genérico, depois voce coloca na sintaxe da linguagem que voce escreve) :

var="11810599116111114"
desofuscado = Char(var.split(0,3))+Char(var.split(4,7))+Char(var.split(7,9))+ <e por ai vai>

Então voce vai catando os números e transformando pra char e formando sua palavra. Método simples, mas quando voce coloca TODAS AS STRINGS do seu código numa variável só, vai ficar uma tripa gigantesca de número e muito chato de fazer o reverse; se é voce quem ofusca, não pode perder a posição de cada caractere, um número a mais ou a menos e voce pode simplesmente mudar uma palavra!

  • Curtir 1
  • Haha 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Interessante. :)

Uma ideia seria, assumindo que os valores ASCII só vão até 127, poderíamos ler a string a cada 3 caracteres, converter pra inteiro e, caso o resultado seja maior que 127, significa que deveríamos ler somente 2 caracteres (2 dígitos já que é string numérica). Eu definitivamente não sei Python, mas:

import sys

s = '11810599116111114'
i=0

while i < len(s):
	v = int(s[i:i+3])

	if v > 127:
		v = int(s[i:i+2])
		i += 2
	else:
		i += 3

	sys.stdout.write(chr(v))

A saída:

$ python str.py
victor

Abraços,

Fernando

Compartilhar este post


Link para o post
Compartilhar em outros sites
11 horas atrás, Fernando Mercês disse:

caso o resultado seja maior que 127, significa que deveríamos ler somente 2 caracteres

BOOOAAAA sacada! hahahaha não tinha pensado nisso!

Compartilhar este post


Link para o post
Compartilhar em outros sites

7797110101105114111333297321091111181051091011101169799971113210011132971141149712132102105991111173298111974632671111051159732100101321131171011093210697321151111021141011173210911710511611132101109321151041011081083211599114105112116326193

 

  • l33t 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, ncaio disse:

7797110101105114111333297321091111181051091011101169799971113210011132971141149712132102105991111173298111974632671111051159732100101321131171011093210697321151111021141011173210911710511611132101109321151041011081083211599114105112116326193

hahahaha, sabe que deu uma ideia de fazer um programa que detecta que tipo de ofuscação tá sendo usada na string - e tenta desofuscar, claro? Será que é útil?

Tipo assim:

ideia.png.8ccb30b6b16413887f7d678d7722ebd3.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pronto, já temos ofuscador e desofuscador! hehe :D

E quando voce vai fazer reverse de um malware que voce encontra isso... dá ate preguiça... mas será que com esse script em python eu consigo desofuscar o resto do malware que caiu na minha mão?? 9_9

Já volto... mhua mhua mhua

Compartilhar este post


Link para o post
Compartilhar em outros sites

Main.java.zip@Fernando Mercês

Lá no final, uma única string com os números...

Aprendi bastante malícia com essa campanha que até hoje se tem muita pouca informação ... sabe-se que atacaram a República da Moldávia, eu chamo essa campanha de 'new order', por conta do primeiro arquivo que peguei deles...

Só peguei a string dele e substituí no seu script.

Editado por VictorNeves

Compartilhar este post


Link para o post
Compartilhar em outros sites
//
//
//
package main

//
//
//
import (
	"fmt"
)

//
//
//
func main() {
	msg := "Maneiro! movimentacao do array ficou boa ..."
	for index := 0; index < len(msg); index++ {
		ascii := int(msg[index])
		fmt.Print(ascii)
	}
	fmt.Println()
}

O-fusca.go hahaha

  • l33t 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×