logo logo

 Back to main page

The NWNX Community Forum

 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 
 
lifeless hackers are back - nwn highly vulnerable
Goto page 1, 2  Next
 
Post new topic   Reply to topic    nwnx.org Forum Index -> General Discussion
View previous topic :: View next topic  
Author Message
weldieran



Joined: 05 Aug 2005
Posts: 71

PostPosted: Sat Aug 16, 2008 16:04    Post subject: lifeless hackers are back - nwn highly vulnerable Reply with quote

I'm rather surprised there has not yet been discussion in the nwn community about this...

There is some software that is getting distributed that allows people DM-like access as a player. The symptoms we've seen so far is that the hacker can steal gear right off the other player's back, and can even run some sort of script that takes all items from another player all at once.

These hackers have hit several servers, and I'm sure many more are getting hit, but the hackers are more smooth about it, as to fly under the radar.

Now that bioware has ceased support for nwn, the only possible line of defense is nwnx.

Anyone have any news on this?
My players are getting hit quite often now.
Creating a mess.

(affects both 1.68 and 1.69)
Back to top
View user's profile Send private message
FunkySwerve



Joined: 02 Jun 2005
Posts: 377

PostPosted: Sat Aug 16, 2008 17:48    Post subject: Reply with quote

Do you have dm cd verification in your oncliententer event? That stopped our problems with this three or four years back.

Funky
Back to top
View user's profile Send private message
weldieran



Joined: 05 Aug 2005
Posts: 71

PostPosted: Sat Aug 16, 2008 21:56    Post subject: Reply with quote

FunkySwerve wrote:
Do you have dm cd verification in your oncliententer event? That stopped our problems with this three or four years back.

Funky


We do not, no. But will this stop this particular issue? I have been there, online, while this hacker was raping our players. Logs show do not show any game master joining. I've seen a screenshot of the hacker, which was a naked level 1 player.

So if they aren't triggering the "Game Master has joined" message in the log files, then is cdkey verification of all DMs gonna solve this one? Perhaps they are two diff issues? I do not think this particular hack software was available 3-4 years back. I've been running our server for 6 years now, and was hit only just recently (july 1-5th) then again just a couple days ago.
Back to top
View user's profile Send private message
FunkySwerve



Joined: 02 Jun 2005
Posts: 377

PostPosted: Sat Aug 16, 2008 22:13    Post subject: Reply with quote

It doesn't sound any different than the old stuff. Only way to find out for sure is to add it. It's very easy to add. Just collect the keys of your dms, and if GetIsDM on login, and GetPCPlayerCDKey doesn't match one of the authorized keys, boot em.

Funky
Back to top
View user's profile Send private message
Abraxsis



Joined: 24 Jun 2008
Posts: 14

PostPosted: Sun Aug 17, 2008 8:59    Post subject: Reply with quote

I'm a developer for Richterm's Retreat, and I have seen and corrected this hack on our server.

The player is using a second character as a DM Wand. He is hacking the character on creation to add the string 'dmwand' to the PC's Conversation RESREF. If you copy over the hacked character and view it with LETO you'll see he has entered a value into the Conversation RESREF field.

This allows him, and any player, to use 'Talk To' from the quick bar to start a DM Wand conversation by talking to the hacked character. I found you can do this with any conversation script. So I had to go though and add GetIsDM tests to all of our DM only conversation activated scripts in the mod.

This hack bypasses the GetIsDM tests when the wand item is used and directly initiates the conversation scripts.

The code I added to the begining of all our DM only conversation activated scripts such as dmw_test_dialog0.nss
Code:

   // Added by Abraxsis Aug 04, 2008
   // Is the speaker a DM?
   object oPC = GetPCSpeaker( );
   if( GetIsDM(oPC ) != TRUE ) {
      object oPCTest = GetFirstPC( );
      string sTestPCName = GetPCPlayerName( oPC);
      int nFound = FALSE;
      while( GetIsObjectValid( oPCTest) && ( ! nFound)) {
         if( GetPCPlayerName( oPCTest) == sTestPCName) {
            if( GetIsDM( oPCTest)) {
               nFound = TRUE;
            } else {
               SendMessageToPC( oPC,"This is too much power for mere mortals!");
               return FALSE;
            }
         }
         oPCTest=GetNextPC( );
      }
   }
   // End Is the speaker a DM?


We have some fairly advnaced character checking on character creation, but I've found no function to be able to check to make sure a character's Conversation RESREF is nul.

I'd like to be able to reject anyone with a value in the character's 'Conversation RESREF'.
Back to top
View user's profile Send private message
FunkySwerve



Joined: 02 Jun 2005
Posts: 377

PostPosted: Sun Aug 17, 2008 9:46    Post subject: Reply with quote

Interesting, never seen that. But then, I use SIMTools, not DMFI. Razz Still, probably prudent to add checks to any convo you don't want them having unlimited access to, perhaps just a simple check to ensure that gettag of the owner isn't blank. But then, they could always up a non-blank field, I suppose. Best to leto it clean for new characters, I suppose.

Funky
Back to top
View user's profile Send private message
Abraxsis



Joined: 24 Jun 2008
Posts: 14

PostPosted: Sun Aug 17, 2008 10:09    Post subject: Reply with quote

I'm not as familiar with nwnx_leto, least not yet. I wasn't able to find a function to check the new character's Conversation RESREF field.

