VERIRICAR CRC DO ARQUIVO

BRUNOMOMESSO 23/07/2012 21:19:57
#406483
Boa noite a todos, eu tenho um app que puxa um arquivo exe fora do meu sistema.
no entanto eu gostaria de fazer uma verificacao nele, no caso seria assim:

cada arquivo tem o seu CRC se alguem modificar ele o CRC muda, e na minha aplicacao,
gostaria de por uma verificacao que seo o CRC for

EXEMPLO
[Ô]15145125 [Ô] ele abre o arquivo mas se ele for diferente mostra uma msg e nao roda abre o arquivo .exe
MARCELOKROL 23/07/2012 21:53:20
#406484
Ola eu utilizo esta sub para verificar o MD5 do arquivo. Uso ela para criar uma copia de segurança do meu sistema.

use:
msgbox CheckSumFile([Ô]c:\SeuArquivo.Ext[Ô])
BRUNOMOMESSO 23/07/2012 22:11:44
#406486
então é mais ou menos isso, mas queria uma função que checa-se esse numero.
se fosse o mesmo numero ele abre se não for o mesmo ele da uma msg de erro
OCELOT 23/07/2012 22:40:11
#406487
De uma olhada nesse artigo: http://www.vbaccelerator.com/home/VB/Code/Libraries/CRC32/article.asp

Ele explica como funciona o CRC32 e no canto esquerdo tem o link para download do projeto de exemplo.
MARCELOKROL 24/07/2012 07:38:57
#406491
entao voce faz assim, voce tem que ter o numero inicial em uma variavel por exemplo: TmpCrc = [Ô]64601342121[Ô], ai voce chama o CheckSumFile assim:
if TmpCrc <> CheckSumFile([Ô]c:\SeuArquivo.Ext[Ô]) then
msgbox [Ô]Arquivo errado[Ô]
end if

entendeu?
BRUNOMOMESSO 24/07/2012 19:18:20
#406544
EDIT

Bom eu consegui usar esse comando. Mas assim quando eu coloco ele com a extencao inteira - c:\dir\app\arquivo.exe, ele roda normal,
mas quando eu coloco so - \arquivo.exe ele nao abre normal
MARCELO.TREZE 24/07/2012 20:59:17
#406546
e assim

App.Path & [Ô]\arquivo.exe[Ô]
BRUNOMOMESSO 24/07/2012 22:34:40
#406551
Citação:

:
e assim

App.Path & [Ô]arquivo.exe[Ô]



assim tbm nao foi


eu to usando esse modulo postado aqui no post.

Citação:

Option Explicit
Option Compare Text
[ô]// Then declare this array variable Crc32Table
Private Crc32Table(255) As Long
[ô]// Then all we have to do is writing public functions like these...

Public Function CheckSumFile(cFile As String) As String
Dim TheFile As String
Dim lCrc32Value As Long
Dim CRCStr As String * 8
Dim FL As Long [ô]file length
Dim FileStr$
Dim RealCRC As String * 8

TheFile = cFile

On Error Resume Next

FL = FileLen(TheFile)
FileStr$ = String(FL, 0)

Open TheFile For Binary As #1
Get #1, 1, FileStr$
Close #1

lCrc32Value = InitCrc32()
lCrc32Value = AddCrc32(FileStr$, lCrc32Value)
RealCRC = CStr(Hex$(GetCrc32(lCrc32Value)))
[ô]MsgBox [Ô]Real CRC=[Ô] & RealCRC & vbCrLf & [Ô]File CRC=[Ô] & CRCStr, vbInformation + vbOKOnly, [Ô]CRC32 Results[Ô]

Open TheFile For Binary As #1
Put #1, FL + 1, RealCRC
Close #1

CheckSumFile = RealCRC
End Function

Private Function InitCrc32(Optional ByVal Seed As Long = &HEDB88320, Optional ByVal Precondition As Long = &HFFFFFFFF) As Long
[ô]// Declare counter variable iBytes, counter variable iBits, value variables lCrc32 and lTempCrc32
Dim iBytes As Integer, iBits As Integer, lCrc32 As Long, lTempCrc32 As Long
[ô]// Turn on error trapping
On Error Resume Next
[ô]// Iterate 256 times

For iBytes = 0 To 255
[ô]// Initiate lCrc32 to counter variable
lCrc32 = iBytes
[ô]// Now iterate through each bit in counter byte


For iBits = 0 To 7
[ô]// Right shift unsigned long 1 bit
lTempCrc32 = lCrc32 And &HFFFFFFFE
lTempCrc32 = lTempCrc32 \ &H2
lTempCrc32 = lTempCrc32 And &H7FFFFFFF
[ô]// Now check if temporary is less than zero and then mix Crc32 checksum with Seed value


If (lCrc32 And &H1) <> 0 Then
lCrc32 = lTempCrc32 Xor Seed
Else
lCrc32 = lTempCrc32
End If
Next
[ô]// Put Crc32 checksum value in the holding array
Crc32Table(iBytes) = lCrc32
Next
[ô]// After this is done, set function value to the precondition value
InitCrc32 = Precondition
End Function
[ô]// The function above is the initializing function, now we have to write the computation function

Private Function AddCrc32(ByVal Item As String, ByVal CRC32 As Long) As Long
[ô]// Declare following variables
Dim bCharValue As Byte, iCounter As Integer, lIndex As Long
Dim lAccValue As Long, lTableValue As Long
[ô]// Turn on error trapping
On Error Resume Next
[ô]// Iterate through the string that is to be checksum-computed


For iCounter = 1 To Len(Item)
[ô]// Get ASCII value for the current character
bCharValue = Asc(Mid$(Item, iCounter, 1))
[ô]// Right shift an Unsigned Long 8 bits
lAccValue = CRC32 And &HFFFFFF00
lAccValue = lAccValue \ &H100
lAccValue = lAccValue And &HFFFFFF
[ô]// Now select the right adding value from the holding table
lIndex = CRC32 And &HFF
lIndex = lIndex Xor bCharValue
lTableValue = Crc32Table(lIndex)
[ô]// Then mix new Crc32 value with previous accumulated Crc32 value
CRC32 = lAccValue Xor lTableValue
Next
[ô]// Set function value the the new Crc32 checksum
AddCrc32 = CRC32
End Function
[ô]// At last, we have to write a function so that we can get the Crc32 checksum value at any time

Private Function GetCrc32(ByVal CRC32 As Long) As Long
[ô]// Turn on error trapping
On Error Resume Next
[ô]// Set function to the current Crc32 value
GetCrc32 = CRC32 Xor &HFFFFFFFF
End Function
[ô]// To Test the Routines Above...

Private Function Compute(ToGet As String) As String
Dim lCrc32Value As Long
On Error Resume Next
lCrc32Value = InitCrc32()
lCrc32Value = AddCrc32(ToGet, lCrc32Value)
Compute = Hex$(GetCrc32(lCrc32Value))
End Function

Private Function AppExe() As String
On Error Resume Next
Dim AP As String
AP = App.Path
If Right(AP, 1) <> [Ô]\[Ô] Then AP = AP & [Ô]\[Ô]
AppExe = AP & App.EXEName & [Ô].exe[Ô]
End Function



e usando o comando assim

Citação:


Private Sub Command1_Click()
TmpCrc = [Ô]64601342121[Ô]
If TmpCrc <> CheckSumFile([Ô]\arquivo[Ô]) Then
MsgBox [Ô]Arquivo errado[Ô]
End If
End Sub



e mesmo assim nao da certo, e quando eu crio o arquivo project.exe e coloco na pasta ele fica assim [Ô] não respondendo[Ô]

e mesmo assim nao deu certo
MARCELOKROL 25/07/2012 07:22:20
#406555
Assim...

Voce tem que criar o CRC antes do arquivo, tipo assim: Em um outro projeto, voce executa o CheckSumFile no arquivo que voce quer verificar, com isso voce voce podera pegar o CRC do arquivo original.
Ai no seu projeto voce pode usar assim:
  
Private Sub Command1_Click()
dim TmpCrc as string
TmpCrc = [Ô]Colocar aqui o crc que voce pegou anteriormente[Ô]
If TmpCrc <> CheckSumFile([Ô]arquivo[Ô]) Then [ô]tem que colocar exatamente aonde o arquivo esta ex.: [Ô]c:\windows\calc.exe[Ô] ou [Ô]c:\app    este.exe[Ô]
MsgBox [Ô]Arquivo errado[Ô]
End If
End Sub
BRUNOMOMESSO 25/07/2012 19:12:05
#406599
dessa maneira eu nao posso?

Dim TmpCrc As String
TmpCrc = [Ô]D202EF8D[Ô]
If TmpCrc <> CheckSumFile([Ô]D:\ClienteFull\ClienteFull\game.exe[Ô]) = False Then [ô]tem que colocar exatamente aonde o arquivo esta ex.: [Ô]c:\windows\calc.exe[Ô] ou [Ô]c:\app    este.exe[Ô]
MsgBox [Ô]Arquivo errado[Ô]
Else
MsgBox [Ô]Arquivo certo[Ô]
End If
MARCELOKROL 25/07/2012 21:57:34
#406605
assim talvez, tente ai!

Dim TmpCrc As String
TmpCrc = [Ô]D202EF8D[Ô]
If TmpCrc <> CheckSumFile([Ô]D:\ClienteFull\ClienteFull\game.exe[Ô]) Then [ô]tem que colocar exatamente aonde o arquivo esta ex.: [Ô]c:\windows\calc.exe[Ô] ou [Ô]c:\app    este.exe[Ô]
MsgBox [Ô]Arquivo errado[Ô]
Else
MsgBox [Ô]Arquivo certo[Ô]
End If
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas