Code Monkey home page Code Monkey logo

bnsboost's Introduction

BNSBoost Build Status Releases Chat on Discord

BNSBoost is a simple loader for starting NCSoft's Blade and Soul. Not endorsed by them in any way, shape, or form; Blade and Soul, etc. are all trademarks of NCSoft.

BNSBoost bypasses NCSoft's file verification, so you can run a patched game straight from the official launcher.

        

        

It features options for:

  • Enabling game to use all cores
  • Disabling texture streaming
  • Disabling loading screens
  • Disabling XIGNCODE3
  • Enabling multi-client support
  • Autopatching common XML edits (DPS meter, AFK check, etc.)
  • Arbitrary game XML edits
  • Custom mods (voice packs, etc.)
  • Randomized splash changing
  • Forcing the default launcher to open up with BNSBoost

Downloads

Latest stable build — you probably want this.

Unstable builds — don't file bug reports regarding these builds, but feel free to mention them in Discord.

Usage

Just run the BNSBoost.exe you got from the release archive!

We also maintain a wiki on using BNSBoost. Some topics you may be interested in:

FAQ

My antivirus complains about your binaries!

Your antivirus might complain since BNSBoost's launcher hooking can match its malware definitions, in which case you'll have to whitelist BNSBoost before proceeding. If you're jumpy about security, you can always compile it from the source in this repository yourself.

Most antiviruses are alright with it, though.

Can I be banned using this?

Absolutely! The use of any 3rd-party tools to run the game is strictly against NCSoft's EULA, and could land you a ban. But if you've already been using a 3rd-party launcher, this isn't really any different.

But you're using injection! Isn't that more likely to get me banned?

I figure half the reason people shy away from injection is that it sounds like you're getting a flu shot, and relate that unpleasant experience to what's going on in the launcher. However, injection is a pretty common practice in tools that interface with games nowadays.

So let's be clear: if you're using Discord, Steam, TeamSpeak, etc., you're already injecting into Blade and Soul. These tools inject into the game to provide things like overlays. Though, they avoid mentioning words like "injection" or "hooking" to avoid sounding scary.

Now, many anti-cheats know these platforms inject, and may have whitelists for them. However, if you've enabled client-injecting features, you have already disabled XIGNCODE3. The launcher is not protected by any anti-cheat, so there's no concern regarding the base functionality of BNSBoost ceasing to work if NCSoft decides to switch off XIGNCODE3 to another anti-cheat.

So what's being injected?

Feature Launcher Client
Extra game flags ✔️
XML patching ✔️
Modding ✔️
Splash changing ✔️
XIGNCODE3 bypass ✔️ ✔️
Multi-client enabling ✔️ ✔️

How it works

There's a bunch of files included alongside BNSBoost that are necessary for it to function. Below is a brief overview of what each does.

inject32.exe / inject64.exe

Writes a DLL into a given process' memory. BNSBoost uses these to write agent DLLs into either the launcher or the client.

agent_launcher.dll

Injected into NCLauncherR.exe by BNSBoost. Sets up two hooks:

  • CreateFileW hook

    Used to bypass file verification by redirecting calls to the unpatched directory, when it exists.

  • CreateProcessW hook

    Used to add client flags (-UNATTENDED, -NOTEXTURESTREAMING, -USEALLAVAILABLECORES) when the launcher spawns the client. If bypassing XIGNCODE3, launches inject32.exe or inject64.exe (depending on client bitness) to inject agent_client32.dll or agent_client64.dll into the client.

agent_client32.dll / agent_client64.dll

Injected into Client.exe by the agent_launcher.dll's CreateProcessW hook. Sets up three hooks:

  • LoadLibraryW hook

    Detects if the client is trying to load x3.xem or xcorona_x64.xem, and if so redirects the library to our patched ones instead.

  • CreateMutexW hook

    Used for multi-client support. The game creates a named mutex "BnSGameClient" to prevent multiple instances from starting; this hook strips the name from it and allows further clients to be started.

  • CreateFileW hook

    The client grabs exclusive access to xml[bit].dat / config[bit].dat, which causes clients to exit with "corrupt game file" messages even if the mutex is patched out. This hook is used to ensure that exclusive access cannot be obtained on any file used by the client, downgrading to sharing read access.

wtsapi32_nclauncher.dll

Copied into the launcher's directory as wtsapi32.dll, it warns you if you're launching NC Launcher without BNSBoost (as this would destroy any patches you have applied). It can also be configured to launch BNSBoost unconditionally, without first prompting. The showing of this warning can be toggled in BNSBoost's Settings tab.

x3.xem / xcorona_x64.xem

VirtualPuppet/XignCode3-bypass built for 32-bit and 64-bit targets, respectively.

Reporting an issue

I should say that I wrote this project for myself, and it works for me — in that sense, the goal of this project is complete. However, since I figure this may be useful for others, I'll be happy to provide a best-effort attempt at helping out with any errors caused by BNSBoost.

You can use the ticket tracker to report issues, and I'll probably get to them fairly quickly.

Good luck!

Contributors

  • @LoadLibraryW, current maintainer
  • @Xyene, initial author and managing releases/documentation
  • @zeffy, basically a well of BNS internals knowledge

Acknowledgements

BNSBoost wouldn't have been possible without the help or inspiration from:

  • @mrexodia's x64dbg tool
  • @Evengard for his now-defunct "bnsnogg" project
  • @ronny1982 for his original work on bnsdat reversing, LokiReborn for their initial C# port of it
  • Sysinternals for their forum resources and procexp/procmon utilities

bnsboost's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

bnsboost's Issues

Multi-client support

BnS Buddy (at least) implements multi-client support by adding Evengard's anti-GameGuard bypass into clients, since even though GameGuard is no longer being used, it still has the functionality of preventing clients from detecting each other. Evengard never shipped source, and I would like to not ship mystery binaries (or run them as admin myself, for that matter) if at all possible.

A quick analysis of the bnsnogg binaries show that it's a winmm.dll proxy generated through Dll_Wrapper_Gen. I expect the majority of the binary deals with spoofing GameGuard, but they mention IAT hooking in their thread so I suppose that's what's being employed here.

If I'm right, the functions being hooked are GetCurrentProcessId, CreateFileW, and CreateMutexW... I'm not immediately sure what GetCurrentProcessId would be useful for, but the CreateFileW hook I suspect is for redirecting config lookups to get past the launcher verification, which leaves CreateMutexW for bypassing the client check -- which makes sense, since named mutexes would be a good fit for this task.

So, I think that stripping the name from all mutexes as they're being created would prevent the clients from looking themselves up. Something like:

HANDLE WINAPI MyCreateMutex(
	_In_opt_ LPSECURITY_ATTRIBUTES lpMutexAttributes,
	_In_     BOOL                  bInitialOwner,
	_In_opt_ LPCTSTR               lpName
) {
	return CreateMutex(lpMutexAttributes, bInitialOwner, NULL);
}

However, a test using Dll_Wrapper_Gen proxying version.dll and the IAT patching from agent.c did not yield anything promising... the DLL got loaded, but received no CreateMutexW calls. Perhaps I'm doing something wrong.

launch problem

after pressing "launch" nothing happens, the ncsoft launcher does not seem to start, it does start without using bnsboost. Maybe its better to intergrate Log4net for better error handling.

Localization

DLL or xml or any valable option for translation menus, button labels etc. without compiling anything.

Im not a coder, so when I edited Form.Designer.cs and compile project, .dat extraction section gave me error. I have vague conception why, but Im not gonna learn C for this corrections. Other than that my lang correctly applied.

clip812

So if you do separate file for that purpose and add drop-box for lang preferences (copypaste .xml or w\e -> translate -> rename with prefix RU for example -> RU appears on dropdown menu), it will be nice.