Is there a better way of checking new characters with nwnx_leto?

A couple other tricks I've seen lately...

The hacker used the tag STRING character field for one hack.

The hacker has also tried creating characters using the same name multiple times. I'm asuming this is to try to confuse which .bic file gets checked for a specific character name.
Back to top
View user's profile Send private message
FunkySwerve



Joined: 02 Jun 2005
Posts: 377

PostPosted: Sun Aug 17, 2008 12:24    Post subject: Reply with quote

Use this to check it:
Code:
string GetConvoResRef (string sBicPath) {
    string sLeto = "%bic = q<" + sBicPath + ">; print /Conversation; close %bic;";
    string sName = LetoScript(sLeto);
    return sName;
}


You can just boot any character for whom that field is not blank. Note that you have to input the bicpath, however you're getting it on your mod.

The multiple name creation is a trick used to avoid antiexploits. Characters with the same name spoof the engine, so you can logout one, create a new one, and have it appear where the old one logged out, instead of at the start point for new characters - potentially bypassing your antiexploits. In fact, we just banned Makazasky for trying to take advantage of such a 'feature' of the engine today. He'd been picked up by our logs using other exploits before, but he actually stuck around to play this time. Buh bye. Watch for him trying it on your server - he apparently gets around a fair bit. They have all the same local vars associated with them as the last character, when they do this, which you can use to your advantage. This is also a method to potentially double up subrace edits, depending on the system you are using, especially if you allow deletion. If you want more specific details on how to prevent it, you should probably pm me, since the only foolproof way we could think of involves a custom engine hack, and Makazasky does frequent these boards.

Not sure what good the tag field would do them, depends on what you are using it for, since it's typically blank. In our mod, it's used as an unspoofable link between character and database, by setting a unique id in it. The default nwnx database setup is subject to spoofing by using a same-named character in the same playername, which can also be problematic depending on what you are using the database for.

Funky[/code]
Back to top
View user's profile Send private message
weldieran



Joined: 05 Aug 2005
Posts: 71

PostPosted: Sun Aug 17, 2008 15:58    Post subject: Reply with quote

Abraxsis wrote:

Code:

   // Added by Abraxsis Aug 04, 2008
   // Is the speaker a DM?
   object oPC = GetPCSpeaker( );
   if( GetIsDM(oPC ) != TRUE ) {
      object oPCTest = GetFirstPC( );
      string sTestPCName = GetPCPlayerName( oPC);
      int nFound = FALSE;
      while( GetIsObjectValid( oPCTest) && ( ! nFound)) {
         if( GetPCPlayerName( oPCTest) == sTestPCName) {
            if( GetIsDM( oPCTest)) {
               nFound = TRUE;
            } else {
               SendMessageToPC( oPC,"This is too much power for mere mortals!");
               return FALSE;
            }
         }
         oPCTest=GetNextPC( );
      }
   }
   // End Is the speaker a DM?


Wow nice! THANK YOU for the answer! Smile Would've taken me a long time to figure that one out.

I'm curious, however, what is the purpose of the PC loop in the code above? Would not that first check on GetIsDM (GetPCSpeaker()) not be sufficient?
Back to top
View user's profile Send private message
Abraxsis



Joined: 24 Jun 2008
Posts: 14

PostPosted: Sun Aug 17, 2008 16:31    Post subject: Reply with quote

The while loop checks to see if it is a DM controlling a npc/monster.
Back to top
View user's profile Send private message
Asparius



Joined: 18 Sep 2007
Posts: 52

PostPosted: Sun Aug 17, 2008 20:29    Post subject: Reply with quote

Wouldn't it be simpler to use GetIsDMPossessed()?
Back to top
View user's profile Send private message
weldieran



Joined: 05 Aug 2005
Posts: 71

PostPosted: Mon Aug 18, 2008 0:46    Post subject: Reply with quote

Asparius wrote:
Wouldn't it be simpler to use GetIsDMPossessed()?


thats what i was thinking... ??
Back to top
View user's profile Send private message
Abraxsis



Joined: 24 Jun 2008
Posts: 14

PostPosted: Mon Aug 18, 2008 6:50    Post subject: Reply with quote

GetIsDMPossessed() will return FALSE if oNPC is the DM character.
To determine if oNPC is a DM character use GetIsDM()

This was the basis for my decision to use the while loop.
Back to top
View user's profile Send private message
weldieran



Joined: 05 Aug 2005
Posts: 71

PostPosted: Mon Aug 18, 2008 16:12    Post subject: Reply with quote

Abraxsis wrote:
GetIsDMPossessed() will return FALSE if oNPC is the DM character.
To determine if oNPC is a DM character use GetIsDM()

This was the basis for my decision to use the while loop.


Code:

if (GetIsDM(oPC) || (GetIsDMPossessed(oPC) && GetIsDM(GetMaster(oPC))))
    return TRUE; // all is good
else
    return FALSE; // you've been a bad bad boy
Back to top
View user's profile Send private message
Arvirago



Joined: 17 Nov 2006
Posts: 15

PostPosted: Fri Nov 28, 2008 11:28    Post subject: Reply with quote

Each day I think it a better idea to use only servervault.
And again, there are not so many spanish servers, so the idea of getting your cdkey banned forever discourages a lot that hacking stuff.
Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    nwnx.org Forum Index -> General Discussion All times are GMT + 2 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group