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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Temas
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19
41  Programación / Programación C/C++ / Error 126: LoadLibrary falla C++ en: 15 Enero 2016, 15:57 pm
Buenas, resulta que necesito cargar unas librerías de firefox de su path de instalación para intentar hacer un password recovery y comprobar que funciona.

El problema me lo da al tratar de cargar cualquiera de sus librerías:

Código
  1. HMODULE LoadLibrary2(char *libDir, char *libName){
  2.  
  3. char loadPath[MAX_PATH] = { 0 };
  4. HMODULE tmpLib = NULL;
  5.  
  6. strcpy(loadPath, libDir);
  7. strcat(loadPath, "\\");
  8. strcat(loadPath, libName);
  9.  
  10. if (!strcmp(libName, "nss3.dll")) {
  11. tmpLib = LoadLibraryA(loadPath);
  12. }
  13. else if (!strcmp(libName, "plc4.dll")) {
  14. tmpLib = LoadLibraryA(loadPath);
  15. }
  16. else {
  17. tmpLib = LoadLibraryA(loadPath);
  18. }
  19.  
  20. if (NULL == tmpLib) {
  21. printf("Failed to load library %s, code %d\n", libName, GetLastError());
  22. return NULL;
  23. }
  24.  
  25. printf("%s loaded successfuly\n", libName);
  26.  
  27. return tmpLib;
  28. }
  29.  

Para cargar a cualquier librería de FF se llama esta función, el caso es que LoadLibrary devuelve HMODULE = NULL, entonces llamo a GetLastError() y me devuelve 126 error.

En mi caso el error es:

Citar
ERROR_MOD_NOT_FOUND

    126 (0x7E)

    The specified module could not be found.


Que el módulo no puede ser encontrado, algo extraño ya que las librerías dinámicas están en el path correcto con el que llamo a la función y además utilizo permisos de administrador.

He probado a copiar y pegar la librería nss3.dll a el directorio en ejecución y daba el mismo error.

¿Qué puede ser?, un saludo.

Edito: Bueno, el código es muy cuestionable, no es mío y lo acabaré retocando entero pero primero saber porque no carga la dll, porque no funciona LoadLibrary.

La llamada a la función LoadLibrary tiene como argumento por ejemplo:

"C:\Program Files (x86)\Mozilla Firefox\nss3.dll", obviando que si lo escribimos como cadena sería con dos '\' para que se muestren.

Saludos.

OJO: Me acabo de dar cuenta que en el código añade en la cabecera "utils.h", no se que tendrá ese archivo pero igual tiene algo que ver con esto.

Utilizo también LoadLibraryA pero y si el path tiene caracteres multybyte? MMmm, no creo que tenga que ver, pero puede que en otra situación pueda causar problemas.

No sé, compila sin errores.. solo eso de la librería.
42  Programación / Programación C/C++ / ¿Por qué FUNCIONA TAN BIEN este TCP checksum? 4.0 en: 4 Enero 2016, 09:23 am
Lo que hace la función es recibir como argumentos los bytes de un paquete tcp y su tamaño, entonces recalcula su tcp checksum simplemente ESO.

Ayudandome con wireshark y estudiando los paquetes tcp, miro donde comienza cada campo, direcciónes ip origen y destino, los bytes donde se encuentran, y demás, y con la teoría aprendo a calcular las cosas.

Bien, se supone que para calcular un tcp checksum necesito:

http://www.roman10.net/how-to-calculate-iptcpudp-checksumpart-1-theory/

Citar

source address: 32 bits/4 bytes, taken from IP header
destination address: 32bits/4 bytes, taken from IP header
resevered: 8 bits/1 byte, all zeros
protocol: 8 bits/1 byte, taken from IP header. In case of TCP, this should always be 6, which is the assigned protocol number for TCP.
TCP Length: The length of the TCP segment, including TCP header and TCP data. Note that this field is not available in TCP header, therefore is computed on the fly.

Note that TCP pseudo header does not really exist, and it’s not transmitted over the network. It’s constructed on the fly to compute the checksum.

