elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 [7] 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ... 41
61  Programación / Programación Visual Basic / Re: [ANTI] IsOdbg() - Saber si estas siendo debuggeado por el OllyDebugger en: 21 Marzo 2011, 17:34 pm
Siempre y cuando sea lo único que me dediques  :xD
Mejor si es de horas 4:00 - 8:00 (hora del foro), que es cuando toy en casa  :P
Saluos.
62  Programación / Programación Visual Basic / Re: [ANTI] IsOdbg() - Saber si estas siendo debuggeado por el OllyDebugger en: 20 Marzo 2011, 21:50 pm
Asique si yo meto ese codigo en mi malware, para q cuando este analizandose en ollybdg cierre todo, bloquee teclado, elimine los puntos de restauracion, elimine archivos importantes para el inicio de el SO, y se reinicie forzosamente.. ahi puedes hacer algo? Teniendo en cuenta q vs no sabias q tenia este codigo, q solo te darias cuenta al intentar analizarlo y como dije antes pasaria todo eso y entonces no podrias hacer nada, q podes hacer ahi?

Esq yo decia para q no lo analizen, ya q desp de eso como consigues el malware otra vez?



Este programa esta protegido por un par de packers que en cuanto detectan al olly, te hacen causan algunos daños y luego reinician la pc, ya lo modifique para que no haga cambios en mi SO y tampoco reinicie, solo me falta eliminar un par de llamadas y podre desempacarlo para modificarlo  :rolleyes: , como dije anteriormente los daños que cause no me preocupan en absoluto  :laugh:

A eso me referia 43H4FH44H45H4CH49H56H45H(Codelive), Supongo que tienes 2 formas de debuguear, a mano (viendo linea por linea) y "ejecutando" cosa que ahi no te daras cuenta, y no hara nada "malo" para no levantar sospechas :P

Creo que en este caso debriamos dividir en dos tipos de análisis, puesto que si fuera un soft comercial obviamente yo notaria las diferencias cuando se ejecuta en Olly y cuando se ejecuta normalmente.

En caso de malware, la técnica cambia, puesto que para que harian un programa que haga nada o solo abra otro programa  ;D ademas de que una de las caracterisiticas de la mayoria de los malware's es tener el menor tamaño posible.

No tiene sentido hacer un CrackMe si ya sabes la tecnica que utiliza para protegerse...
Que mejor si haces un Crack Me y vemos que tan dificil puede ser quitar esta u otra protección.

la dificultad de este metodo reside en que es desconocido, por lo tanto tu nunca sabrias en que parte del codigo se hace la busqueda del OllyDbg... asi que no podras parchear :)

Hay cientos de programas con técnicas desconocidas pero igual se van rompiendo sus protecciones,el que sea desconocida no implica que no sea crackeable...
En el caso de Vb, es uno de los mas sencillos de debuggear, uso Olly como una herramienta secundaria (en vb) que utilizo solo para la modificación, antes puedo utilizar vb decompiler, p32dasm, etc...
Si utilizo un decompiler (que hay varios), ahi ya puedo saber las Api's que utiliza el programa y tener una aproximacion de que es lo que hace para luego debuggearlo con Olly, de ahi es pan comido.

Solo los packers pueden dar una mayor protección, pero igual pueden vencerse  :P

Respecto a las acciones... imagina que infecto el calc.exe inyectando codigo en el binario original... añado la comparacion y si no estamos en el olly busco otros ejecutables e infecto, pero si estamos en el olly ejecuto el calc.exe con normalidad...

Tratandose de análisis de malware, en mi caso puedo utilizar regshot1_7_2, un fileSystemWatcher que tengo creado (uno en .NET, otro C++) con eso me bastaria para tener una aproximación de que hace el malware.


En conclusión primero debo saber que tipo de análisis hacer al programa, luego puedo descompilarlo para tener una aproximación de código, ejecutarlo para saber que cambios realiza en el sistema y por ultimo debuggearlo para modificar algunas cosas (si lo necesito). Esto puedo hacerlo en un VM o en mi mismo S.O. que esta preparado para eso, estos son algunos de los archivos que me toco analizar hace un tiempo para obtener el nivel de daño en un S.O.





