Skocz do zawartości

Rekomendowane odpowiedzi

Opublikowano

No tak, znowu mi się nudziło więc postanowiłem napisać DLL-a w którym znajdują się funkcje - które IMO brakują w GM-ie (GM6 - tylko na tym testowałem) :)

 

Wersja 2 here

 

------------------------------------------------------------------

 

Info z poprzedniej wersji 1.5

 

Funkcje:

 

Rejestr:

  • registry_delete_key - Kasuje klucz i wszystkie jego wartości z rejestru.
  • registry_delete_key_value - Kasuje podana wartość klucza z rejestru.
  • registry_find_key_first &
  • registry_find_key_next - Szuka podkluczy w kluczu ( Dzięki Markowi.S )
  • registry_find_key_value_first &
  • registry_find_key_value_next - Szuka wartości w kluczu ( Dzięki Markowi.S )
Schowek:
  • save_bmp_from_clipboard - jeśli w schowku znajduje się obrazek - zapisuje zawartość schowka do pliku bmp
Okna itp.:
  • show_message_box - Pokazuje Message Box z wczesniej ustawionymi opcjami przez show_message_box_options
  • show_message_box_options - Ustawia opcje dla wyświetlania MessageBoxa
  • window_find - Szuka okna poprzez podana nazwe klasy i/lub okna i zwraca jego uchwyt.
  • window_find_ex - Szuka potomnego okna poprzez podana nazwę klasy i/lub nazwę okna w podanym oknie i zwraca jego uchwyt.
Liczby:
  • real_to_hex - Konwertuje liczbę na HEX o podanej minimalnej długości stringa
  • hex_to_real - działanie odwrotne do powyższego :D
Pliki:
  • file_get_version - Sprawdza czy w pliku jest informacja o wersji (Version Info), w plikach exe, dll itp.
  • file_read_version_info - Wyczytuje wybrane informacje o wersji pliku (Version info), w plikach exe, dll itp.
Procesy:
  • process_find_first &
  • process_find_next - Szuka procesów ( Dzięki Moldisowi )
  • process_close - Zamyka proces ( po nazwie )
  • process_close_by_id - Zamyka proces poprzez podany ID. ( Dzięki Shyliosowi )
  • process_exists - Sprawdza czy dany proces jest uruchomiony ( Dzięki Markowi.S )
  • process_id_current - Pobiera Process ID procesu, który został właśnie wyszukany przez funkcje process_find_first/next.
  • process_id_from_name - Szuka ID procesu (PID) poprzez nazwę.
  • process_id_from_window_handle - Szuka ID procesu (PID) poprzez uchwyt okna
  • process_read_byte / short / long / double - Odczytuje zmienna typu (...) z pamięci procesu. ( Dzięki Pieterowi )
  • process_read_string - Odczytuje stringa z pamięci procesu ( Dzięki Pieterowi )
  • process_write_byte / short / long / double - Zapisuje zmienna typu (...) do pamięci procesu.
  • process_write_string - Zapisuje stringa do pamięci procesu
  • process_write_nstring - Zapisuje stringa do pamięci procesu razem z terminatorem na końcu ( dodaje zerowy bajt ) ( Dzięki Pieterowi )
  • process_protection - Ustawia dostęp do podanego regionu pamięci wybranego procesu. ( Dzięki Pieterowi )
  • xtend_set_debug_privilege - Po wywołaniu tej funkcji Xtend ma prawa dostępu do każdego procesu
Jak używać i więcej info w skryptach :)

 

Download v1.5:

http://www.gmclan.org/up541_4_Xtend15.html ( DLL + Example w GM6 )

 

A tu przykład autorstwa Pietera, pokazujący jak stworzyć bota do gier ( z Xtend.dll ):

https://forum.gmclan.org/index.php?showtopic=12366

Można w nim zobaczyć, jak za pomocą Xtenda można odczytać i zapisać dane do innego procesu ;P

  • 1 miesiąc temu...
Opublikowano

Update.

 

Nowe funkcje:

registry_find_key_first &

registry_find_key_next - Szuka podkluczy w kluczu ( Dzięki Markowi.S )

registry_find_key_value_first &

registry_find_key_value_next - Szuka wartości w kluczu ( Dzięki Markowi.S )

process_find_first &

process_find_next - Szuka procesów ( Dzięki Moldisowi )