If a TCP segment contains an odd number of octets to be checksummed, the last octect is padded on the right with zeros to form a 16-bit word. But the padding is not part of the TCP segment and therefore not transmitted.

Lo que hago es eso, comienzo sumando ip de origen y destino, luego el numero de protocolo (con el byte de ceros a la izquierda que es indiferente y no lo pongo), luego sumo el tamaño del segmento tcp, tras mucho sudor lo conseguí pues coincide con el de wireshark y ahora los checksums me dan aproximados, y luego sumo los bytes de cabecera desde el byte que empieza hasta el final del mismo de 2 en 2 bytes, y luego con el payload tcp o campo de datos lo mismo hasta el final, y si es impar al ir sumando de 2 en 2 se queda sin pareja el ultimo byte, en ese caso hay que hacer un "padding a la derecha", que supongo que consiste en colocar un byte de ceros a la izquierda del ultimo byte para formar la ultima pareja del campo de datos o payload.

Código:

Código
  1. //http://www.arcesio.net/checksum/checksumTCP.html
  2. u_char* tcp_checksum(const u_char* _datos, int _tamaño)
  3. {
  4. u_char *checksum = new u_char[2];
  5. u_short sumando = 0, sumanda = 0;
  6. bitset<17> controlador;
  7.  
  8. if (_tamaño < 54)
  9. return nullptr;
  10.  
  11. //sumo ip origen e ip destino
  12. for (int i = 26; i < 33; i++){
  13. sumanda = (u_short)((_datos[i] << 8) + _datos[i + 1]);
  14. controlador = sumando + sumanda;
  15. sumando += sumanda;
  16. if (controlador[16] == 1)
  17. sumando++;
  18. i++;
  19. }
  20.  
  21. //sumo el byte de ceros y el numero de protocolo TCP
  22. sumanda = (u_short)0x06;
  23. controlador = sumando + sumanda;
  24. sumando += sumanda;
  25. if (controlador[16] == 1)
  26. sumando++;
  27.  
  28. //sumamos el tcp segment len
  29. sumanda = (u_short)((_datos[16] << 8) + _datos[17]) - ((u_short)((_datos[46] & 0xF0) >> 4) + (u_short)(_datos[14] & 0x0F)) * 4;
  30. controlador = sumando + sumanda;
  31. sumando += sumanda;
  32. if (controlador[16] == 1)
  33. sumando++;
  34.  
  35. //sumo todo el campo de cabecera con el checksum a cero
  36. for (int i = 34; i < 53; i++){
  37. if (i != 50){
  38. sumanda = (u_short)((_datos[i] << 8) + _datos[i + 1]);
  39. controlador = sumando + sumanda;
  40. sumando += sumanda;
  41. if (controlador[16] == 1)
  42. sumando++;
  43. }
  44. i++;
  45. }
  46.  
  47. //sumo todo el payload tcp
  48. for (int i = 54; i < _tamaño - 1; i++){
  49. sumanda = (u_short)((_datos[i] << 8) + _datos[i + 1]);
  50. controlador = sumando + sumanda;
  51. sumando += sumanda;
  52. if (controlador[16] == 1)
  53. sumando++;
  54. i++;
  55. }
  56.  
  57. if (_tamaño % 2){
  58. sumanda = (u_short)_datos[_tamaño - 1];
  59. controlador = sumando + sumanda;
  60. sumando += sumanda;
  61. if (controlador[16] == 1)
  62. sumando++;
  63. //if its odd the last octect is padded on the right with zeros to form a 16 - bit word
  64. }
  65.  
  66. if (_tamaño % 2)cout << "Impar";
  67.  
  68. sumando = sumando & 0xFFFF;
  69. sumando = ~sumando;
  70. checksum[0] = (sumando >> 8) & 0x00FF;
  71. checksum[1] = sumando & 0x00FF;
  72. return checksum;
  73. }
  74.  

Ejemplo de salida:

