Skocz do zawartości

[DLL] Xtend DLL


Rekomendowane odpowiedzi

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

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 miesiąc temu...

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 )

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 tygodnie później...

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

Odnośnik do komentarza
Udostępnij na innych stronach

@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 )

Odnośnik do komentarza
Udostępnij na innych stronach

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

Odnośnik do komentarza
Udostępnij na innych stronach

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

Odnośnik do komentarza
Udostępnij na innych stronach

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

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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

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 ;[

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 tygodnie później...
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

Odnośnik do komentarza
Udostępnij na innych stronach

  • 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ę...