Ninguno fue dificil  :laugh:

Saluos.
63  Programación / Programación Visual Basic / Re: [ANTI] IsOdbg() - Saber si estas siendo debuggeado por el OllyDebugger en: 20 Marzo 2011, 17:44 pm
Si el programa hiciera la "maldad" ya tendria el punto para empezar a buscar de donde se llamo a su funcion. Obviamente esto no tiene porque preocupar a cualquier persona que tenga un minimo de conocimiento de como proteger su equipo contra "maldades", pero viendo tu comentario tú si tendrias de que preocuparte  :P
Saluos.
64  Programación / Programación Visual Basic / Re: [ANTI] IsOdbg() - Saber si estas siendo debuggeado por el OllyDebugger en: 20 Marzo 2011, 15:13 pm
Como escribi antes, el programa puede tomar una accion u otra (msgbox o finalizar el programa por ejemplo), pero a la final tendra que realizar algun prodedimiento que se puede interceptar.
Que mejor si haces un Crack Me y vemos que tan dificil puede ser quitar esta u otra protección.
Saluos  :P
65  Programación / Programación Visual Basic / Re: [ANTI] IsOdbg() - Saber si estas siendo debuggeado por el OllyDebugger en: 20 Marzo 2011, 06:01 am
En realidad saltarse este truco es muy sencillo  >:D, solo viendo que api es llamada luego de que detecte a olly (eso deacuerdo al programa si lanza un msgbox o finaliza el programa por ejemplo) podemos llegar a la funcion que se encarga de la deteccion, para saltarse este truco solo basta lo siguiente:
Código
  1. Option Explicit
  2. 'KERNEL32
  3. Private Declare Sub GetStartupInfoW Lib "KERNEL32" (ByRef lpStartupInfo As Any)
  4.  
  5. '---------------------------------------------------------------------------------------
  6. ' Procedure : IsOdbg
  7. ' Author    : Karcrack
  8. ' Date      : 12/03/2011
  9. ' TestedOn  : OllyDbg 1.1 & OllyDbg 2.0.1(Alpha)
  10. ' Purpose   : Detect whether we are running inside OllyDbg or not.
  11. '---------------------------------------------------------------------------------------
  12. '
  13. Public Function IsOdbg() As Boolean
  14.    Dim bvStartupInfo(0 To 16)  As Long
  15.    Call GetStartupInfoW(bvStartupInfo(0))
  16.    IsOdbg = (bvStartupInfo(11) And &H80)
  17. End Function
  18.  
  19.  
  20. Private Sub Command1_Click()
  21. If IsOdbg Then
  22. MsgBox "Es Olly"
  23. Else
  24. MsgBox "No hay Olly"
  25. End If
  26. End Sub

Luego de encontrar la funcion que valida si olly esta presente, localizamos la Api que lo detecta, luego de colocar un BP, vemos lo siguiente:





Y solo basta con cambiar un numero  :xD para que ya no lo detecte...





Saluos  :P
66  Programación / Ingeniería Inversa / Operaciones matemáticas básicas en vb6 - keygen DocCF (Software de Gestión) en: 18 Marzo 2011, 09:07 am
Operaciones matemáticas básicas en vb6
keygen DocCF - Software de Gestión Escolar

Materiales:   Olly Parcheado 5
Victima :        DocCF - Software de Gestión Escolar  versión 2.2



Luego de instalar e ingresar al registro del programa colocamos un BP en vbaStrcomp cuando estamos en el form de registro y podemos ver que la comparación se realiza con el resultado de algunas operaciones matemáticas tanto del número que ingresamos como del número generado por el programa  y no con los números mismos.



Puesto que son operaciones matemáticas podemos utilizar vbaR8Str para ver de dónde saca los valores de comparación, traceando un poco se puede ver que obtiene los valores de
Código:
HKEY_CURRENT_USER\Software\VB and VBA Program Settings\Grupo CF Developer\DocCF
y en mi caso los que nos interesan son los siguientes:
Setting1 = 10838093996047972805767
Setting3 = 10061210012438047703422