Código:
7626==763a
8299==82ad
487b==488f
12dc==12f0
81d3==81e7
7a56==7a6a
289c==28b0
24c2==24d6
cfd6==cfea
2158==Impar2b62
1d25==1d39
82a4==Impar8cae
1651==1665
5d5d==Impar6767
abff==Imparb69
e6b6==e6ca
ca7e==ca92
b759==b76d
744f==7463
4f27==Impar8a0
b2bc==Imparbcc6
cfb6==Impard9c0
5a93==Impar649d
1b32==Impar253c
2c7==Imparcd1
5b40==Impar654a
f37a==Imparfd84
9f77==9f8b
40b9==Impar4ac3
17b==Imparb85
142e==Impar1e38
9acb==9adf
eab3==eac7
678d==Impar7197
3c56==Impar4660
16d==181

Como se puede observar en la salida, cuando es par hay una diferencia siempre constante entre el checksum original y el recalculado, sin embargo cuando es impar no encuentro la relación que difiere entre ellos.

¿que falla? ¿por qué no coinciden?, he sumado todos los campos que piden, tal y como piden.

PD: y no me seáis guiris que responden sin cerebro:

http://stackoverflow.com/questions/34582015/tcp-checksum-3-0-version

Saludos y gracias.

EDICION DELICATESSE MAAAXIMAAA: HOY ES EL DÍA, HOY ES EL DÍA que conseguí calcular el tcp checksum. Hoy es mí día, resulta que el padding cuando eran impares hay que añadir un byte de ceros en la última posición, no en la penúltima como hacía es decir, añader el cero a la derecha no a la izquierda, ahora si:

Código:
	if (_tamaño % 2){
sumanda = (u_short)(_datos[_tamaño - 1] << 8) + 0;
controlador = sumando + sumanda;
sumando += sumanda;
if (controlador[16] == 1)
sumando++;
//if its odd the last octect is padded on the right with zeros to form a 16 - bit word
}
        sumando += 20;
if (_tamaño % 2)cout << "Impar";
sumando = sumando & 0xFFFF;
sumando = ~sumando;
checksum[0] = (sumando >> 8) & 0x00FF;
checksum[1] = sumando & 0x00FF;
return checksum;
}

Queríais tcp checksum, tomad tcp checksums:

Código:
504c==504c
e2fc==e2fc
4049==4049
3f42==Impar3f42
baa2==Imparbaa2
5d75==5d75
45bb==Impar45bb
3165==Impar3165
eb0==eb0
42f6==42f6
ce7==ce7
203d==Impar203d
6946==Impar6946
e57==Impare57
3229==Impar3229
ae92==Imparae92
6abd==Impar6abd
14d==Impar14d
c18e==Imparc18e
6372==Impar6372
6087==Impar6087
59fe==59fe
e086==Impare086
e475==Impare475
5f38==5f38

Eso sí, si me diriaís porque cohone estoy sumando 20 para que funcione ya sería lo maximo. Pero me es ya un poco indiferente porque.... FUNCIONAAAAA!!!!.

SOOLUCIONADO TAMBIEN:

Código
  1. sumanda = (u_short)((_datos[16] << 8) + _datos[17]) - (u_short)((_datos[46] & 0xF0) >> 4)  *4;// (u_short)(_datos[14] & 0x0F)) * 4;
  2.  

https://www.youtube.com/watch?v=m5voqcN9zm4

Me abro el champan.

Os fije que caería esta semana, y no paso de primera hora.

Saludos.

43  Programación / Programación C/C++ / La estocada final al TCP checksum en: 3 Enero 2016, 19:17 pm
Bueno tras ponerme esta mañana conseguí hacer el tcp segment len la parte más dificil aunque da mucho asco en su conjunto:

Código
  1. //sumo todo el payload tcp
  2. for (int i = 54; i < _tamaño - 1; i++){
  3. if (i + 1 == _tamaño) break;
  4. sumanda = (u_short)((_datos[i] << 8) + _datos[i + 1]);
  5. controlador = sumando + sumanda;
  6. sumando += sumanda;
  7. if (controlador[16] == 1)
  8. sumando++;
  9. i++;
  10. }
  11.  
  12. if ((_tamaño - 1) % 2 == 0){
  13. sumanda = (u_short)_datos[_tamaño - 1];
  14. controlador = sumando + sumanda;
  15. sumando += sumanda;
  16. if (controlador[16] == 1)
  17. sumando++;
  18. }
  19.  

