How to patch plugin API version

:warning: Disclaimer

This method does not work for all plugins and patched plugins might result in unexpected behavior and client crashes.

0. Prerequisites

I will use Ghidra in this tutorial.

1. Acquire the plugin

Download the correct version of the plugin you want to patch. If the plugin is distributed as .ts3_plugin, rename that to .zip and extract it. You will need one of the following files:

  • .dll (Windows)
  • .dylib (MacOS)
  • .so (Linux)

2. Load the Plugin in Ghidra

Open Ghidra and if you don’t have one create a new project.
image
Drag and drop the plugin file onto the project to import it using the default values.
When you see the import results click OK.
Open the plugin with a double click.
image
When asked whether to analyze the file accept Yes, keep the Standard Defaults, and click Analyse.


Wait for the analysis to finish. There is a progress bar in the bottom right. Depending on binary size it might take a couple of minutes.

3. Patch the correct function.

Using the default layout of Ghidra there should be the Symbol Tree on the left side.


Expand Exports and locate the function ts3plugin_apiVersion.
By clicking on it you can jump to it in the Listing.

Then in the Decompile view click on the return value to follow any internal function calls.

Now right-click the value in the Listing and select Patch Instruction. You might see a popup telling you the x86 processors are gold-rated, just close that.

Enter the new value you need in hexadecimal (API version 26 = 0x1a) and press Enter to accept.

Then you can export the changes. Simply keep the format as Original File and select a suitable output location.

:partying_face: Congratulations! You just patched your first plugin!

4. Repackage the plugin.

If you want to use the automatic TeamSpeak plugin installation process you can simply repackage the plugin the same way you extracted it.

In the end, you need a file that looks like this:

<plugin_name>.ts3_plugin (renamed zip file)
├─ plugins/
│  └─ <plugin_name>_win64.dll (or .so or .dylib)
└─ package.ini
9 Likes

@MarcusLittle :slight_smile:
This is the patched notifier plugin as a result of this quick tutorial:

You sir, are a hero in disguise. I appreciate it! And thanks for the tutorial as well

2 Likes

Hey nice job, do u can patch this plugin?
:point_down:t2::point_down:t2:
Mass Message Tool - TeamSpeak Server / Tools - TeamSpeak

Thanks!

Man if you patch this you are me personal Hero … ts3g15.dll - Google Drive

This will not work, as it is compiled against Qt. image
Newer versions of TeamSpeak require a later Qt version otherwise, basically anything could happen.

Only because I had a minute.

3 Likes

I have to excuse the error I made in the tutorial. It is fixed now and all the patched plugins I uploaded are validated as loadable.

1 Like

image

image

Man you are the god for me… manny thanks G15 plugin finnaly working !!!

4 Likes

I’ve needed this plugin since I started this thread, but I still haven’t gotten access to it.

Can anyone help me with this?

1 Million thumbs up!!!
After months of ALT-Tabbing in and out of apps and games I finally have my litte G19 LCD back to see who is joining/talking etc.
Thank you so much!! Your work is highly appreciated on this old but still great plugin.

1 Like

I’ve been writing my own plugin for ts3 to display on the g19, it is very basic as in it shows how many and who is in channel and who is currently talking. cannot get any of the buttons on the keyboard to work tho
but if your interest in i will be happy to share it

For those interest here is my plugin for the logitech’s g19, it shows who is talking, first 5 people in channel (excluding yourself), toggle mute input, toggle mute output, move channel, last 10 messages (from session)

menu buttons show a menu for each action
cancel takes you back to channel view
while on channel view there are “shortcuts”
Down: toggle input mute
Right: Move channel
Left: help/info
OK: refresh list and if message received remove it

on other pages up and down navigate

TS3 G19 Plugin

any feedback is more than welcome,

1 Like

It works like charm! Thank you so much!

1 Like

Glad to hear that it works, but please do let me know if you find any bugs or issues

Your Plugin seems to have an issue.:

2024-01-03 15:15:21.861132|INFO |Plugins | |Failed to load plugin: C:\Users\XXXXXX\AppData\Roaming\TS3Client\plugins\ts3g19.dll
2024-01-03 15:15:21.861132|INFO |Plugins | |LoadLibrary error: 126

Hey, I’m sorry to be this guy. This thread is not really about new plugins but specifically how to patch outdated plugins to work again with newer TeamSpeak versions potentially. @TS.ChrisR I guess the easiest would be if you just moved this out to its own thread.|

@derbmann your problem is most likely because the plugin is compiled against a C++ redist that is not installed on your system, but that’s just a guess.

1 Like

@Gamer92000
Thank you for the instruction.

Connection History
Works fine after the patch.:
patched connectionhistory_win64.dll

But sadly Chatlog Viewer crashes the client on startup after patching.
As you already mentioned it uses qt5core.dll etc. but “Connection History” uses qt5 as well but seems to work fine.
Is there way to fix it without the source code? Or even find out why exactly it crashes?
Because there is nothing of interest in the crashdump .log

edit Sry i just wanted to let him know that his Plugin doesn’t seems to work… I already though about not answering because of the Offtopic. I keep using the old g15 plugin but thanks for the c++ suggestion.

Not that I know of. However, I might know the developer of that plugin :wink:. I’ll ask him about it when I next talk to him.

3 Likes

I just talked to him and was simply told “Nö”. So I doubt something will come from this, but who knows…

3 Likes