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

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

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

Mensagem 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
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem 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).
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem 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.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Mensagem 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
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem 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).
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem por vagucs »

se o outro sistema está em clipper, porque nao descompila e traz a rotina de cirptografia original e usa ela?
Sem mais
Wagner Nunes
www.vagucs.com.br
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Mensagem 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
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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. :)
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Mensagem por alaminojunior »

a rotina responsável pela criptografia, não poderia estar numa outra aplicação ?
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem 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.
Sem mais
Wagner Nunes
www.vagucs.com.br
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Responder