Pero me falla la parte donde se suman los datos tcp, el payload, tengo que ir de 16 bits en 16 bits. Cambia si es par o impar y en eso estoy, a ver si alguien lo ve a simple vista, no se que ponia tambien que lei de rellenar con ceros.

Igual sumo dos veces el ultimo byte.. ya lo he depurado mentalmente y no enuentro manera no estoy muy freso, una hand pls, QUE YA LO TENGO CASI!!! TRAS MEEEESSES AÑOS LUSTROS.

Edito: sumar del byte 54 hasta el final sea par o impar sin repetir bytes claro y de 16 bits en 16 bits (u_short).

Ejemplos de comparacion final de tcp checksum verdadero y el mio calculado, respectivamente:

Código:
3d10== 1506 3d24
de5e== 190 de72
7527== 396 753b
6fae== 397 79c2
f0c9== 397 fadd
dabd== 396 dad1
9e96== 397 a8aa
f5d== 397 ff21
8c62== 1478 8c76
283e== 309 3252

Lo primero es el checksum verdadero, lo segundo es el tamaño del paquete (notese que si es par con sumar 14 al checksum nuestro ya tendriamos el verdadero siempre) sin embargo cuando es impar se va mas de resultado.

Creo que me falta el padding que no se ni lo que es, pero ya buscaré, este otro codigo que encontré hace tiempo, y está haciendo lo mismo sumar cabecera y datos de 16 en 16, en el ultimo paso no se que hace ni porque eso del padding, pero en ello estoy.

Código
  1.  
  2. // Calculate the sum                                            //
  3.         sum = 0;
  4.         while (len > 1)
  5. {
  6.                 sum += *buf++;
  7.                 if (sum & 0x80000000)
  8.                         sum = (sum & 0xFFFF) + (sum >> 16);
  9.                 len -= 2;
  10.         }
  11.  
  12.         if (len & 1)
  13.                 // Add the padding if the packet lenght is odd          //
  14.                 sum += *((uint8_t *)buf);
  15.  

Edito: HAHAHAH AMIGOS, mucho google traductor ya decia yo que era porque era par o impar, "odd" en ingles es impar, en ese caso "add the padding" que no se que es, pero bueno jajaja poco a poco descifrando. (inverse enginnering) #esduroderoer

Ok se refiere a que si es impar ponga ceros en el final y bien esto ya lo hice, puse ceros delante y detrás del ultimo byte, es decir si terminaba en 0x12 0x14 0x 30 y era impar he probado a dejar 0x3000 y 0x0030 y el resultado malo tambien ojj, bueno ya casi lo tengo, caerá esta semana.

Saludos.
44  Seguridad Informática / Bugs y Exploits / Metasploit en redes P2P en: 3 Enero 2016, 02:50 am
Buenas, supongamos que instalo un troyano en mi ordenador y quiero que sea explotable. ¿necesitaría que fuera un servidor no? ¿que tuviera puertos abiertos para que sea explotable desde internet?.

Ahora bien, supongamos que el troyano usa P2P y esta conectado en una amplia red de ordenadores, imaginemos que soy un nodo de ellos y quiero utilizar su puerta trasera con metasploit, ¿se podría hacer verdad?, una camara remota o lo que sea.

Pero debería de ser con la conexión red del troyano que es el que está conectado en la P2P, con metasploit no podría conectarme a el porque no es servidor, solo es servidor y tiene el socket mi nodo P2P, luego debería de ejecutar metasploit desde ese nodo.

¿es posible?.

Saludos y grache.
45  Programación / Programación C/C++ / ¿Por qué este servicio no muestra ventana? en: 27 Diciembre 2015, 21:57 pm
Es un copy/paste hay muchas cosas que cambiaría si y no es la manera.. pero simplemente quiero que el servicio muestre una ventana diciendo si soy admin o no cuando se ejecuta nada más, es de codeproyect el código.

Código
  1. #include <Windows.h>
  2. #include <tchar.h>
  3.  
  4. bool ejecucion_admin()
  5. {
  6. HANDLE h = NULL;
  7. if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &h)){
  8. TOKEN_ELEVATION Elevation;
  9. DWORD cbSize = sizeof(TOKEN_ELEVATION);
  10. if (GetTokenInformation(h, TokenElevation, &Elevation, sizeof(Elevation), &cbSize)){
  11. CloseHandle(h);
  12. return Elevation.TokenIsElevated;
  13. }
  14. }
  15. CloseHandle(h);
  16. return false;
  17. }
  18.  
  19. SERVICE_STATUS        g_ServiceStatus = { 0 };
  20. SERVICE_STATUS_HANDLE g_StatusHandle = NULL;
  21. HANDLE                g_ServiceStopEvent = INVALID_HANDLE_VALUE;
  22.  
  23. VOID WINAPI ServiceMain(DWORD argc, LPTSTR *argv);
  24. VOID WINAPI ServiceCtrlHandler(DWORD);
  25. DWORD WINAPI ServiceWorkerThread(LPVOID lpParam);
  26.  
  27. #define SERVICE_NAME  _T("My Sample Service")
  28.  
  29. int _tmain(int argc, TCHAR *argv[])
  30. {
  31. OutputDebugString(_T("My Sample Service: Main: Entry"));
  32.  
  33. SERVICE_TABLE_ENTRY ServiceTable[] =
  34. {
  35. { SERVICE_NAME, (LPSERVICE_MAIN_FUNCTION)ServiceMain },
  36. { NULL, NULL }
  37. };
  38.  
  39. if (StartServiceCtrlDispatcher(ServiceTable) == FALSE)
  40. {
  41. OutputDebugString(_T("My Sample Service: Main: StartServiceCtrlDispatcher returned error"));
  42. return GetLastError();
  43. }
  44.  
  45. OutputDebugString(_T("My Sample Service: Main: Exit"));
  46. return 0;
  47. }
  48.  
  49.  
  50. VOID WINAPI ServiceMain(DWORD argc, LPTSTR *argv)
  51. {
  52. DWORD Status = E_FAIL;
  53.  
  54. OutputDebugString(_T("My Sample Service: ServiceMain: Entry"));
  55.  
  56. g_StatusHandle = RegisterServiceCtrlHandler(SERVICE_NAME, ServiceCtrlHandler);
  57.  
  58. if (g_StatusHandle == NULL)
  59. {
  60. OutputDebugString(_T("My Sample Service: ServiceMain: RegisterServiceCtrlHandler returned error"));
  61. goto EXIT;
  62. }
  63.  
  64. // Tell the service controller we are starting
  65. ZeroMemory(&g_ServiceStatus, sizeof (g_ServiceStatus));
  66. g_ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
  67. g_ServiceStatus.dwControlsAccepted = 0;
  68. g_ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
  69. g_ServiceStatus.dwWin32ExitCode = 0;
  70. g_ServiceStatus.dwServiceSpecificExitCode = 0;
  71. g_ServiceStatus.dwCheckPoint = 0;
  72.  
  73. if (SetServiceStatus(g_StatusHandle, &g_ServiceStatus) == FALSE)
  74. {
  75. OutputDebugString(_T("My Sample Service: ServiceMain: SetServiceStatus returned error"));
  76. }
  77.  
  78. /*
  79. * Perform tasks neccesary to start the service here
  80. */
  81. OutputDebugString(_T("My Sample Service: ServiceMain: Performing Service Start Operations"));
  82.  
  83. // Create stop event to wait on later.
  84. g_ServiceStopEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
  85. if (g_ServiceStopEvent == NULL)
  86. {
  87. OutputDebugString(_T("My Sample Service: ServiceMain: CreateEvent(g_ServiceStopEvent) returned error"));
  88.  
  89. g_ServiceStatus.dwControlsAccepted = 0;
  90. g_ServiceStatus.dwCurrentState = SERVICE_STOPPED;
  91. g_ServiceStatus.dwWin32ExitCode = GetLastError();
  92. g_ServiceStatus.dwCheckPoint = 1;
  93.  
  94. if (SetServiceStatus(g_StatusHandle, &g_ServiceStatus) == FALSE)
  95. {
  96. OutputDebugString(_T("My Sample Service: ServiceMain: SetServiceStatus returned error"));
  97. }
  98. goto EXIT;
  99. }
  100.  
  101. // Tell the service controller we are started
  102. g_ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;
  103. g_ServiceStatus.dwCurrentState = SERVICE_RUNNING;
  104. g_ServiceStatus.dwWin32ExitCode = 0;
  105. g_ServiceStatus.dwCheckPoint = 0;
  106.  
  107. if (SetServiceStatus(g_StatusHandle, &g_ServiceStatus) == FALSE)
  108. {
  109. OutputDebugString(_T("My Sample Service: ServiceMain: SetServiceStatus returned error"));
  110. }
  111.  
  112. // Start the thread that will perform the main task of the service
  113. HANDLE hThread = CreateThread(NULL, 0, ServiceWorkerThread, NULL, 0, NULL);
  114.  
  115. OutputDebugString(_T("My Sample Service: ServiceMain: Waiting for Worker Thread to complete"));
  116.  
  117. // Wait until our worker thread exits effectively signaling that the service needs to stop
  118. WaitForSingleObject(hThread, INFINITE);
  119.  
  120. OutputDebugString(_T("My Sample Service: ServiceMain: Worker Thread Stop Event signaled"));
  121.  
  122.  
  123. /*
  124. * Perform any cleanup tasks
  125. */
  126. OutputDebugString(_T("My Sample Service: ServiceMain: Performing Cleanup Operations"));
  127.  
  128. CloseHandle(g_ServiceStopEvent);
  129.  
  130. g_ServiceStatus.dwControlsAccepted = 0;
  131. g_ServiceStatus.dwCurrentState = SERVICE_STOPPED;
  132. g_ServiceStatus.dwWin32ExitCode = 0;
  133. g_ServiceStatus.dwCheckPoint = 3;
  134.  
  135. if (SetServiceStatus(g_StatusHandle, &g_ServiceStatus) == FALSE)
  136. {
  137. OutputDebugString(_T("My Sample Service: ServiceMain: SetServiceStatus returned error"));
  138. }
  139.  
  140. EXIT:
  141. OutputDebugString(_T("My Sample Service: ServiceMain: Exit"));
  142.  
  143. return;
  144. }
  145.  
  146.  
  147. VOID WINAPI ServiceCtrlHandler(DWORD CtrlCode)
  148. {
  149. OutputDebugString(_T("My Sample Service: ServiceCtrlHandler: Entry"));
  150.  
  151. switch (CtrlCode)
  152. {
  153. case SERVICE_CONTROL_STOP:
  154.  
  155. OutputDebugString(_T("My Sample Service: ServiceCtrlHandler: SERVICE_CONTROL_STOP Request"));
  156.  
  157. if (g_ServiceStatus.dwCurrentState != SERVICE_RUNNING)
  158. break;
  159.  
  160. /*
  161. * Perform tasks neccesary to stop the service here
  162. */
  163.  
  164. g_ServiceStatus.dwControlsAccepted = 0;
  165. g_ServiceStatus.dwCurrentState = SERVICE_STOP_PENDING;
  166. g_ServiceStatus.dwWin32ExitCode = 0;
  167. g_ServiceStatus.dwCheckPoint = 4;
  168.  
  169. if (SetServiceStatus(g_StatusHandle, &g_ServiceStatus) == FALSE)
  170. {
  171. OutputDebugString(_T("My Sample Service: ServiceCtrlHandler: SetServiceStatus returned error"));
  172. }
  173.  
  174. // This will signal the worker thread to start shutting down
  175. SetEvent(g_ServiceStopEvent);
  176.  
  177. break;
  178.  
  179. default:
  180. break;
  181. }
  182.  
  183. OutputDebugString(_T("My Sample Service: ServiceCtrlHandler: Exit"));
  184. }
  185.  
  186.  
  187. DWORD WINAPI ServiceWorkerThread(LPVOID lpParam)
  188. {
  189. //MessageBoxA(NULL, "Error al abrir dll", "Cannot open DLL", MB_ICONERROR | MB_OK);
  190. OutputDebugString(_T("My Sample Service: ServiceWorkerThread: Entry"));
  191. if (ejecucion_admin())
  192. MessageBox(NULL, L"EJECUCION DE ADMIN", L"EJECUCION DE ADMIN", MB_ICONINFORMATION | MB_OK);
  193. else
  194. MessageBox(NULL, L"EJECUCION USUARIO", L"EJECUCION SIN NINGUN TIPO DE PRIVILEGIOS", MB_ICONINFORMATION | MB_OK);
  195. //  Periodically check if the service has been requested to stop
  196. while (WaitForSingleObject(g_ServiceStopEvent, 0) != WAIT_OBJECT_0)
  197. {
  198. MessageBoxA(NULL, "Error al abrir dll", "Cannot open DLL", MB_ICONERROR | MB_OK);
  199. /*
  200. * Perform main service function here
  201. */
  202.  
  203. //  Simulate some work by sleeping
  204. Sleep(3000);
  205. }
  206.  
  207. OutputDebugString(_T("My Sample Service: ServiceWorkerThread: Exit"));
  208.  
  209. return ERROR_SUCCESS;
  210. }
  211.  

