Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Tut/Gotowce]Różne przydatne kody.


Xau

Rekomendowane odpowiedzi

Weteran
Opublikowano

Witacie, postanowiłem tutaj upchnąć kilka przydatnych kodów z c++, z związku którymi padało wiele pytań.

Tak, wiem że gotowce to zuoo, dlatego korzystać z tego tuta na własną odpowiedzialność.

 

1.Jak napisać spambota?

To chyba jedno z najczęściej zadawanych pytań, a więc kod wygląda mniej więcej tak:

 

 

 

 

 

#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
int main()
{
string slowo;
cout<<"wpisz slowo: ";
cin>>slowo;
cout<<"ile razy?: ";
int razy;
cin>>razy;
int litery;
char chl[128];
 char znak;


litery = slowo.length();					//<---Tutaj jest sprawdzane ile string ma liter


strncpy(chl, slowo.c_str(), 128);		 //<--- tutaj string jest konwertowany na tablice char



for(int j = 0; j < razy; ++j)			 //<-- petla jest wykonywana tle ile wynosi zmienna razy, czyli tyle ile chce uzytkownik
{


for(int i = 0; i < litery; ++i)			//<-- pętla, dzięki której jest wypisywana każda litera po kolei
{

Sleep(800);							 //<-- timmer, żeby nie było za szybko, można zrobić oczywiście tak, aby użytkownik wybierał prędkość
int rozmiar = i;
znak = chl[rozmiar];				 // tablica zrobina z stringa chl, jest przepisywana na zmienną znak

keybd_event(VkKeyScan(znak), 0, 0, 0);								 //<-- wypisywanie znaków
keybd_event(VkKeyScan(znak), 0, KEYEVENTF_KEYUP, 0);

}

}

return( 0 );
}

 

1.Program pyta co ma wypisywać

2.Program pyta ile razy ma to robić

3.SPAM!

W pętli z j(tej większej) można na koniec dać keybd_event z retrun(czyli enter) jako argument, co da że po każdym wyrazie będzie zatwierdzać

 

2.Jak zapisywać/wczytywać dane na dysku.

Do tego będzie nam potrzebny fstream, kod wygląda tak:

na końcu również podałem source małej gry konsolowej, którą napisałem 4fun, ale może się wam do czegoś przydać ;]

 

 

Zapisywanie:

 

 

#include <iostream>
#include <fstream>

using namespace std;

int main()
{

std::ofstream out("dane.txt");

out << "a\n"
	<< "b\n"
	<< "c\n"
	<< "d\n"
	<< "e\n";

out.close();

return 0;
}

 

Wczytywanie:

 



[spoiler][code]
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
string line;
std::ifstream in("dane.bin");
std::getline(in, line);
cout<<line;
return 0;
}

 

 

Gra:

W grze chodzi o to że jest wylosowywany 5 liter od A do B w pliku .txt, każda w innej linijce, użytkownik musi odgadnąć w której linijce jest litera A.

W 6 linijce pliku, jest zapisywany wynik, który jest zawsze wczytywany na początku i na końcu programu.

 

#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
#include <windows.h>
#include <ctime>
#include <sstream>





