GS-Zone

Md5 con Contraseña (Anti-Editados) Ir al Indice

Moderadores: Moderadores de Argentum, Especialistas de Argentum, Especialistas de Programación

8

Nota » 27 Ago 2011 22:44

Bueno, estuve viendo que ^[GS]^ hace tiempo había posteado como ponerle contraseña al Md5, que evita clientes editados. Pero el problema viene ahora, el Md5 vino en la versión 11.2, y después de esa versión dejo de venir el Md5. Yo lo que vengo a dejar seria como implementar el Md5 para ponerle la contraseña Cliente/Servidor y tener un Anti-Editados simple.

Cliente:

Creamos un Modulo, con el nombre "MD5" y le ponemos de código:
  1. 'Argentum Online 0.11.2
  2. '
  3. 'Copyright (C) 2002 Márquez Pablo Ignacio
  4. 'This program is free software; you can redistribute it and/or modify
  5. 'it under the terms of the GNU General Public License as published by
  6. 'the Free Software Foundation; either version 2 of the License, or
  7. 'any later version.
  8. '
  9. 'This program is distributed in the hope that it will be useful,
  10. 'but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. 'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. 'GNU General Public License for more details.
  13. '
  14. 'You should have received a copy of the GNU General Public License
  15. 'along with this program; if not, write to the Free Software
  16. 'Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17. '
  18. 'Argentum Online is based on Baronsoft's VB6 Online RPG
  19. 'You can contact the original creator of ORE at aaron@baronsoft.com
  20. 'for more information about ORE please visit http://www.baronsoft.com/
  21. '
  22. '
  23. 'You can contact me at:
  24. 'morgolock@speedy.com.ar
  25. 'www.geocities.com/gmorgolock
  26. 'Calle 3 número 983 piso 7 dto A
  27. 'La Plata - Pcia, Buenos Aires - Republica Argentina
  28. 'Código Postal 1900
  29. 'Pablo Ignacio Márquez
  30.  
  31.  
  32. ' MD5.bas - wrapper for RSA MD5 DLL
  33. '   derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm
  34. ' Functions:
  35. '   MD5String (some string) -> MD5 digest of the given string as 32 bytes string
  36. '   MD5File (some filename) -> MD5 digest of the file's content as a 32 bytes string
  37. '      returns a null terminated "FILE NOT FOUND" if unable to open the
  38. '      given filename for input
  39. ' Bugs, complaints, etc:
  40. '   Francisco Carlos Piragibe de Almeida
  41. '   piragibe@esquadro.com.br
  42. ' History
  43. '       Apr, 17 1999 - fixed the null byte problem
  44. ' Contains public domain RSA C-code for MD5 digest (see MD5-original.txt file)
  45. ' The aamd532.dll DLL MUST be somewhere in your search path
  46. '   for this to work
  47.  
  48. Private Declare Sub MDFile Lib "aamd532.dll" (ByVal f As String, ByVal r As String)
  49. Private Declare Sub MDStringFix Lib "aamd532.dll" (ByVal f As String, ByVal T As Long, ByVal r As String)
  50.  
  51. Public Function MD5String(p As String) As String
  52. ' compute MD5 digest on a given string, returning the result
  53.     Dim r As String * 32, T As Long
  54.     r = Space(32)
  55.     T = Len(p)
  56.     MDStringFix p & "Tu-Contraseña", T, r
  57.     MD5String = r
  58. End Function
  59.  
  60. Public Function MD5File(f As String) As String
  61. ' compute MD5 digest on o given file, returning the result
  62.     Dim r As String * 32
  63.     r = Space(32)
  64.     MDFile f, r
  65.     MD5File = r
  66. End Function