Lo instalé y está en ejecución pero no muestra nada.

Bueno lo dejaré por hoy, ya lo miraré con detalle como funciona y demás.

O de otra manera, ¿dónde debería de ir el código?.

Saludos.
46  Programación / Programación C/C++ / UAC - Correr siempre como administrador app C++ en: 27 Diciembre 2015, 15:14 pm
Buenas, estoy creando un instalador para una aplicación que se va a correr siempre con privilegios de administrador, sino no tendría mucho sentido.

Para ello, pido permisos UAC en el primer momento y quiero que no se vuelvan a pedir más veces después de la primera.

Resulta que pensaba que con runas.exe se podía hacer, pero me he dado cuenta de que no tiene mucho que ver, antes en otros años quizás si se podía ahora no.

Código:
C:\Users\Usuario\Desktop>runas /savecred /user:Usuario "instalador.exe"

Me pide la contraseña y lo ejecuto, ya no me la vuelve a pedir más veces, OK pero no me aporta ningún privilegio de administrador, de hecho la aplicación no se ejecuta como tal a pesar de que he dicho que se ejecute como el usuario actual y he dado mi contraseña, vamos lo que hace es una ejecución normal de doble click, solo que te pide la contraseña porque permite pasar de un usuario a otro sin cerrar sesión, luego parece que no me interesa en absoluto runas.exe para la tarea.