Seguimos traceando y vemos que utiliza los dos primeros números de Setting3 para sumarles 3 y luego 1 con FADDP los resultados de cada operación podemos verlos en ST0,ST1,ST2,… en Registers FPU
 


Seguimos traceando y vemos que la suma de los 2 primeros números de setting3 (10) + 3 + 1 = 14 es utilizado para obtener la siguiente subcadena para leer 3 caracteres a partir de ese número que en mi caso seria 1006121001243 804 7703422 el cual se resta de 999



Código:
FSUBP
ST=804.00000000000028730
ST(1)=999.00000000000057460
--------------------------
195 (Resultado)
y el resultado es dividido entre 3:
Código:
FDIVP
195 / 3
---------
65       // resulta a primera parte de la cadena de comparación

Bueno ya no utilizare imágenes, solo mostrare las operaciones que se realiza en la cadena de setting3.
Luego se suma con FADDP
Código:
4 + 13
-----
17
el cual es utilizado para obtener la siguiente subcadena 1006121001243804 770 3422 luego se multiplica
Código:
FUMLP
3*3 (el multiplicador equivale al número de caracteres que tiene la subcadena, en otros casos puede ser 4)
-----
9
se resta 9 de la subcadena previamente convertida a entero:
Código:
FSUB RESTA
ST=9.0000000000000028730
ST(1)=770.00000000000028730
------------------------
761     //este número luego de convertirse a string se concatena a la primera parte de la cadena de comparación y quedaría  65761
Luego se realiza la suma
Código:
FADDP
13+4
----
17
3+17=20    //que se usa para obtener la ultima subcadena.
1006121001243804770 3422
Luego de pasarlo a entero este se realiza la resta
Código:
FSUBP
3422-5997
----------
2575   y el resultado se divide
FDIV DIVIDE
2575 / 5
--------
515     //obtenemos la ultima parte de la cadena de comparación 65761515
Ya tenemos las operaciones que se realiza a partir de setting3 y que forman la cadena de comparación.

Analizando Setting1
Luego de tracear un poco vemos que ingresa el valor de setting1 que es el número que necesitamos para validar el software en mi caso es Setting1 = 10838093996047972805767 utiliza los 2 primeros números, los pasa a entero, le suma 3 y 1 = 14
1083809399604 797 2805767
Código:
810-797  = 13   /7 = 1,85714285714286  //Esta es la primera parte de la cadena de comparación
Luego de unas sumas se obtiene la siguiente subcadena  1083809399604797 2805 767 se multiplica:
Código:
FUMLP  (4 equivale al número de caracteres que se tomo de la cadena original)
4*9=36    luego se resta:
FSUBP
2805-36 = 2769    //La segunda parte que se concatena a la cadena de comparación.
Luego de unas sumas se obtiene la última subcadena  10838093996047972805 767 la cual se resta:
Código:
FSUBP
4005-767 = 3238     /3 = 1079,33333333333

Y queda UNICODE "1,8571428571428627691079,33333333333" la cual es comparada como vimos al comienzo:
 


Ya sabemos cómo realiza las operaciones ahora solo queda revertirlas, simplemente dividimos la cadena de comparación que en mi caso es 65761515 tomo el primer número 6 5761515 y lo multiplico por 7 y lo resto a 810 con eso ya tengo para sustituir:
Código:
Valor que escribió el programa:  10838093996047972805767
Valor que se modificara:               1083809399604 768 2805767
Tomo los siguientes 4 números (6 5761 515)  y les sumo 36 quedara en 5797 y lo sustituyo
Valor que escribió el programa:  10838093996047972805767
Valor que se modificara:               1083809399604768 5797 767
Tomo los últimos 3 números (65761 515) multiplico por 3 y lo resto de 4005 dando como resultado 2460 cambiamos los últimos valores:
Valor que escribió el programa:  10838093996047972805767
Valor que se modificara:  10838093996047685797 2460
Y ya tenemos nuestra serie armada 108380939960476857972460 lista para probar, así que ya podemos realizar el keygen.





Hay una variable más dependiente de la fecha que hace variar el numero de caracteres que lee para la multiplicación y resta de la 2da parte de las operaciones, como este tutorial está hecho para los que les interesa la Ingeniería Inversa, no lo especifico porque al tracear verán a que me refiero y así evitamos que algunas personas obtengan el serial valido solo copiando el tutorial sin aprender nada.

