[delphi]Po zamknieciu programu zamyka dany proces

0

Witam, mam problem nie mam pomysłu jak napisać program który po jego zamknięciu zabijał by inny proces? Prosiłbym o jakiś przykład

Mam jeszcze jedno pytanie wiem, że się da jakoś zabezpieczyć jakąś istniejący program jeżeli ktoś go uruchomi wyświetliło by mu się okno w którym trzeba by było podać hasło żeby program się uruchomił.
Nie mam kodu źródłowego tej aplikacji ponieważ nie została ona napisana <ort>przeze mnie </ort>lecz chce zrobić takie zabezpieczenie, dokładniej to taki AntyCheat do pewniej gry. Wiem, że był kiedyś taki program który modyfikował tak aplikacje ze dopiero jak jest jakiś proces uruchomiony to wtedy się uruchamia ale to łatwo ominąć wiec dlatego się pytam czy była by możliwość napisania takiego czegoś.

Pozdrawiam

0

Co do pierwszego pytania to do sprawdzenia czy jakiś proces jest uruchomiony możesz się posłużyć funkcją
FindWinow(NazwaKlasyOkna, TytulOknaProgramu); A jak ktoregoś parametru nie używasz to podajesz nil.
Jest też inna metoda na sprawdzenie czy konkretny plik exe jest uruchomiony. Do uses dodajesz TlHelp32 i:

function ProcessExists(ExeFileName: string): boolean;
var
  ContinueLoop : BOOL;
  FSnapshotHandle : THandle;
  FProcessEntry32 : TProcessEntry32;
begin
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
  Result := False;
  while Integer(ContinueLoop) <> 0 do
  begin
    if ((AnsiUpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
      AnsiUpperCase(ExeFileName)) or (AnsiUpperCase(FProcessEntry32.szExeFile) =
      AnsiUpperCase(ExeFileName))) then
    begin
      Result := True;
    end;
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;

Natomaist proces możesz zamknąć wysyląjąc do niego następujący komunikat. Uchwyt do procesu musisz
wcześniej pobrać poprzez funkcję FindWind, o której wspomniałem na początku mojego posta. Przykład:

var
  WinAmpHandle : THandle;
begin
  WinAmpHandle := FindWindow('Winamp v1.x', nil);
  SendMessage(WinAmpHandle, WM_SYSCOMMAND, SC_CLOSE, 0);
end;

To zamknie WinAmp'a. Możesz też ubić szybko proces podając nazwę pliku exe aplikacji poniższej funkcji:

function KillTask(ExeFileName: string): integer;
const
  PROCESS_TERMINATE = $0001;
var
  ContinueLoop : BOOL;
  FSnapshotHandle : THandle;
  FProcessEntry32 : TProcessEntry32;
begin
  result := 0;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
  while integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName))
    or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then
      Result := Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0));
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;

A co do zabezpieczenia programu hasłem to zrób osobną formatkę, która pokaże się po uruchomieniu tej
Twojej aplikacji z polem edycyjnym do wpisania hasła i dopóki hasło nie będzie poprawne to nie rób nic po
kliknięciu na jakiś przycisk "OK". Kiedy użytkownik wpisze poprawne hasło pokaż inną lub główną formatkę.
Tylko muszę Cię uprzedzić, że jeżeli użyjesz zwykłego porównania to byle cracker, nawet taki amator jak ja,
który ostatnio łamał cokolwiek (oprócz nogi :)) jakiś program z 5 lat temu to "rozniesie" Twoją protekcję imo
w ciągu kilku minut maks. Dlatego program trzeba na prawdę dobrze spakować i zabezpieczyć jakoś, ale ja
się na tym nie znam, potrafię jedynie odpalić DeDe i poradzić sobie z jakimś niespakowanym shitem, takim
jak choćby AntyMigacz. Nikomu niepotrzebny program, za który autor chce 30 złorych żeby grając sobie na
kurnik.pl ktoś nie widział że opuszczamy okno aplikacji. Program po wczytaniu do DeDe pokazuje nam, jak
na dłoni co w nim siedzi. Nie trzeba się nawet bawić żadnym debuggerem. Ale to tylko przykład, nie chcę tu
Ciebie zniechęcać, może zabezpieczysz jakoś swój program, ale w tym może niech pomogą Tobie tutaj inni.

0
olesio napisał(a)

A co do zabezpieczenia programu hasłem to zrób osobną formatkę

Olesio, sam mi pomogłeś z InputBox, ale nie zaproponowałeś, aby Burox skorzystał z tego zamiast tworzyć nowe formy. ;]

0

No tak Opi masz rację. Można użyć InputBox'a. Przy okazji przypomniało mi się, że na necie jest kod,
który pokazuje jak sprawić aby wpisywany tekst był za gwiazdkami, przy okazji w komentarzu jest też
ujęty przykład jak zmienić tekst na przycisku Anuluj, także możesz skorzystać z tej metody, no chyba,
że spodoabł Ci się mój moduł. Kod na: http://www.swissdelphicenter.ch/en/showcode.php?id=1208

0

Dzięki za szybką odpowiedź ;)

Co do tego zabezpieczenia programu to chce zrobić taką rzecz, że jeżeli włączymy normalnie program wyskoczy nam okno do wpisania hasła ale jeżeli uruchomimy specjalny program hasło zostaje samo automatycznie wpisane i program się włączy.

0

To chyba najprostszą rzeczą będzie nadanie temu programowi, który ma Ci pozwolić na uruchomienie
właściwego programu - jakąś wymyślną nazwę okna oraz nazwę formatki, która najlepiej była by dla
użytkownika niewidoczna. No i później właściwy program może sprawdzać poprzez FindFindow, wraz
z parametrami nazwaklasy oraz po przecinku nazwa okna - czy ten specialny program jest aktualnie
uruchomiony. Jeśli tak to pozwól uruchomić program. Jeśli nie to na przykład Application.Terminate.

0

jakąś wymyślną nazwę okna oraz nazwę formatki, która najlepiej była by dla
użytkownika niewidoczna.

Ale przecież są programiki dostępne, które pokazują nazwę okna itp.
Ja np mam taki programik, że po najechaniu na jakieś okno programu pojawiają się wszystkie dane na temat tego programu

(program do wyciągania tych danych nawet napisany jest w delphi)

0
olesio napisał(a)

No tak Opi masz rację. Można użyć InputBox'a. Przy okazji przypomniało mi się, że na necie jest kod,
który pokazuje jak sprawić aby wpisywany tekst był za gwiazdkami, przy okazji w komentarzu jest też
ujęty przykład jak zmienić tekst na przycisku Anuluj, także możesz skorzystać z tej metody, no chyba,
że spodoabł Ci się mój moduł. Kod na: http://www.swissdelphicenter.ch/en/showcode.php?id=1208

O to to, dzięki Olesio raz jeszcze ;-)

Burox napisał(a)

ale jeżeli uruchomimy specjalny program hasło zostaje samo automatycznie wpisane i program się włączy.

Tylko ty znasz procedurę deszyfrowania, więc przekazuj od razu odszyfrowane hasło do programu drugiego (bez pytania o hasło).

0

Zrobiłem na razie proste sprawdzanie hasła tylko mam jeden problem tzn jak zrobić żeby ta gra używała tej mojej dllki

0

Nie chcę się wdawać w dyskusje techniczne, bo znowu bym naklnął - jak coś nakodzisz to się pochwal, może znajdzie się jakiś straceniec co sprawdzi jak szybko to polegnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1