process_close - Zamyka proces ( po nazwie ) [ po kij to ? xD ]

 

Poprawki:

- show_message_box teraz poprawnie wyświetla wiadomości z np. polskimi znakami. ( Dzięki Markowi.S )

- file_read_version_info teraz odczytuje każdy plik z informacjami o wersji.

 

No i zrobiłem przykład na szybko:

https://gmclan.org/up541_4_Xtend12.html ( DLL + Example w GM6 )

Opublikowano

Heh... ;x

Kawał dobrej roboty, ja nie skorzystam, ale inni... ;)

 

BTW.

Napisałem DLL'a i okazało się, że największy problem mam z użyciem go w GMie... :P

  • 2 tygodnie później...
Opublikowano

WriteProcessMemory jest ( alias process_write_string/byte/short/long/double ) w nowej wersji którą mam na dysku ( i w moim uploaderze, tylko że nie ma opisu funkcji ). Zaraz dodam ReadProcessMemory :P

Opublikowano

@Pieter: To akurat przetestujesz mi nowe funkcje :)

 

"ReadProcessMemory" zrobiłem na szybko bo nie mam czasu, więc jeśli będą jakieś błędy to się nie zdziwię ( nie testowałem w GM-ie ) ;D

 

Nowe funkcje:

 

window_find - Szuka okna poprzez podana nazwe klasy i/lub okna i zwraca jego uchwyt.

window_find_ex - Szuka potomnego okna poprzez podana nazwę klasy i/lub nazwę okna w podanym oknie i zwraca jego uchwyt.

process_close_by_id - Zamyka proces poprzez podany ID.

process_exists - Sprawdza czy dany proces jest uruchomiony

process_id_current - Pobiera Process ID procesu, który został właśnie wyszukany przez funkcje process_find_first/next.

process_id_from_name - Szuka ID procesu (PID) poprzez nazwę.

process_id_from_window_handle - Szuka ID procesu (PID) poprzez uchwyt okna

process_read_byte / short / long / double - Odczytuje zmienna typu (...) z pamięci procesu.

process_read_string - Odczytuje stringa z pamięci procesu

process_write_byte / short / long / double - Zapisuje zmienna typu (...) do pamięci procesu.

process_write_string - Zapisuje stringa do pamięci procesu

 

Mam nadzieję że nic nie pominąłem/pomyliłem :)

 

Download:

https://gmclan.org/up541_4_Xtend.html ( przykład nie pokazuje jak można użyć nowych funkcji )

Opublikowano

process_read_string nie zwraca string tylko real x_X popraw to jak najszybciej :P

ups.. mój błąd :D nie zobaczyłem 1 argumentu :S

 

GML
/*

---- Xtend DLL by Snake ----

 

process_read_string( ID Procesu, Adres, ilosc znakow ) - Odczytuje zmienna typu string z

pamieci procesu.

argument0: (real) ID procesu.

argument1: (real) Adres, z ktorego zostanie odczytana wartosc

argument2: (real) ilosc znakow do odczytania

 

Zwraca: (string) odczytany z pamieci. "" ( pusty string ) jesli nie udalo sie odczytac.

*/

 

return external_call( global._xtend_processreadstring, argument0, argument1 );

powinno wyglądać tak:

GML
/*

---- Xtend DLL by Snake ----

 

process_read_string( ID Procesu, Adres, ilosc znakow ) - Odczytuje zmienna typu string z

pamieci procesu.

argument0: (real) ID procesu.

argument1: (real) Adres, z ktorego zostanie odczytana wartosc

argument2: (real) ilosc znakow do odczytania

 

Zwraca: (string) odczytany z pamieci. "" ( pusty string ) jesli nie udalo sie odczytac.

*/

 

return external_call( global._xtend_processreadstring, argument0, argument1, argument2 );

 

może i tu był błąd... ale nadal zwraca tylko real ;/

 

Jak byś chciał poprawnie działającą funkcje odczytywania stringa z procesu to pisz na priv =P

 

EDIT:

Gorąca prośba do Ciebie Snake: Dodaj VirtualProtectEx do swojego dll'a. Potrzebuje go hardo :] byle szybko bo się rozkręcam ;d i zaraz cavebota do expienia w tibii napisze w gm lol

Opublikowano

