Jump to content
VictorNeves

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

Recommended Posts

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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other sites

7797110101105114111333297321091111181051091011101169799971113210011132971141149712132102105991111173298111974632671111051159732100101321131171011093210697321151111021141011173210911710511611132101109321151041011081083211599114105112116326193

 

  • l33t 1

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Edited by VictorNeves

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...