VictorNeves Postado Novembro 15, 2017 em 19:42 Compartilhar Postado Novembro 15, 2017 em 19:42 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 para o comentário Compartilhar em outros sites More sharing options...
Fernando Mercês Postado Novembro 17, 2017 em 01:59 Compartilhar Postado Novembro 17, 2017 em 01:59 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 para o comentário Compartilhar em outros sites More sharing options...
VictorNeves Postado Novembro 17, 2017 em 13:56 Autor Compartilhar Postado Novembro 17, 2017 em 13:56 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 para o comentário Compartilhar em outros sites More sharing options...
Do Zero Ao Um - Professores ncaio Postado Novembro 17, 2017 em 18:56 Do Zero Ao Um - Professores Compartilhar Postado Novembro 17, 2017 em 18:56 7797110101105114111333297321091111181051091011101169799971113210011132971141149712132102105991111173298111974632671111051159732100101321131171011093210697321151111021141011173210911710511611132101109321151041011081083211599114105112116326193 Link para o comentário Compartilhar em outros sites More sharing options...
Fernando Mercês Postado Novembro 17, 2017 em 20:22 Compartilhar Postado Novembro 17, 2017 em 20:22 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 para o comentário Compartilhar em outros sites More sharing options...
VictorNeves Postado Novembro 17, 2017 em 20:30 Autor Compartilhar Postado Novembro 17, 2017 em 20:30 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 para o comentário Compartilhar em outros sites More sharing options...
VictorNeves Postado Novembro 17, 2017 em 20:35 Autor Compartilhar Postado Novembro 17, 2017 em 20:35 é.... quase.... bati na trave de desofuscar o resto... Link para o comentário Compartilhar em outros sites More sharing options...
Fernando Mercês Postado Novembro 17, 2017 em 20:37 Compartilhar Postado Novembro 17, 2017 em 20:37 Posta aí o que rolou... Se quiser postar o malware (zip com senha "virus") ou a string toda também é bem vindo. =) Link para o comentário Compartilhar em outros sites More sharing options...
VictorNeves Postado Novembro 17, 2017 em 20:41 Autor Compartilhar Postado Novembro 17, 2017 em 20:41 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 para o comentário Compartilhar em outros sites More sharing options...
Do Zero Ao Um - Professores ncaio Postado Novembro 18, 2017 em 18:12 Do Zero Ao Um - Professores Compartilhar Postado Novembro 18, 2017 em 18:12 // // // 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 para o comentário Compartilhar em outros sites More sharing options...
Fernando Mercês Postado Novembro 18, 2017 em 20:22 Compartilhar Postado Novembro 18, 2017 em 20:22 $ echo 'main() { char *s="boa, 06!"; while(*s) printf("%d", *s++); }' | tcc -run - 98111974432485433 Sábado é dia de alegria! Link para o comentário Compartilhar em outros sites More sharing options...
Badger Postado Novembro 18, 2017 em 20:38 Compartilhar Postado Novembro 18, 2017 em 20:38 "my turn".each_byte do | b | print (b) end 10912132116117114110 Ruby time Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados
Arquivado
Este tópico foi arquivado e está fechado para novas respostas.