PDA

View Full Version : EQEMU - Showeq



chaple2008
05-19-2010, 07:21 AM
Ok, This is my first post here, but I used SEQ back in the early days of EQ.

I always loved how it just listened to the packets and was undetectable. So, when I started playing recently on Project 1999 I felt that I was missing something without SEQ running on a linux box next to my game machine.

So, my quest began.

Step 1, acquire a somewhat ok machine to run linux on

Step 2, they use the Titanium client so I had to get that version of SEQ

http://sourceforge.net/projects/seq/files/ShowEQ/ShowEQ-5.2.2/showeq-5.2.2.0.tar.bz2/download

Step 3,
I realized I needed RedHat 8... Well, I had to torrent that since I couldn't find my cd's from 8 years ago.

Step 4,
I needed to find a library for QT which would work with this build of SEQ, happened to be QT 3.2.3

Step 5
Find a version of pcap, did some digging found libpcap 0.62 at http://www.tcpdump.org/ (Side Note, the latest version will work fine too!)

Step 6
Build and compile everything according to directions. I followed the thread http://www.showeq.net/forums/showthread.php?74-Idiots-Guide-all-questions-answered-here&highlight=installation

Step 7

I wasn't getting any updates on mobs or other players. So now I had a program issue. It appears that the emu was build w/ the SOF client in mind, but they only support the Titanium version.

So, the packets have extra trash in them that would usually be used for the SOF client. I had to isolate it and found that it was a 15 bit difference in size in the location packets. So when the size checkfor the sizechecktype of "match" was called, the packet didn't match so it ignored it.

So, in my reasoning, I didn't want to figure out what the extra fields where (I'm lazy) I modified the code in packetinfo.cpp around line 194

bool EQPacketPayload::match(const uint8_t* data, size_t size, uint8_t dir) const

In there their is the following code:

switch(m_sizeCheckType)
{
case SZC_None:
return ((m_dir & dir) != 0);
case SZC_Match:
return (((m_dir & dir) != 0) &&
(m_typeSize == size));
case SZC_Modulus:
return (((m_dir & dir) != 0) &&
((size % m_typeSize) == 0));
default:
break;
}

return false;

to

switch(m_sizeCheckType)
{
case SZC_None:
return ((m_dir & dir) != 0);
case SZC_Match:
return (((m_dir & dir) != 0) &&
(size>=m_typeSize ) && (size<=m_typeSize+15 ));
case SZC_Modulus:
return (((m_dir & dir) != 0) &&
((size % m_typeSize) == 0));
default:
break;
}

return false;

So, I recompiled and fired it up and wohoo I was getting updates.... but it wasn't updating the player object... this was due to the fact that I was using a "network Switch" instead of a "Hub".... off to Best Buy to buy a old fashion hub.

Plugged my linux box and my game machine into the hub and walaa, my player started updating... SEQ was working... doh, "Segmentation Fault"... damn it.

So back into the code I went, I knew the packet it recieved just before the fault was "OP_FormattedMessage" and I had read in several places that this caused issues. Well looking in the zoneopcodes.xml file I found the entry and the sizechecktype equaled "None".

Hrm, I really don't care about formatted messages.... let's change it to match!

So, I changed the xml setting to match, recompiled and walaa! no more "Segmentation Fault"!!!!

So, there ya go, I'm sure there is more bugs waiting to be found due to my hackish approach to the program, but at least the program runs 99% of the time.

I hope this is useful to others trying to get that code base working w/ the eqemu's.

Chaple

chaple2008
05-20-2010, 08:27 AM
Well, ran the program for about 3 hours last night w/out a single crash. I guess I wasn't too far off from the mark. On a side note, the reason I didn't extend the everquest.h class file for the zone packet is because the client sends the Titanium version and I still wanted to read that one. So by changing the Match function that same structure is used for both the client and server side packets.

blazed
11-01-2012, 06:57 PM
Sorry to bump an old thread, but this essentially is what got me going on my path to getting ShowEQ to work with P99.

I got everything compiled, basically verbatim to what chaple2008 did.

However, few differences in my approach.

First off, I'm using VMWare. I am 90% confident I configured it correctly as far as getting the packets to show up, because SEQ is able to figure out what zone I'm in, my character name, what spell NPCs are casting around me, etc.

However...spawn names are garbled, the skittles are a wreck, etc. All the things that lead me to believe P99 is now somehow encrypting their packets. I can't confirm whether this is true or whether or not it's a problem with my VMWare setup.

So I guess my question is...is anyone currently using SEQ on P99?

Razzle
11-01-2012, 08:50 PM
P99 is encrypting some of their packets.
That is why you get the garbled stuff.

Razzle

UnidentifiedBM
11-21-2022, 12:54 PM
Hello all, I am looking to get this working for p99. I installed it as far as it opens in Linux Mint, but I am not sure what to do next. I get an error about Guilds not being found, and it never locates the game. if anyone has this working for P99 and is willing to help, please send me a message. thanks!

cn187
11-21-2022, 05:12 PM
Hello all, I am looking to get this working for p99. I installed it as far as it opens in Linux Mint, but I am not sure what to do next. I get an error about Guilds not being found, and it never locates the game. if anyone has this working for P99 and is willing to help, please send me a message. thanks!

This is a few years old, but probably a good place to start: https://medium.com/@Packet99/installing-showeq-in-2018-81566001ec89

grump
11-24-2022, 02:06 PM
I'm struggling with following the steps in the excellent article by slippery_slope as well.


To bypass this protection, you first need to modify ShowEQ to read the key from the OP_SendLoginInfo code, and then apply a null-preserving, rotating XOR to the spawnStructs. The code change takes about ~30 lines of C code added to ShowEQ:

Modify the ShowEQ Configuration Op Codes document to expect the additional data.
Modify the ‘struct’ to contain the decryption key.
Store the key in memory for the session and update when necessary.
Modify the spawnStruct handling functions to decrypt the entire packet before further processing.

Some other threads where people have been working on this that I found helpful, still trying to get it all to work too.

http://www.showeq.net/forums/showthread.php?7233-2018-Project1999-ShowEQ-Status
http://www.showeq.net/forums/showthread.php?6860-Looking-for-ShowEQ-update-for-Project-1999-after-v33-6-25-patch