Para probar el string (en mi caso 65761515) que el programa genera para la comparación hice un pequeño programa en c++ para demostrar  el análisis hecho.

Código
  1. #include <iostream>
  2. #include <string>
  3. #include <sstream>
  4. #include <windows.h>
  5. int iValor(std::string cad);
  6. std::string sValor(int num);
  7. std::string leerValorREG_SZ(HKEY Registry, const std::string &sClave, const std::string &sValor);
  8. char *cRetorno(const std::string &sSource);
  9. int main()
  10. {
  11. std::string sClaveReg ="Software\\VB and VBA Program Settings\\Grupo CF Developer\\DocCF";
  12. std::string sValorReg ="Setting3";
  13. std::string sInfoRegistro = leerValorREG_SZ(HKEY_CURRENT_USER,sClaveReg,sValorReg);
  14. std::string sResult = "";
  15. std::string sNumeroBuscado = "";
  16. // Asignamos a un entero los primeros 2 numeros
  17. int iInicio = iValor(sInfoRegistro.substr(0,2).c_str())+3;
  18. int iResult = 0;
  19. //Asignamos a un string 3 numeros a partir de iInicio y convertimos en un entero
  20. sResult = sInfoRegistro.substr(iInicio,3);
  21. iResult = (999 - iValor(sResult))/3;
  22.  
  23. //añadimos el valor de la 1ra operacion a el string que contendra el numero buscado
  24. sNumeroBuscado.append(sValor(iResult));
  25.  
  26. //procesamos la siguiente subcadena, asignamos a un string, luego a un entero y realizamos la 2da operacion
  27. //añadimos el valor de la 2da operacion a el string que contendra el numero buscado
  28. iInicio = iInicio + 3;
  29. sResult = sInfoRegistro.substr(iInicio,3);
  30. iResult = iValor(sResult)-9;
  31. sNumeroBuscado.append(sValor(iResult));
  32.  
  33. //procesamos la ultima subcadena, asignamos a un string, luego a un entero y realizamos la 3era operacion
  34. //añadimos el valor de la 3ra operacion a el string que contendra el numero buscado
  35. iInicio = iInicio + 3;
  36. sResult = sInfoRegistro.substr(iInicio,4);
  37. iResult = (5997 - iValor(sResult))/5;
  38. sNumeroBuscado.append(sValor(iResult));
  39.  
  40. //Imprimimos el numero buscado el que debera compararse con el resultado del setting1
  41. std::cout << sNumeroBuscado << std::endl;
  42. std::cin.get();
  43. return EXIT_SUCCESS;
  44. }
  45. int iValor(std::string cad)
  46. {
  47. int temp = atoi(cad.c_str());
  48. return temp;
  49. }
  50. std::string sValor(int num)
  51. {
  52. std::string sTemp;
  53. std::stringstream ssTemp;
  54. ssTemp << num;
  55. sTemp = ssTemp.str();
  56. return sTemp;
  57. }
  58. std::string leerValorREG_SZ(HKEY Registry, const std::string &sClave, const std::string &sValor)
  59. {
  60. unsigned char infoValor [1024];
  61. char infocadena [1024];
  62. std::string sClaveLeida="";
  63. HKEY hKey;
  64. LONG lStatus;
  65.    DWORD dwType;
  66.    DWORD dwSize;
  67.    dwType=REG_SZ;
  68.    dwSize=1023;
  69. int i=0;
  70. lStatus = RegOpenKeyEx(Registry,cRetorno(sClave),0,KEY_READ,&hKey);
  71.    if (lStatus == ERROR_SUCCESS)
  72.    {
  73.         lStatus = RegQueryValueEx(hKey,cRetorno(sValor), 0,&dwType, (LPBYTE)&infoValor, &dwSize);
  74.         if (lStatus == ERROR_SUCCESS)
  75.         {  
  76. for(i=0;infoValor[i]!=0 && infoValor[i]!=204;i++)
  77. {
  78.  infocadena[i]=(char)infoValor[i];
  79. }
  80. infocadena [i]='\0';
  81. sClaveLeida.assign(infocadena);
  82. RegCloseKey(hKey);
  83. return sClaveLeida;
  84.         }  
  85.      }
  86.     RegCloseKey(hKey);
  87.     return "No se puede obtener el valor";
  88. }
  89. char *cRetorno(const std::string &sSource)
  90. {
  91. int iTotal = strlen(sSource.c_str());
  92. char *temp = new char[iTotal+1];
  93. strncpy_s(temp,iTotal+1, sSource.c_str(),iTotal+1);
  94. temp[iTotal]='\0';
  95. return temp;
  96. }