Trzeba coś zadziałać :P a czity w GM hmm... To tylko podnieta dla newbie którzy nie znają innych języków programowania :P

 

SNAKE: potrzebuje żebyś do process_write_string dodał tak zwany null terminator... bo ta funkcja tylko nadpisuje pare liter i resztę zostawia. Żeby nadpisać wszystko muszę w GML pisać

 

GML
process_write_string(processID,adres,text);

process_write_byte(processID,adres+string_length(text),$00);

 

a twoje process_write_string powinno samo dodawać ten ostatni "bit" :P

Opublikowano

A nie można

GML
process_write_string(processID,adres,text + chr( 0 ) );
? Bo nie każdy może chcieć zapisywać null-terminated stringi :P

Zmień w process_write_string:

GML
return external_call( global._xtend_processwritestring, argument0, argument1, argument2 + chr( 0 ) );

:P

Opublikowano

niestety chr(0) nie działa ;p testowałem... no nic ;P trzeba będzie po prostu zrobić nowy skrypt o nazwie process_write_stringNULL czy coś takiego :P i on wywoła obie funkcje z dlla ^^

Opublikowano

No to mały update:

Nowe funkcje:

process_write_nstring - zapisuje stringi razem z nullem

process_protection (VirtualProtectEx) - Ustawia dostęp do podanego regionu pamięci wybranego procesu.

download:

https://gmclan.org/up541_4_Xtend14.html

 

EDIT: A tu "Nieoficjalne" example, pokazujące jak można użyć Xtenda ;D ( Publikowałem je wcześniej )

https://gmclan.org/up541_4_XtendExamples.html

Przykład "ASM" pokazuje jak można użyć funkcje zapisujące do pamięci, żeby zmodyfikować kod aplikacji z poziomu asemblera.

A przykład "close" pokazuje jak można zamknąć proces poprzez wyszukanie jego okna.

  • 2 miesiące temu...
  • 11 miesięcy temu...
Opublikowano

Nowa wersja, oznaczona numerkiem 2 ! >:D

Wprawdzie teraz bibliotekę pisałem głównie z myślą o manipulowaniu innymi programami, jednak w bibliotece można nadal znaleźć parę innych przydatnych funkcji. Dla uzyskania większej wydajności zmieniłem sposób jakim manipulowało się procesami w poprzednich wersjach - teraz trzeba je otwierać (wtedy przy wywołaniu jakiejkolwiek funkcji process_* podany proces był otwierany i zamykany w bibliotece). Dzięki wykorzystaniu GMAPI listowanie procesów, kluczy z rejestru itd. również wygląda inaczej niż wtedy - teraz mogłem użyć znacznie wydajniejszej metody wyliczania - do podanej ds_listy dodawane są odpowiednie wartości, tak więc nie trzeba już pisać pętli z funkcjami *find_first i *find_next ;D W pliku gm6 zdefiniowanych jest wiele stałych z WinAPI przydatnych przy np. wysyłaniu komunikatów czy zmiany stylu okna. A, i nie trzeba już wywoływać funkcji "xtend_set_debug_privilege", uprawnienia są dodawane przy inicjalizacji.

Jako że Delphi ssie, Xtenda również przepisałem do C++, dzięki czemu DLL nieco mniej waży ;p

Opisy funkcji znajdziecie w skryptach (niestety, tym razem w j. angielskim).

 

