Thread: Deobfuscation

Results 1 to 7 of 7
  1. #1 Deobfuscation 
    Registered Member
    Tyluur's Avatar
    Join Date
    Jun 2010
    Age
    26
    Posts
    5,103
    Thanks given
    1,818
    Thanks received
    1,767
    Rep Power
    2438
    Hello world,

    In the time I've spent learning how to reverse engineer runescape's protocol, I haven't spent as much time as I would've liked on deobfuscation.
    This year, I'm hoping to get a more reliable client publicly released of every notable 600+ build.

    Firstly, I need the caches and gamepacks, which displee has taken care of (rs-cache-library)
    Secondly, the gamepacks need to be deobfuscated and translated into high-level-language that is compilable [java]
    Lastly, the file server must be running, which @Greg has taken care of (kotlin-js5-file-server)

    Currently, I've tested the 647 deob and cache, and everything works [opengl, directx] more than any other 600+ deob publicly released.
    647 is a revision to note!

    Spoiler for 647:

    Attached image


    Request

    I need more information as to how to get a complete deob, from the gamepack. I know there's a lot of [high quality] information out there, but it's still spread out.
    Initiatives like RuneDocs aim to simplify this [from a documentation standpoint], but the actual work still needs to be done and then given out publicly & for free [lol].

    Additional Articles
    - https://forum.moparisthebest.com/t/d...eobs/5558.html
    Last edited by Tyluur; 02-17-2021 at 04:43 PM.
    Quote Originally Posted by blakeman8192 View Post
    Keep trying. Quitting is the only true failure.
    Spoiler for skrrrrr:

    Attached image
    Reply With Quote  
     

  2. #2  
    Chemist

    Advocatus's Avatar
    Join Date
    Dec 2009
    Posts
    2,622
    Thanks given
    201
    Thanks received
    813
    Rep Power
    1462
    It'd be cool to have a high quality deobs across all revisions. Having classes autorenamed for the filesystem/jagex colllection classes at the very least would be very handy. Perhaps the runelite deobfuscator/toolchain could be used.

    Back whenever I was doing Deobs years ago I used MGI's Class Transformer combined with Lazaro's AlterRS.
    Quote Originally Posted by blakeman8192 View Post
    Quitting is the only true failure.
    Reply With Quote  
     

  3. #3  
    Registered Member
    Tyluur's Avatar
    Join Date
    Jun 2010
    Age
    26
    Posts
    5,103
    Thanks given
    1,818
    Thanks received
    1,767
    Rep Power
    2438
    Quote Originally Posted by Advocatus View Post
    It'd be cool to have a high quality deobs across all revisions. Having classes autorenamed for the filesystem/jagex colllection classes at the very least would be very handy. Perhaps the runelite deobfuscator/toolchain could be used.

    Back whenever I was doing Deobs years ago I used MGI's Class Transformer combined with Lazaro's AlterRS.
    You don't know how much I would appreciate that. I have been using the deobfuscated version of a 667 gamepack from rs2011 by @Discardedx2 for years - there's nothing better.
    I had to either spend months figuring out the client and stop server development even more, or just continue with the bare minimum.

    If we can put together a solution that can streamline this, we can probably offer a clean variant of a rs2011 experience. Player customisations could simply be done on the ui perspective as well.
    If we had these kind of things public today, perhaps in a year from now we'd be a lot further and have more of a pool of quality devs who want to code rsps hrug:
    Quote Originally Posted by blakeman8192 View Post
    Keep trying. Quitting is the only true failure.
    Spoiler for skrrrrr:

    Attached image
    Reply With Quote  
     

  4. #4  
    Contributor

    clem585's Avatar
    Join Date
    Sep 2013
    Posts
    3,788
    Thanks given
    706
    Thanks received
    702
    Rep Power
    570
    It's been a while since I did this so I'm going of the top of my head here. Here's how I obtained my 634 client.

    1- Obtain a fresh untouched .jar of the client if you can. Of course, you can use the packaged .jar of an existing client but you said yourself that you wanted something high quality.

    2- Remove most of the obfuscation. This includes: integer obfuscation, checked exceptions, dead code blocks, unused parameters and probably a few more stuff. I use the Runelite deob tool to do that. It relies on a old version of Java ASM and it has 1 notable bug that might cause issues when deobfuscating some clients. The bug is that one of the deobfuscation step tries to remove unused classes, but it doesn't check if interface methods are used anywhere. So you will sometimes see interfaces files being deleted despite being implemented by some classes. Also had some issues with some of the deobfuscation steps being too agressive or something which would result in me getting errors at step #4. You just have to go trial and errors by removing some deob steps and do step #2-#4 over and over again until you get something that decompiles without errors at the last step.

    3- I use Verion for control flow stuff. I think RSGD also works since Verion just implemented it. I'm honestly not entirely sure what this step does exactly. Someone else can probably elaborate on that. All I know is that decompilers like Jode and Fernflower will throw errors if I skip this. Something above rearranging the bytecode so it's easily decompilable, like removing optimizations?

    4- I use Jode or FernFlower for the last step of decompiling the .jar into source .java files.

    (EDIT) 5- Also just did this now for some reason... but go in your Intellij Settings and disable "Line breaks" and enable "Ensure right margin is not exceeded". You can also force "Wrap Always" on for/while/else blocks and disable/enable "Control statements in one line" too. Then run Analyze->Code Cleanup, Code->Reformat Code in that order. The first thing will remove useless typecast and the second will remove dumb multi-line breaks and actually make the client code much more readable.

    That's about all I can remember.
    Project thread
    Reply With Quote  
     


  5. #5  
    Contributor

    clem585's Avatar
    Join Date
    Sep 2013
    Posts
    3,788
    Thanks given
    706
    Thanks received
    702
    Rep Power
    570
    Added a 5th point for doing 1 last pass with Intellij. Might take like 1h on an HDD though.
    Project thread
    Reply With Quote  
     

  6. #6  
    Registered Member
    Tyluur's Avatar
    Join Date
    Jun 2010
    Age
    26
    Posts
    5,103
    Thanks given
    1,818
    Thanks received
    1,767
    Rep Power
    2438
    Quote Originally Posted by clem585 View Post
    Added a 5th point for doing 1 last pass with Intellij. Might take like 1h on an HDD though.
    Much appreciated. I hope to get some refactored #600-668 clients released.
    There's a lot of information there but the public clients are terrible to understand.
    Quote Originally Posted by blakeman8192 View Post
    Keep trying. Quitting is the only true failure.
    Spoiler for skrrrrr:

    Attached image
    Reply With Quote  
     

  7. #7  
    Contributor

    clem585's Avatar
    Join Date
    Sep 2013
    Posts
    3,788
    Thanks given
    706
    Thanks received
    702
    Rep Power
    570
    Quote Originally Posted by Tyluur View Post
    Much appreciated. I hope to get some refactored #600-668 clients released.
    There's a lot of information there but the public clients are terrible to understand.
    Agreed, here's an example of the class with the method that decodes NPC masks just to show what it can look like:

    Code:
    /* Class170 - Decompiled by JODE
     * Visit http://jode.sourceforge.net/
     */
    
    final class Class170 implements Interface17 {
    	static int anInt5062;
    	static int anInt5064;
    	static int lastLoginIpHash;
    	static int anInt5066;
    	static Class237_Sub1 aClass237_Sub1_5067;
    	static int anInt5068;
    	static int anInt5069;
    	static int anInt5071;
    	static int anInt5072;
    	static int anInt5073;
    	static int anInt5074;
    	static int anInt5075;
    	static int anInt5076;
    	static int anInt5077;
    	static int anInt5079;
    	static int anInt5080;
    	static int anInt5081;
    	int[] anIntArray5063;
    	private Class356 aClass356_5070 = new Class356(128);
    	private int[] anIntArray5078;
    
    	public Class170() {
    		this.anIntArray5063 = new int[Class269.aClass217_3453.anInt2845];
    		anIntArray5078 = new int[Class269.aClass217_3453.anInt2845];
    	}
    
    	static final void method1308(int i, int i_14_, int i_15_, int i_16_, byte i_17_, int i_18_, int i_19_, int i_20_) {
    		anInt5072++;
    		if (Class369.anInt4960 <= i_15_ && i_19_ <= Class113.anInt1745 && i_14_ >= Class132.anInt1910 && Class38.anInt513 >= i_20_) {
    			Class239_Sub3.method1730(i_16_, i_20_, i_14_, i_19_, i, i_18_, -128, i_15_);
    		} else {
    			s_Sub3.method4004(i_20_, i_19_, i_14_, i, i_18_, -80, i_15_, i_16_);
    		}
    		if (i_17_ > -113) {
    			aClass237_Sub1_5067 = null;
    		}
    	}
    
    	static final void method1309(boolean bool) {
    		if (Class51.aClass311_897 == null) {
    			Class70.method726();
    		}
    		anInt5062++;
    		if (bool) {
    			Class51.aClass311_897.method2326();
    		}
    	}
    
    	public static void method1310(boolean bool) {
    		if (bool == true) {
    			aClass237_Sub1_5067 = null;
    		}
    	}
    
    	static final void method1311(int i, ha var_ha) {
    		Class199.aClass352Array2636 = new Class352[Class348_Sub1.anIntArray6547.length];
    		anInt5064++;
    		for (int i_21_ = 0; ((Class348_Sub1.anIntArray6547.length ^ 0xffffffff) < (i_21_ ^ 0xffffffff)); i_21_++) {
    			int i_22_ = Class348_Sub1.anIntArray6547[i_21_];
    			Class143 class143 = Class239_Sub10.method1766((byte) -86, i_22_, s.aCacheIndex_4585);
    			Class324 class324 = var_ha.method3686(class143, Class207.method1523(Class39.aCacheIndex_518, i_22_), true);
    			Class199.aClass352Array2636[i_21_] = new Class352(class324, class143);
    		}
    	}
    
    	static final Class52 method1312(byte i, RSByteBuffer class348_sub49) {
    		anInt5075++;
    		int i_23_ = class348_sub49.readInt();
    		return new Class52(i_23_);
    	}
    
    	static final void method1315(int i) {
    		anInt5077++;
    		if (Class318_Sub1_Sub5.aClass144_8766 != null) {
    			if ((Class318_Sub1_Sub5.aClass144_8766.anInt1997 ^ 0xffffffff) == -2) {
    				Class318_Sub1_Sub5.aClass144_8766 = null;
    				return;
    			}
    			if (Class318_Sub1_Sub5.aClass144_8766.anInt1997 == 2) {
    				Class348_Sub16_Sub3.method2862(Class195.aClass297_5017, Class348_Sub42_Sub8.aString9554, -120, 2);
    				Class318_Sub1_Sub5.aClass144_8766 = null;
    				return;
    			}
    		}
    		int i_28_ = -31 / ((-29 - i) / 61);
    	}
    
    	static final boolean method1317(int i, byte i_35_, int i_36_) {
    		anInt5079++;
    		if (i_35_ >= -67) {
    			method1317(43, (byte) 36, 20);
    		}
    		return Class294.method2217(i, i_36_, 0) | (i_36_ & 0x70000) != 0 || Class264.method2015(i_36_, i, 7);
    	}
    
    	static final void decodeNPCMasks(int i) {
    		if (i != -65536) {
    			method1310(false);
    		}
    		for (int i_37_ = 0; i_37_ < Class101.anInt1597; i_37_++) {
    			int i_38_ = Class13.anIntArray224[i_37_];
    			Class318_Sub1_Sub3_Sub3_Sub1 class318_sub1_sub3_sub3_sub1 =
    					(((Class348_Sub22) Class282.aClass356_3654.method3480((long) i_38_, -6008)).aClass318_Sub1_Sub3_Sub3_Sub1_6859);
    			int i_39_ = Class299.aClass348_Sub49_Sub2_3813.readUByte();
    			if ((0x10 & i_39_ ^ 0xffffffff) != -1) {
    				i_39_ += Class299.aClass348_Sub49_Sub2_3813.readUByte() << 8;
    			}
    			if ((0x2 & i_39_) != 0) {
    				if (class318_sub1_sub3_sub3_sub1.aClass79_10505.method793(i ^ ~0xffff)) {
    					Class5.method181(true, class318_sub1_sub3_sub3_sub1);
    				}
    				class318_sub1_sub3_sub3_sub1.method2448((Class189.aClass278_2529.method2079(Class299.aClass348_Sub49_Sub2_3813.method3355(-1), -1)), -2);
    				class318_sub1_sub3_sub3_sub1.method2434((byte) 95,
    						class318_sub1_sub3_sub3_sub1.aClass79_10505.anInt1399);
    				class318_sub1_sub3_sub3_sub1.anInt10310 = class318_sub1_sub3_sub3_sub1.aClass79_10505.anInt1329 << 3;
    				if (class318_sub1_sub3_sub3_sub1.aClass79_10505.method793(0)) {
    					Class223.method1614(979190089, class318_sub1_sub3_sub3_sub1,
    							(class318_sub1_sub3_sub3_sub1.aByte6381),
    							(class318_sub1_sub3_sub3_sub1.anIntArray10317[0]),
    							(class318_sub1_sub3_sub3_sub1.anIntArray10320[0]), null, null, 0);
    				}
    			}
    			if ((0x8 & i_39_ ^ 0xffffffff) != -1) {
    				int[] is = new int[4];
    				for (int i_40_ = 0; (i_40_ ^ 0xffffffff) > -5; i_40_++) {
    					is[i_40_] = Class299.aClass348_Sub49_Sub2_3813.readUShort();
    					if (is[i_40_] == 65535) {
    						is[i_40_] = -1;
    					}
    				}
    				int i_41_ = Class299.aClass348_Sub49_Sub2_3813.readUByte();
    				Class348_Sub17.method2931(i_41_, (byte) 115, is, class318_sub1_sub3_sub3_sub1);
    			}
    			if ((i_39_ & 0x20) != 0) { // gfx 2
    				int i_42_ = Class299.aClass348_Sub49_Sub2_3813.readUShort();
    				int i_43_ = Class299.aClass348_Sub49_Sub2_3813.readUInt();
    				if ((i_42_ ^ 0xffffffff) == -65536) {
    					i_42_ = -1;
    				}
    				int i_44_ = Class299.aClass348_Sub49_Sub2_3813.readUByte();
    				int i_45_ = 0x7 & i_44_;
    				int i_46_ = (i_44_ & 0x79) >> 3;
    				if ((i_46_ ^ 0xffffffff) == -16) {
    					i_46_ = -1;
    				}
    				class318_sub1_sub3_sub3_sub1.method2437(i_45_, i_42_, i ^ 0x3c569b2e, i_46_, false, i_43_);
    			}
    			if ((0x4000 & i_39_) != 0) {
    				int i_47_ = Class299.aClass348_Sub49_Sub2_3813.method3329();
    				int[] is = new int[i_47_];
    				int[] is_48_ = new int[i_47_];
    				int[] is_49_ = new int[i_47_];
    				for (int i_50_ = 0; (i_50_ ^ 0xffffffff) > (i_47_ ^ 0xffffffff); i_50_++) {
    					int i_51_ = Class299.aClass348_Sub49_Sub2_3813.readUShort();
    					if ((i_51_ ^ 0xffffffff) == -65536) {
    						i_51_ = -1;
    					}
    					is[i_50_] = i_51_;
    					is_48_[i_50_] = Class299.aClass348_Sub49_Sub2_3813.method3329();
    					is_49_[i_50_] = Class299.aClass348_Sub49_Sub2_3813.readLEShort128(-109);
    				}
    				Class367_Sub8.method3548(-7387, class318_sub1_sub3_sub3_sub1, is_49_, is, is_48_);
    			}
    			if ((i_39_ & 0x200) != 0) {
    				int i_52_ = Class299.aClass348_Sub49_Sub2_3813.method3342((byte) -121);
    				int[] is = new int[i_52_];
    				int[] is_53_ = new int[i_52_];
    				for (int i_54_ = 0; (i_54_ ^ 0xffffffff) > (i_52_ ^ 0xffffffff); i_54_++) {
    					int i_55_ = Class299.aClass348_Sub49_Sub2_3813.method3355(124);
    					if ((0xc000 & i_55_ ^ 0xffffffff) == -49153) {
    						int i_56_ = Class299.aClass348_Sub49_Sub2_3813.readUShort();
    						is[i_54_] = Class273.method2057(i_56_, i_55_ << 16);
    					} else {
    						is[i_54_] = i_55_;
    					}
    					is_53_[i_54_] = Class299.aClass348_Sub49_Sub2_3813.readUShort();
    				}
    				class318_sub1_sub3_sub3_sub1.method2430(is_53_, is);
    			}
    			if ((0x4 & i_39_) != 0) {
    				class318_sub1_sub3_sub3_sub1.anInt10499 = Class299.aClass348_Sub49_Sub2_3813.readUShort();
    				class318_sub1_sub3_sub3_sub1.anInt10512 = Class299.aClass348_Sub49_Sub2_3813.readUShort();
    			}
    			if ((0x1000 & i_39_) != 0) {
    				class318_sub1_sub3_sub3_sub1.anInt10293 = Class299.aClass348_Sub49_Sub2_3813.readUByte();
    				class318_sub1_sub3_sub3_sub1.anInt10314 = Class299.aClass348_Sub49_Sub2_3813.readUByte();
    				class318_sub1_sub3_sub3_sub1.anInt10241 = Class299.aClass348_Sub49_Sub2_3813.readUByte();
    				class318_sub1_sub3_sub3_sub1.anInt10288 = Class299.aClass348_Sub49_Sub2_3813.readUByte();
    				class318_sub1_sub3_sub3_sub1.anInt10239 =
    						(Class299.aClass348_Sub49_Sub2_3813.readUShort() + Class367_Sub11.anInt7396);
    				class318_sub1_sub3_sub3_sub1.anInt10300 =
    						(Class299.aClass348_Sub49_Sub2_3813.readUShort() - -Class367_Sub11.anInt7396);
    				class318_sub1_sub3_sub3_sub1.anInt10231 = Class299.aClass348_Sub49_Sub2_3813.readUByte();
    				class318_sub1_sub3_sub3_sub1.anInt10314 += class318_sub1_sub3_sub3_sub1.anIntArray10317[0];
    				class318_sub1_sub3_sub3_sub1.anInt10322 = 0;
    				class318_sub1_sub3_sub3_sub1.anInt10288 += class318_sub1_sub3_sub3_sub1.anIntArray10317[0];
    				class318_sub1_sub3_sub3_sub1.anInt10293 += class318_sub1_sub3_sub3_sub1.anIntArray10320[0];
    				class318_sub1_sub3_sub3_sub1.anInt10241 += class318_sub1_sub3_sub3_sub1.anIntArray10320[0];
    				class318_sub1_sub3_sub3_sub1.anInt10319 = 1;
    			}
    			if ((i_39_ & 0x2000) != 0) {
    				class318_sub1_sub3_sub3_sub1.aByte10255 = Class299.aClass348_Sub49_Sub2_3813.method3361(-622951480);
    				class318_sub1_sub3_sub3_sub1.aByte10206 = Class299.aClass348_Sub49_Sub2_3813.method3345();
    				class318_sub1_sub3_sub3_sub1.aByte10270 =
    						Class299.aClass348_Sub49_Sub2_3813.method3361(i + -622885944);
    				class318_sub1_sub3_sub3_sub1.aByte10279 = (byte) Class299.aClass348_Sub49_Sub2_3813.readUByte();
    				class318_sub1_sub3_sub3_sub1.anInt10248 =
    						Class367_Sub11.anInt7396 + Class299.aClass348_Sub49_Sub2_3813.readUShort();
    				class318_sub1_sub3_sub3_sub1.anInt10250 =
    						Class367_Sub11.anInt7396 + Class299.aClass348_Sub49_Sub2_3813.readUShort();
    			}
    			if ((i_39_ & 0x40 ^ 0xffffffff) != -1) {
    				int i_57_ = Class299.aClass348_Sub49_Sub2_3813.method3342((byte) -100);
    				if (i_57_ > 0) {
    					for (int i_58_ = 0; (i_58_ ^ 0xffffffff) > (i_57_ ^ 0xffffffff); i_58_++) {
    						int i_59_ = -1;
    						int i_60_ = -1;
    						int i_61_ = -1;
    						int i_62_ = Class299.aClass348_Sub49_Sub2_3813.readUSmart();
    						if (i_62_ != 32767) {
    							if ((i_62_ ^ 0xffffffff) != -32767) {
    								i_60_ = Class299.aClass348_Sub49_Sub2_3813.readUSmart();
    							} else {
    								i_62_ = -1;
    							}
    						} else {
    							i_62_ = Class299.aClass348_Sub49_Sub2_3813.readUSmart();
    							i_60_ = Class299.aClass348_Sub49_Sub2_3813.readUSmart();
    							i_59_ = Class299.aClass348_Sub49_Sub2_3813.readUSmart();
    							i_61_ = Class299.aClass348_Sub49_Sub2_3813.readUSmart();
    						}
    						int i_63_ = Class299.aClass348_Sub49_Sub2_3813.readUSmart();
    						int i_64_ = Class299.aClass348_Sub49_Sub2_3813.readUByte();
    						class318_sub1_sub3_sub3_sub1.method2438(i_60_, (Class367_Sub11.anInt7396), i_62_, i_61_, i_59_
    								, i_63_, i_64_);
    					}
    				}
    			}
    			if ((i_39_ & 0x80 ^ 0xffffffff) != -1) {
    				class318_sub1_sub3_sub3_sub1.anInt10275 = Class299.aClass348_Sub49_Sub2_3813.readUShort();
    				if ((class318_sub1_sub3_sub3_sub1.anInt10275) == 65535) {
    					class318_sub1_sub3_sub3_sub1.anInt10275 = -1;
    				}
    			}
    			if ((0x1 & i_39_) != 0) {
    				class318_sub1_sub3_sub3_sub1.aString10292 = Class299.aClass348_Sub49_Sub2_3813.readString();
    				class318_sub1_sub3_sub3_sub1.anInt10264 = 100;
    			}
    			if ((i_39_ & 0x800 ^ 0xffffffff) != -1) {
    				int i_65_ = Class299.aClass348_Sub49_Sub2_3813.readUShort();
    				class318_sub1_sub3_sub3_sub1.anInt10227 = Class299.aClass348_Sub49_Sub2_3813.method3342((byte) -84);
    				class318_sub1_sub3_sub3_sub1.anInt10271 = Class299.aClass348_Sub49_Sub2_3813.method3342((byte) -88);
    				class318_sub1_sub3_sub3_sub1.anInt10210 = 0x7fff & i_65_;
    				class318_sub1_sub3_sub3_sub1.aBoolean10226 = (0x8000 & i_65_) != 0;
    				class318_sub1_sub3_sub3_sub1.anInt10287 =
    						(class318_sub1_sub3_sub3_sub1.anInt10227 + class318_sub1_sub3_sub3_sub1.anInt10210 + Class367_Sub11.anInt7396);
    			}
    			if ((i_39_ & 0x400) != 0) { // gfx 1
    				int i_66_ = Class299.aClass348_Sub49_Sub2_3813.readUShort();
    				int i_67_ = Class299.aClass348_Sub49_Sub2_3813.readUInt();
    				if ((i_66_ ^ 0xffffffff) == -65536) {
    					i_66_ = -1;
    				}
    				int i_68_ = Class299.aClass348_Sub49_Sub2_3813.readUByte();
    				int i_69_ = i_68_ & 0x7;
    				int i_70_ = (i_68_ & 0x7e) >> 3;
    				if (i_70_ == 15) {
    					i_70_ = -1;
    				}
    				class318_sub1_sub3_sub3_sub1.method2437(i_69_, i_66_, i ^ 0x3c569b2e, i_70_, true, i_67_);
    			}
    		}
    		anInt5080++;
    	}
    
    	final int method1305(byte i, boolean bool) {
    		anInt5071++;
    		long l = Class62.method599(-79);
    		for (Class348_Sub14 class348_sub14 = (bool ? (Class348_Sub14) aClass356_5070.method3484(0) :
    				(Class348_Sub14) aClass356_5070.method3482(0)); class348_sub14 != null; class348_sub14 =
    				(Class348_Sub14) aClass356_5070.method3482(0)) {
    			if (((class348_sub14.aLong6762 & 0x3fffffffffffffffL) ^ 0xffffffffffffffffL) > (l ^ 0xffffffffffffffffL)) {
    				if ((0x4000000000000000L & class348_sub14.aLong6762) != 0L) {
    					int i_0_ = (int) class348_sub14.aLong4291;
    					this.anIntArray5063[i_0_] = anIntArray5078[i_0_];
    					class348_sub14.method2715();
    					return i_0_;
    				}
    				class348_sub14.method2715();
    			}
    		}
    		return -1;
    	}
    
    	final void method1306(byte i, int i_1_, int i_2_) {
    		anInt5066++;
    		this.anIntArray5063[i_2_] = i_1_;
    		Class348_Sub14 class348_sub14 = (Class348_Sub14) aClass356_5070.method3480((long) i_2_, -6008);
    		if (class348_sub14 == null) {
    			class348_sub14 = new Class348_Sub14(500L + Class62.method599(-122));
    			aClass356_5070.method3483((byte) 73, (long) i_2_, class348_sub14);
    		} else {
    			class348_sub14.aLong6762 = Class62.method599(-88) - -500L;
    		}
    	}
    
    	public final int method62(int i, int i_3_) {
    		anInt5068++;
    		Class146 class146 = Class229.aClass194_2981.method1446(i, -1);
    		int i_4_ = class146.anInt2019;
    		if (i_3_ != -65536) {
    			return -52;
    		}
    		int i_5_ = class146.anInt2016;
    		int i_6_ = class146.anInt2020;
    		int i_7_ = Class129.anIntArray1885[-i_5_ + i_6_];
    		return this.anIntArray5063[i_4_] >> i_5_ & i_7_;
    	}
    
    	final void method1307(int i, int i_8_, int i_9_) {
    		anInt5074++;
    		Class146 class146 = Class229.aClass194_2981.method1446(i, -1);
    		int i_10_ = class146.anInt2019;
    		int i_11_ = class146.anInt2016;
    		int i_12_ = class146.anInt2020;
    		int i_13_ = Class129.anIntArray1885[-i_11_ + i_12_];
    		if (i_8_ < (i_9_ ^ 0xffffffff) || (i_9_ ^ 0xffffffff) < (i_13_ ^ 0xffffffff)) {
    			i_9_ = 0;
    		}
    		i_13_ <<= i_11_;
    		method1306((byte) -78, i_9_ << i_11_ & i_13_ | (this.anIntArray5063[i_10_]) & (i_13_ ^ 0xffffffff), i_10_);
    	}
    
    	final void method1313(byte i, int i_24_, int i_25_) {
    		anInt5073++;
    		if (i != 42) {
    			lastLoginIpHash = -16;
    		}
    		anIntArray5078[i_25_] = i_24_;
    		Class348_Sub14 class348_sub14 = ((Class348_Sub14) aClass356_5070.method3480((long) i_25_, i + -6050));
    		if (class348_sub14 == null) {
    			class348_sub14 = new Class348_Sub14(4611686018427387905L);
    			aClass356_5070.method3483((byte) 19, (long) i_25_, class348_sub14);
    		} else if (class348_sub14.aLong6762 != 4611686018427387905L) {
    			class348_sub14.aLong6762 = 0x4000000000000000L | 500L + Class62.method599(-108);
    		}
    	}
    
    	final void method1314(byte i) {
    		for (int i_26_ = 0; ((Class269.aClass217_3453.anInt2845 ^ 0xffffffff) < (i_26_ ^ 0xffffffff)); i_26_++) {
    			Class159 class159 = Class269.aClass217_3453.method1588(-105, i_26_);
    			if (class159 != null && (class159.anInt2125 ^ 0xffffffff) == -1) {
    				anIntArray5078[i_26_] = 0;
    				this.anIntArray5063[i_26_] = 0;
    			}
    		}
    		anInt5076++;
    		aClass356_5070 = new Class356(128);
    		int i_27_ = -69 % ((25 - i) / 39);
    	}
    
    	public final int method61(int i) {
    		anInt5081++;
    		return this.anIntArray5063[i];
    	}
    
    	final void method1316(byte i, int i_29_, int i_30_) {
    		anInt5069++;
    		Class146 class146 = Class229.aClass194_2981.method1446(i_29_, -1);
    		int i_31_ = class146.anInt2019;
    		int i_32_ = class146.anInt2016;
    		int i_33_ = class146.anInt2020;
    		int i_34_ = Class129.anIntArray1885[i_33_ - i_32_];
    		if ((i_30_ ^ 0xffffffff) > -1 || i_34_ < i_30_) {
    			i_30_ = 0;
    		}
    		i_34_ <<= i_32_;
    		method1313((byte) 42, (i_30_ << i_32_ & i_34_ | (i_34_ ^ 0xffffffff) & anIntArray5078[i_31_]), i_31_);
    	}
    }
    Project thread
    Reply With Quote  
     


Thread Information
Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)


User Tag List

Similar Threads

  1. Client deobfuscator.
    By Encouragin in forum Requests
    Replies: 5
    Last Post: 04-12-2009, 03:43 PM
  2. working deobfuscator
    By Logical in forum Help
    Replies: 2
    Last Post: 02-19-2009, 04:33 PM
  3. [530]Class124 - Not fully deobfuscated?
    By Virus X3 in forum Help
    Replies: 0
    Last Post: 01-28-2009, 11:57 PM
  4. Deobfuscating? What are the client class names?
    By Virus X3 in forum RS 503+ Client & Server
    Replies: 9
    Last Post: 01-23-2009, 04:45 AM
  5. No decompiled/deobfuscated work
    By Zee Best in forum Downloads
    Replies: 0
    Last Post: 09-24-2008, 10:28 PM
Posting Permissions
  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •