Special Aircraft Service

Please login or register.

Login with username, password and session length
Advanced search  
Pages: 1 [2] 3   Go Down

Author Topic: UP3 RC4 without obfuscation  (Read 10374 times)

0 Members and 1 Guest are viewing this topic.

SAS~Tom2

  • SAS Honourable Member
  • member
  • Offline Offline
  • Posts: 7954
  • no sweat
Re: UP3 RC4 without obfuscation
« Reply #12 on: September 29, 2014, 05:26:11 PM »

Interisting, I wonder if it works with my old HistoMod-or the next, for that matter.

Thanks for sharing! ..never got RRR to work for some reasons. :-[
The new Visual Mod by SAS~benitomuso has the refuel and rearm feature at any base as long as you use chocks. :P
Logged

enigmatum

  • Modder
  • member
  • Offline Offline
  • Posts: 14
Re: UP3 RC4 without obfuscation
« Reply #13 on: September 30, 2014, 08:46:40 PM »

Interisting, I wonder if it works with my old HistoMod-or the next, for that matter.

Yes, Klaus mentioned it works with HistoMod.

Thanks for sharing! ..never got RRR to work for some reasons. :-[

No worries. Zuti's standard RRR required the mission to have a Home Base object allocated to your team, with friction set to something other than the default value. This was fine, but unfortunately DCG doesn't generate missions this way.

The new Visual Mod by SAS~benitomuso has the refuel and rearm feature at any base as long as you use chocks. :P

OK, great thanks. Sounds like the same idea, I'll give Visal Mod a try.

Cheers
Jason
Logged

SAS~Storebror

  • Editor
  • member
  • Offline Offline
  • Posts: 23886
  • Taking a timeout
    • STFU
Re: UP3 RC4 without obfuscation
« Reply #14 on: March 17, 2015, 06:31:25 AM »

New Version 1.01 available in first post.
This version fixes a couple of bugs, e.g. code deadlocks, surplus log entries, false error-logs etc., plus it fixes a net replication bug for aircraft equipped with rocket boosters (e.g. Arado 234 Night Fighter, F-84 Thunderstreak).

Best regards - Mike
Logged
Don't split your mentality without thinking twice.

bomberkiller

  • Treffen sich zwei Jäger...!
  • Modder
  • member
  • Offline Offline
  • Posts: 4929
  • Bf-109G-6/R6 = Bomber Killer
Re: UP3 RC4 without obfuscation
« Reply #15 on: March 18, 2015, 09:58:11 PM »

Hi Mike,

WUNDERBAR!

Thank you very much.

Best regards, Gerhard  :)
Logged
FAC N° 9 ...cheers mein Schatz

solopilot

  • member
  • Offline Offline
  • Posts: 6
UP3 RC4 with Unobfuscation patch crashes at 70%
« Reply #16 on: May 13, 2015, 04:04:24 AM »

Hello,

I've got an issue with the Unobfuscated patch for UP3RC4 that I hope someone might help clarify.

I've been using UP3RC4 successfully for a while now, I am able to connect and fly online on the SAS UP3 server listed on Hyperlobby. Tonight when I logged on I saw a message that there was a new patch (102b3) available. I researched the patch and it's dependency (Unobfuscated 1.01) and proceeded to install the Unobfuscated patch into my clean and unpatched version of UP3RC4. I ran UP3RC4 with just UP3.0 and Unobfuscated enabled in JSGME. The game crashes at 70%.

It looks like the game crashes after loading the FM for the N1K3-A  and right during loading of the FM for N1K3-J. I can disable the unobfuscated patch and the game loads without errors and I'm able to join the online SAS server.  I have downloaded the patch twice and checked for errors as best I could, but I can't seem to understand why the patch won't load.

Any help would be greatly appreciated.

Last 12 line of the log
s1 = flightmodels/n1k1-j.fmd
s = FlightModels/N1K1-J.fmd
m_lastFMFile = gui/game/buttons
sFMDir = gui/game/buttons
s1 = flightmodels/n1k2-ja_mod.fmd
s = FlightModels/N1K2-Ja_mod.fmd
m_lastFMFile = gui/game/buttons
sFMDir = gui/game/buttons
s1 = flightmodels/n1k3-a.fmd
s = FlightModels/N1K3-A.fmd
m_lastFMFile = gui/game/buttons
sFMDir = gui/game/but
Logged

SAS~Storebror

  • Editor
  • member
  • Offline Offline
  • Posts: 23886
  • Taking a timeout
    • STFU
Re: UP3 RC4 without obfuscation
« Reply #17 on: May 13, 2015, 11:43:35 AM »

Hi solopilot,

Unfortunately your logfile is truncated because it wasn't written to the end before the game crashed.
To avoid this, please download and install this mod:
https://www.sas1946.com/main/index.php/topic,42333.0.html

Additionally it's recommended to put the "#UP#" Sample folder contents in place which ship with the initial UP3 installation files, the name of the archive holding the "#UP#" Sample folder is "#UP#SampleFolder.rar".

After installing both the Instant Log mod and the "#UP#" Sample folder, please run the game again and in case it crashes once more, please post your log.lst contents a second time.

Best regards - Mike
Logged
Don't split your mentality without thinking twice.

solopilot

  • member
  • Offline Offline
  • Posts: 6
Re: UP3 RC4 without obfuscation
« Reply #18 on: May 13, 2015, 11:04:07 PM »

Thank you Mike, problem solved!

I copied the STD folder  from the default #UP#SampleFolder.rar  into the #UP# folder after renaming the original STD folder to something else. That was the trick.  I am able to now load the unobfuscation patch.

Thanks again for the timely and accurate tech support.
Logged

Blaubaer

  • member
  • Offline Offline
  • Posts: 514
Re: UP3 RC4 without obfuscation
« Reply #19 on: May 14, 2015, 03:33:06 AM »

"obfuscated classes" - Mike, can you explain that to me? (I can't see a difference between obfuscated an unobfuscated class files.)

Regards
der Blaubär
Logged

SAS~Storebror

  • Editor
  • member
  • Offline Offline
  • Posts: 23886
  • Taking a timeout
    • STFU
Re: UP3 RC4 without obfuscation
« Reply #20 on: May 14, 2015, 07:18:13 AM »

Sure I can explain Obfuscation.
Obfuscated classes are classfiles which have been intentionally modified to make the code which they're performing unreadable to human eyes in case it's being decompiled.

This for instance is the decompiled code of an obfuscated classfile from UP3 RC4:
Code: [Select]
package com.maddox.il2.builder;

import com.maddox.gwindow.GRegion;
import com.maddox.gwindow.GWindow;
import com.maddox.gwindow.GWindowButton;
import com.maddox.gwindow.GWindowDialogClient;
import com.maddox.gwindow.GWindowFramed;
import com.maddox.gwindow.GWindowTable;
import java.util.ArrayList;

public class yh extends GWindowFramed
{
  private ni a;
  private GWindowButton b;
  private PlMapLoad c;

  public yh()
  {
    doNew(Plugin.builder.clientWindow, 2.0F, 2.0F, 25.0F, 40.0F, true);
    this.bSizable = true;
  }

  public void afterCreated()
  {
    super.afterCreated();
    close(false);
  }

  public void windowShown()
  {
    super.windowShown();
    if (this.a != null)
      this.a.resolutionChanged();
  }

  public void windowHidden()
  {
    super.windowHidden();
  }

  public void created()
  {
    this.bAlwaysOnTop = true;
    super.created();
    this.title = Plugin.i18n("mds.loadMaps.windowTitle");
    this.clientWindow = create(new ee(this));
    GWindowDialogClient localGWindowDialogClient = (GWindowDialogClient)this.clientWindow;
    this.a = new ni(this, localGWindowDialogClient, Plugin.i18n("mds.loadMaps.listTitle"), 1.0F, 3.0F, 15.0F, 20.0F);
    localGWindowDialogClient.addControl(this.b = new t(this, localGWindowDialogClient, 17.0F, 8.0F, 5.0F, 2.0F, Plugin.i18n("mds.loadMaps.loadMap"), null));
  }

  private void a(GWindow paramGWindow)
  {
    float f1 = paramGWindow.win.dx;
    float f2 = paramGWindow.win.dy;
    this.a.setPosSize(5.0F, 5.0F, f1 - 10.0F, f2 - 40.0F);
    this.b.setPosSize(5.0F, f2 - 25.0F, f1 - 10.0F, 20.0F);
  }

  private void a()
  {
    if (this.c != null)
      this.c.zutiExecute(this.a.selectRow);
  }

  public void close(boolean paramBoolean)
  {
    super.close(paramBoolean);
  }

  public void a(String paramString)
  {
    this.title = (Plugin.i18n("mds.loadMaps.windowTitle") + " - " + paramString);
  }

  public void b()
  {
    if (this.a.a != null)
      this.a.a.clear();
  }

  public void a(ArrayList paramArrayList)
  {
    int i = paramArrayList.size();
    int j = 0;
    if (Plugin.a);
    while (j < i)
    {
      PlMapLoad.Land localLand = (PlMapLoad.Land)paramArrayList.get(j);
      this.a.a.add(localLand.i18nName);
      j++;
    }
  }

  public void a(PlMapLoad paramPlMapLoad)
  {
    this.c = paramPlMapLoad;
  }

  static void a(yh paramyh, GWindow paramGWindow)
  {
    paramyh.a(paramGWindow);
  }

  static void a(yh paramyh)
  {
    paramyh.a();
  }
}

...and this is the "unobfuscated", or better said the original code of the same class:

Code: [Select]
package com.maddox.il2.builder;

import java.util.ArrayList;
import com.maddox.gwindow.GWindow;
import com.maddox.gwindow.GWindowButton;
import com.maddox.gwindow.GWindowDialogClient;
import com.maddox.gwindow.GWindowTable;
import com.maddox.gwindow.GWindowFramed;
import com.maddox.il2.builder.PlMapLoad.Land;

public class Zuti_WMapsList extends GWindowFramed
{
private Table lstMaps;
private GWindowButton bLoadMap;
private PlMapLoad plMapLoad;

class Table extends GWindowTable
{
public ArrayList lst = new ArrayList();

public int countRows()
{
return lst != null ? lst.size() : 0;
}

public Object getValueAt(int i, int i_0_)
{
if (lst == null)
return null;
if (i < 0 || i >= lst.size())
return null;
String string = (String) lst.get(i);
return string;
}

public void resolutionChanged()
{
vSB.scroll = rowHeight(0);
super.resolutionChanged();
}

public Table(GWindow gwindow, String string, float f, float f_1_, float f_2_, float f_3_)
{
super(gwindow, f, f_1_, f_2_, f_3_);
bColumnsSizable = false;
addColumn(string, null);
vSB.scroll = rowHeight(0);
resized();
}
}

public Zuti_WMapsList()
{
doNew(Plugin.builder.clientWindow, 2.0F, 2.0F, 25.0F, 40.0F, true);
bSizable = true;
}

public void afterCreated()
{
super.afterCreated();

close(false);
}

public void windowShown()
{
super.windowShown();

if(lstMaps != null)
lstMaps.resolutionChanged();
}

public void windowHidden()
{
super.windowHidden();
}

public void created()
{
bAlwaysOnTop = true;
super.created();
title = Plugin.i18n("mds.loadMaps.windowTitle");
clientWindow = create(new GWindowDialogClient()
{
public void resized()
{
super.resized();
Zuti_WMapsList.this.setSizes(this);
}
});
com.maddox.gwindow.GWindowDialogClient gwindowdialogclient = (com.maddox.gwindow.GWindowDialogClient)clientWindow;

lstMaps  = new Table(gwindowdialogclient, Plugin.i18n("mds.loadMaps.listTitle"), 1.0F, 3.0F, 15.0F, 20.0F);

gwindowdialogclient.addControl(bLoadMap = new GWindowButton(gwindowdialogclient, 17.0F, 8.0F, 5.0F, 2.0F, (Plugin.i18n("mds.loadMaps.loadMap")), null)
{
public boolean notify(int i_61_, int i_62_)
{
if (i_61_ != 2)
return false;

loadMap();
return true;
}
});
}

private void setSizes(GWindow gwindow)
{
float win_X = gwindow.win.dx;
float win_Y = gwindow.win.dy;

lstMaps.setPosSize(5, 5, win_X - 10, win_Y - 40);
bLoadMap.setPosSize(5, win_Y - 25, win_X - 10, 20);
}

//----------------------------------------------------------------------
private void loadMap()
{
if( this.plMapLoad != null )
{
this.plMapLoad.zutiExecute( lstMaps.selectRow );
}
}

/**
* Close window.
*/
public void close(boolean flag)
{
super.close(flag);
}

/**
* Set window title
* @param newTitle
*/
public void setTitle(String newTitle)
{
title = Plugin.i18n("mds.loadMaps.windowTitle") + " - " + newTitle;
}

/**
* Clear maps list.
*/
public void clearMaps()
{
if( lstMaps.lst != null )
lstMaps.lst.clear();
}

/**
* Load all know maps into a list.
* @param lands
*/
public void loadMaps(ArrayList lands)
{
int size = lands.size();
for (int i = 0; i < size; i++)
{
Land land = (Land)lands.get(i);
this.lstMaps.lst.add(land.i18nName);
}
}

/**
* Set map loading plugin.
* @param mapLoad
*/
public void setPlMapLoad(PlMapLoad mapLoad)
{
this.plMapLoad = mapLoad;
}
}

You will note that most methods and properties of the obfuscated class (usually all private ones plus all genuine ones from MDS), including the classes' own name, are changed to a single letter of the alphabet (or two letter in case all single letters have been used already).
Furthermore multiple methods and properties are using the very same "name", here "letter".

For the binary java file this doesn't matter, but for humans it makes most of the code completely unreadable since you just don't know what's inside.
For instance the whole "builder" namespace of the obfuscated UP3 RC4 code contains obfuscated classes with names ranging from "a" to "zf" and they mostly look the same all over.
You just don't know what is what unless you get hands on the original code.

And that's even just the most basic level of obfuscation...

Hades used Zelix KlassMaster for obfuscation but he only used the Name Obfuscation feature of it.
Using more advanced features of obfuscation you can scramble the code even more until it becomes a total mess when being decompiled.
There's a nice survey of obfuscators from 2001 available here:
http://www.cs.auckland.ac.nz/~cthombor/Students/hlai/hongying.pdf

Note that it's common sense that people using obfuscators on IL-2 are outlawed.
It's the worst style one can ever show: You pick what you get from the game itself (circumventing it's EULA which prohibits decompilation) and maybe even from the modding community, but the result you don't share back with the game's developers nor the community again, instead you protect it from being utilized and modified any further.
That's a disgusting attitude and no one should ever consider to use obfuscation in IL-2.
It's okay to obfuscate your very own code in commercial projects where you might have something worth to be protected from being stolen (and thereby negating your share of the commercial success of your project), but modding IL-2 isn't a commercial thing and everyone coding for IL-2 should be well aware that nothing of what he's doing here is done by himself alone, it would have never existed without the works of 1C/Maddox/TD/Other Community Members before.

Just don't do that. Don't use obfuscation. I did it myself once and it was the biggest mistake I ever made in IL-2. Trying vertical landings with a B-17 is a success story compared to that.

Best regards - Mike
Logged
Don't split your mentality without thinking twice.

Blaubaer

  • member
  • Offline Offline
  • Posts: 514
Re: UP3 RC4 without obfuscation
« Reply #21 on: May 14, 2015, 01:57:57 PM »

And what is the advantage of using unobfuscated class files for IL2 players?

Fragt der Blaubär nach.
Logged

SAS~Storebror

  • Editor
  • member
  • Offline Offline
  • Posts: 23886
  • Taking a timeout
    • STFU
Re: UP3 RC4 without obfuscation
« Reply #22 on: May 15, 2015, 01:59:44 AM »

The first advantage simply is that existing mods (from other game versions than Ultrapack 3) will work again when using original (unobfuscated) classfiles, whereas they're not working when using the obfuscated ones.
That's because the obfuscated classes are missing methods and properties which are called from other mod's classes.

For instance when you've got a mod aircraft which for some reason calls the method "whatever" inside the NetAircraft class, everything's fine as long as your NetAircraft class is the original one with the method "whatever" included.
The obfuscated version doesn't have that method "whatever" anymore, it's recalled to "j".
Therefor calling "NetAircraft.whatever" will fail with obfuscated classes and your game will crash when you install the modded aircraft.

The second advantage is that now with the original sources modders are able to continue working on UP3, improving it and fixing bugs.
With obfuscated classes that's impossible for the simple fact that what you can't read, you can't modify.

Best regards - Mike
Logged
Don't split your mentality without thinking twice.

Blaubaer

  • member
  • Offline Offline
  • Posts: 514
Re: UP3 RC4 without obfuscation
« Reply #23 on: May 15, 2015, 02:52:49 AM »

So the unobfuscated are more compatible. So a mod shouldn't demand the obfuscated files?

Fragt noch mal der Blaubär nach.
Logged
Pages: 1 [2] 3   Go Up
 

Page created in 0.036 seconds with 26 queries.