Jake Posted October 22, 2017 Share Posted October 22, 2017 (edited) Hey everyone, two days ago I started writing an updater for SoulSplit 3 for fun. I'm quite comfortable with Java but very new to instrumenting byte code, so it's a huge learning experience for me. Test run on the latest SS3 Client SoulSplit 3 Updater instantiated - 10/22/2017 10:45 Parsed 436 classes Failed to find: Widget > NodeList -> com.soulplayps.client.tg (Extends java.lang.Object) Identified 0/0 fields > Node -> com.soulplayps.client.pg (Extends java.lang.Object) » Id -> com/soulplayps/client/pg.if » Next -> com/soulplayps/client/pg.try » Prev -> com/soulplayps/client/pg.float Identified 3/3 fields > NodeSub -> com.soulplayps.client.ae (Extends com.soulplayps.client.pg) » Next -> com/soulplayps/client/ae.float » Prev -> com/soulplayps/client/ae.try Identified 2/2 fields > WorldController -> com.soulplayps.client.sj (Extends java.lang.Object) Identified 0/0 fields > NPC -> com.soulplayps.client.ah (Extends com.soulplayps.client.td) » Definition -> com/soulplayps/client/ah.float Identified 1/1 fields > GameShell -> com.soulplayps.client.cr (Extends java.applet.Applet) » Graphics -> com/soulplayps/client/cr.native Identified 1/1 fields > Actor -> com.soulplayps.client.td (Extends com.soulplayps.client.vl) » Spoken Text -> com/soulplayps/client/td.default » AnimationID -> com/soulplayps/client/td.void Identified 2/2 fields > Model -> com.soulplayps.client.gi (Extends com.soulplayps.client.vl) Identified 0/0 fields > Ground -> com.soulplayps.client.xn (Extends com.soulplayps.client.pg) Identified 0/0 fields > Animable -> com.soulplayps.client.vl (Extends com.soulplayps.client.ae) » Model Height -> com/soulplayps/client/vl.float Identified 1/1 fields > Player -> com.soulplayps.client.ok (Extends com.soulplayps.client.td) Identified 0/0 fields > Client -> com.soulplayps.client.Client (Extends com.soulplayps.client.cr) » Instance -> com/soulplayps/client/Client.float » LocalPlayer -> com/soulplayps/client/Client.tC » GroundItems -> com/soulplayps/client/Client.IC » PlayerArray -> com/soulplayps/client/Client.BA Identified 4/4 fields Identified 12/13 classes Took 0.36 seconds Testing against a non-obfuscated client (LocoPK): SoulSplit 3 Updater instantiated - 10/22/2017 10:49 Parsed 137 classes Failed to find: Widget > GameShell -> com.locopk.client.rs.RSApplet (Extends java.applet.Applet) » Graphics -> com/locopk/client/rs/RSApplet.graphics Identified 1/1 fields > NPC -> com.locopk.client.rs.NPC (Extends com.locopk.client.rs.Entity) » Definition -> com/locopk/client/rs/NPC.entityDef Identified 1/1 fields > NodeList -> com.locopk.client.rs.NodeList (Extends java.lang.Object) Identified 0/0 fields > WorldController -> com.locopk.client.rs.WorldController (Extends java.lang.Object) Identified 0/0 fields > Ground -> com.locopk.client.rs.Ground (Extends com.locopk.client.rs.Node) Identified 0/0 fields > Actor -> com.locopk.client.rs.Entity (Extends com.locopk.client.rs.Animable) » Spoken Text -> com/locopk/client/rs/Entity.textSpoken » AnimationID -> com/locopk/client/rs/Entity.animId Identified 2/2 fields > Client -> com.locopk.client.rs.Client (Extends com.locopk.client.rs.RSApplet) » Instance -> com/locopk/client/rs/Client.instance » LocalPlayer -> com/locopk/client/rs/Client.myPlayer » GroundItems -> com/locopk/client/rs/Client.groundArray » PlayerArray -> com/locopk/client/rs/Client.playerArray Identified 4/4 fields > NodeSub -> com.locopk.client.rs.NodeSub (Extends com.locopk.client.rs.Node) » Next -> com/locopk/client/rs/NodeSub.nextNodeSub » Prev -> com/locopk/client/rs/NodeSub.prevNodeSub Identified 2/2 fields > Animable -> com.locopk.client.rs.Animable (Extends com.locopk.client.rs.NodeSub) » Model Height -> com/locopk/client/rs/Animable.modelHeight Identified 1/1 fields > Model -> com.locopk.client.rs.Model (Extends com.locopk.client.rs.Animable) Identified 0/0 fields > Node -> com.locopk.client.rs.Node (Extends java.lang.Object) » Id -> com/locopk/client/rs/Node.id » Next -> com/locopk/client/rs/Node.next » Prev -> com/locopk/client/rs/Node.prev Identified 3/3 fields > Player -> com.locopk.client.rs.Player (Extends com.locopk.client.rs.Entity) Identified 0/0 fields Identified 12/13 classes Took 0.21 seconds Keep in mind it still needs a lot of work, and is far from finished. I plan to keep it open source on my github repo. I don't have all the time in the world to work on it, but I do plan on making regular commits (Gave myself a goal of hooking ~5 fields a day). Constructive criticism is welcome. Edited October 22, 2017 by Kumalo Link to comment Share on other sites More sharing options...
Neo Posted October 22, 2017 Share Posted October 22, 2017 Keep it up Link to comment Share on other sites More sharing options...
Jake Posted November 19, 2017 Author Share Posted November 19, 2017 (edited) SoulSplit 3 Updater instantiated - 11/19/2017 01:54 Parsed 436 classes > Animable -> com.soulplayps.client.vl (Extends com.soulplayps.client.ae) » model Height -> float Identified 1/1 fields > Actor -> com.soulplayps.client.td (Extends com.soulplayps.client.vl) » setNewPosition() -> long((IIZ)V) » spoken Text -> default » animationID -> void » smallX -> i » smallY -> h Identified 1/1 methods Identified 4/4 fields > Deque -> com.soulplayps.client.tg (Extends java.lang.Object) » head -> if » current -> float Identified 2/2 fields > Client -> com.soulplayps.client.Client (Extends com.soulplayps.client.cr) » calcActorScreenPos() -> long((III)V) » drawHeadIcon() -> X(()V) » instance -> float » localPlayer -> tC » groundItems -> IC » playerArray -> BA » plane -> dA » baseX -> public » baseY -> f » loopCycle -> sf » cameraX -> WB » cameraY -> qe » cameraZ -> rf » cameraPitch -> ra » cameraYaw -> na Identified 2/2 methods Identified 13/13 fields > NPC -> com.soulplayps.client.ah (Extends com.soulplayps.client.td) » npcDefinition -> float Identified 1/1 fields > Model -> com.soulplayps.client.gi (Extends com.soulplayps.client.vl) > Buffer -> com.soulplayps.client.cf (Extends com.soulplayps.client.ae) > Ground -> com.soulplayps.client.xn (Extends com.soulplayps.client.pg) > WorldController -> com.soulplayps.client.sj (Extends java.lang.Object) > GameShell -> com.soulplayps.client.cr (Extends java.applet.Applet) » graphics -> native Identified 1/1 fields > Widget -> com.soulplayps.client.kf (Extends java.lang.Object) » invItems -> import Identified 1/1 fields > NodeSub -> com.soulplayps.client.ae (Extends com.soulplayps.client.pg) » next -> float » prev -> try Identified 2/2 fields > Node -> com.soulplayps.client.pg (Extends java.lang.Object) » Id -> if » next -> try » prev -> float Identified 3/3 fields > Player -> com.soulplayps.client.ok (Extends com.soulplayps.client.td) » equipment -> assert » name -> protected » combatLevel -> tC Identified 3/3 fields Identified 14/14 classes Took 0.37 seconds Process finished with exit code 0 A little messy but got some time to work on it today Edited November 19, 2017 by Kumalo Link to comment Share on other sites More sharing options...
Sebo Posted November 19, 2017 Share Posted November 19, 2017 This is awesome, great job! Link to comment Share on other sites More sharing options...
frisiangamer Posted April 22, 2019 Share Posted April 22, 2019 I know it is kinda gravedigging but im realy intrested in this, I worked on a few updaters myself. Do oyu have the source code somewhere @Jake? Link to comment Share on other sites More sharing options...
Jake Posted April 22, 2019 Author Share Posted April 22, 2019 9 hours ago, frisiangamer said: I know it is kinda gravedigging but im realy intrested in this, I worked on a few updaters myself. Do oyu have the source code somewhere @Jake? I'll try to find it Link to comment Share on other sites More sharing options...
frisiangamer Posted April 23, 2019 Share Posted April 23, 2019 16 hours ago, Jake said: I'll try to find it thanks! Link to comment Share on other sites More sharing options...
Jake Posted April 24, 2019 Author Share Posted April 24, 2019 On 4/23/2019 at 11:14 AM, frisiangamer said: thanks! Couldn't actually find it. Must have been on my old drive. It was a very simple updater that used pattern searching, so nothing fancy. If I come across it again I'll let you know. I'm actually in the process of writing a generic 317 mapper in kotlin that takes a deobed 317, creates a method call graph, and tries to lines up everything. Link to comment Share on other sites More sharing options...
frisiangamer Posted April 24, 2019 Share Posted April 24, 2019 8 minutes ago, Jake said: Couldn't actually find it. Must have been on my old drive. It was a very simple updater that used pattern searching, so nothing fancy. If I come across it again I'll let you know. I'm actually in the process of writing a generic 317 mapper in kotlin that takes a deobed 317, creates a method call graph, and tries to lines up everything. Nice, too bad I dont know Kotlin else i would like to help you out. Link to comment Share on other sites More sharing options...
Recommended Posts