Para que funcione en las propiedades del proyecto debe cambiarse Juego de caracteres = Utilizar juego de caracteres multibyte.
Y bueno ya es tarde por aqui, asi que si se me paso algo o si hay alguna duda favor avisar  ;D
Saluos  :P

PD: Favor de no enviarme pedidos del Keygen por MP o en este tema  :-\ puesto que lo visto ahora es solo de caracter educativo para los que practican la Ingeneria Inversa y no para personas particulares que buscan activar este programa  :-X .
67  Programación / Programación C/C++ / MySql Browser C++ y Qt en: 9 Marzo 2011, 07:29 am
Bueno por si a alguien le sirve dejo el source de un programita que hice para navegar en las bases de datos de algun servidor con MySql, puesto que ya existe mas de uno para windows, pero no encontre uno sencillo para Linux entonces me decidi a crearlo, mas que todo su uso esta destinado cuando se obtiene algun usuario y password para una BD o si se logra crear alguno por inyeccion SQL.
Todavia no estan implementados los threads para su uso, esto porque al menos en slackware no se nota el proceso de conexion y listado, pero en Windows si se nota un poco,

El code esta un poco desordenado y falta pulir algunas cosas, mas que todo respecto a las clases que utiliza, pero lo dejo por si alguien quiere mejorarlo o modificarlo.

Para windows se necesita compilar el plugin de mysql para que cargue el driver de conexion, el modo de hacerlo se lo encuentra con google.

Enlace de decarga del proyecto:
http://www.4shared.com/file/MxfRUC9d/MySql2tar.html

Unas capturas:





Saluos.
68  Programación / Ingeniería Inversa / Re: Extraer cadena de conexion en: 7 Marzo 2011, 21:13 pm
Bueno de pasadita:

Código:
Microsoft Unified SecurityProtocol Provider.vos.2.ˆ.driver={SQL Server};
server=succoosemig;
uid=sa;
pwd=srhv;
database=Grau.t
o database=Grau



00165E58                          4D 00 69 00 63 00 72 00          M.i.c.r.
00165E68  6F 00 73 00 6F 00 66 00 74 00 20 00 55 00 6E 00  o.s.o.f.t. .U.n.
00165E78  69 00 66 00 69 00 65 00 64 00 20 00 53 00 65 00  i.f.i.e.d. .S.e.
00165E88  63 00 75 00 72 00 69 00 74 00 79 00 20 00 50 00  c.u.r.i.t.y. .P.
00165E98  72 00 6F 00 74 00 6F 00 63 00 6F 00 6C 00 20 00  r.o.t.o.c.o.l. .
00165EA8  50 00 72 00 6F 00 76 00 69 00 64 00 65 00 72 00  P.r.o.v.i.d.e.r.
00165EB8  00 00 76 00 6F 00 73 00 13 00 0D 00 32 01 08 00  ..v.o.s....2.
00165EC8  88 00 00 00 64 00 72 00 69 00 76 00 65 00 72 00  ˆ...d.r.i.v.e.r.
00165ED8  3D 00 7B 00 53 00 51 00 4C 00 20 00 53 00 65 00  =.{.S.Q.L. .S.e.
00165EE8  72 00 76 00 65 00 72 00 7D 00 3B 00 73 00 65 00  r.v.e.r.}.;.s.e.
00165EF8  72 00 76 00 65 00 72 00 3D 00 73 00 75 00 63 00  r.v.e.r.=.s.u.c.
00165F08  63 00 6F 00 6F 00 73 00 65 00 6D 00 69 00 67 00  c.o.o.s.e.m.i.g.
00165F18  3B 00 75 00 69 00 64 00 3D 00 73 00 61 00 3B 00  ;.u.i.d.=.s.a.;.
00165F28  70 00 77 00 64 00 3D 00 73 00 72 00 68 00 76 00  p.w.d.=.s.r.h.v.
00165F38  3B 00 64 00 61 00 74 00 61 00 62 00 61 00 73 00  ;.d.a.t.a.b.a.s.
00165F48  65 00 3D 00 47 00 72 00 61 00 75 00 00 00 74 00  e.=.G.r.a.u...t.
00165F58  15 00 13 00 01 01 0C 00 90 3B 11 77 58 3C 11 77

