VictorNeves Posted November 15, 2017 at 07:42 PM Share Posted November 15, 2017 at 07:42 PM 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! Link to comment Share on other sites More sharing options...
Administrators Fernando Mercês Posted November 17, 2017 at 01:59 AM Administrators Share Posted November 17, 2017 at 01:59 AM 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 Link to comment Share on other sites More sharing options...
VictorNeves Posted November 17, 2017 at 01:56 PM Author Share Posted November 17, 2017 at 01:56 PM 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! Link to comment Share on other sites More sharing options...
Do Zero Ao Um - Instructors ncaio Posted November 17, 2017 at 06:56 PM Do Zero Ao Um - Instructors Share Posted November 17, 2017 at 06:56 PM 7797110101105114111333297321091111181051091011101169799971113210011132971141149712132102105991111173298111974632671111051159732100101321131171011093210697321151111021141011173210911710511611132101109321151041011081083211599114105112116326193 Link to comment Share on other sites More sharing options...
Administrators Fernando Mercês Posted November 17, 2017 at 08:22 PM Administrators Share Posted November 17, 2017 at 08:22 PM 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: Link to comment Share on other sites More sharing options...
VictorNeves Posted November 17, 2017 at 08:30 PM Author Share Posted November 17, 2017 at 08:30 PM Pronto, já temos ofuscador e desofuscador! hehe 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?? Já volto... mhua mhua mhua Link to comment Share on other sites More sharing options...
VictorNeves Posted November 17, 2017 at 08:35 PM Author Share Posted November 17, 2017 at 08:35 PM é.... quase.... bati na trave de desofuscar o resto... Link to comment Share on other sites More sharing options...
Administrators Fernando Mercês Posted November 17, 2017 at 08:37 PM Administrators Share Posted November 17, 2017 at 08:37 PM Posta aí o que rolou... Se quiser postar o malware (zip com senha "virus") ou a string toda também é bem vindo. =) Link to comment Share on other sites More sharing options...
VictorNeves Posted November 17, 2017 at 08:41 PM Author Share Posted November 17, 2017 at 08:41 PM 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. Link to comment Share on other sites More sharing options...
Do Zero Ao Um - Instructors ncaio Posted November 18, 2017 at 06:12 PM Do Zero Ao Um - Instructors Share Posted November 18, 2017 at 06:12 PM // // // 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 Link to comment Share on other sites More sharing options...
Administrators Fernando Mercês Posted November 18, 2017 at 08:22 PM Administrators Share Posted November 18, 2017 at 08:22 PM $ echo 'main() { char *s="boa, 06!"; while(*s) printf("%d", *s++); }' | tcc -run - 98111974432485433 Sábado é dia de alegria! Link to comment Share on other sites More sharing options...
Badger Posted November 18, 2017 at 08:38 PM Share Posted November 18, 2017 at 08:38 PM "my turn".each_byte do | b | print (b) end 10912132116117114110 Ruby time Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.