Nowa lista funkcji:

  • xtend_init / xtend_free - Inicjalizacja / zwalnianie biblioteki
  • system_get_color - Pobiera kolor danego elementu schematu kolorów ustawionego w Windowsie
  • system_get_memory_total / system_get_memory_available / system_get_memory_usage- Zwraca ilość pamięci (całkowita, użyta, wolna)
  • system_get_cpucount - Zwraca ilość procesorów (lub rdzeni)
  • system_is_runasadmin - Sprawdza czy gra została uruchomiona jako administrator
  • system_is_x64 - Sprawdza czy OS jest 64-bitowy
  • system_get_cpuclock / system_get_cpuclock_ex - Zwraca częstotliwość cyklu zegarowego procka
  • system_get_cpuname - Zwraca nazwę procka
  • convert_single_inttohex / convert_single_hextoint - Konwertuje podaną liczbę na hex i odwrotnie
  • convert_batch_inttohex / convert_batch_hextoint - Konwertuje listę liczb na listę "hexów" i odwrotnie
  • render_control_button / render_control_checkbox - Renderuje windowsowego buttona / checkboxa do sprite'a
  • screen_capture - Przechwytuje podany obszar ekranu i dodaje go jako sprite
  • screen_get_pixel - Pobiera kolor danego piksela z ekranu
  • app_oneinstance_init / app_oneinstance_free - Zabezpieczenie przed uruchomieniem gry gdy ta jest już uruchomiona.
  • clipboard_has_bitmap / clipboard_get_bitmap - Przechwytywanie mapy bitowej ze schowka
  • show_messagebox - Message box
  • window_get_process - Pobiera ID procesu który utworzył podane okno
  • window_get_desktop - Pobiera uchwyt okna pulpitu
  • window_get_active - Pobiera uchwyt aktywnego okna
  • window_get_focused - Pobiera uchwyt okna na którym skupiony jest system (fokus)
  • window_get_parent - Pobiera uchwyt rodzica danego okna
  • window_get_top - Pobiera uchwyt okna które jest na wierzchu
  • window_get_first / window_get_last / window_get_next / window_get_previous - Pobiera uchwyt okna zależnego od kolejności Z danego okna
  • window_find / window_find_ex - Szuka uchwytu okna
  • window_atpoint - Pobiera uchwyt okna na podanej pozycji
  • window_set_focus - Skupia system na danym oknie (daje fokus)
  • window_set_parent - Zmienia rodzica danego okna
  • window_set_position_ex - Zmienia pozycje danego okna
  • window_set_size_ex - Zmienia rozmiar danego okna
  • window_get_x_ex / window_get_y_ex - Pobiera pozycje danego okna
  • window_get_width_ex / window_get_height_ex - Pobiera rozmiar danego okna
  • window_set_text - Zmienia tytuł danego okna
  • window_get_text - Zwraca tytuł danego okna
  • window_get_classname - Zwraca nazwę klasy danego okna
  • window_set_visible_ex - Zmienia widoczność danego okna
  • window_get_visible_ex - Sprawdza widoczność danego okna
  • window_set_enabled - Włącza/wyłącza dane okno
  • window_get_enabled - Sprawdza czy dane okna jest włączone
  • window_close - Zamyka podane okno
  • window_bringtotop - Wyciąga podane okno na wierzch
  • window_restore - Przywraca okno
  • window_maximize - Maksymalizuje okno
  • window_is_maximized - Sprawdza czy dane okno jest zmaksymalizowane
  • window_minimize - Minimalizuje podane okno
  • window_is_minimized - Sprawdza czy dane okno jest zminimalizowane
  • window_set_topmost - Ustawia właściwość "zawsze na wierzchu" dla danego okna
  • window_is_topmost - Sprawdza czy podane okno ma właściwość "zawsze na wierzchu"
  • window_exists - Sprawdza czy podany uchwyt okna jest prawidłowy
  • window_is_child - Sprawdza czy podane okno jest oknem potomnym danego okna
  • window_enumerate_all - Listuje wszystkie okna
  • window_enumerate_process - Listuje wszystkie okna utworzone przez podany proces
  • window_set_opacity / window_set_transparentcolor / window_removetransparency - Zmiana przezroczystości okna
  • window_set_style - Zmienia styl okna
  • window_set_exstyle - Zmienia styl rozszerzony okna
  • window_set_classstyle - Zmienia styl danej klasy okna
  • window_get_style - Pobiera maskę stylów danego okna
  • window_get_exstyle - Pobiera maskę stylów rozszerzonych danego okna
  • window_get_classstyle - Pobiera maskę stylów danej klasy okna
  • window_refresh - Odświeża dane okno
  • window_sendmessage / window_postmessage - Wysyła komunikat do danego okna (SendMessage/PostMessage z WinAPI)
  • window_screentowindow_x / window_screentowindow_y - Konwertuje pozycję ekranową na pozycję zależną do danego okna
  • window_windowtoscreen_x / window_windowtoscreen_y - Działanie odwrotne do powyższego
  • window_screentoclient_x / window_screentoclient_y - Konwertuje pozycję ekranową na pozycję zależną do obszaru klienta danego okna
  • window_clienttoscreen_x / window_clienttoscreen_y - Działanie odwrotne do powyższego
  • process_enumerate_processes - Listuje procesy
  • process_enumerate_pages - Listuje strony pamięci danego procesu
  • process_enumerate_modules - Listuje moduły załadowane przez dany proces
  • process_enumerate_heapblocks - Listuje bloki stert danego procesu
  • process_create - Uruchamia podana aplikacje (i zwraca uchwyt do utworzonego procesu)
  • process_open - Otwiera podany proces
  • process_close - Zamyka uchwyt procesu
  • process_suspend / process_resume - Wstrzymuje / wznawia proces
  • process_terminate - Zamyka proces
  • process_read_byte / process_read_ubyte / process_read_short / process_read_ushort / process_read_long / process_read_ulong / process_read_float / process_read_double - Odczytuje zmienną (wybranego typu) z pamięci danego procesu
  • process_read_string - Odczytuje stringa z pamięci danego procesu
  • process_read_array - Masowo odczytuje zmienne danego typu z pamięci danego procesu do ds_listy
  • process_write_byte / process_write_ubyte / process_write_short / process_write_ushort / process_write_long / process_write_ulong / process_write_float / process_write_double - Zapisuje zmienną (wybranego typu) do pamięci danego procesu
  • process_write_string - Odczytuje stringa do pamięci danego procesu
  • process_write_array - Masowo zapisuje zmienne danego typu do pamięci danego procesu z ds_listy
  • process_find_id - Szuka ID procesu o podanej nazwie
  • process_get_name - Zwraca nazwę procesu o podanym ID
  • process_get_path - Zwraca ścieżkę do aplikacji danego procesu
  • process_set_pageaccess - Zmienia flagi dostępu do danego regionu pamięci danego procesu
  • process_set_affinity - Zmienia maskę koligacji (affinity mask) danego procesu
  • process_get_affinity - Pobiera maskę koligacji (affinity mask) danego procesu
  • process_set_priority - Zmienia priorytet danego procesu
  • process_get_priority - Zwraca priorytet danego procesu
  • process_get_current - Zwraca pseudo-uchwyt który identyfikuje aktualny proces
  • process_get_currentid - Zwraca ID aktualnego procesu
  • process_cpuusage_init / process_cpuusage_get / process_cpuusage_free - Mierzy użycie procesora przez dany proces
  • process_get_memoryusage - Zwraca użycie pamięci przez dany proces
  • registry_read_integer / registry_read_integer_ext - Odczytuje wartość typu DWORD z rejestru
  • registry_read_multistring / registry_read_multistring_ext - Odczytuje wartość ciągu wielokrotnego z rejestru
  • registry_read_expandingstring / registry_read_expandingstring_ext - Odczytuje wartość ciągu rozwijalnego z rejestru
  • registry_write_integer / registry_write_integer_ext - Zapisuje wartość typu DWORD do rejestru
  • registry_write_multistring / registry_write_multistring_ext - Zapisuje wartość ciągu wielokrotnego do rejestru
  • registry_write_expandingstring / registry_write_expandingstring_ext - Zapisuje wartość ciągu rozwijalnego do rejestru
  • registry_delete_key / registry_delete_key_value - Kasuje klucz / wartość klucza z rejestru
  • registry_enumerate_subkeys - Listuje podklucze
  • registry_enumerate_values - Listuje wartości klucza

 

Bilioteka w wersji 2.1 i przykład:

http://www.gmclan.org/up541_4_Xtend21.html

Screeny z przykładu, ażeby was zachęcić do pobrania: 1 2 3 ;[

Opublikowano
window_minimize - Minimalizuje podane okno

AWSUM : DDDDDDDD

screen_get_pixel - Pobiera kolor danego piksela z ekranu

AWSUMAWSUM : DDDDDDDD

 

Nie no super. Dzieki Snake : )

  • 2 tygodnie później...
Opublikowano

Świetny DLL! Przydatne funkcje, możliwe że go użyję, ale może dodasz takie coś:

Wyświetlanie filmiku w wybranym polu w viewie, rozumiesz? Dodasz?

Opublikowano
ale może dodasz takie coś:

Wyświetlanie filmiku w wybranym polu w viewie

hyhyhy xD

 

hmm, ciekawe czy nie będzie się to kłócić z ogólnymi założeniami funkcji biblioteki :P

  • 4 miesiące temu...
  • 3 tygodnie później...

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...