No lo vi detallado, talvez @karmany si tiene tiempo pueda dar un analisis mas detallado.

Saluos.
69  Foros Generales / Noticias / Re: 23 detenidos por piratear software de Microsoft en: 25 Febrero 2011, 19:33 pm
Pues siendo concreto : planteé la idea de ofrecer una garantia sobre algo que pueda dañar mi equipo por falta de medios bajo Windows. Lo denomino como "burrada" lo dicho POR MI, quede esto claro, porque considero igual de burrada el que me vendan un software con estas taras de seguridad CONOCIDAS incluso antes de sacar un producto de Microsoft en algún caso.

En ese caso habría que pedir ese tipo de garantía a la compañia de electricidad, obviamente uno o más bajones o cortes de electricidad pueden dañar un equipo, igualmente a las ISP's que permiten descargar cualquier archivo de internet que tb pueden dañar tu equipo y demás...

Como verás eso es independiente del S.O. , tanto para Windows, Linux, Unix, etc.
Hay tanto software legal que por mal uso pueden dañar tu equipo y las causas pueden ser tantas, empezando del mismo usuario, el hardware, programas, etc.

Saludos.
70  Foros Generales / Noticias / Re: 23 detenidos por piratear software de Microsoft en: 25 Febrero 2011, 18:07 pm
No quiero insistir, pero como lo he visto, espero que entiendas porque creo que no estoy equivocado y que no debo asumir tal cosa : Tacho de burrada lo que YO he dicho sobre la garantia del software, y basta con leerlo despacito para dare cuenta... entiendo que tales tochos de mensaje es un tostón leerlos, no te recrimino tal cosa... pero si por no leerlo dices cosas falsas... es responsabilidad tuya y de nadie más, no me metas en un saco que no me corresponde... tacho de burrada lo que YO he dicho... leeló tranquilo y te darás cuanta de quien se equivoca  ;)

Morcap77 dijo : Lo que pretendo dar a entender es que si es lícito que una empresa venda software que puede resultar dañino como el sistema operatico de tu vida, por la misma falta de lógica podría decir la burrada que tu me preguntas si conozco

Esa burrada, por si quieres que te ahorre la leida, es lo que le respondo a 43H4FH44H45H4CH49H56H45H , al cual comento que "esa burrada que yo digo" tal y cual... no he dicho que el haya dicho una burrada, porque si remontas podrás ver que ÉLl NO DICE, EL... PREGUNTA y por mi parte encantado de que lo haga... no le he calificado de nada... es que ojo, entendiendo mal algo, ahora resulta que tambien le contesto a él mal... no macho, no le des la vuelta, si no lo entiende él o no lo entiendes tú, me preguntais y yo os contesto, pero acusar así de ligeramente... no me parece correcto. Por eso te repito, no te voy a decir que estoy equivocado, simplemente porque considero que NO ES ASÍ.

 :laugh:
Entonces reitero mi pregunta:

:huh: hay alguna empresa o fabricante de software que pueda dar la garantía que mencionas?

Pero primero ordena tus palabras y piensa bien lo que escribes,  puesto que escribes mucho y ya ni ganas de leerte, hasta ahora sigues dando vueltas pero con nada concreto.

Ahora solo aclaremos ese comentario que hiciste de la garantía, solo voy a mostrar lo obvio y lo mal que esta planteado tu comentario.

Saludos.
Páginas: 1 2 3 4 5 6 [7] 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ... 41
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines