Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Взлом демо java игры

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Взлом программ] >> Взлом демо java игры
Имя
Сообщение << Старые топики   Новые топики >>
Взлом демо java игры - 2009-03-11 11:07:02.723333   
Дочь Билла Гейтса

Сообщений: 46
Оценки: 0
Присоединился: 2008-05-24 00:37:53.486666
Есть такой сайт penreader.mobi и игра - пасьянсы "Can't stop solitaires". Код класса, отвечающего за триальность:
import CanNotStop.GameMidlet;
import java.io.IOException;
import java.io.InputStream;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;

public final class d extends o
{

public d(y y1, ac ac1, int i)
{
     super(y1, ac1);
     a_java_lang_String_array1d_fld = new String[128];
     a_int_array1d_fld = new int[a_java_lang_String_array1d_fld.length];
     j = 0;
     k = 0;
     l = 0;
     m = Font.getDefaultFont().charWidth('\u2022') * 2;
     super.c_java_lang_String_fld = "Done";
     super.g = super.h = super.i = 4096;
     i;
     JVM INSTR tableswitch 0 4: default 650
//                   0 116
//                   1 221
//                   2 449
//                   3 508
//                   4 579;
        goto _L1 _L2 _L3 _L4 _L5 _L6
_L1:
     break; /* Loop/switch isn't completed */
_L2:
     a("Version 1.1", 0x7000000);
     a("\251 2004-2007, Paragon Software (SHDD)", 0x7000000);
     a("http://www.penreader.com", 0x8000000);
     a("Support Knowledge Base", 0x7000000);
     a("http://support.penreader.com", 0x8000000);
     if(k + a(0x7000000).getHeight() <= super.d - super.c_int_fld)
         a("Developed by: Alexei Anoshenko", 0x7000000);
     if(k > super.d - super.c_int_fld)
         super.c_int_fld = super.d - k;
     break; /* Loop/switch isn't completed */
_L3:
     a("How to select and move the cards", 0);
     k();
     a("How to select the pile of cards", 0x1000000);
     a("To select the pile of cards", 0x3000000);
     a("move the joystick to the upper card in the pile and press. All cards below including the upper one will be selected", 0x5000000);
     a("or", 0x3000000);
     a("move and press joystick to the cards one by one beginning from the lowest card in the pile", 0x5000000);
     k();
     a("How to move cards using the numbered keypad", 0);
     k();
     a("To select the cards press the key with number wich corresponds to the card number on the screen", 0x5000000);
     a("To move the selected card press the key with number wich corresponds to the desired position number on the screen", 0x5000000);
     a("To deselect the cards press the key with number wich corresponds to the selected card number on the screen", 0x5000000);
     a("Note:", 0x4000000);
     a("If the cards positions are not numbered on your device screen, mark the checkbox Show key tips in the menu Options>Settings>Game Style.", 0x3000000);
     k();
     a("In several solitaires you need to use keypad and joystick for card movement at once.", 0x3000000);
     k();
     a("How to move the cards using the joystick", 0);
     k();
     a("First way", 0x3000000);
     a("To select the cards move the joystick to the card and press it", 0x5000000);
     a("To move the selected card move the joystick to the desired card position and press it", 0x5000000);
     a("To deselect the cards move the joystick to the selected card and press it", 0x5000000);
     a("If the card can not be moved to chosen position it will be deselected.", 0x3000000);
     k();
     a("Second way", 0x3000000);
     a("To quickly move the card move the joystick to the card and press it twice", 0x5000000);
     a("If there are several available positions for card moving and you want the card to be moved to another position just move the joystick to the card and press it twice again", 0x3000000);
     a("If there are not any available positions to move the chosen card, the card will not move and will be deselected", 0x3000000);
     a("Note", 0x4000000);
     a("To enable the prompts for all available card movements for current game position choose Menu>Help menu>Available Moves", 0x3000000);
     break; /* Loop/switch isn't completed */
_L4:
     a("If you have already purchased the product press Register.", 0x3000000);
     k();
     a("To get the Registration Code press Buy (Internet connection is required).", 0x3000000);
     super.a_java_lang_String_fld = "Register";
     super.g = 300;
     super.c_java_lang_String_fld = "Buy";
     super.i = 301;
     super.b_java_lang_String_fld = "Cancel";
     this;
     4096;
       goto _L7
_L5:
     a("This is unregistered copy of the program.", 0x2000000);
     k();
     a("To buy the registration code choose Buy.", 0x3000000);
     k();
     super.c_java_lang_String_fld = "Buy";
     super.i = 301;
     a("Choose Register to register the program.", 0x3000000);
     super.a_java_lang_String_fld = "Register";
     super.g = 300;
     super.b_java_lang_String_fld = "Done";
     this;
     '\u012E';
       goto _L7
_L6:
     a("Trial period has expired.", 0x2000000);
     k();
     a("To buy the program choose Buy.", 0x3000000);
     k();
     super.c_java_lang_String_fld = "Buy";
     super.i = 301;
     a("To register the program choose Register.", 0x3000000);
     super.a_java_lang_String_fld = "Register";
     super.g = 300;
     super.b_java_lang_String_fld = "Exit";
     this;
     '\u1001';
_L7:
     h;
     if(k > super.d - super.c_int_fld)
     {
         super.c_int_fld = super.d - k;
         if(super.c_int_fld < super.b_int_fld)
             super.c_int_fld = super.b_int_fld;
     }
     return;
}

public d(y y1, ac ac1, String s)
{
     super(y1, ac1);
     a_java_lang_String_array1d_fld = new String[128];
     a_int_array1d_fld = new int[a_java_lang_String_array1d_fld.length];
     j = 0;
     k = 0;
     l = 0;
     m = Font.getDefaultFont().charWidth('\u2022') * 2;
     super.c_java_lang_String_fld = "Done";
     super.g = super.h = super.i = 4096;
     a(s, 0x3000000);
}

public d(y y1, ac ac1, String s, int i)
{
     super(y1, ac1);
     a_java_lang_String_array1d_fld = new String[128];
     a_int_array1d_fld = new int[a_java_lang_String_array1d_fld.length];
     j = 0;
     k = 0;
     l = 0;
     m = Font.getDefaultFont().charWidth('\u2022') * 2;
     super.c_java_lang_String_fld = "Done";
     super.g = super.h = super.i = i;
     a(s, 0x3000000);
}

public d(y y1, ac ac1, String s, int i, int i1)
{
     super(y1, ac1);
     a_java_lang_String_array1d_fld = new String[128];
     a_int_array1d_fld = new int[a_java_lang_String_array1d_fld.length];
     j = 0;
     k = 0;
     l = 0;
     m = Font.getDefaultFont().charWidth('\u2022') * 2;
     super.a_java_lang_String_fld = "Yes";
     super.g = i;
     super.b_java_lang_String_fld = "No";
     super.h = i1;
     a(s, 0x3000000);
}

public d(y y1, ac ac1, w w1)
{
     super(y1, ac1);
     a_java_lang_String_array1d_fld = new String[128];
     a_int_array1d_fld = new int[a_java_lang_String_array1d_fld.length];
     j = 0;
     k = 0;
     l = 0;
     m = Font.getDefaultFont().charWidth('\u2022') * 2;
     super.c_java_lang_String_fld = "Done";
     super.g = super.h = super.i = 4096;
     super.c_int_fld = super.b_int_fld;
     if(super.a.a_java_lang_String_array1d_fld == null)
         try
         {
             InputStream inputstream;
             int k1 = a(inputstream = getClass().getResourceAsStream("/data/games.help"));
             super.a.a_java_lang_String_array1d_fld = new String[k1];
             byte abyte0[] = new byte[1024];
             for(int i = 0; i < k1; i++)
             {
                 int i2 = a(inputstream);
                 inputstream.read(abyte0, 0, i2);
                 super.a.a_java_lang_String_array1d_fld = new String(abyte0, 0, i2);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(IOException _ex)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp; a(super.a.a_z_array1d_fld[w1.c_int_fld].a[w1.d].a, 0);
&nbsp;&nbsp;&nbsp;&nbsp; w1.c_v_fld.a();
&nbsp;&nbsp;&nbsp;&nbsp; k();
&nbsp;&nbsp;&nbsp;&nbsp; a("Purpose of the game", 0x1000000);
&nbsp;&nbsp;&nbsp;&nbsp; a(super.a.a_java_lang_String_array1d_fld[w1.c_v_fld.a(8, 12)], 0x3000000);
&nbsp;&nbsp;&nbsp;&nbsp; k();
&nbsp;&nbsp;&nbsp;&nbsp; a("Rules", 0x1000000);
&nbsp;&nbsp;&nbsp;&nbsp; int j1 = w1.c_v_fld.b(3, 8);
&nbsp;&nbsp;&nbsp;&nbsp; for(int i1 = 0; i1 &lt; j1; i1++)
&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int l2 = w1.c_v_fld.b(4, 10) + 1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int j2 = w1.c_v_fld.a(8, 12);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String s = l2 &lt;= 1 ? super.a.a_java_lang_String_array1d_fld[j2] : Integer.toString(l2) + " " + super.a.a_java_lang_String_array1d_fld[j2];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(w1.c_v_fld.a())
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int k2 = w1.c_v_fld.a(8, 12);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s = s + " (" + super.a.a_java_lang_String_array1d_fld[k2] + ")";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(w1.c_v_fld.a())
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w1.c_v_fld.a(8, 12);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(w1.c_v_fld.a())
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w1.c_v_fld.a(8, 12);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a(s, 0x2000000);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int l1 = w1.c_v_fld.b(3, 8);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i3 = 0; i3 &lt; l1; i3++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a(super.a.a_java_lang_String_array1d_fld[w1.c_v_fld.a(8, 12)], 0x5000000);

&nbsp;&nbsp;&nbsp;&nbsp; }

}

private static int a(InputStream inputstream)
&nbsp;&nbsp;&nbsp;&nbsp; throws IOException
{
&nbsp;&nbsp;&nbsp;&nbsp; int i;
&nbsp;&nbsp;&nbsp;&nbsp; return i = (i = inputstream.read() &amp; 0xff) | (inputstream.read() &amp; 0xff) &lt;&lt; 8;
}

public final synchronized void a(Graphics g)
{
&nbsp;&nbsp;&nbsp;&nbsp; super.a(g);
&nbsp;&nbsp;&nbsp;&nbsp; int i = a_int_array1d_fld[l] &amp; 0xffffff;
&nbsp;&nbsp;&nbsp;&nbsp; int i1 = super.d - super.c_int_fld;
&nbsp;&nbsp;&nbsp;&nbsp; for(int j1 = l; j1 &lt; j &amp;&amp; (a_int_array1d_fld[j1] &amp; 0xffffff) - i &lt; i1; j1++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a(g, j1);

&nbsp;&nbsp;&nbsp;&nbsp; if(k &gt; i1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a(g, k, i, i1);
}

private static Font a(int i)
{
&nbsp;&nbsp;&nbsp;&nbsp; switch(i)
&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp; case 0: // '\0'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return Font.getFont(0, 0, 16);

&nbsp;&nbsp;&nbsp;&nbsp; case 16777216:
&nbsp;&nbsp;&nbsp;&nbsp; case 33554432:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return Font.getFont(0, 1, 0);

&nbsp;&nbsp;&nbsp;&nbsp; case 117440512:
&nbsp;&nbsp;&nbsp;&nbsp; case 134217728:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return Font.getFont(0, 0, 8);
&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp; return Font.getDefaultFont();
}

private void a(Graphics g, int i)
{
&nbsp;&nbsp;&nbsp;&nbsp; int i1;
&nbsp;&nbsp;&nbsp;&nbsp; Font font;
&nbsp;&nbsp;&nbsp;&nbsp; int k1;
&nbsp;&nbsp;&nbsp;&nbsp; font = a(i1 = a_int_array1d_fld &amp; 0xff000000);
&nbsp;&nbsp;&nbsp;&nbsp; if((k1 = (super.c_int_fld + (a_int_array1d_fld &amp; 0xffffff)) - (a_int_array1d_fld[l] &amp; 0xffffff)) + font.getHeight() &gt; super.d)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;
&nbsp;&nbsp;&nbsp;&nbsp; g.setColor(i1 != 0x4000000 &amp;&amp; i1 != 0x8000000 ? 0xffffff : 65280);
&nbsp;&nbsp;&nbsp;&nbsp; g.setFont(font);
&nbsp;&nbsp;&nbsp;&nbsp; i1;
&nbsp;&nbsp;&nbsp;&nbsp; JVM INSTR lookupswitch 6: default 198
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0: 148
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16777216: 148
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 83886080: 172
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100663296: 187
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 117440512: 148
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 134217728: 148;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto _L1 _L2 _L2 _L3 _L4 _L2 _L2
_L2:
&nbsp;&nbsp;&nbsp;&nbsp; (super.a.getWidth() - font.stringWidth(a_java_lang_String_array1d_fld)) / 2;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto _L5
_L3:
&nbsp;&nbsp;&nbsp;&nbsp; g.drawString("\u2022", super.b_int_fld + 1, k1, 0);
_L4:
&nbsp;&nbsp;&nbsp;&nbsp; super.b_int_fld;
&nbsp;&nbsp;&nbsp;&nbsp; m;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto _L6
_L1:
&nbsp;&nbsp;&nbsp;&nbsp; super.b_int_fld;
&nbsp;&nbsp;&nbsp;&nbsp; true;
_L6:
&nbsp;&nbsp;&nbsp;&nbsp; JVM INSTR iadd ;
_L5:
&nbsp;&nbsp;&nbsp;&nbsp; int j1;
&nbsp;&nbsp;&nbsp;&nbsp; j1;
&nbsp;&nbsp;&nbsp;&nbsp; g.drawString(a_java_lang_String_array1d_fld, j1, k1, 0);
&nbsp;&nbsp;&nbsp;&nbsp; return;
}

private int a(String s, int i, int i1, Font font)
{
&nbsp;&nbsp;&nbsp;&nbsp; if(j == a_java_lang_String_array1d_fld.length)
&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String as[] = a_java_lang_String_array1d_fld;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int ai[] = a_int_array1d_fld;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a_java_lang_String_array1d_fld = new String[as.length * 2];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a_int_array1d_fld = new int[a_java_lang_String_array1d_fld.length];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int j1 = 0; j1 &lt; as.length; j1++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a_java_lang_String_array1d_fld[j1] = as[j1];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a_int_array1d_fld[j1] = ai[j1];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }

&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp; a_java_lang_String_array1d_fld[j] = s;
&nbsp;&nbsp;&nbsp;&nbsp; a_int_array1d_fld[j] = i | i1;
&nbsp;&nbsp;&nbsp;&nbsp; j++;
&nbsp;&nbsp;&nbsp;&nbsp; return i1 + font.getHeight();
}

private void k()
{
&nbsp;&nbsp;&nbsp;&nbsp; k += Font.getDefaultFont().getHeight() / 2;
}

private void a(String s, int i)
{
&nbsp;&nbsp;&nbsp;&nbsp; Font font;
&nbsp;&nbsp;&nbsp;&nbsp; int i1;
&nbsp;&nbsp;&nbsp;&nbsp; font = a(i);
&nbsp;&nbsp;&nbsp;&nbsp; i1 = super.a.getWidth() - 2 * super.b_int_fld - 5;
&nbsp;&nbsp;&nbsp;&nbsp; if(i == 0x5000000)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i1 -= m - 1;
&nbsp;&nbsp;&nbsp;&nbsp; int j1;
&nbsp;&nbsp;&nbsp;&nbsp; if((j1 = font.stringWidth(s)) &lt; i1) goto _L2; else goto _L1
_L1:
&nbsp;&nbsp;&nbsp;&nbsp; int k1;
&nbsp;&nbsp;&nbsp;&nbsp; int l1;
&nbsp;&nbsp;&nbsp;&nbsp; int i2;
&nbsp;&nbsp;&nbsp;&nbsp; k1 = 0;
&nbsp;&nbsp;&nbsp;&nbsp; l1 = 0;
&nbsp;&nbsp;&nbsp;&nbsp; i2 = 0;
&nbsp;&nbsp;&nbsp;&nbsp; k1 = 0;
_L13:
&nbsp;&nbsp;&nbsp;&nbsp; if(k1 &gt;= s.length())
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; /* Loop/switch isn't completed */
&nbsp;&nbsp;&nbsp;&nbsp; s.charAt(k1);
&nbsp;&nbsp;&nbsp;&nbsp; JVM INSTR lookupswitch 2: default 354
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10: 235
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32: 108;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto _L3 _L4 _L5
_L5:
&nbsp;&nbsp;&nbsp;&nbsp; if(font.substringWidth(s, l1, k1 - l1) &gt;= i1) goto _L7; else goto _L6
_L6:
&nbsp;&nbsp;&nbsp;&nbsp; k1 - l1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto _L8
_L7:
&nbsp;&nbsp;&nbsp;&nbsp; if(i2 &lt;= 0) goto _L10; else goto _L9
_L9:
&nbsp;&nbsp;&nbsp;&nbsp; k = a(s.substring(l1, l1 + i2), i, k, font);
&nbsp;&nbsp;&nbsp;&nbsp; if(i == 0x5000000)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = 0x6000000;
&nbsp;&nbsp;&nbsp;&nbsp; l1 += i2 + 1;
&nbsp;&nbsp;&nbsp;&nbsp; k1 - l1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto _L8
_L10:
&nbsp;&nbsp;&nbsp;&nbsp; i2 = k1 - l1;
&nbsp;&nbsp;&nbsp;&nbsp; k = a(s.substring(l1, l1 + i2), i, k, font);
&nbsp;&nbsp;&nbsp;&nbsp; if(i == 0x5000000)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = 0x6000000;
&nbsp;&nbsp;&nbsp;&nbsp; k1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto _L11
_L4:
&nbsp;&nbsp;&nbsp;&nbsp; if(font.substringWidth(s, l1, k1 - l1) &gt; i1 &amp;&amp; i2 &gt; 0)
&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k = a(s.substring(l1, l1 + i2), i, k, font);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(i == 0x5000000)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = 0x6000000;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; l1 += i2 + 1;
&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp; if((i2 = k1 - l1) &gt; 0)
&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k = a(s.substring(l1, l1 + i2), i, k, font);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(i == 0x5000000)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = 0x6000000;
&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp; k1;
_L11:
&nbsp;&nbsp;&nbsp;&nbsp; 1;
&nbsp;&nbsp;&nbsp;&nbsp; JVM INSTR iadd ;
&nbsp;&nbsp;&nbsp;&nbsp; l1;
&nbsp;&nbsp;&nbsp;&nbsp; false;
_L8:
&nbsp;&nbsp;&nbsp;&nbsp; i2;
_L3:
&nbsp;&nbsp;&nbsp;&nbsp; k1++;
&nbsp;&nbsp;&nbsp;&nbsp; if(true) goto _L13; else goto _L12
_L12:
&nbsp;&nbsp;&nbsp;&nbsp; if(l1 &lt; k1)
&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(font.substringWidth(s, l1, k1 - l1) &gt;= i1 &amp;&amp; i2 &gt; 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k = a(s.substring(l1, l1 + i2), i, k, font);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(i == 0x5000000)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = 0x6000000;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; l1 += i2 + 1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i2 = k1 - l1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k = a(s.substring(l1, l1 + i2), i, k, font);
&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp; return;
_L2:
&nbsp;&nbsp;&nbsp;&nbsp; k = a(s, i, k, font);
&nbsp;&nbsp;&nbsp;&nbsp; return;
}

public final void a()
{
&nbsp;&nbsp;&nbsp;&nbsp; if(l &gt; 0)
&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; l–;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.a.b();
&nbsp;&nbsp;&nbsp;&nbsp; }
}

public final void b()
{
&nbsp;&nbsp;&nbsp;&nbsp; int i = super.d - super.c_int_fld;
&nbsp;&nbsp;&nbsp;&nbsp; int i1;
&nbsp;&nbsp;&nbsp;&nbsp; if((i1 = a_int_array1d_fld[l] &amp; 0xffffff) + i &lt; k)
&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; l++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.a.b();
&nbsp;&nbsp;&nbsp;&nbsp; }
}

public final void b(int i)
{
&nbsp;&nbsp;&nbsp;&nbsp; switch(i)
&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp; case 300:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.a.a(new c(super.a, this));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;

&nbsp;&nbsp;&nbsp;&nbsp; case 302:
&nbsp;&nbsp;&nbsp;&nbsp; case 4100:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.a_ac_fld.b(4100);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;

&nbsp;&nbsp;&nbsp;&nbsp; case 301:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(super.a.a_CanNotStop_GameMidlet_fld.platformRequest("http://pda.penreader.com/go?FS08"))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.a.a(this, "The MIDlet suite MUST first exit before the content can be fetched. Do you want exit MIDlet?", 303, 304);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(Exception _ex)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.a.a(new d(super.a, this, "No connection."));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;

&nbsp;&nbsp;&nbsp;&nbsp; case 303:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.a.a_CanNotStop_GameMidlet_fld.exitMIDlet();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;

&nbsp;&nbsp;&nbsp;&nbsp; case 304:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.a.a(this);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;
&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp; super.b(i);
}

private String a_java_lang_String_array1d_fld[];
private int a_int_array1d_fld[];
private int j;
private int k;
private int l;
private int m;
}

L7, судя по всему, и есть запуск игры без предупреждений, но как туда перейти? В javabite такой код выглядит малопонятным :(
Помогите пожалуйста и не считайте меня ламером, т.к. хоть и не пишу на яве, но типовые защиты (генераторы демок, ограничение времени, надпись мигающая) снимаю быстро, даже mobile basic "зарегистрировала", и тут наткнулась на такие сложности :(
Игра полная, не урезанная, ограничено количество запусков, для регистрации требует соединения, значит, серийник получает на сайте и его не подобрать :(
Post #: 1
RE: Взлом демо java игры - 2009-04-01 04:27:04.786666   
sinaz

Сообщений: 3
Оценки: 0
Присоединился: 2009-04-01 02:48:33.746666
quote:

Дочь Билла Гейтса

Изменение в этом классе ничего не даст.В tableswitch можно изменить переход но он будет всегда вызываться как закончится триал.И наверника поиграть не получится.
Я этим классом не занимался а изменил счётчик запусков.Количество запусков хранится в классе y.class int d.
В DJ Java Decompile после декомпиляциии это выглядит так (d_int_fld = 3;)
Присваевается число 3,как раз это совпадает с тем что даётся три запуска игры.Я запускал игру на эмуляторе MidpX,он создаёт папочку рядом с игрой в которой хранит RMS записи.(К примеру в нашем случае папку с таким названием Solitaires176x220-properties и с файлом в ней default_rms_settings.db ).Конечно удалив этот файл приложение думает что его первый раз запускают.Но это конечно на компе можно так легко зделать,на мобиле это делается удалением игры и установкой по новой.Ну ладно,короче для того чтобы удостоверится что в int d находится количество запусков,я изменил хекс редактором инициализацию int d на 0,удалил default_rms_settings.db ,запустил игру и с первова запуска она запросила регистрацию!Ура!Теперь нет сомнений что это та переменная в которой хранится количество запусков.Далее я поискал в этом классе какие операции с этой переменной делаются.В классе y.class ничего кроме сохранения её в RMS не нашол.А мне нужно найти код где она уменьшается.
Короче долго расказывать как я нашол этот код.Короче вот он.Из класса p.class
public final void a(boolean flag)
{
if(flag && (super.a.f_int_fld == 0 || y.a(super.a.e) != super.a.f_int_fld))
{
if(super.a.d_int_fld &lt;= 0)
{
super.a.a(new d(super.a, this, 4));
return;
}
super.a.d_int_fld–;
}
f();
a_ag_fld.a();
a_ah_fld = null;
a(super.a.d_boolean_fld, flag ? null : super.a_j_fld.a_byte_array1d_fld);
}
Post #: 2
RE: Взлом демо java игры - 2009-04-01 05:26:26.630000   
sinaz

Сообщений: 3
Оценки: 0
Присоединился: 2009-04-01 02:48:33.746666
Собственно вот эта строчка и есть уменьшение int d super.a.d_int_fld–;
Тут конечно не понятно какое она имеет отношение к int d в y.class.
А тут надо смотреть в виде дизассамблера.В DJ Java Decompile просто нажать F12.
public final void a(boolean flag)
{
// 0 0:iload_1
// 1 1:ifeq 78
// 2 4:aload_0
// 3 5:getfield #37 &lt;Field y ac.a&gt;
// 4 8:getfield #88 &lt;Field int y.f&gt;
// 5 11:ifeq 34
// 6 14:aload_0
// 7 15:getfield #37 &lt;Field y ac.a&gt;
// 8 18:getfield #82 &lt;Field int y.e&gt;
// 9 21:invokestatic #117 &lt;Method int y.a(int)&gt;
// 10 24:aload_0
// 11 25:getfield #37 &lt;Field y ac.a&gt;
// 12 28:getfield #88 &lt;Field int y.f&gt;
// 13 31:icmpeq 78
// 14 34:aload_0
// 15 35:getfield #37 &lt;Field y ac.a&gt;
// 16 38:getfield #77 &lt;Field int y.d&gt;
// 17 41:ifgt 65
// 18 44:aload_0
// 19 45:getfield #37 &lt;Field y ac.a&gt;
// 20 48:new #10 &lt;Class d&gt;
// 21 51:dup
// 22 52:aload_0
// 23 53:getfield #37 &lt;Field y ac.a&gt;
// 24 56:aload_0
// 25 57:iconst_4
// 26 58:invokespecial #109 &lt;Method void d(y, ac, int)&gt;
// 27 61:invokevirtual #114 &lt;Method void y.a(ac)&gt;
// 28 64:return
// 29 65:aload_0
// 30 66:getfield #37 &lt;Field y ac.a&gt;
// 31 69:dup
// 32 70:getfield #77 &lt;Field int y.d&gt;
// 33 73:iconst_1
// 34 74:isub
// 35 75:putfield #77 &lt;Field int y.d&gt;
// 36 78:aload_0
// 37 79:invokevirtual #172 &lt;Method void f()&gt;
// 38 82:aload_0
// 39 83:getfield #34 &lt;Field ag a&gt;
// 40 86:invokevirtual #132 &lt;Method void ag.a()&gt;
// 41 89:aload_0
// 42 90:aconst_null
// 43 91:putfield #30 &lt;Field ah a&gt;
// 44 94:aload_0
// 45 95:aload_0
// 46 96:getfield #37 &lt;Field y ac.a&gt;
// 47 99:getfield #78 &lt;Field boolean y.d&gt;
// 48 102:iload_1
// 49 103:ifeq 110
// 50 106:aconst_null
// 51 107:goto 117
// 52 110:aload_0
// 53 111:getfield #45 &lt;Field j ae.a&gt;
// 54 114:getfield #49 &lt;Field byte[] j.a&gt;
// 55 117:invokevirtual #133 &lt;Method void ae.a(boolean, byte[])&gt;
// 56 120:return
}

Вот это место,в скобках я вписал пояснения.
// 32 70:getfield #77 &lt;Field int y.d&gt; (На стек загружается значение int d из класса y)
// 33 73:iconst_1 (На стек загружается целое число 1)
// 34 74:isub (байт команда которая вычитает от int d еденицу)
// 35 75:putfield #77 &lt;Field int y.d&gt; (В int d загружается результат вычисления)
В обшем я изменил хекс редактором iconst_1 на iconst_0, т.е. зделал так что от int d отнимался 0 и ура получилось !!!
Декомпилив вот что получилось super.a.d_int_fld -= 0;
Post #: 3
RE: Взлом демо java игры - 2009-04-01 05:40:20.913333   
sinaz

Сообщений: 3
Оценки: 0
Присоединился: 2009-04-01 02:48:33.746666
В обшем я этот класс запаковал в игру и всё прекрасно работает.Только пришлось изменить int d на 4-ку так ка приложение думало всю дорогу что его первый раз запускают и выдавало это сообшение:This is unregistered copy of the program.To buy the registration code choose Buy.Как тут выкладывать файлы ешё не разобрался.Если надо то велком на мой ящик.
P.S.Это не перво апрельская шутка.;)
P.S.Ого а игра то 24 доллара стоит!!![sm=ai.gif]
Post #: 4
RE: Взлом демо java игры - 2009-04-19 14:37:50.356666   
werewolf22

Сообщений: 250
Оценки: 0
Присоединился: 2007-04-02 22:43:31.633333
quote:

В обшем я изменил хекс редактором iconst_1 на iconst_0, т.е. зделал так что от int d отнимался 0 и ура получилось !!!
Декомпилив вот что получилось super.a.d_int_fld -= 0;


как ты нашел эту строку в хекс редакторе? и как поменял на 0????? очень важно!!!!!!
и каким редактором пользовался?
Post #: 5
RE: Взлом демо java игры - 2009-04-20 02:10:26.750000   
Дочь Билла Гейтса

Сообщений: 46
Оценки: 0
Присоединился: 2008-05-24 00:37:53.486666
Во - первых, спасибо. Во - вторых, пожалуйста в асю 402631022 напиши. Хекс "ниасилила", я обычно javabite юзаю. Это для меня очень важно
Post #: 6
RE: Взлом демо java игры - 2009-05-01 13:24:26.826666   
Дочь Билла Гейтса

Сообщений: 46
Оценки: 0
Присоединился: 2008-05-24 00:37:53.486666
:DИтак, я разобралась наконец !!!! Жду поздравлений !!!:D
Для любителей пасьянсов выкладываю патчи для любых разрешений экрана
http://jawweb.freehostia.com/p.class
http://jawweb.freehostia.com/y.class
заменяем ими оригинальные файлы в архиве и играем:D
для любителей взлома - ИМХО хекс редактор это извращение, на любителя
java byte editor видит больше кода чем javabite и его удобней редактировать
и скорость выше намного
но не все исправления прокатывают, это вам не отладчик[&o]
еще вчера взломала по просьбе одного чела техасский холдэм от concretesoftware.com
и опять юзала java byte editor - javabite не хочет видеть самые важные куски кода
если кого какие игры и проги еще интересуют - жду ваших ответов и постов, будем ломать вместе:)
Post #: 7
RE: Взлом демо java игры - 2009-07-30 13:31:27.240000   
Xexsus

Сообщений: 1
Оценки: 0
Присоединился: 2009-07-30 11:36:13.740000
Ребята,помогите с демо . http://technoj.wen.ru/games/JAVA/bejeweled.jar Давно искал эту игрушку
под свой экран-нашёл только демо. И компа нет.
Post #: 8
RE: Взлом демо java игры - 2009-08-17 09:53:43.343333   
Tarysov

Сообщений: 8
Оценки: 0
Присоединился: 2009-07-03 11:18:23.723333
Всем привет;)

Вы не подскажете где можно найти прогу для редактирование класс файлов??
А то тоже хочется поиздеваться над играми8| а не фига не получается через блокнот не хочет а прогу мне не где не найти :(

Пытался найти в поиске но там то не рабочие то платные выдавало[:(]
 Помогите!!:)
Post #: 9
Страниц:  [1]
Все форумы >> [Взлом программ] >> Взлом демо java игры







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.