
Snake
Użytkownicy-
Postów
1 445 -
Dołączył
-
Ostatnia wizyta
Typ zawartości
Profile
Forum
Wydarzenia
Treść opublikowana przez Snake
-
Z komercyjnych to możesz sprawdzić nowego ASProtecta 1.5 (wg. google jeszcze nikt nie napisał unpackera do tej nowej wersji), Themide albo Armadillo. Z darmowych to ciężko coś bardzo dobrego znaleźć, ale sprawdź FSG.
-
Użyj jakiegoś packera/protectora ;p
-
Jest możliwe. Pod Windowsem w np. RDG packer detectorze czy PEiDzie idzie wykryć (po sygnaturach) w czym plik wykonywalny został skompilowany (oczywiście pierw trzeba by odpakować plik jeśli był czymś skompresowany/zabezpieczony). Jeśli ktoś jest doświadczony w Reverse Engineeringu to rozpozna po listingu dezasemblacji EP-a czy tam po specyficznych ciągach znaków pozostawionych w pliku przez kompilator w czym aplikacja została skompilowana ;p
-
http://gmc.yoyogames.com/index.php?showtopic=329010 Przejdź do "Dokumentów udostępnionych" (na Windows Vista to "Dokumenty publiczne"), usuń folder "Softwrap" i plik global.sw2 a następnie reinstaluj GM-a.
-
Rozmiar tablicy number musi być stały (zmienna lokalna). Jeśli chcesz zmienny rozmiar to alokuj tą tablicę dynamicznie.
-
[DLL] Xtend DLL
Snake odpowiedział(a) na Snake temat w Gotowe Skrypty, przykłady, dodatki, silniki 3D dla GM
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 ;[ -
Wywal te linijki "Uses ShellAPI" z ciał funkcji i dodaj "Uses Windows, ShellAPI;" po "Library KiM;". W Delphi komentarze wieloliniowe wyglądają tak: { komentarz } a nie /* komentarz */. Hm, zdefiniuj jeszcze parametry funkcji w których wywołujesz funkcje WinAPI podając w argumentach "Handle" ;o Może najpierw poczytaj parę tutoriali czy cuś zanim zaczniesz przeklejać gotowy kod z neta. +1
-
"xor" to operator logiczny a nie bitowy - użyj "^".
-
39ster (z GMC) wykonał kawał dobrej roboty i poprawił kod źródłowy GMAPI tak, aby można było skompilować projekt zarówno pod VC++ jak i MinGW. Tak, więc można teraz pracować z GMAPI na MinGW - tu możecie pobrać tą wersję biblioteki: 39ster miał jakieś problemy z wkompilowaniem "jądra" GMAPI w bibliotekę statyczną, dlatego jeśli przy kompilowaniu pojawią się problemy z linkerem będzie trzeba dodać do zlinkowania razem z libem "libGMApiRelease.a" bibliotekę "GMAPICore.lib" z folderu GMAPICore\.
-
Obróbki grafiki -> Paint Shop Pro 9 Słuchanie muzyki -> Winamp Oglądanie filmów -> Media player classic Pisanie -> OpenOffice Writer / Notepad++ / Notatnik ;o Programowanie -> Visual C++ / WinAsm Przeglądanie internetu -> Firefox / Chrome Poczta -> Thunderbird Komunikator -> AQQ ;p
-
@47x: W ASP można projektować lepsze ekrany startowe dla gier GM, tj. animowane, z kanałem alpha, kilkuelementowe, i takie tam... ;p
-
Hm, po co "switch( alpha )" skoro zmienna porównywana jest przy case ? Case działa jak "if" ? Trochę to bezsensowne i w dodatku mniej wydajne, np. jak chciałbym sprawdzić taki warunek: switch ( alpha * 0.123 + 12321 - 1212 / 321 ^ ( blaBlabla * 12 ) ) { case alpha * 0.123 + 12321 - 1212 / 321 ^ ( blaBlabla * 12 ) < 100 { // bla } case alpha * 0.123 + 12321 - 1212 / 321 ^ ( blaBlabla * 12 ) = 100 { // bla } } Lepiej było by coś takiego zrobić: switch ( alpha * 0.123 + 12321 - 1212 / 321 ^ ( blaBlabla * 12 ) ) { case < 100 { // bla } case = 100 { // bla } } :P A jeśli kilka warunków się zgadza to wszystkie są wykonywane czy przerywa po wykonaniu pierwszego ? Jeśli wszystkie to wychodzi na to że "case" to "if" ;D
-
Hm, a daj no tą DLL-kę razem z przykładem gm, sprawdzę co jest nie tak ;p
-
Hm, funkcja na pewno dobrze jest eksportowana z DLL-a (możesz się upewnić jakimś softem typu dependency walker) ? Ścieżka do DLL prawidłowa ? ;p Konwencje wywołania różnią się tym, jak parametry są przekazywane do funkcji na stosie/w rejestrach procesora. Standardowo w C++ używa się cdecl, a w Delphi stdcall ;p
-
Chyba konwencja wywołania - zmień stdcall na cdecl i sprawdź czy pójdzie.
-
@Pieter: Posiałem go gdzieś :D
-
Wykonywanie kodu ze strina, bez execute string
Snake odpowiedział(a) na XxMichałxX temat w Pytania początkujących
Kod podany w execute_string jest równie wydajny co "normalny" kod. Jedynie wywołanie execute_string obciąża, bo podany kod musi zostać najpierw skompilowany do bytecode'u, żeby potem został zinterpretowany. Jeśli o to chodziło to można obejść kompilowanie "co stepa" za pomocą event_object_add, tj. dodajesz event z kodem a potem wywołujesz go za pomocą event_perform. -
GM Obfuscator o ile dobrze pamiętam ma taką funkcję :P
-
Update. Zdecydowałem się od zera napisać ten program w C++, bo wcześniej pisałem go w Delphi, którego nie chcę się już tykać ;D Jako że nie będę już tego projektu rozwijał, a src zawsze się tam komuś przyda, to dołączam również kod źródłowy programu (na licencji GPLv3) New features: Możliwość wyciągania zasobów z plików GM5.3a i GM7.0 (.gmd i .gmk) Zmieniony interface ...no i teraz projekt jest open source ;f Screen: Download: http://sgames.ovh.org/blog/?file_id=4
-
Jeśli nic nie modyfikujesz w bibliotece to nie musisz publikować kodu źródłowego.
-
Aha, to źle zrozumiałem :P Tak czy inaczej, GM8 będzie trzeba od zera analizować, żeby uzyskać dostęp do wszystkiego :) ...dlatego myślę o współpracy, żeby szybciej poszło z analizą i pisaniem biblioteki :P K, czas zaktualizować inne projekty :D