Lo único que se me ocurre es lanzar el mensaje de UAC en runtime en bucle o algo así.

¿Alguna idea de como conseguirlo hacer? No me refiero solo a exploits... en plan me refiero a que a través de la contraseña del usuario y el usuario en sesión, alguna manera o comando para lanzarla como administrador, algunas ideas.

Saludos
47  Programación / Programación C/C++ / Extension spoofing C++, problema multibyte en: 20 Diciembre 2015, 11:18 am
Código
  1. wchar_t t = 0x202E;
  2. wstring w;
  3. w += 0x202E;
  4. wstring b = L"C:\\Users\\Usuario\\Desktop\\prueba" + w + L".exe";
  5. _wfopen(b.c_str() , L"wt");
  6.  

Inserto el carácter multibyte de "puntero de derecha a izquierda", para hacer el spoofing sin éxito, trabjo con wchar_t (16 bits), la cadena antes de llamar a wfopen() se muestra como:

"C:\Users\Usuario\Desktop\prueba"

¿qué pasa?, un saludo.
48  Programación / PHP / PHP IP local del cliente en: 16 Diciembre 2015, 19:15 pm
Ojj otra vez a escribir el post, odio el mensaje ese de que se te ha cerrado sesión justo cuando le das a enviar y tienes que iniciar sesión porque sino no te deja ni volver atrás porque te sale el login cargues lo que cargues inicias sesión y ya no puedes recuperar el mensaje OJJJ.

