Tema destacado: Deseas probar algunas mejoras a la interfaz del foro? Prueba cake! acerca de
Autor
|
Tema: [SRC] itsOkCRC32 (Leído 1,444 veces)
|
BlackZeroX (Astaroth)
Wiki
Desconectado
Mensajes: 2.832
I'Love...!¡.
|
. La funcion lo que realiza es una verificación del exe para saber si a ido modificaco o no (es una seguridad muy basica). Edito---> (NO ES NECESARIO) OJO si lo van a usar deberan realinear el formato PE... o usar los ultimos 4 bytes de el exe (habitualmente son bytes 0) En un modulo... Option Explicit #Const INSERTCRC32TOEXE = False Public Function itsOkCRC32() As Boolean ' // ' // Funcion itsOkCRC32 creada por BlackZeroX (http://infrangelux.hostei.com) ' // ' // Instrucciones: ' // * COMPILA TU EXE FINAL con la constante INSERTCRC32TOEXE = false. ' // * Cambia INSERTCRC32TOEXE de false a true ( #Const INSERTCRC32TOEXE = true ) ' // * Cambia la linea {Open "c:\testCRC32.exe" For Binary As hFile} de este proceso con ' // la ruta del exe que compilaste anteriormente, por ejemplo {Open "c:\testCRC32.exe" For Binary As hFile} ' // * Ejecuta el proyecto desde este IDE, si todo a ido correctamente les aparecera un mensaje {"CRC32 configurado Correctamente"}. ' // * Comprube tu EXE Final {c:\testCRC32.exe} ejecutandolo directamente. ' // Si todo a hido correctamente el exe te mostrara {"CRC32 Correcto"} si solo has generado el exe y no cambiaste {INSERTCRC32TOEXE a true} te mostrara {"CRC32 erroneo"} en este ejemplo.
Dim byteData() As Byte Dim dwSizeFile As Long Dim dwCRC32ReadFile As Long Dim dwCRC32Generate As Long Dim oCRC32 As cCRC32 Dim hFile As Integer hFile = FreeFile #If (INSERTCRC32TOEXE = False) Then Open App.Path & "\" & App.EXEName & ".exe" For Binary As hFile #Else Open "c:\testCRC32.exe" For Binary As hFile #End If dwSizeFile = LOF(hFile) If ((dwSizeFile - 4) > 0) Then #If (INSERTCRC32TOEXE = True) Then ReDim byteData(0 To (dwSizeFile - 1)) #Else ReDim byteData(0 To (dwSizeFile - 1 - 4)) #End If Get 1, , byteData Get 1, , dwCRC32ReadFile Set oCRC32 = New cCRC32 dwCRC32Generate = oCRC32.GetByteArrayCrc32(byteData) Set oCRC32 = Nothing If (dwCRC32Generate = dwCRC32ReadFile) Then itsOkCRC32 = True #If (INSERTCRC32TOEXE = True) Then MsgBox "CRC32 Ya se encontraba configurado." Else Put hFile, , dwCRC32Generate MsgBox "CRC32 configurado Correctamente." End #End If End If End If Close hFile End Function cCRC32.cls (Modulo de clase) Option Explicit
' This code is taken from the VB.NET CRC32 algorithm ' provided by Paul (wpsjr1@succeed.net) - Excellent work!
Private crc32Table() As Long
Public Function GetByteArrayCrc32(ByRef buffer() As Byte) As Long Dim crc32Result As Long: crc32Result = &HFFFFFFFF Dim i As long Dim iLookup As long For i = LBound(buffer) To UBound(buffer) iLookup = (crc32Result And &HFF) Xor buffer(i) crc32Result = ((crc32Result And &HFFFFFF00) \ &H100) And 16777215 ' nasty shr 8 with vb :/ crc32Result = crc32Result Xor crc32Table(iLookup) Next i GetByteArrayCrc32 = Not (crc32Result)
End Function
Private Sub Class_initialize()
' This is the official polynomial used by CRC32 in PKZip. ' Often the polynomial is shown reversed (04C11DB7). Dim dwPolynomial As Long dwPolynomial = &HEDB88320 Dim i As Integer, j As Integer
ReDim crc32Table(256) Dim dwCrc As Long
For i = 0 To 255 dwCrc = i For j = 8 To 1 Step -1 If (dwCrc And 1) Then dwCrc = ((dwCrc And &HFFFFFFFE) \ 2&) And &H7FFFFFFF dwCrc = dwCrc Xor dwPolynomial Else dwCrc = ((dwCrc And &HFFFFFFFE) \ 2&) And &H7FFFFFFF End If Next j crc32Table(i) = dwCrc Next i
End Sub
Private Sub Class_Terminate() Erase crc32Table End Sub
Ejemplo: option explicit Sub main() If (itsOkCRC32) Then MsgBox "CRC32 Correcto" Else MsgBox "CRC32 erroneo" End If End Sub Decargar Ejemplo (Compilar en "C:\" el proyecto con el nombre "testCRC32.exe" o configurar las lineas segun lo requieran y con la constante en false, despues solo ejecutar desde el IDE con la constante en true): http://infrangelux.sytes.net/FileX/index.php?dir=/BlackZeroX/Programacion/vb6/ejemplos%20VB6&file=itsOKCRC32.zipAlternativa: http://foro.elhacker.net/programacion_visual_basic/src_self_crc32_check_01_poc-t351610.0.htmlDulces Lunas!¡.
|
|
|
|
« Última modificación: 28 Enero 2012, 08:56 por BlackZeroX (Astaroth) »
|
En línea
|
|
|
|
RHL
Desconectado
Mensajes: 968
mental
|
bien hecho  ratos de no ver codigo tuyos zero  una cosa no seria mas elegante y eficiente mapear el archivo
|
|
|
|
« Última modificación: 27 Enero 2012, 00:36 por RHL »
|
En línea
|
|
|
|
BlackZeroX (Astaroth)
Wiki
Desconectado
Mensajes: 2.832
I'Love...!¡.
|
Para algo como esto no... pero si te das cuenta se carga todo el archivo en memoria y acceso a los bytes directamente, mapear el archivo en memoria es hacer lo mismo, crear una copia del archivo en la memoria pero con APIS espesificas, y bueno esto seria viable en BDD o cosas por el estilo donde el archivo deba estar siempre en memoria y en este caso solo se carga una vez y despues se descarga dicho bloque de bytes.
Dulces Lunas!¡.
|
|
|
|
|
En línea
|
|
|
|
Crawe
Desconectado
Mensajes: 14
|
Disculpa que te moleste.He seguido todas las instrucciones posibles y no me resulta. Lo que hice fue hacer el primer .exe (compilar) en el disco c. en modo False Luego hice otro ejecutable guardandolo en el escritorio en modo True y cambiando la linea c:\test por c:\nombredemiejecutable.exe .. Luego abro cualquiera de los dos y no pasa nada.. no tira ningun msgbox .
|
|
|
|
|
En línea
|
|
|
|
BlackZeroX (Astaroth)
Wiki
Desconectado
Mensajes: 2.832
I'Love...!¡.
|
Lo que pasa es que NO debes compilar con la constante en true ya que claramente dice:
Ejecuta el proyecto desde este IDE, si todo a ido correctamente les aparecera un mensaje {"CRC32 configurado Correctamente"}.
Dulces Lunas!¡.
|
|
|
|
|
En línea
|
|
|
|
Crawe
Desconectado
Mensajes: 14
|
Dentro del codigo hay muchos INSERTCRC32TOEXE = false / true o lo que fuese, yo el unico que cambie fue el que decia Const INSERTCRC32TOEXE = false a true , era ese o es otro?
|
|
|
|
|
En línea
|
|
|
|
BlackZeroX (Astaroth)
Wiki
Desconectado
Mensajes: 2.832
I'Love...!¡.
|
. Perdon escribi si leer bien.
Si es la que dice #const INSERTCRC32TOEXE = False, despues edita la otra linea que se dice y por ultimo ejecuta desde el IDE... subi un proyecto practicamente configurado ya, revisa el 1er post.
Dulces Lunas!¡.
|
|
|
|
« Última modificación: 27 Enero 2012, 03:07 por BlackZeroX (Astaroth) »
|
En línea
|
|
|
|
Crawe
Desconectado
Mensajes: 14
|
Perdon por la ignorancia, pero que es el IDE.. que tanto nombras?
|
|
|
|
|
En línea
|
|
|
|
Crawe
Desconectado
Mensajes: 14
|
Sinceramente no funciona, porque al usuario que yo le doy mi programa debe tener una replica en el disco c:\ y la idea es que al abrir el archivo se de cuenta unicamente si esta modificado por hexadecimal o no.Ahora una vez que hice todo esto me salio "Configurado correctamente" ya que se ve que funciona comprobando que haya un archivo en el c:\ .. Después agarre al archivo lo modifique con hexadecimal y seguia diciendo configurado correctamente, que estoy haciendo mal? Quizas lo que yo busque no sea esto y sea todo un mal entendido.
Yo lo que necesito es que mi archivo se de cuenta si se modifico desde un hexadecimal para que no me ripeen.
|
|
|
|
|
En línea
|
|
|
|
Elemental Code
Desconectado
Mensajes: 499
Im beyond the system
|
tenes la mas palida idea de visual basic?  lo que hizo blackzero ademas de hacer algo re jodido con muchos simbolitos de Sharp (#) fue diseñar un "agregador" de codigo CRC32 al final de el ejecutable final desde la ide (la ide es lo que vos conoces como "Visual basic 6.0" esa cosa adonde armas forms y pones codigos) te recomiendo que aprendas algo de vb6 antes de todo esto. Yo admito que se poco, pero no son nociones complicadas las constantes y el IDE. De que es ese dichoso programa que necesitas que nadie te modifique a todo esto? :S
Ahora para mi queridisimo BlackZeroXChe habra algun codigo que me salga bien sin que venga uno de ustedes que la tiene clara y le pase el trapo?  Si se te ocurre un buen metodo de hacer esto semi universal para cualquier exefile (necesitamos un RunPE sin que papa antivirus lo detecte como malware cuando es nada que ver o hacer otra magia negra  ) avisame que de ultima diseño la interfaz o el icono... o sino te cebo mate o lo que pueda ayudar 
|
|
|
|
|
En línea
|
|
|
|
Crawe
Desconectado
Mensajes: 14
|
Te puedo asegurar que estudio hace 4 años, tengo titulo pero nunca me meti en este tipo de proyectos lo cual desconozco estos nombres CRC32 y blabla. Ahora estoy informado.
PD : 15 años tengo :p
|
|
|
|
|
En línea
|
|
|
|
|
|
Cromatico
Desconectado
Mensajes: 69
|
BlackZeroX te hago una consulta, hice todo perfectamente SIN SABER PARA QUE SERVIA EL CODIGO... Pero imagine, por el post de Elemental Code, que si, una vez compilado mi exe (ya todo configurado), editaba un bit con algun editor hexadecimal, me iba a tirar el mensaje de erroneo  y asi fue, entonces... Es para evitar que editen el exe ya compilado? Si es para eso, funciona de maravillas  edite un byte por aca: 000023B9 MSVBVM60.DLL...._CIcos...._adj_fptan....__vbaFreeVar despues de "MSVBVM60.DLL", el segundo punto (tecnica muy muy basica para "limpiar" un "programita" jajjajaj  ) Y ya con ese bit cambiado, no decia mas correcto, si no Erroneo xD ---------------------------------------- EDIT: acabo de googlear CRC32, no dije nada  Muy muy bueno!
|
|
|
|
|
En línea
|
|
|
|
|
raul338
|
Crawe, lo que BlackZeroX puso es basicamente son 2 proyectos con una funcionalidad distinta, en un solo codigo  1º Agregas el codigo a tu aplicacion y por codigo este bien, con esta linea #Const INSERTCRC32TOEXE = False Luego, cambias esta linea Open "c:\testCRC32.exe" For Binary As hFile por la ruta del ejecutable donde compilaste pones la mismisima linea anterior en true, y ejecutas (Dale al play o a F5) y listo, el ejecutable ya tiene el CRC32, ya no tenes que hacer nada más  Es como que "firmaste el exe para su aprobacion" 
|
|
|
|
|
En línea
|
|
|
|
Crawe
Desconectado
Mensajes: 14
|
Me pasa lo mismo que con el otro CRC32 de Elemental Code, lo pruebo en un proyecto aparte bla bla bla. y me anda perfecto lo modifico y dice Erroneo todo bien, ahora lo intento meter en el proyecto mio en el que hay formularios y todo y dice Error 6 desbordamiento. Arranca en el submain, todo bien.. ¿que puede ser? dios santo.
|
|
|
|
|
En línea
|
|
|
|
|
|