Jump to content

zorro59

Members
  • Posts

    25
  • Joined

  • Last visited

Posts posted by zorro59

  1. Si daca eu inchid windows-ul cu regedit de exemplu pornit?

    Daca este o cheie de run de exemplu, atunci e game over pentru ca nu stii sigur in ce ordine inchide windows programele, si nici nu primesti vreo notificare daca programul tau este inchis fortat => pierzi cheia.

  2. Stocati totul pe 2 servere. Pe primul server se stocheaza informatiile publice.

    Atunci cand cineva vrea sa acceseze informatiile private(user posts, ip login history, pm's, friends list) se deschide o conexiune securizata la server. In momentul in care se incearca iarasi o manevra de genul, taiati conexiunea si stergeti datele.

  3. Ok, am facut api hooking pentru toate procesele de tipul task manager.

    Acum mai trebuie sa il asculd de explorer.exe si aplicatiile de tipul regedit.

    Problema este ca functia RegEnumKey este definita ca DECLSPEC_IMPORT LSTATUS APIENTRY si nu pot sa obtin functia originala (GetProcAdress returneaza ERROR_PROC_NOT_FOUND).

    Am folosit dependancy walker si am vazut ca functia este importata de catre advapi32 din dll-ul "API-MS-WIN-CORE-LOCALREGISTRY-L1-1-0.DLL", dar nu reusesc sa obtin un pointer valid (primesc null).

    EDIT: am facut o greseala mult prea stupida. Incercam sa importez RegEnumKeyW, dar defapt imi trebuia RegEnumKeyExW, acum obtin un pointer valid, revin cu detalii.

    EDIT2: am terminat asta, acum am probleme cu FindNextFileW. Daca injectez dll-ul in cmd si folosesc comanda dir, totul este ok, fisierul este ascuns. Insa explorer.exe nu apeleaza functia de fiecare data cand acceseaza un folder de exemplu. Aveti idee cum sa il determin sa creada ca trebuie sa o apleleze (un fel de refresh).

  4. Am ajuns la un compromis, pana reusesc sa implementez ceva cel putin decent folosind api hooking.

    Am observat tiparul mesajelor, si atunci cand primeste anumite mesaje, verific daca un item exista in listview si atunci il sterg.

    Nu am observat flickering, nici pe viteza mare si nici impact asupra performantei, dar stiu ca nu e cum trebuie.

  5. WndProc ruleaza in spatiul de memorie al taskmanagerului.



    #pragma data_seg (".shared")
    HWND task = 0;
    HHOOK hook = 0;
    char name [128] = { '\0' };
    UINT WM_TEST = 0;
    #pragma data_seg ()
    #pragma comment(linker,"/SECTION:.shared,RWS")

    HINSTANCE hDll;

    char* SetTaskManagerHook()
    {
    task = FindWindow(NULL, TEXT("Windows Task Manager"));
    task = FindWindowEx(task, NULL, NULL, "Processes");
    task = FindWindowEx(task, NULL, NULL, "Processes");

    if (!task)
    return "Error finding window!";

    hook = SetWindowsHookEx( WH_CALLWNDPROC,(HOOKPROC)WndProc,
    hDll, GetWindowThreadProcessId(task, NULL) );


    while (strcmp(name, "") == 0)
    {
    Sleep(30);
    }
    UnhookWindowsHookEx(hook);
    return name;
    }
    BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved )
    {
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
    break;
    }
    hDll = (HINSTANCE) hModule;
    return TRUE;
    }

    Daca de exemplu modific variabila name, care este in shared, trebuie sa folosesc ReadProcessMemory pentru a obtine valoarea?

  6. Ok, deci eu trebuie sa filtrez niste mesaje pe care o anumita fereastra le primeste(Task Manager).

    In momentul in care apare mesajul LVM_INSERTITEMA sau LVM_INSERTITEMW eu trebuie sa le opresc daca ele contin numele aplicatiei mele.

    Am reusit sa obtin mesajele, dar nu pot sa obtin in nici un fel textul care este trimis (primesc valori de genul "409:00000409;041e:0000041e").

    Are cineva idei? (mentionez ca sunt pe x64).

    LRESULT CALLBACK WndProc(int nCode, WPARAM wParam,LPARAM lParam)
    {
    CWPSTRUCT* msg = (CWPSTRUCT*)lParam;
    if (msg->message == LVM_INSERTITEMW)
    {
    LVITEMW* l2 = (LVITEMW*)lParam;
    fstream file("C:\\test.txt", ios::app);
    file<<CW2A(l2->pszText)<<" wide"<<endl;
    file.close();
    }
    if (msg->message == LVM_INSERTITEMA)
    {
    LVITEM* lv = (LVITEM*)msg->lParam;
    fstream file("C:\\test.txt", ios::app);
    file<<lv->pszText<<endl;
    file.close();
    }
    return CallNextHookEx(hook, nCode, wParam, lParam);
    }

  7. Ti-am explicat ce este gresit cu strchr.

    Uitate aici de exemplu:

    strchr() help

    Sa luam stringul abcabc, si sa zicem ca noi vrem de cate ori este gasit caracterul 'a'.

    El va fi gasit pe pozitia 0, apoi se va avansa o pozitie (stringul nostru va deveni bcabc), unde vom gasi din nou pe pozitia 2 caracterul, apoi va deveni bc, nu vom mai gasi caracterul si functia va returna null.

    La tine gaseste mereu pe o pozitie caracterul si se blocheaza.

  8. Sau mai bine verifici in temp daca exista litera aceea, nu mai creezi o variabila noua.

    #include <iostream>
    #include <string.h>

    using namespace std;

    bool gasire(char c, char s1[100], char s2[100])
    {
    bool found = false;
    for (int i=0; i<strlen(s1); i++)
    {
    if (s1[i] == c)
    {
    s2[i] = c;
    found= true;
    }
    }

    if(found)
    return true;
    return false;
    }

    bool verifica(char s2[100])
    {
    int index=0;
    while (index < strlen(s2) && s2[index] != 'X')
    index++;
    if (index == strlen(s2))//toate caracterele nu sunt 'X'
    return true;
    return false;//mai exista 'X'
    }

    void main()
    {
    char s1[100], s2[100], c;
    int i, v=0;
    do
    {
    cout<<"Introduceti cuvantul "<<endl;
    cin>>s1;
    } while (strlen(s1) < 3 && cout<<"Cuvantul trebuie sa contina cel putin 3 litere distincte"<<endl);//ne trebuie cel putin 3 litere

    for(i=0;i<strlen(s1);i++) //tu trebuie sa verifici primele 2, de exemplu in cuvantul abcdabc, a trebuie aratat 'a' de 2 ori la inceput
    s2[i]='X';
    s2[strlen(s1)] = '\0';//terminatorul

    gasire(s1[0], s1, s2);//inlocuiesc primul caracter
    gasire(s1[strlen(s1)-1], s1, s2);//si ultimul
    cout<<s2<<endl;
    while(1)
    {
    cout<<"Introduceti o litera"<<endl;
    cin>>c;

    if(strchr(s2, (int)c) != NULL)//a mai fost introduc c in s2
    {
    cout<<"Litera a mai fost introdusa odata, ati pierdut o viata"<<endl;//aici poti sa ii spui doar mesajul, sa nu ii scazi din vieti
    cout<<"Mai aveti "<<5-++v<<" vieti."<<endl;
    cout<<s2<<endl;
    }
    else if(gasire(c,s1, s2))//a fost modificat s2
    {
    cout<<"Litera se afla in cuvant!"<<endl;
    cout<<s2<<endl;
    }
    else
    {
    cout<<"Litera nu se afla in cuvant. Mai aveti "<<5-++v<<" vieti."<<endl;
    cout<<s2<<endl;
    }
    if(v>=5)
    {
    cout<<"Ati pierdut!"<<endl;
    cout<<"Cuvantul era:"<<endl;
    cout<<s1<<endl;
    break;
    }
    if(verifica(s2))
    {
    cout<<"Felicitari! Ati ghicit cuvantul!"<<endl;
    break;
    }
    }
    cin>>i;//pauza
    }

    Good enough?

    La tine greselile sunt destule, de exemplu strchr nu face ce crezi tu:

    Returns a pointer to the first occurrence of character in the C string str.

    The terminating null-character is considered part of the C string. Therefore, it can also be located to retrieve a pointer to the end of a string.

    Adica daca il gaseste odata in string pe pozitia 1 sa zicem, el si a doua oara va cauta tot de la inceput, si va gasit iar la pozitia 1 => infinite loop.

  9. Citesti n linii cu getline, si obtii cuvantul.

    De exemplu:

    string word = "mamaie";

    string guess = "______";

    Dupa ce ai cuvantul, chemi o functie de genul (pentru primul si ultimul caracter, ca sa le inlocuiasca si in interior, apoi pentru ce introduce userul)

    bool Replace(char guess_char)

    {

    if (guess.find(guess_char) != -1)

    return false;//a fost ghicit deja

    if (word.find(guess_char) != -1))

    {

    int index = word.find(guess_char);//indexul la care se gaseste prima litera

    do

    {

    guess.replace(index, 1, guess_char);//schimbi din '_' in guess_char

    index = word.find(guess_char, index);

    }while (index != -1);//cauti caracterul in continuare, in cazul in care mai estepe undeva, il bagi din nou

    return true;//a ghicit, afisezi stringul nou

    }

    return false;//scazi vietile, nu a ghicit

    }

    Ceva de genul iti trebuie...

    @nedo faster than me :))

  10. Pentru ca hf a banat Romania, si ieri aveam nevoie de ceva informatii de acolo, am creat un mic programel in C# care aceseaza google cache si va permite acces la aproape tot.

    Necesita .net framework 3.5.

    Ss:

    cachea.png

    Exe:

    test.exe download - 2shared

    Virus scan:

    Multi-Engine Antivirus Scanner - Services - NoVirusThanks.org

    Pentru cei interesati / care nu au incredere in utilizatorii cu putine post-uri:

    Cod sursa:

    [C#] test-Designer - Pastebin.com

    [C#] test-code - Pastebin.com

    • Upvote 1
    • Downvote 1
  11. Nu sunt sigur ca am inteles bine intrebarea, dar m-am gandit la ceva...

    Odata cu executarea browserului, un alt program porneste care injecteaza niste cod (asculta un port si se pregateste sa transmita prin celalalt). Adresa ip a celui cu care vrei sa comunici se obtine folosit un serviciu de genul no-ip. De aici restul este usor.

  12. Linkul nu merge. In legatura cu headers, nu le-am inclus pentru ca este o parte dintr-un proiect mai amplu.

    LE: nici cu "run as administrator" nu merge.

    LE2: am gasit codul de care spui tu, dar nu are legatura cu ceea ce vreau eu. El trebuie sa trimita un mesaj unei ferestre care exista deja, eu am nevoie sa o creez.

  13. void main()
    {
    camhwnd = capCreateCaptureWindow ("camera window", WS_CHILD , 0,0, 320, 240, GetDesktopWindow(), 0);

    SendMessage(camhwnd,WM_CAP_DRIVER_CONNECT,0,0);
    cout<<GetLastError()<<endl;//returns 995
    //SendMessage(camhwnd,WM_CAP_DLG_VIDEOSOURCE,0,0);
    ShowWindow(camhwnd,SW_SHOW);

    SendMessage(camhwnd, WM_CAP_DRIVER_CONNECT,0,0);
    SendMessage(camhwnd, WM_CAP_SET_SCALE, true , 0);
    SendMessage(camhwnd, WM_CAP_SET_PREVIEWRATE, 10, 0);
    SendMessage(camhwnd, WM_CAP_SET_PREVIEW, true , 0);

    cout<<GetLastError();
    for (int i=0; i<10; i++)
    {
    capFileSaveDIB(camhwnd, "file.bmp");
    ConvertImage(L"file.bmp", L"file.jpeg", L"image/jpeg", 70);
    system("PAUSE");
    }
    }

    Codul functioneaza daca este rulat dintr-o aplicatie win32, dar cand incerc sa rulez din consola primesc error code 995 (nu se creaza fereastra). Stie cineva cum sa trec de asta/alta metoda?

  14. ImageShack Album - 8 images

    Ce mai am de facut:

    ->remote control

    ->mic/webcam

    ->use victims as tunnels

    ->uninstall server

    ->antis

    ->auto update server

    Astept critica/idei. Multumesc :)

    LE:

    Clientul este c#, serverul c++.

    Partea cu funny este aici: http://imageshack.us/f/28/unled3uj.png/

    Nu prea mai am idei ce sa adaug acolo, dar am lasat niste placeholders.

    Remote control este planuit, cu control mouse/keyboard.

×
×
  • Create New...