.NET Framework error

Hey, just did a fresh Win7 install and I'm getting this after pressing 'launch' (tried1.2.2 and 1.30)
clipboard01
details.txt

Worked fine before.

edit: OK I just noticed the other thread -_- I tried everything posted there, nothing works.

File repair mode

It'd be a good idea to have an option for launching the game in file repair mode directly, to fix broken installs.

I'm thinking a Repair! button next to the current launch button, which would destroy BNSBoost's unpatched directories and start the launcher. The launcher would then repair files, and we can hook CreateProcessW to kill the launcher and redirect back to BNSBoost once the repair is complete.

XIGNCODE3 bypass

The current bypass is suboptimal, since it requires shipping mystery binaries found on Reddit. It also doesn't work for 64-bit clients, since the x3.xem was compiled for x86.

It should be possible to repurpose https://github.com/VirtualPuppet/XignCode3-bypass to build alongside BNSBoost, and generate both x86 and x64 binaries on build.

Regarding the XC3 bypass

Hey @Xyene long time! :)

Just wanted to add here, since you've implemented a XIGNCODE bypass you should probably remove or modify the phrasing on this line in the README:

BNSBoost never touches the game client (Client.exe), only its launcher.

Also it would probably be good to give attribution to who originally made the bypass. Dunno where you got this x3.xem from since it appears to be (slightly) modified, but the code originally came from VirtualPuppet/XignCode3-bypass.

Kill game faster on exit

The game takes way too long to exit. There's an exit-game-waiting-time option in the XML, but it doesn't seem to do anything. Perhaps it would be possible to detect some winapi call sequence the client performs only on exit, and just kill all open sockets + exit(0) there. This would probably need a lot of testing to ensure the conditions for the auto-kill aren't fulfilled anytime during regular gameplay 😅

[Not an issue] I made an alternative version of BNSBoost

Hi again @Xyene,

I ported your code to use a fake steam_api.dll as an entry point, so that it gets automatically loaded into NCLauncher's address space. This is nice because it doesn't require the use of an injector, or a UI for configuration. Also by the very nature of the entry point, it is no longer necessary to programatically search for NCLauncherR.exe's location.

I also tried to make it as game-agnostic as possible by giving the user the option to specify their own custom command line arguments in an init.ini file. This is assuming that it is used with a launcher that also imports steam_api.dll, is vulnerable to IAT manipulation and uses the same APIs, etc., though with a little work it could be made compatible with a wide variety of game launchers.

All of the changes I've made have been documented in the README.

You can find it here https://github.com/zeffy/bnsboost-steam_api.dll

If you want to use it as a base for future updates to BNSBoost, or want to use any of the source code I added, by all means feel free. Right now it doesn't make use of any secure string functions, so that will probably be what I work on next.

Just thought I would let you know what I did with your already awesome project. :)

Peace. ✌️

Patching-on-the-fly

As I see you guys making somewhat similar to Buddy (I prefer BNSBoost for simplicity and making the job), can you also add then function to replace xml strings with direct swapping full string or\and regExp, like they did in Buddy. Its good you got some cool options and not only DPS-meter, but I have some customs that Im doing thru xml-editing each major patch that adding strings to xmls.

Xigncode bypass integration

Still nothing about localization. Well. And they changed system so xigncode bypass (updated 11 months yeah) not working for some time already. Pointless to build it alongside if its old.

Xigncode3 bns update

Since BNS is gonna update their anti cheat system to Xigncode3, my question is,
is it still possible to use BNSboost after the update?

Update checking

I don't want anything particularly fancy since I don't want to be responsible if e.g. my DNS gets hacked, so I'd like to keep this simple -- load up https://api.github.com/repos/Xyene/BNSBoost/releases on boot, and see if the latest version release date is newer than the executable's last modified time. If so, prompt the user to go update (open in browser button).

Auto-updating is entirely out of the scope of this issue.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.