Edycja pliku .class

0

Wkleiłem ten temat również tutaj bo do newbie nie zaglada tyle osób.

Mam prośbę do osób, które znają się na Javie i powiedzą mi jak mogę edytować plik z rozszerzeniem .class, który znajduje się w grze na telefon komórkowy.
Otóż jestem z innego forum o samsungu avila, mamy dosc nurtujący problem z grami opartymi na akceleratorze ruchu (stroboskop, czy cos, jak zwał tak zwał), gry nie są robione głownie pod ten telefon i dlatego kierunki do sterowania są odwrócone. Dane na temat tych kierunków znajdują się w pliku Accelerator.class i wystarczy że do 3 linijek dodamy znak "minus" (-). Na naszym forum raczej mało osób się na tym zna, ale doszedł do tego jeden koleś i przerobił kiedyś taką gre. Typ gdzieś uciekł bo go nie ma xd a my mamy problem. On ogarnął to w ten sposób:

Pozwoliłem sobie zmodyfikować te grę, aby na Avili działała normalnie ("nie odwrotnie")
Teraz Pacman porusza się w stronę niższej krawiędzi (zgodnie z zasadami grawitacji)
Link: Zaznacz wszystko
http://www.przeklej.pl/plik/pacman-jar-0004pu5791dc


Taki mały reverse engineering za pomocą JAD'a i Samsung SDK  
Zmieniłem tylko trzy linijki kodu i działa  
W klasie Accelerometer.class było:
public void dataReceived(SensorConnection connection, Data data[], boolean b)
{
m_accX = (int)data[0].getDoubleValues()[0];
m_accY = (int)data[1].getDoubleValues()[0];
m_accZ = (int)data[2].getDoubleValues()[0];
}
a jest:
public void dataReceived(SensorConnection connection, Data data[], boolean b)
{
m_accX = -(int)data[0].getDoubleValues()[0];
m_accY = -(int)data[1].getDoubleValues()[0];
m_accZ = -(int)data[2].getDoubleValues()[0];
}

Miłego grania.

Sam próbowałem się za to brać programem DJ Java Decompiler 3.9 w celu zwykłej edycji, lecz to w końcu dekompilator i nie da sie zapisać dalej w .class.
Jeśli komuś z Was chciałoby się za to zabrać to bylibyśmy bardzo wdzięczni :) Pozdrawiam [browar]

0

Dekompilujesz do .java, co juz sam zrobiles, nastepnie musisz ten plik skompilowac i zmaienic w pliku jar gry ten stary na nowy, i tyle.

0

Ok, a jak skompilować z .java do class ?

0

Komilatorem? Instalujesz sobie np Sun Wireless Toolkit, czyli SDK do Javy ME, i czytasz dokumentacje i kompilujesz.
Wrzuc ta gre na jakis serwer i daj tutaj linka, to ktos pewnie podola temu zadaniu i da Ci nowa wersje.

0

http://www.przeklej.pl/plik/accelerometer-class-0007vjb0k1dc
http://www.przeklej.pl/plik/accelerometer-java-0007vjb4t6jo
to wersja w .java zrobiona przeze mnie, nie wiem czy jest z nia wszystko ok dlatego dałem też orginalną w .class

Dzięki bracia :) [browar]

0

Rzucilem okiem i nie da sie tego skompilowac bez niektorych kklas wchodzacych w kod tej gry (znaczy da sie, ale za wsystkie klasy ktore sa dodatkowo potrzebne by trzeba pisac stuby / mocki, nikomu sie nie bedzie chcialo tego robic). Musialbys podac calego jara albo chociazby klasy ktore sa do skompilowania tej jednej potrzebne.

0

http://www.przeklej.pl/plik/flubu-jar-0007vo4vv96u
bardzo proszę

0

Sprobuj: http://www.przeklej.pl/plik/accelerometer-class-0007vp9nhagh. Skompilowalem ta klase ktora Ty podrzuciles, wrzuc ja do jara zamiast tej ktora tam siedzi i sprawdz czy dziala. (Jara mozesz otworzyc zwyklym pakerem ktory radzi sobie z zipami).

0

Wyskakuje mi w telefonie taki blad:

java.lang.Error:
ClassFormatError: 154