int main() {



std::ifstream in2("dane.bin");
std::string dan;


std::getline(in2, dan);
std::getline(in2, dan);
std::getline(in2, dan);
std::getline(in2, dan);
std::getline(in2, dan);
std::getline(in2, dan);			//<-- pobieramy zapisany wynik z ostatniej linijki

std::string wynik = dan;
int wyniki;
std::istringstream iss(wynik);
iss >> wyniki;

if(wyniki >200000)
{
wyniki = 0;
}




SetConsoleTitleA( "Strzelacz!" ); //<--nazywamy title bar
std::cout<<"\a";
start:
system("cls");// <-- czyścimy by nie robić syfu

HANDLE uchwyt;
uchwyt = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(uchwyt,4);

std::cout<<"Program tworzy 5-cio linijkowy plik tekstowy, w kazdej linijce jest wylosowana\nlitera od A do E, twoim zadaniem jest odgadniecie w ktorej linijce znajduje sie litera A\n"<<std::endl;
SetConsoleTextAttribute(uchwyt,6);
std::cout<<"																 Wynik:"<<wyniki<<std::endl;
SetConsoleTextAttribute(uchwyt,3);
std::cout<<"Wybierz poziom trudnosci: \n1 - Schematyczny\n2 - Przypadkowy\n\n";
wyb2:
char cll;
cll = getch();



SetConsoleTextAttribute(uchwyt,2);


srand((unsigned)time(0));
int los;

	los = (rand()%5)+1; //<-- losujemy wersję kody, potem się domyślisz o co chodzi.





if(cll == '1')
{
std::cout<<"Wylosowana wersja(tylko dla poziomu trudnosci - Schematyczny): "<<los<<std::endl;
}
if(cll != '2' && cll != '1')
{

goto wyb2;
}



std::ofstream out("dane.bin");		 //<-- zapisywanie pliku, właśnie tu są losowane wersje

if(los == 1)								
{


out << "a\n"
	<< "b\n"
	<< "c\n"
	<< "d\n"
	<< "e\n";

}

	if(los == 2)
{


out << "b\n"
	<< "c\n"
	<< "d\n"
	<< "e\n"
	<< "a\n";

}

	if(los == 3)
{


out << "c\n"
	<< "d\n"
	<< "e\n"
	<< "a\n"
	<< "b\n";

}

	if(los == 4)
{


out << "d\n"
	<< "e\n"
	<< "a\n"
	<< "b\n"
	<< "c\n";

}

	if(los == 5)
{


out << "e\n"
	<< "a\n"
	<< "b\n"
	<< "c\n"
	<< "d\n";

}






out<< wyniki;




out.close();



std::string line;






std::ifstream in("dane.bin");
std::cout<<"W ktorej linijce: ";

wyb3:
char cl;
cl = getch();

if(cl != '1' && cl != '2' && cl != '3' && cl != '4' && cl != '5')
{
goto wyb3;
}
else
std::cout<<cl;

switch(cl)
{

	case '1':
	 std::getline(in, line);


	break;
	case '2':
	 std::getline(in, line);
	 std::getline(in, line);
	break;
	case '3':
	 std::getline(in, line);
	 std::getline(in, line);
	 std::getline(in, line);
	break;
	case '4':
	 std::getline(in, line);
	 std::getline(in, line);
	 std::getline(in, line);
		std::getline(in, line);
	break;
	case '5':
	 std::getline(in, line);
	 std::getline(in, line);
	 std::getline(in, line);
		std::getline(in, line);
		 std::getline(in, line);			 //<--- czemu tak robimy? ponieważ gdybyśmy wpisali to x1 to wczytamy pierwszą linijkę, a tak 5

}










std::cout << "\nWylosowales litere: " << line << "\n";

SetConsoleTextAttribute(uchwyt,4);
if(line == "a" )
{
	std::cout<<std::endl<<"!TRAFILES!\n"<<std::endl;

wyniki = wyniki +1;

}
else
std::cout<<std::endl<<"!PUDLO!"<<std::endl;
SetConsoleTextAttribute(uchwyt,3);






std::ofstream out2("dane.bin");
out2<<"\n"
<<"\n"
<<"\n"
<<"\n"
<<"\n"
<<wyniki;					//<-- zapisujemy wynik
out2.close();


char cl2;
std::cout<<"Jeszcze raz?\nTak - 'T'\nNie - 'N'";
wyb:
cl2 = getch();


if(cl2 == 't')
{
goto start;
}

if(cl2 == 'n')
{
return 0;
}
else{

goto wyb;
}


}

 

 

3.Jak pobrać kolor z pulpitu

Czyli funkcja getpixel, właściwe jej użycie wygląda tak:

 

 

 

#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
HDC wszystko=GetDC(NULL); //<-- tworzymy uchwyt na na wszystko


int color,kolor;

kolor = GetPixel(wszystko, 500, 1000);	 //<--pobieramy dany pixel
color = GetBValue(kolor);					 //<-- Zwracamy wartość koloru niebieskiego, jak np, chcemy czerwony to piszemy GetRValue(kolor);
cout<<color;




return 0;
}

 

 

4.Edytowanie wartości adresów zmiennych.

Tzn. modyfikacja pamięci.

 

Wbrew pozorów jest to bardzo łatwe, gorzej z wyciąganiem adresów

Ja już wyciągnąłem swój adres, wgląda on tak 0x01A1FD4C, 0x z przodu musi być, ponieważ informuję to kompilator że jest to wartość zapisana w systemie szesnastkowym.

Musimy najpierw znaleźć okno za pomocą funkcji FindWindow, oraz jego identyfikator PID, następnie otwieramy proces i wpisujemy wartość do jakiegoś adresu zmiennej tego procesu.

Pokaże wam to na przykładzie cheata, którego napisałem na potrzeby poradnika, do gry cs 1.6 na kasę ;]

 

 

 

#include <iostream>
#include <Windows.h>
#define adres 0x01A1FD4C									 //definiujemy adres, dla wygody		

