PmoshBR Posted July 7, 2021 at 12:43 PM Share Posted July 7, 2021 at 12:43 PM Ola pessoal, Tenho um aplicativo que desenvolvi a muito tempo (2003) no Delphi que utilizo diariamente, porem a um ano atrás meu HD de backup (onde estava o código fonte) pifou e não consegui restaurar 100% dos arquivos desse código fonte, apenas arquivos parciais. Já com a ideia de que vou ter que reescrever todo o programa de novo, já comecei o projeto em uma outra plataforma. Mais ainda vai demorar até estar 100%. Enquanto isso vou usando a ultima versão compilada. Precisava de uma ajuda para alterar um PATH onde o programa salva e lê arquivos na rede, que foi compilada dentro da linha de código. a função em questão seria essa abaixo: (Esse foi um dos arquivos do código fonte que consegui recuperar) procedure TFrm_EntDocumentos.BtAdicionarClick(Sender: TObject); var nomefinal,pathfinal:string; ano,mes,dia,hora,minuto,segundo,extensao:string; begin hora:=Copy(TimeToStr(Time),0,2); minuto:=Copy(TimeToStr(Time),4,2); segundo:=Copy(TimeToStr(Time),7,2); hora:=Copy(TimeToStr(Time),0,2); ano:=Copy(DateToStr(Date),7,4); mes:=Copy(DateToStr(Date),4,2); dia:=Copy(DateToStr(Date),0,2); extensao:=ExtractFileExt(EdNomeArquivo.Text); nomefinal:=ano+mes+dia+'-'+hora+minuto+segundo+'-'+EdPedido.Text+'-'+InttoStr(Random(100))+extensao; pathfinal:='\\SERVIDOR\producao$\'+EdTipoArquivo.Text+'\'+nomefinal; try if EdTipoArquivo.Text='CVC' then begin Dm.SQLComando.ConnectionString:=Dm.SQLCvc.ConnectionString; DM.SQLComando.CommandText:=('INSERT INTO TbArquivos (NomeArquivo, CodModVeiculo) VALUES ('+ #39+nomefinal+#39+','+ #39+EdPedido.Text+#39+');'); DM.SQLComando.Execute; end else begin Dm.SQLComando.ConnectionString:=Dm.SQLProducao.ConnectionString; DM.SQLComando.CommandText:=('INSERT INTO TbArquivos (CodPedido, Data, ' + 'NomeArquivo, Observacao, Tipo) VALUES ('+ #39+EdPedido.Text+#39+','+ #39+ano+'/'+mes+'/'+dia+#39+','+ #39+nomefinal+#39+','+ #39+MObservacao.Lines.Text+#39+','+ #39+EdTipoArquivo.Text+#39+');'); DM.SQLComando.Execute; end; if EdTipoArquivo.Text='PRE-CADASTRO IMPLEMENTO' then begin Dm.SQLComando.ConnectionString:=Dm.SQLProducao.ConnectionString; DM.SQLComando.CommandText:=('UPDATE TbProducao SET Pre_Cadastro = 1 WHERE CodPedido = '+#39+EdPedido.Text+#39); DM.SQLComando.Execute; end; try FileSetReadOnly(EdNomeArquivo.Text,true); if CBMover.Checked then begin if not MoveFile(PChar(EdNomeArquivo.Text),PChar(pathfinal)) then raise Exception.Create('Erro ao tentar salvar o arquivo!'); end else if not CopyFile(PChar(EdNomeArquivo.Text),PChar(pathfinal),False) then raise Exception.Create('Erro ao tentar salvar o arquivo!'); except DM.SQLComando.CommandText:=('DELETE FROM TbArquivos WHERE NomeArquivo = '+#39+nomefinal+#39); Dm.SQLComando.Execute; raise Exception.Create('Erro ao tentar salvar o arquivo!'); end; except on E : Exception do begin ShowMessage('Tipo do Erro = '+E.ClassName+#13+'Messagem do Erro = '+E.Message); end else ShowMessage('Erro desconhecido!'); end; end; No começo da função tem a variável "pathfinal" e esta direcionando os arquivos para o diretório \\SERVIDOR\producao$, queria poder alterar esse path, pois a topologia da rede aqui foi alterada e não existe mais esse caminho. Já tentei utilizar os programas abaixo para tentar achar a "string" para modifica-la no executável, mais sem sucesso. Win32dasm dede32 Resource Hacker Hex-Rays IDA Pro Ollydbg Hiew32 Não sou um conhecedor de assembly de PC x86 ou x64, inclusive estou assistindo os cursos aqui do site para ver se ajuda. Mais tenho conhecimento de asm de microcontroladores com PIC e Atmel. Alguém poderia me dar uma luz de como alterar esse executável ?? precisava resolver isso enquanto o novo programa não fica pronto.... Obrigado!!!! Quote Link to comment Share on other sites More sharing options...
Fernando Mercês Posted July 8, 2021 at 07:33 PM Share Posted July 8, 2021 at 07:33 PM Humm.. neste caso em específico eu acho mais fácil criar um registro para o SERVIDOR no DNS interno e simplesmente mapear producao$ para o novo lugar. Assim nem precisa alterar o programa. ? Se realmente for partir pra engenharia reversa, bem, já passei por um caso parecido. Eu diria que sua linha de pensamento de buscar a string no executável está certa. O que eu faria: Usaria o IDR para buscar o endereço do evento BtAdicionarClick. Usaria o x64dbg para colocar um breakpoint no endereço conseguido no passo acima. Seguiria a execução até encontrar onde a string é carregada. Certamente o CERO vai te ajudar. Se preferir ler, tem o livro gratuito Fundamentos de Engenharia Reversa também. Se tiver dúvidas durante o processo, pode postar aqui que a galera ajuda (screenshots, trechos de código, etc são bem vindos). ? Abraço e boa sorte! Quote Link to comment Share on other sites More sharing options...
PmoshBR Posted July 8, 2021 at 10:06 PM Author Share Posted July 8, 2021 at 10:06 PM Ola Fernando, Obrigado pela ajuda, não conhecia o IDR... foi rodar ele e achar na hora a localização da String, muito bom esse software... Usei o x64dbg e realmente confirmei a localização da string... Agora só falta uma coisa, qual programa posso usar para alterar a string e salvar o exe corrigido? pois a quantidade de caracteres não são iguais... teria que alterar o tamanho do arquivo... Estou gostando bastante do curso CERO...!! Abraço e obrigado pela resposta... Quote Link to comment Share on other sites More sharing options...
Fernando Mercês Posted July 11, 2021 at 07:11 PM Share Posted July 11, 2021 at 07:11 PM Em 08/07/2021 em 19:06, PmoshBR disse: Obrigado pela ajuda, não conhecia o IDR... foi rodar ele e achar na hora a localização da String, muito bom esse software... De nada. É, pra Delphi acho que é o melhor. Em 08/07/2021 em 19:06, PmoshBR disse: Agora só falta uma coisa, qual programa posso usar para alterar a string e salvar o exe corrigido? pois a quantidade de caracteres não são iguais... teria que alterar o tamanho do arquivo... Não precisa de outro programa. Dá pra encontrar uma code cave com o próprio x64dbg. No canal temos um vídeo sobre injeção de código, mas serve para injeção de dados também: Se não houver "holes" utilizáveis (o que é raro), dá pra criar uma seção também (assunto coberto no vídeo da parte 2). Mas não deixa de seguir o CERo até o final. Tu vai curtir! Abraço e boa sorte! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.