Buscamos:
  1. #If SeguridadAlkon Then
  2.     'Obtener el HushMD5
  3.     Dim fMD5HushYo As String * 32
  4.    
  5.     fMD5HushYo = MD5.GetMD5File(App.path & "\" & App.EXEName & ".exe")
  6.     Call MD5.MD5Reset
  7.     MD5HushYo = txtOffset(hexMd52Asc(fMD5HushYo), 55)
  8.    
  9.     Debug.Print fMD5HushYo
  10. #Else
  11.     MD5HushYo = "0123456789abcdef"  'We aren't using a real MD5
  12. #End If


Lo remplazamos por:
  1. 'Obtener el HushMD5
  2.     Dim fMD5HushYo As String * 32
  3.    
  4.     fMD5HushYo = MD5File(App.path & "\" & App.EXEName & ".exe")
  5.    
  6.     MD5HushYo = txtOffset(hexMd52Asc(fMD5HushYo), 55)


Buscamos:
  1. #If SeguridadAlkon Then
  2.     UserPassword = MD5.GetMD5String(txtPasswd.Text)
  3.     Call MD5.MD5Reset
  4. #Else
  5.     UserPassword = txtPasswd.Text
  6. #End If


Lo remplazamos por:
  1. #If SeguridadAlkon Then
  2.     UserPassword = MD5String(txtPasswd.Text)
  3. #Else
  4.     UserPassword = txtPasswd.Text
  5. #End If


Remplazamos el Modulo "modHexaStrings" por:
  1. 'Argentum Online 0.11.2
  2. '
  3. 'Copyright (C) 2002 Márquez Pablo Ignacio
  4. 'This program is free software; you can redistribute it and/or modify
  5. 'it under the terms of the GNU General Public License as published by
  6. 'the Free Software Foundation; either version 2 of the License, or
  7. 'any later version.
  8. '
  9. 'This program is distributed in the hope that it will be useful,
  10. 'but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. 'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. 'GNU General Public License for more details.
  13. '
  14. 'You should have received a copy of the GNU General Public License
  15. 'along with this program; if not, write to the Free Software
  16. 'Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17. '
  18. 'Argentum Online is based on Baronsoft's VB6 Online RPG
  19. 'You can contact the original creator of ORE at aaron@baronsoft.com
  20. 'for more information about ORE please visit http://www.baronsoft.com/
  21. '
  22. '
  23. 'You can contact me at:
  24. 'morgolock@speedy.com.ar
  25. 'www.geocities.com/gmorgolock
  26. 'Calle 3 número 983 piso 7 dto A
  27. 'La Plata - Pcia, Buenos Aires - Republica Argentina
  28. 'Código Postal 1900
  29. 'Pablo Ignacio Márquez
  30.  
  31. Option Explicit
  32.  
  33. Public Function hexMd52Asc(ByVal MD5 As String) As String
  34.     Dim i As Integer, L As String
  35.    
  36.     MD5 = UCase$(MD5)
  37.     If Len(MD5) Mod 2 = 1 Then MD5 = "0" & MD5
  38.    
  39.     For i = 1 To Len(MD5) \ 2
  40.         L = mid(MD5, (2 * i) - 1, 2)
  41.         hexMd52Asc = hexMd52Asc & Chr(hexHex2Dec(L))
  42.     Next i
  43. End Function
  44.  
  45. Public Function hexHex2Dec(ByVal hex As String) As Long
  46.     Dim i As Integer, L As String
  47.     For i = 1 To Len(hex)
  48.         L = mid(hex, i, 1)
  49.         Select Case L
  50.             Case "A": L = 10
  51.             Case "B": L = 11
  52.             Case "C": L = 12
  53.             Case "D": L = 13
  54.             Case "E": L = 14
  55.             Case "F": L = 15
  56.         End Select
  57.        
  58.         hexHex2Dec = (L * 16 ^ ((Len(hex) - i))) + hexHex2Dec
  59.     Next i
  60. End Function
  61.  
  62. Public Function txtOffset(ByVal Text As String, ByVal off As Integer) As String
  63.     Dim i As Integer, L As String
  64.     For i = 1 To Len(Text)
  65.         L = mid(Text, i, 1)
  66.         txtOffset = txtOffset & Chr((Asc(L) + off) Mod 256)
  67.     Next i
  68. End Function


Servidor:

Creamos un Modulo, con el nombre "MD5" y le ponemos de código:
  1. 'Argentum Online 0.11.2
  2. '
  3. 'Copyright (C) 2002 Márquez Pablo Ignacio
  4. 'This program is free software; you can redistribute it and/or modify
  5. 'it under the terms of the GNU General Public License as published by
  6. 'the Free Software Foundation; either version 2 of the License, or
  7. 'any later version.
  8. '
  9. 'This program is distributed in the hope that it will be useful,
  10. 'but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. 'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. 'GNU General Public License for more details.
  13. '
  14. 'You should have received a copy of the GNU General Public License
  15. 'along with this program; if not, write to the Free Software
  16. 'Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17. '
  18. 'Argentum Online is based on Baronsoft's VB6 Online RPG
  19. 'You can contact the original creator of ORE at aaron@baronsoft.com
  20. 'for more information about ORE please visit http://www.baronsoft.com/
  21. '
  22. '
  23. 'You can contact me at:
  24. 'morgolock@speedy.com.ar
  25. 'www.geocities.com/gmorgolock
  26. 'Calle 3 número 983 piso 7 dto A
  27. 'La Plata - Pcia, Buenos Aires - Republica Argentina
  28. 'Código Postal 1900
  29. 'Pablo Ignacio Márquez
  30.  
  31.  
  32. ' MD5.bas - wrapper for RSA MD5 DLL
  33. '   derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm
  34. ' Functions:
  35. '   MD5String (some string) -> MD5 digest of the given string as 32 bytes string
  36. '   MD5File (some filename) -> MD5 digest of the file's content as a 32 bytes string
  37. '      returns a null terminated "FILE NOT FOUND" if unable to open the
  38. '      given filename for input
  39. ' Bugs, complaints, etc:
  40. '   Francisco Carlos Piragibe de Almeida
  41. '   piragibe@esquadro.com.br
  42. ' History
  43. '       Apr, 17 1999 - fixed the null byte problem
  44. ' Contains public domain RSA C-code for MD5 digest (see MD5-original.txt file)
  45. ' The aamd532.dll DLL MUST be somewhere in your search path
  46. '   for this to work
  47.  
  48. Private Declare Sub MDFile Lib "aamd532.dll" (ByVal f As String, ByVal r As String)
  49. Private Declare Sub MDStringFix Lib "aamd532.dll" (ByVal f As String, ByVal T As Long, ByVal r As String)
  50.  
  51. Public Function MD5String(p As String) As String
  52. ' compute MD5 digest on a given string, returning the result
  53.     Dim r As String * 32, T As Long
  54.     r = Space(32)
  55.     T = Len(p)
  56.     MDStringFix p & "Tu-Contraseña", T, r
  57.     MD5String = r
  58. End Function
  59.  
  60. Public Function MD5File(f As String) As String
  61. ' compute MD5 digest on o given file, returning the result
  62.     Dim r As String * 32
  63.     r = Space(32)
  64.     MDFile f, r
  65.     MD5File = r
  66. End Function


Remplazamos el Modulo "modHexaStrings" por:
  1. 'Argentum Online 0.11.20
  2. 'Copyright (C) 2002 Márquez Pablo Ignacio
  3. '
  4. 'This program is free software; you can redistribute it and/or modify
  5. 'it under the terms of the GNU General Public License as published by
  6. 'the Free Software Foundation; either version 2 of the License, or
  7. 'any later version.
  8. '
  9. 'This program is distributed in the hope that it will be useful,
  10. 'but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. 'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. 'GNU General Public License for more details.
  13. '
  14. 'You should have received a copy of the GNU General Public License
  15. 'along with this program; if not, write to the Free Software
  16. 'Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17. '
  18. 'Argentum Online is based on Baronsoft's VB6 Online RPG
  19. 'You can contact the original creator of ORE at aaron@baronsoft.com
  20. 'for more information about ORE please visit http://www.baronsoft.com/
  21. '
  22. '
  23. 'You can contact me at:
  24. 'morgolock@speedy.com.ar
  25. 'www.geocities.com/gmorgolock
  26. 'Calle 3 número 983 piso 7 dto A
  27. 'La Plata - Pcia, Buenos Aires - Republica Argentina
  28. 'Código Postal 1900
  29. 'Pablo Ignacio Márquez
  30.  
  31.  
  32.  
  33. 'Modulo realizado por Gonzalo Larralde(CDT) <gonzalolarralde@yahoo.com.ar>
  34. 'Para la conversion a caracteres de cadenas MD5 y de
  35. 'semi encriptación de cadenas por ascii table offset
  36.  
  37. Option Explicit
  38.  
  39. Public Function hexMd52Asc(ByVal md5 As String) As String
  40.     Dim i As Integer, L As String
  41.    
  42.     md5 = UCase$(md5)
  43.     If Len(md5) Mod 2 = 1 Then md5 = "0" & md5
  44.    
  45.     For i = 1 To Len(md5) \ 2
  46.         L = Mid(md5, (2 * i) - 1, 2)
  47.         hexMd52Asc = hexMd52Asc & Chr(hexHex2Dec(L))
  48.     Next i
  49. End Function
  50.  
  51. Public Function hexHex2Dec(ByVal hex As String) As Long
  52.     Dim i As Integer, L As String
  53.     For i = 1 To Len(hex)
  54.         L = Mid(hex, i, 1)
  55.         Select Case L
  56.             Case "A": L = 10
  57.             Case "B": L = 11
  58.             Case "C": L = 12
  59.             Case "D": L = 13
  60.             Case "E": L = 14
  61.             Case "F": L = 15
  62.         End Select
  63.        
  64.         hexHex2Dec = (L * 16 ^ ((Len(hex) - i))) + hexHex2Dec
  65.     Next i
  66. End Function
  67.  
  68. Public Function txtOffset(ByVal Text As String, ByVal off As Integer) As String
  69.     Dim i As Integer, L As String
  70.     For i = 1 To Len(Text)
  71.         L = Mid(Text, i, 1)
  72.         txtOffset = txtOffset & Chr((Asc(L) + off) Mod 256)
  73.     Next i
  74. End Function


Explicación:

Podrán ver que en el Modulo "MD5" dice "Tu-Contraseña", "Tu-Contraseña" deben remplazarlo por la contraseña que deseen en el servidor, pero tiene que coincidir Cliente/Servidor.

Si tienen personajes creados, para que funcione, deben hacer "Reset de Personajes" - Osea borrarlos.

Saludos ^^

Imagen
Imagen
Staff Zeiked-Games
641
Dragon Ancestral [3]
Registrado: Años de membresíaAños de membresía
Ubicación: Castelar
Mensajes: 3416
Aportes: 66
Premios: 3
Usuario omnipresente (1) Embajador (2)

Nota » 28 Ago 2011 11:53

MM lo testee en Argentum Online 0.13.0 y no funciona.

Cambie una letra del cliente (La contraseña) generé y me deja entrar normal sin ningún tipo error. Después hice el reset de pjs y tampoco funcionó.

Saludos.

Nota » 28 Ago 2011 14:11

Que raro, cuando llege mi casa lo reviso aver si me falto algo.

Imagen
Imagen
Staff Zeiked-Games
641
Dragon Ancestral [3]
Registrado: Años de membresíaAños de membresía
Ubicación: Castelar
Mensajes: 3416
Aportes: 66
Premios: 3
Usuario omnipresente (1) Embajador (2)

Nota » 28 Ago 2011 16:17

Hay un error en esta parte:
  1.  
  2. #If SeguridadAlkon Then
  3.     UserPassword = MD5String(txtPasswd.Text)
  4. #Else
  5.     UserPassword = txtPasswd.Text
  6. #End If


Tendria que ser asi:
  1. '#If SeguridadAlkon Then
  2.     UserPassword = MD5String(txtPasswd.Text)
  3. '#Else
  4. '    UserPassword = txtPasswd.Text
  5. '#End If


Además, por otra parte tendrias que chequear el paquete del servidor que envia la contraseña del usuario. Tendrias que mediante el md5 sacar la correcta, y chequear luego que sea la misma, o directamente puedes guardar el md5 de la contraseña directo en el campo de contraseña del usuario en el archivo.

Y despues, sacar que el fMD5HushYo que supuestamente se envia, sea el mismo en el servidor. Así chequeas que se el cliente original y no un editado.

Si haces eso este tipo de seguridad estaria completa. Igualmente el algoritmo MD5 es muy conocido, y por lo cual mas facil de descifrar. Pero esta bien ponerlo si lo haces para la password y chequear integridad del cliente, aunque de nuevo, eso se puede saltar..
Última edición por •Parra el 28 Ago 2011 16:18, editado 1 vez en total

Vicinity of obscenity
525
Legendario Inmortal [2]
Registrado: 5 Años de membresía!
Ubicación: España
Mensajes: 5580
Aportes: 50
Premios: 3
Mister Programador FreeForAll (3)

Nota » 28 Ago 2011 17:08

•Parra escribió:Hay un error en esta parte:
  1.  
  2. #If SeguridadAlkon Then
  3.     UserPassword = MD5String(txtPasswd.Text)
  4. #Else
  5.     UserPassword = txtPasswd.Text
  6. #End If


Tendria que ser asi:
  1. '#If SeguridadAlkon Then
  2.     UserPassword = MD5String(txtPasswd.Text)
  3. '#Else
  4. '    UserPassword = txtPasswd.Text
  5. '#End If


Además, por otra parte tendrias que chequear el paquete del servidor que envia la contraseña del usuario. Tendrias que mediante el md5 sacar la correcta, y chequear luego que sea la misma, o directamente puedes guardar el md5 de la contraseña directo en el campo de contraseña del usuario en el archivo.

Y despues, sacar que el fMD5HushYo que supuestamente se envia, sea el mismo en el servidor. Así chequeas que se el cliente original y no un editado.

Si haces eso este tipo de seguridad estaria completa. Igualmente el algoritmo MD5 es muy conocido, y por lo cual mas facil de descifrar. Pero esta bien ponerlo si lo haces para la password y chequear integridad del cliente, aunque de nuevo, eso se puede saltar..


La forma esa, que pusiste guarda el chr en Md5 la password, y cuando quieras lograr tenes que poner el Md5 no la password que tenes :S

Saludos ^^

Imagen
Imagen
Staff Zeiked-Games
641
Dragon Ancestral [3]
Registrado: Años de membresíaAños de membresía
Ubicación: Castelar
Mensajes: 3416
Aportes: 66
Premios: 3
Usuario omnipresente (1) Embajador (2)

Nota » 28 Ago 2011 17:13

Faltan las cosas que te he dicho, porque.. si te fijas, no tocas nada del servidor, solo añades modulos.. y las llamadas a estos que?

Vicinity of obscenity
525
Legendario Inmortal [2]
Registrado: 5 Años de membresía!
Ubicación: España
Mensajes: 5580
Aportes: 50
Premios: 3
Mister Programador FreeForAll (3)

Nota » 28 Ago 2011 17:44

•Parra escribió:Faltan las cosas que te he dicho, porque.. si te fijas, no tocas nada del servidor, solo añades modulos.. y las llamadas a estos que?


Ya vi un par de cosas que me faltaron, pero las tengo que adaptar, después las adapto y edito.

Saludos ^^

Imagen
Imagen
Staff Zeiked-Games
641
Dragon Ancestral [3]
Registrado: Años de membresíaAños de membresía
Ubicación: Castelar
Mensajes: 3416
Aportes: 66
Premios: 3
Usuario omnipresente (1) Embajador (2)

Nota » 08 Sep 2011 00:27

Samke escribió:
•Parra escribió:Hay un error en esta parte:
  1.  
  2. #If SeguridadAlkon Then
  3.     UserPassword = MD5String(txtPasswd.Text)
  4. #Else
  5.     UserPassword = txtPasswd.Text
  6. #End If


Tendria que ser asi:
  1. '#If SeguridadAlkon Then
  2.     UserPassword = MD5String(txtPasswd.Text)
  3. '#Else
  4. '    UserPassword = txtPasswd.Text
  5. '#End If


Además, por otra parte tendrias que chequear el paquete del servidor que envia la contraseña del usuario. Tendrias que mediante el md5 sacar la correcta, y chequear luego que sea la misma, o directamente puedes guardar el md5 de la contraseña directo en el campo de contraseña del usuario en el archivo.

Y despues, sacar que el fMD5HushYo que supuestamente se envia, sea el mismo en el servidor. Así chequeas que se el cliente original y no un editado.

Si haces eso este tipo de seguridad estaria completa. Igualmente el algoritmo MD5 es muy conocido, y por lo cual mas facil de descifrar. Pero esta bien ponerlo si lo haces para la password y chequear integridad del cliente, aunque de nuevo, eso se puede saltar..


La forma esa, que pusiste guarda el chr en Md5 la password, y cuando quieras lograr tenes que poner el Md5 no la password que tenes :S

Saludos ^^


Segun tengo entendido, el md5 no se puede desencriptar, entonces, qe problema hay en que grabe la pass en md5 ? si total, la encriptas(md5) cuando la mandas, la recibe & la trabaja encriptada, igual te digo qe te sniffean el paquete & fuiste, no es algo dinamico , siempre va a ser igual ;)

suerte.

LyRan escribió:Buenos Dias amigos y programadores de Gs Zone, Me gustaria pedirle la amabilidad de una ayuda con un cliente editado para mi Ao casero, Osea me explico, yo juego Ao con varios amigos y ellos todos usan cheat y no me gusta eso me gustaria que alguien me ayudara a crear un cliente editado con auto poteo de ambas potas a la ves ya sea que se alla gastado Mana lanzando algun hechis y comienze a potear solo hasta estar completamente el Mana, igual para la salud y poteo rapido para ambos.
mAnco programEr
799
Dragon Ancestral [1]
Registrado: Años de membresíaAños de membresía
Ubicación: Bolivia
Mensajes: 2303
Aportes: 109


Volver a AO 0.12.x

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados