Página 1 de 1

Quebra Cabeça.... mas não para os Ninjas do Fórum....

Enviado: 12 Fev 2008 11:52
por fladimir
Olá pessoal, td bem... seguinte estou com uma dúvida cruel de qual a maneira melhor e mais prática para o seguinte problema:

Tem algumas bases de dados de um sistema antigo q tenho q importar e elas estão criptografadas, e aparentemente não é com nenhuma função de criptografia do clipper ou xHarbour e sim um Própria desenvolvida pelo antigo desenvolvedor... até ai tudo bem já descobri a lógica, pois tenho acesso ao sistema rodando e no sistema por exemplo, no cadastro de Produtos suponhamos o produto.................: ABCDEFGHIJKLMNOPQRSTVXZ
fica da seguinte maneira...............: ÑBäD¹F+H9JLN^P+RØT=V#Zº ª í

ou por exemplo se mudarmos para: AAAAAAAAAAAAAAAAAAAAAAA
fica da seguinte maneira...............: ÑAñA+A¦A¦A©A+A¥A¢A+A¦A¦Aº ª í

O q pude concluir é q ele Criptografa um Caracter e pula o próximo e ele termina o tamanho do campo com criptografia para o q não preencheu restante tipo 24 caracteres não preencheu o tamanho do campo q era 30, outro detalhe q observei q ele criptografa cada caracter, mesmo sendo o mesmo no caso AAAA, cada posiçao criptografada de uma forma, não sendo o mesmo, por exemplo:

Ñ = A
ñ = A
+ = A
¦ = A
¦ = A
© = A
+ = A
¥ = A
¢ = A
+ = A
¦ = A
¦ = A

O q pensei foi o seguinte montar uma tabela de correspondência para cada posição, já q disponho do acesso ao programa (não os fontes) tenho como cadastrar AAAAAAA BBBBB CCCC %%%% $$$$ e verificar as correspondências, e em cima disto checar e trocar... seria isto ? ou alguém teria uma idéia mais prática ?

Grato

Fladimir


:)Pos

Enviado: 12 Fev 2008 17:54
por Pablo César
Tem que descobrir qual é a lógica utilizada. Seja você insirindo registros pelo programa antigo, começando apenas com uma letra do "A" ao "Z" do "0" ao "9" depois fazendo inclusão de duas e comparar até ter uma lógica. E senão utilize-se da engenharia reversa (utilize o valkyrie) e veja como compos a função. Acho que abrir o programa que não possue fontes só para dar uma olhadinha não faz mal a ninguém... (tudo dependerá do seu senso de ética e da utilidade que você dará tal procedimento).

Enviado: 12 Fev 2008 19:10
por gvc
Se é uma cripto simples, pegue o nome de alguns produtos e veja os valores ASC de cada letra.
Se tiver algum tipo de seqüência, vc logo verá pelos números.

Ex: A -> asc 65

65 + <deslocamento> + <posição do caracter>

deslocamento - número utilizado para mudar a posição inicial da tabela.
posição do caracter - Pos dentro do campo.

Boa sorte. Espero ter ajudado.

Enviado: 12 Fev 2008 19:19
por Pablo César
É isso mesmo ! A posição do caracter parece influenciar mais o valor do caracter a ser convertido, basta saber qual é o conceito e valor aplicados.

Enviado: 12 Fev 2008 21:23
por fladimir
Entendi as dicas... agradeço

Uma idéia q tive é a seguinte:

STRTRAN(substr(aNomeDBF->Campo,1,1),"Ñ","A")

E assim por diante mas iria ficar muito extenso pq para cada Caracter teria q ser feito uma correspondência e tb além disso para cada posição, q pelo q percebi são criptografadas as posições Ímpares:

Exemplo imaginem o nome ABACAXI COM CALDA

Código: Selecionar todos

   ?  B  ?  C  ?  X  ?      ?  O  ?     ?  A  ?  D  ? 
   _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _
 
   A  B A  C  A X  I       C O M     C  A  L  D  A
Pensei em fazer uma Função q Analisasse cada posição Criptografada e analisasse através da Função STRTRAN() lembrando q para Posição Nº 1 utilizasse uma tabela de correspondência... para Posição 3 outra tabela...

Não sei se consegui passar a idéia... o q vcs acham... só no meu ponto de vista fica muito complicado pq imaginem um campo de 40 caracteres teria pelo menos 20 caracteres criptografados, ou seja, 20 tabelas de correspondências diferentes, lembrando da postagem inicial q apesar de ser o mesmo caracter, muda-se o tipo de símbolo correspondente.

Grato,

Fladimir

Enviado: 12 Fev 2008 21:47
por Pablo César
Não seria complicado se você utilizasse MATRIZ tridimencional com a quantidade de elementos conforme o abecedário. Mas de todas formas você precisaria descobrir todas as equivalências de cada tabela (neste caso até 20, segundo sua teoria).

Enviado: 18 Fev 2008 22:45
por vagucs
se o outro sistema está em clipper, porque nao descompila e traz a rotina de cirptografia original e usa ela?

Enviado: 19 Fev 2008 00:08
por fladimir
Essa eh uma ideia q coloquei em pratica atraves do DC.EXE de sua autoria Vagner... mas no PRG gerado gera muitas funçoes q nao tem o nome somente tipo assim: FUNC_625, olhei muitas delas rapidamente mas ateh agora nao identifiquei a função responsavel pela Criptografia...

Editei o Executavel atraves de um editor Hexadecimal e verifiquei q o nome da função de criptografia eh DecrypV1()....,

Efetuei pesquisas no PRG gerado pelo DC do Vagner mas não encontrei esta função, depois pesquisei por funçoes q tivessem no nome tipo Crypt, mas não encontrei... somente duas funções distribuidas no meio do código chamadas Uncrypt, mas pelo q analisei nao tem nada ver... alguem tem algum método de análise, ou palavras chaves, pq pesquisei tb tipo STRTRAN... CHR... mas pelo q olhei nada q levasse a rotina responsavel pela criptografia....

Vagner, se a Função DecrypV1() responsável pela criptografia estiver em uma lib externa, qdo descompilo o EXE através do DC.EXE não puxa funções das libs externas... Ou Puxa ? Pq, pode ser isto tb neh ?

Ah a versão do Dclip q utilizei foi a versão 3.2....

Se alguém se canditar... posso mandar o Sistema para testarem e verem q os dados estão criptografados.

Grato

Enviado: 19 Fev 2008 00:20
por Maligno
Quem faz criptografia, e é esperto, nunca utiliza nomes de símbolos óbvios, relacionados à criptografia. Essa regra é básica. O ideal é usar nomes insuspeitos e, também, melhor ainda, plantar "pistas" falsas, pra confundir aquele que tenta fazer engenharia reversa. :)

Enviado: 19 Fev 2008 01:15
por alaminojunior
a rotina responsável pela criptografia, não poderia estar numa outra aplicação ?

Enviado: 19 Fev 2008 01:40
por vagucs
O DClip lê sim, só nao lê se a rotina for feita em C/C++, amanha me passa o EXE para o email vagucs@vagucs.com.br que analiso e vejo se a rotina foi em C ou nao. Ok. manda zipado se nao o meu site bloqueia.

Enviado: 19 Fev 2008 01:59
por Maligno
alaminojunior escreveu:a rotina responsável pela criptografia, não poderia estar numa outra aplicação ?
Não creio. O pouco que foi descrito do programa me faz pensar que não seria muito prático. Isso incrementaria a dificuldade à toa. Mas até que poderia estar noutro programa sim. Agora, se fosse esse o caso, bastaria forçar o encerramento do programa principal antes que ele pedisse ao programa auxiliar que encriptasse novamente.

Enviado: 19 Fev 2008 09:01
por gvc
Se vc já tem o "fonte" do sistema, procure localizar o modulo que grava os dados dos produtos.
Procure nele aonde é feita a gravação do nome do produto. Ou mesmo um relatório que utilize o nome do produto.
Entendo que nesses lugares a função de decript seja usada.

Se achar necessário, pode mandar o "fonte" para gvcortez@uol.com.br

Espero ter ajudado. Boa sorte.