Bueno al tema:

Código
  1. <?php
  2. if(isset($_POST["ip"])){
  3. echo "IP a la que trata de conectarse: {$_POST["ip"]}";
  4. echo "<br>";
  5. echo "La IP de su router es: {$_SERVER['REMOTE_ADDR']}";
  6. echo "<br>";
  7. echo "Su IP en su red local es: {$_SERVER['HTTP_X_FORWARDED_FOR']}";
  8. echo "<br>";
  9. echo "El puerto que utiliza para la conexión es: {$_SERVER['REMOTE_PORT']}";
  10. echo "<br>";
  11. }
  12. ?>
  13.  

¿Por qué $_SERVER['HTTP_X_FORWARDED_FOR'] no contiene nada? ¿está deprecada la manera de obtener la ip local del cliente? Mi IP local es 192.168.1.34 por ejemplo, ¿por qué entonces no se muestra en el script? ¿y como conseguirla, pues me es necesaria y necesito coseguirla siempre que exista a ser posible?.

¿Alguna idea?.

Un saludo y gracias.

Edito: Reading... https://www.sitepoint.com/community/t/php-code-to-get-local-computer-ip-address/5697/9
https://en.wikipedia.org/wiki/TCP_hole_punching

Ahora entiendo, ¿puede depender de la NAT? Para conseguir conectar un equipo con otro necesito  "predictable NAT" en al menos uno de los equipos sino no se podrá producir la conexión entre ellos. Ya que el servidor no conocerá la ip local de un equipo del par que producirán conexión. Como pone en la tabla de la NAT en el último link.

Más interesante todavía entonces.
49  Programación / Programación C/C++ / Montar P2P descentralizada en: 14 Diciembre 2015, 05:56 am
Buenas, siemplemente si en una red P2P todos son cliente/servidor. ¿Cómo puede funcionar, si para hacer servidor nuestro ordenador necesitamos configurar el router entre otras cosas para que se pueda producir la conexión?.

Supongamos, que realizo una conexión al tracker y de él cargo una lista de ips y su puerto de servidor de los miembros conectados a la red P2P, entonces trataría de conectarme con ellos:

Código
  1. connect()

Apuntando a su IP y su puerto que he descargado, sin embargo para que esto funcione ellos deben de tener un servidor escuchando y un router configurado con NAT, u otros redireccionamientos.

¿Cómo entonces es posible que haya programas P2P que funcionen sin que toquen en nada la configuración del router?, ¿no son descentralizadas esas redes P2P, o hay otro mecanismo diferente al que expuse?, estaría bien saberlo.

Un saludo, y gracias.
50  Seguridad Informática / Análisis y Diseño de Malware / Firefox password recovery ¿path para cargar las dlls? en: 8 Diciembre 2015, 14:10 pm
Se necesitan para descifrar signons.sqlite que contiene las passwords cargar las siguientes dll:

Código
  1. #define NSS_LIBRARY_NAME   "nss3.dll"
  2. #define PLC_LIBRARY_NAME   "plc4.dll"
  3. #define NSPR_LIBRARY_NAME  "nspr4.dll"
  4. #define SQLITE_LIBRARY_NAME  "sqlite3.dll"
  5. #define MOZCRT_LIBRARY_NAME  "mozcrt19.dll"
  6. #define NSSU_LIBRARY_NAME  "nssutil3.dll"
  7. #define NSSU_LIBRARY_NAME  "nssutil3.dll"
  8. #define PLDS_LIBRARY_NAME  "plds4.dll"
  9. #define SOFTN_LIBRARY_NAME "softokn3.dll"
  10.  

Pero no encuentro donde están esas librerías he mirado en el directorio donde tengo firefox.exe la aplicación y solo aparece "nss3.dll", ¿han cambiado de nombre o están en otro sitio?. En el profilepath tampoco las he encontrado, a ver si alguien sabe algo.

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