using namespace std;
int main()
{

int value = 555;													 //wartosc ktora bedzie wpisana
DWORD pid;														
HWND hwnd = FindWindow(0,"Counter-Strike");	 //Szukanie okna
GetWindowThreadProcessId(hwnd,&pid);			
HANDLE proces = OpenProcess(PROCESS_ALL_ACCESS,false,ind);
WriteProcessMemory(proces,(LPVOID)adres,&value,sizeof(value),0);	 //modyfikacja wartosci

return 0;
}

 

5.Klikacz

Aby napisać klikacza, czyli bota poruszającego myszką, wystarczą nam praktycznie dwie funkcje, mouse_event - odpowiednik keybd_event oraz SetCursorPos - wiadomo co robi.

 

#include <windows.h>
using namespace std;

int main()
{
SetCursorPos(2000, 10);											// Ustawiamy kursor, jeżeli bezmyślnie skopiowałeś kod, istnieje szansa że ci zamknie jakieś okno :3
mouse_event(MOUSEEVENTF_LEFTDOWN,0 ,0,0,0); // Wciskamy lewy klawisz myszy
mouse_event(MOUSEEVENTF_LEFTUP,0 ,0,0,0);		//"Odciskamy" lewy klawisz myszy
}

 

 

 

Oraz wersja z hotkeyem, na prośbę użytkownika 1234567654321

 

#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
while(true)
{


if (GetKeyState(VK_F8) &1)

{


SetCursorPos(500, 500);
	 mouse_event(MOUSEEVENTF_LEFTDOWN,0 ,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0 ,0,0,0);

}

}

}

 

 

 

 

//Wszystko jest gotowe do skopiowania i uruchomienia

 

Jak widzicie przy niektórych linijkach dodałem komentarze, żeby się łatwiej połapać

 

Dodam jeszcze więcej kodów, proponujcie w tym temacie co mam napisać!

 

 

 

 

 

Wszystkie source - by Ja...

Opublikowano

Dzięki za poradnik jutro postaram się jakiegoś spam bota wymyślić :)

Mam jeszcze kilka pytań które napiszę ci na PW :)

kat_menu2.pngkat_menu4.pngkat_menu18.pngkat_menu14.png

Opublikowano

Nie polecam korzystać z flagi PROCESS_ALL_ACCESS, ta flaga nie działa na wszystkich systemach jeśli nie mamy praw debugowania (przynajmniej tak jest kiedy kompilujemy program na Win Vista/7). Zamiast tego polecam stworzyć sobie makro:

#define PROCESS_ACCESS (PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION)

Taki zestaw flag nie ma tyle praw co PROCESS_ALL_ACCESS ale mają wszystko co potrzeba do operacji na pamięci.

Chcesz zarobić na własnym cheacie/bocie? Pisz na PM

Cracking, analiza programu/strony, boty (także web), cheaty

kwoh2cmd.png

  • 7 miesięcy temu...
Opublikowano

Wielki +, bardzo przydatny poradnik dla osób które za sobą mają już podstawy konsolki ;)

Dodatkowo poradnik napisany przejrzyście oraz po dostosowaniu sobie kodu można stworzyć coś ciekawego.

 

@UP Winapi może akurat być.

Weteran
Opublikowano

Hm...

Właściwie zastanawiałem się, czy aby nie zamknąć ten temat. Napisałem go dość dawno temu i wtedy niewiele umiałem w c++(a właściwie WinApi; nadal słabo je znam), więc ostrzegam, że niektóre kody mogą być błędnie napisane albo napisane z błędnym podejściem.

Póki co zostawiam, bo widzę, że dla niektórych ten temat jest pomocny.

  • 5 tygodni później...
Opublikowano

(GetKeyState(VK_F8) &1)

Do czego jest to &1 na końcu?

Smutek to skutek chęci w kontekście skutku

raczej niefrasobliwej wzglądu o treści zgryźliwej

ma postać walca co jeździ nam po palcach.

Weteran
Opublikowano

(GetKeyState(VK_F8) &1)

Do czego jest to &1 na końcu?

  • If the high-order bit is 1, the key is down; otherwise, it is up.
  • If the low-order bit is 1, the key is toggled. A key, such as the CAPS LOCK key, is toggled if it is turned on. The key is off and untoggled if the low-order bit is 0. A toggle key's indicator light (if any) on the keyboard will be on when the key is toggled, and off when the key is untoggled.

Jeżeli programowałeś w asme, to mniej więcej wiesz co powinien zwrócić ten operator.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...