Jump to content

Working on a SS3 updater


Jake
 Share

Recommended Posts

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 by Kumalo
Link to comment
Share on other sites

  • 4 weeks later...
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 by Kumalo
Link to comment
Share on other sites

  • 1 year later...
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

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

  • Neo locked this topic
Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...