;-(

0

Mozesz sprobowac tego: http://www.przeklej.pl/plik/accelerometer-class-0007vr44b
Nie moge wiecej pomoc bo nie mam telefonu ktory by to uruchomil pod reka.

0

niestety :/ ten sam błąd. A mógłbyś jeszcze zrobic taką instrukcje co i jak po kolei i czego jeszcze mógłbym spróbować jako że mam pod ręką tel? Byłbym wdzięczny. Dzieki za wszystko [browar] Trafiłem na dobre forum

0

http://www.przeklej.pl/plik/flubu-zip-0007vu71896u
Tam masz paczke zip, a w niej ta klase .java, 3 jary (swojego flubu.jar dorzuc tam) potrzebne do skompilowania tego kodu, i plik build.sh w ktorym masz linijke jak sie kompiluje ten kod. zmienna cp pokazuje na 4 jary, oddzielone :, jesli jestes pod windows to zamien je na ; chyba ze uzywasz cygwina, to wtedy zdaje sie trzeba zostawic :. javac to kompilator javy dostepny w jdk, do sciagniecia za free ze strony suna. preverify wchodzi w sklad Sun Wireless Toolkit, tez za free do sciagniecia.
W paczce masz tez katalog output, to jest moja ostatnia proba ;d Sprawdz czy ta klasa dziala. Mozliwe tez ze zle pakujesz to do jara - sprobuj nie uzywac kompresji ani zadnych dziwnych ustawien.

0

ta klasa w output działa ale są zamienione kierunki (brak minusów)

I nie wiem jeszcze jak wlaczyc tego javac bo jak znajduje go w programfiles/java/jdk/bin/javac.exe to on sie wylacza od razu. sdk tez mam. To w koncu jak go skompilowac [???]

0

http://www.przeklej.pl/plik/flubu-zip-000806asa03p
Tu masz jeszcze raz, tylko tym razem minusy rowniez dodalem do metody update().
Co do javaca i preverify - to sa narzedzia do linii polecen, przyklad jak ich uzyc masz w skrypcie ktory byl w jednej z paczek. Musisz tylko dodac pelne sciezki do tych plikow, pod windowsem pewnie dodac rozszerzenie .exe i pamietac o podmianie tych : na ; w switchu -cp (javac) i -classpath (preverify). Aha no i ten skrypt nie zadziala pod windowsem, bedziesz musial skopiowac obie linijki osobno i je wywolac (no chyba ze uzywasz cygwina, ale nie sadze).

0

wiesz co chyba niepotrzebnie wlasnie do tego update dodales minusy bo class juz bledow nie pokazuje za to kulka sie nie rusza...
z kad ja mam wziac javac i to drugie? sorry ze tak cie mecze ;-)

podaj mi gotowe komendy ok?
C:\Java_ME_platform_SDK_3.0\bin - u jest perivery
C:\Program Files\Java\jdk1.6.0_17\bin - a tu javac

0

No to przynajmniej cos sie zmienia ;d

Uruchamiasz linie polecen, wchodzisz do katalogu z Accelerator.java i jarami i
najpierw:
"C:\Program Files\Java\jdk1.6.0_17\bin\javac.exe" -g:none -source 1.3 -target 1.1 -cp "cldcapi11.jar;midpapi21.jar;jsr256.jar;flubu.jar" Accelerometer.java
(masz spacje w sciezce do javaca, wiec zauwaz ze uzywam cudzyslowiow)
jelsi nie bedzie bledow to utworzy plik Accelerometer.class zaraz obok Accelerometer.java; teraz:
C:\Java_ME_platform_SDK_3.0\bin\preverify -classpath ".;cldcapi11.jar;midpapi21.jar;jsr256.jar;flubu.jar" -target CLDC1.1 Accelerometer

W wyniku powinien utworzyc sie katalog output i tam powinna byc klasa. Musisz uzyc tej po preverify, czyli z katalogu output.

0

po tym drugim pokazuje mi: illegal option -target

0

Po ty drugin czyli preverify? Ja uzywam wersji 2.5.2 i target jest, sprobuj bez. Jesli masz pliki preverify10 i preverify11 to wybierz ten drugi, ale sadze ze to i tak nie robi wielkiej roznicy.

0

ja mam tylko jeden plik preverify.exe w katalogu bin z folderu Java_ME_platform_SDK_3.0 xd

ale po tej pierwszej komendzie utworzyło mi class nie w katalogu output tylko tak o w tym co te jary ;]

sprawdzilem ten class i wyskakuje blad, moze po tej drugiej komendzie bedzie ok hm?

a o to co dalo bez target

C:\Documents and Settings\barabari\Pulpit\flubu>C:\Java_ME_platform_SDK_3.0\bin\
preverify -classpath "cldcapi11.jar;midpapi21.jar;jsr256.jar;flubu.jar" -target
CLDC1.1 Accelerometer
preverify: Illegal option -target

Usage: preverify [options] classnames|dirnames ...

where options include:
   -classpath     <directories separated by ';'>
                  Directories in which to look for classes
   -d <directory> Directory in which output is written (default is ./output/)
   -cldc1.0       Checks for existence of language features prohibited
                  by CLDC 1.0 (native methods, floating point and finalizers)
   -cldc          same as -cldc1.0
   -nofinalize    No finalizers allowed
   -nonative      No native methods allowed
   -nofp          No floating point operations allowed
   @<filename>    Read command line arguments from a text file
                  Command line arguments must all be on a single line
                  Directory names must be enclosed in double quotes (")

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