Welcome, guest! Please login or register.

    * Shoutbox

    RefreshHistory
    • stCky: idk man im just a chat bot
      August 22, 2017, 11:14:52 PM
    • symantec: is this forum
      August 22, 2017, 09:02:56 PM
    • symantec: what the fudge
      August 22, 2017, 09:02:52 PM
    • symantec: I just joined to download datmaker, the links are broken and a user named i nelson i has a fudgeing weird signature
      August 22, 2017, 08:59:33 PM
    • stCky: ur so cool and edgy
      August 22, 2017, 04:15:50 PM
    • Deathspirit: anyways, i'm un ip banned now.. but don't even want to be that at this point lmfao
      August 22, 2017, 01:58:14 PM
    • Deathspirit: now it's some sell out half leeched server :')
      August 22, 2017, 01:57:53 PM
    • Deathspirit: gf moparscape, was the best rsps community i've been on since 2006
      August 22, 2017, 01:57:31 PM
    • stCky: yeah, nah. it's cooked. [link] might help u with a backup or something idk man im just a chat bot
      August 22, 2017, 12:13:25 AM
    • flew420: I sure hope someone has a copy of the forum before it was recked
      August 21, 2017, 11:40:52 PM
    • flew420: O wow i see now, just read thru all the news articles. :(  i've been out of the game for a couple years so coming back to this shit is sad.
      August 21, 2017, 11:39:46 PM
    • flew420: Huh?
      August 21, 2017, 10:49:51 PM
    • stCky: got bought by a russian dude, he put a shitty rsps on it for donations, now no one cares
      August 21, 2017, 10:48:30 PM
    • flew420: I came on for some nostalgic reading in old classic development, and it only goes back to 2014 wtf.
      August 21, 2017, 10:43:09 PM
    • flew420: what happened to this site??
      August 21, 2017, 10:42:36 PM
    • Sean56:[link]
      August 21, 2017, 05:33:45 PM
    • kb010: how can i play? i downloaded the client and it doesnt open.
      August 21, 2017, 10:52:56 AM
    • wodkode: shut it down or fix it
      August 20, 2017, 10:11:28 PM
    • wodkode: dude i cant goto no links on here from google
      August 20, 2017, 10:11:13 PM
    • Dell: Greetings
      August 20, 2017, 11:56:30 AM

    Author Topic: Arcanists Client  (Read 5781 times)

    0 Members and 1 Guest are viewing this topic.

    OfflineDavidi2

    • Member
    • ****
    • *
    • Posts: 23,275
    • Thanks: +0/-0
      • View Profile
    Arcanists Client
    « on: February 28, 2012, 12:18:05 PM »
    So I did the easy part, and extracted the client from the cache by simply modifying the game loader, and as expected it was obfuscated, so when I decompiled it there are like 4000 errors throughout the ~361 files.

    So now I see three options, and I'm wondering what you people think about this. Personally I think it would be really cool to see this through and maybe get a private server going and modify the game.

    1. Go through the client and just fix the obfuscation errors (same thing as I did with the loader, but about 10x the scale)

    2. Find a deobfuscator that may help me fix a portion of the issues (as expected, a lot of them are naming issues because of static references, (class a instead of method a etc). I'm pretty sure there are some out there, anyone got a link (is it ZKM rename I'm looking for)? And then fix the rest of the errors

    3. Use the loader to just dynamically modify the code. Personally I don't want to do this, firstly because it's my weakness and secondly because I think just having the client code completely open source and modifiable is easier for others to understand and work on themselves. And don't worry about saying things like 'well what if they update the game', because they haven't in almost 2 years :P

    And then of course
    4. I'm completely thinking this through incorrectly and there is a better idea I haven't seen yet

    For now I'm just going to start fixing errors whenever I have free time :D

    And really, about 40% of them are just things like this:
    /*     */     catch (RuntimeException localRuntimeException)
    /*     */     {
    /*     */     }
    /*     */
    /* 188 */     throw ff.a(localRuntimeException, "wl.A(" + paramInt + ')');

    Where all you need to do is change it so there is a stack trace in the catch and then remove the throw. If someone wants to write some regex for that before I do, God bless you :D
    « Last Edit: February 28, 2012, 12:33:28 PM by Davidi2 »


    OfflineRLN

    • Member
    • ****
    • Posts: 397
    • Thanks: +0/-0
      • View Profile
    Re: Arcanists Client
    « Reply #1 on: February 28, 2012, 02:12:05 PM »
    For the naming issues, use ZKM unobfuscate feature.. for the exceptions, there are plenty of open source transforms for removing/fixing them.. could also try using the control flow transforms from different deobfuscators to see if they will work out of the box or with slight modification.. don't try deobfuscating it manually in the decompiled source code as some decompilers will omit code that is severely mangled (like jad) and it's just a really dirty way to go about it in general.

    OfflineDavidi2

    • Member
    • ****
    • *
    • Posts: 23,275
    • Thanks: +0/-0
      • View Profile
    Re: Arcanists Client
    « Reply #2 on: February 28, 2012, 02:20:34 PM »
    Thanks for the reply

    Yea, I figured it was ZKM. Anyone have a link? I'm pretty sure it came with good ole' popcorns deobber right?


    OfflineMoparisthebest

    • Global Moderator
    • *****
    • *
    • Posts: 17,146
    • Thanks: +0/-0
      • View Profile
    Re: Arcanists Client
    « Reply #3 on: February 28, 2012, 10:26:20 PM »
    There is no reason at all to decompile it, you can simply load it as-is and make it do what you want.  It would even be trivial to load into MoparScape 4 I'm sure.

    @Your last post, ZKM did come with popcorn's deobber.
    forum.moparisthebest.com
    You can have my gun when you pry it from my cold, dead hands.
    Linux users, we do it in the open.

    OfflineRuneAgent

    • wololo
    • Member
    • ****
    • *
    • *
    • Posts: 7,516
    • Thanks: +0/-0
      • View Profile
      • MITB FORUMS
    Re: Arcanists Client
    « Reply #4 on: February 28, 2012, 10:39:25 PM »
    There is no reason at all to decompile it, you can simply load it as-is and make it do what you want.  It would even be trivial to load into MoparScape 4 I'm sure.

    @Your last post, ZKM did come with popcorn's deobber.

    you have some magic method to learn the packet documentation of the client without decompiling it?

    OfflineDavidi2

    • Member
    • ****
    • *
    • Posts: 23,275
    • Thanks: +0/-0
      • View Profile
    Re: Arcanists Client
    « Reply #5 on: February 29, 2012, 12:43:39 AM »
    There is no reason at all to decompile it, you can simply load it as-is and make it do what you want.  It would even be trivial to load into MoparScape 4 I'm sure.

    @Your last post, ZKM did come with popcorn's deobber.
    That what #3 was, but like I said that's my weak point and I don't really know anything about the arcanists client to even begin knowing what to modify. But like I explained at the end of #3 I'd really prefer to get it completely decompiled.

    OfflineTaharok

    • Member
    • ****
    • *
    • *
    • *
    • *
    • *
    • *
    • Posts: 7,524
    • Thanks: +0/-0
      • View Profile
      • Thornefall
    Re: Arcanists Client
    « Reply #6 on: February 29, 2012, 11:20:38 AM »
    Look at all the files of the arcanists client, then look at all the files of a ~5xx client. Remove the really large 700kb file from the arcanists one and remove client.java from the 5xx one. You now have nearly identical clients. They behave almost exactly the same, with the only true differences being a few content-specific features between the two and protocol differences.

    OfflineDavidi2

    • Member
    • ****
    • *
    • Posts: 23,275
    • Thanks: +0/-0
      • View Profile
    Re: Arcanists Client
    « Reply #7 on: February 29, 2012, 05:35:16 PM »
    Look at all the files of the arcanists client, then look at all the files of a ~5xx client. Remove the really large 700kb file from the arcanists one and remove client.java from the 5xx one. You now have nearly identical clients. They behave almost exactly the same, with the only true differences being a few content-specific features between the two and protocol differences.
    Yea, well, I've never been that much of a RS client hacking guy either :P


    On a side note, anyone know what's up with this?
    'com.ms.dll.Callback not found, please check your classpath'

    What does this package come with? It's stopping ZKM from renaming anything (but my loader still works, when I get it to point to the right server it should get past the update server part :P)


    OfflineTaharok

    • Member
    • ****
    • *
    • *
    • *
    • *
    • *
    • *
    • Posts: 7,524
    • Thanks: +0/-0
      • View Profile
      • Thornefall
    Re: Arcanists Client
    « Reply #8 on: February 29, 2012, 09:14:14 PM »
    http://www.codeguru.com/java/tij/tij0193.shtml

    Rather odd library. It seems to be used in .NET, as well. I'm not sure what Jagex's use for it is...

    OfflineRuneAgent

    • wololo
    • Member
    • ****
    • *
    • *
    • Posts: 7,516
    • Thanks: +0/-0
      • View Profile
      • MITB FORUMS
    Re: Arcanists Client
    « Reply #9 on: February 29, 2012, 09:40:46 PM »
    http://www.codeguru.com/java/tij/tij0193.shtml

    Rather odd library. It seems to be used in .NET, as well. I'm not sure what Jagex's use for it is...
    if I had to take a random guess I would assume for some of the Direct X stuff.

    OfflineDavidi2

    • Member
    • ****
    • *
    • Posts: 23,275
    • Thanks: +0/-0
      • View Profile
    Re: Arcanists Client
    « Reply #10 on: March 01, 2012, 12:41:18 AM »
    http://www.codeguru.com/java/tij/tij0193.shtml

    Rather odd library. It seems to be used in .NET, as well. I'm not sure what Jagex's use for it is...
    if I had to take a random guess I would assume for some of the Direct X stuff.
    Code: Java
    1. importcom.ms.awt.WComponentPeer;
    2. importcom.ms.dll.Callback;
    3. importcom.ms.dll.Root;
    4. importcom.ms.win32.User32;
    5. importjava.awt.Component;
    6.  
    7. finalclass wa extends Callback
    8. {
    9.         privateboolean a;
    10.         privatevolatileint b;
    11.         privatevolatileboolean c =true;
    12.         privatevolatileint d;
    13.         privateint e;
    14.  
    15.         finalvoid a(Component paramComponent, boolean paramBoolean, int paramInt)
    16.         {
    17.                 try
    18.                 {
    19.                         WComponentPeer localWComponentPeer =(WComponentPeer)paramComponent.getPeer();
    20.  
    21.                         int i = localWComponentPeer.getTopHwnd();
    22.                         if((this.d== i)&&(paramBoolean ==this.c)){
    23.                                 return;
    24.                         }
    25.                         if(!this.a)
    26.                         {
    27.                                 this.e= User32.LoadCursor(0, 32512);
    28.                                 Root.alloc(this);
    29.                                 this.a=true;
    30.                         }
    31.  
    32.                         if((i ^ 0xFFFFFFFF)!=(this.d^ 0xFFFFFFFF))
    33.                         {
    34.                                 if(this.d!=0)
    35.                                 {
    36.                                         this.c=true;
    37.                                         User32.SendMessage(i, 101024, 0, 0);
    38.                                         synchronized(this){
    39.                                                 User32.SetWindowLong(this.d, -4, this.b);
    40.                                         }
    41.                                 }
    42.  
    43.                                 synchronized(this){
    44.                                         this.d= i;
    45.                                         this.b= User32.SetWindowLong(this.d, -4, this);
    46.                                 }
    47.                         }
    48.  
    49.                         if(paramInt !=-101025){
    50.                                 this.d=-113;
    51.                         }
    52.                         this.c= paramBoolean;
    53.                         User32.SendMessage(i, 101024, 0, 0);
    54.  
    55.                         return;
    56.                 }
    57.                 catch(RuntimeException localRuntimeException)
    58.                 {
    59.                 }
    60.  
    61.                 throw localRuntimeException;
    62.         }
    63.  
    64.         finalsynchronizedint callback(int paramInt1, int paramInt2, int paramInt3, int paramInt4)
    65.         {
    66.                 try
    67.                 {
    68.                         int i;
    69.                         if((paramInt1 ^ 0xFFFFFFFF)!=(this.d^ 0xFFFFFFFF))
    70.                         {
    71.                                 i = User32.GetWindowLong(paramInt1, -4);
    72.                                 return User32.CallWindowProc(i, paramInt1, paramInt2, paramInt3, paramInt4);
    73.                         }
    74.  
    75.                         if(paramInt2 ==32)
    76.                         {
    77.                                 i = 0xFFFF & paramInt4;
    78.                                 if((i ^ 0xFFFFFFFF)==-2)
    79.                                 {
    80.                                         User32.SetCursor(this.c?this.e:0);
    81.                                         return0;
    82.                                 }
    83.  
    84.                         }
    85.  
    86.                         if((paramInt2 ^ 0xFFFFFFFF)==-101025)
    87.                         {
    88.                                 User32.SetCursor(this.c?this.e:0);
    89.                                 return0;
    90.                         }
    91.  
    92.                         if(paramInt2 ==1)
    93.                         {
    94.                                 this.d=0;
    95.                                 this.c=true;
    96.                         }
    97.  
    98.                         return User32.CallWindowProc(this.b, paramInt1, paramInt2, paramInt3, paramInt4);}catch(RuntimeException localRuntimeException){
    99.                         }
    100.                 throw localRuntimeException;
    101.         }
    102.  
    103.         finalvoid a(int paramInt1, int paramInt2, int paramInt3)
    104.         {
    105.                 try{
    106.                         if(paramInt2 >=-116){
    107.                                 return;
    108.                         }
    109.                         User32.SetCursorPos(paramInt3, paramInt1);
    110.  
    111.                         return;
    112.                 }
    113.                 catch(RuntimeException localRuntimeException)
    114.                 {
    115.                 }
    116.  
    117.                 throw localRuntimeException;
    118.         }
    119. }
    Bleh.

    http://www.codeguru.com/java/tij/tij0193.shtml

    Rather odd library. It seems to be used in .NET, as well. I'm not sure what Jagex's use for it is...
    Wikipedia says...
    Quote
    J/Direct was a technology included in some versions of Microsoft's Java Virtual Machine, which allowed direct calls into the Windows API. J/Direct was specific of Microsoft's Virtual Machine, in replacement of the standard Java Native Interface (JNI).

    A Java program which used J/Direct would not run on platforms other than Microsoft Windows.

    The release of J/Direct (along with AFC and WFC), was part of an effort by Microsoft to gain leadership on the growing Java community.[1]

    Since this destroyed one of the main advantages of Java, its cross-platform nature, J/Direct was often seen as an attempt by Microsoft to undermine Java's cross-platform capabilities, and an example of the tactic of Embrace, extend and extinguish.[2]

    After the drop by Microsoft of their specific Java Virtual Machine, and the switch to the .NET environment, J/Direct was no longer maintained.
    I don't understand what I should be doing with this...

    Offlinevortex

    • Member
    • ****
    • *
    • Posts: 1,368
    • Thanks: +0/-0
      • View Profile
    Re: Arcanists Client
    « Reply #11 on: March 01, 2012, 04:52:22 AM »
    Take "wa" out from the archive, put it in your classpath and run ZKM, this way it should run but it won't rename it.

    OfflineDavidi2

    • Member
    • ****
    • *
    • Posts: 23,275
    • Thanks: +0/-0
      • View Profile
    Re: Arcanists Client
    « Reply #12 on: March 01, 2012, 08:02:46 AM »
    Take "wa" out from the archive, put it in your classpath and run ZKM, this way it should run but it won't rename it.
    Thanks, worked like a charm
    for the exceptions, there are plenty of open source transforms for removing/fixing them..
    Now this is my next priority, can you give me an example?

    OfflineTaharok

    • Member
    • ****
    • *
    • *
    • *
    • *
    • *
    • *
    • Posts: 7,524
    • Thanks: +0/-0
      • View Profile
      • Thornefall
    Re: Arcanists Client
    « Reply #13 on: March 01, 2012, 08:26:50 AM »
    http://www.codeguru.com/java/tij/tij0193.shtml

    Rather odd library. It seems to be used in .NET, as well. I'm not sure what Jagex's use for it is...
    if I had to take a random guess I would assume for some of the Direct X stuff.

    I'd have to agree. It seems to work almost like JNA, but just for windows native methods. Would be a much easier way to implement directx than writing a JNI binding, but I thought they did that already. :S

    Offlinevortex

    • Member
    • ****
    • *
    • Posts: 1,368
    • Thanks: +0/-0
      • View Profile
    Re: Arcanists Client
    « Reply #14 on: March 01, 2012, 08:34:01 AM »
    Take "wa" out from the archive, put it in your classpath and run ZKM, this way it should run but it won't rename it.
    Thanks, worked like a charm
    for the exceptions, there are plenty of open source transforms for removing/fixing them..
    Now this is my next priority, can you give me an example?
    Try this, it was made by some dude from rune-serber (some of the plugins worked quite well on the current RSC client)
    http://uppit.com/ebtp2fqj44li/classtransformer_build_2.0.1.zip

    OfflineDavidi2

    • Member
    • ****
    • *
    • Posts: 23,275
    • Thanks: +0/-0
      • View Profile
    Re: Arcanists Client
    « Reply #15 on: March 01, 2012, 11:33:43 AM »
    Take "wa" out from the archive, put it in your classpath and run ZKM, this way it should run but it won't rename it.
    Thanks, worked like a charm
    for the exceptions, there are plenty of open source transforms for removing/fixing them..
    Now this is my next priority, can you give me an example?
    Try this, it was made by some dude from rune-serber (some of the plugins worked quite well on the current RSC client)
    http://uppit.com/ebtp2fqj44li/classtransformer_build_2.0.1.zip
    woah thats pretty cool, playing around with it now
    EDIT- Exactly what I needed! Thanks both of ya. Literally all the errors are gone besides the strange Directx(?) ones. And when I was browsing the references it seems like it may not even need them, we'll see.


    EDIT2 - :D (this is after logging in)

    « Last Edit: March 01, 2012, 12:47:26 PM by Davidi2 »

    OfflineMoparisthebest

    • Global Moderator
    • *****
    • *
    • Posts: 17,146
    • Thanks: +0/-0
      • View Profile
    Re: Arcanists Client
    « Reply #16 on: March 01, 2012, 01:42:36 PM »
    Take "wa" out from the archive, put it in your classpath and run ZKM, this way it should run but it won't rename it.
    Thanks, worked like a charm
    for the exceptions, there are plenty of open source transforms for removing/fixing them..
    Now this is my next priority, can you give me an example?
    Try this, it was made by some dude from rune-serber (some of the plugins worked quite well on the current RSC client)
    http://uppit.com/ebtp2fqj44li/classtransformer_build_2.0.1.zip
    I'm confused, it says it is licensed under the GNU/GPL yet has no source code in it?  Is there another release WITH source code?
    forum.moparisthebest.com
    You can have my gun when you pry it from my cold, dead hands.
    Linux users, we do it in the open.

    OfflineDavidi2

    • Member
    • ****
    • *
    • Posts: 23,275
    • Thanks: +0/-0
      • View Profile
    Re: Arcanists Client
    « Reply #17 on: March 01, 2012, 02:15:51 PM »
    Take "wa" out from the archive, put it in your classpath and run ZKM, this way it should run but it won't rename it.
    Thanks, worked like a charm
    for the exceptions, there are plenty of open source transforms for removing/fixing them..
    Now this is my next priority, can you give me an example?
    Try this, it was made by some dude from rune-serber (some of the plugins worked quite well on the current RSC client)
    http://uppit.com/ebtp2fqj44li/classtransformer_build_2.0.1.zip
    I'm confused, it says it is licensed under the GNU/GPL yet has no source code in it?  Is there another release WITH source code?
    I'm not sure. I can only find this:

    Which is a much older version (1.4?) but it does have the source code

    It really did do exactly what I needed though, worked perfectly. Just ran the deobfuscator then the renamer for classes and methods, then the decompiler, and 99.9% of the issues were fixed.

    Offlinevortex

    • Member
    • ****
    • *
    • Posts: 1,368
    • Thanks: +0/-0
      • View Profile
    Re: Arcanists Client
    « Reply #18 on: March 01, 2012, 02:38:13 PM »
    You can find the newer versions and their changelogs by browsing the last pages of that thread.
    Quote from: mgi125;2771263
    Source will be released when v2.0.0 is fully finished

    OfflineRuneAgent

    • wololo
    • Member
    • ****
    • *
    • *
    • Posts: 7,516
    • Thanks: +0/-0
      • View Profile
      • MITB FORUMS
    Re: Arcanists Client
    « Reply #19 on: March 01, 2012, 07:08:26 PM »
    upload your source if you get it to not crash david

     

    Copyright © 2017 MoparScape. All rights reserved.
    Powered by SMFPacks SEO Pro Mod |
    SimplePortal 2.3.5 © 2008-2012, SimplePortal