HOWTO jak uzyskać kod żródłowy apletu w Javie

RobertG

Użytkownik
Dołączył
Styczeń 3, 2007
Posty
391
Często w necie można spotkać aplety Javy, np chateria na interii. Ten tekst to w sumie taki mały tutorial jak dostać się do kodu źródłowego tej chaterii (czyli każdego apletu javy). Czy się to komuś przyda nie wiem, ale fajnie wiedzieć jak to zrobić
smile.gif


Zaczynamy:
http://czateria.interia.pl/ , najeżdzamy na link do jakiegoś pokoju. Widzimy na dolnej belce w FF, iż uruchamiana jest funkcja openRoom(). Klikamy w FireFoxie ctrl+U, ctrl+F, wpisujemy openRoom i przechodzimy do kodu tej funkcji.

Widzimy kod:
Kod:
var winurl = "/czat,room,"+(rid)+","+(name?name:"");

             window.open(winurl, rid ,

Tak więc okno, które się otwiera z Apletem Javy z chatem ma adres:
Kod:
http://czateria.interia.pl/czat,room,TUTAJ_ID_KTORE_WIDAC_GDY_NAJEZZAMY_MYSZA_NAPOKOJ,
Ja wybrałem:
http://czateria.interia.pl/czat,room,80,

Zapisujemy to na dysk bo odpalenie tego jak zwykła strone w zakładce lubi zawiesic przegladarke. Otwieramy stronę w edytorze tekstu, od razu w oczy rzuca się:
Kod:
var txt="";

 txt = "[url="http://qan.interia.pl/chat/applet/czat_4_054_.jar"]http://qan.interia.pl/chat/applet/czat_4_054_.jar[/url]

Kopiujmy go do okienka URL przeglądarki, zapisujemy plik *.jar na dysku. Pliki *.jar to tak na prawdę zip albo rar (juz nie pamietam), więc rozpakowujemy go, np. TotalComanderem.

[url="http://www.kpdus.com/jad.html"]http://www.kpdus.com/jad.html[/url]
ścigamy dekompiler, czytamy HOWTO, które jest do niego dolaczone i dekompilujmemy by uzyskac kod zrodlowy, przyklad kodu po dekompilacji:
 [code]package d;



import INTChat;

import a.a;

import a.f;

import a.g;

import a.i;

import a.j;

import a.s;

import b.b;

import b.c;

import java.applet.Applet;

import java.awt.Color;

import java.awt.Component;

import java.awt.Container;

import java.awt.Cursor;

import java.awt.Font;

import java.awt.FontMetrics;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.MediaTracker;

import java.awt.Toolkit;

import java.awt.event.ComponentEvent;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.util.Calendar;

import java.util.Date;

import java.util.EventObject;

import java.util.Vector;



// Referenced classes of package d:

//            p, c, b, z, 

//            ba



class r extends i

    implements Runnable, b, MouseListener

{



    public r(p p1)

    {

        String s1;

        boolean flag;

        flag = ba.bg;

        super();

        p = 1;

        q = true;

        z = null;

        A = null;

        B = null;

        C = "";

        D = "";

        E = null;

        H = null;

        I = 0;

        J = 0;

        M = a.s.a(0, 1, 1);

        N = Color.black;

        W = 1;

        X = 0;

        Y = true;

        Z = false;

        ba = false;

        bb = false;

        j = p1;

        c();

        k = new c(this, INTChat.getServerHost(), 14016, -10);

        k.i = true;

        P = new int[6];
Dekompilacja nie zawsze przebiega OK (tak jak zreszta dla kazdego kodu, maszynowego tez).

BTW, funkcja openRoom jest pisana w JS a nie w Javie, tak przypomnę by sie nie myliło nikomu =]
 

pindolczeski

Użytkownik
Dołączył
Lipiec 18, 2008
Posty
5
co z tego, że dekompilujesz jak tego nie skompilujesz ponownie bo aplet czaterii traktowany jest obfuscatorem i string encryption, i nazwy funkcji przez to mieszanie (kodowanie nazw) są nieprawidłowe.
Używałeś dekompilatora "jad" - z żadnym parametrem ten program nie da satysfakcjonujących nas wyników czystego kodu źródłowego pliku class czaterii.
Wkleiłeś tylko początek kodu źródłowego bo dalsza cześć to tylko "goto L2; else goto L76;"
Przykład trzech z setek linijek wyrzucających błąd kompilatora (wybrane z Twojego kodu tutaj wklejonego) :
1. class r extends i
2. implements Runnable, b, MouseListener
3. public r(p p1)
nawet "Zelix classmaster" nie radzi sobie z dekompilacją tego apletu... w końcu czateria korzysta z dobrego obfuscatora.
Udowodnij, że sie mylę!
 
Do góry Bottom