Resource icon

mmBBQ - Lua API Injector Download 3.1.0_RC1 and 3.0.2

Hexui Undetected CSGO Cheats PUBG Accounts
mmBBQ - Your process is yours

mmBBQ injects an interactive codecaving Lua API to a win32 process. It is easy to use, there are no dependencies and only little knowledge is required. It was initially build to create APIs for MMORPGs, therefore the following example sources are included in the SDK: Mythos (EU), Hellgate (EU) and Silkroad Online.



Feel free to join us on freenode irc for development questions, suggestions or just to meet us.

  • Read and send userinput. React on userinput
  • Intercepting the CPU: codecave api
  • Easy set and read CPU registers from Lua
  • Call any unexported assembler function from Lua: asmcall api
  • Automatically update your pointers and addresses between different binary versions: asmdiff module
  • Draw into DirectX scenes
  • Remote control your process (even from mobile): relay module
  • The injected DLL includes most anti-detection techniques
  • Can be used to debug a without the using debugging API (processes that can't be debugged)
  • Decode and analyze encrypted network streams
  • asmDIFF can be used to create self updating mods
  • Build a generic API for any process
  • Make ollydbg scriptable using Lua
  • Build your own debugger
  1. Download and unzip mmBBQ to a location of your choice
  2. Make sure your process is running
  3. Run START.bat
  4. (OPTIONAL) Modify your config.lua to do whatever you please
This download include all available versions
  • 3.1.0 RC1
  • 3.0.2

Includes example projects for several games Mythos (EU), Hellgate (EU) and Silkroad Online with features:
1. AutoLooter

It is an automatic looting tool based on the original ItemArray, which itself was based on PickIt, and offers some more features. The main reason to rewrite ItemArray was to get rid of the stutter it creates and to fix some of the bugs. It also pauses when one opens the inventory and will not interfere with any items held under the mouse. It offers a default mode for dismantling up to rare items, a fast mode for dismantling legendaries, bypass rules for +Luck and +AA gear, and special modes for TCR and CSR farming.

2. AutoTCR

This is a script for farming on Tottenham Court Road. It has a feature to find small maps suitable for farming, can control a runner (aka hopper), a striker and it will collect loot as it drops. It has a command to trade hundreds of coins at Murmur into gifts. The striker is capable to aim his strikes, making maximum use of the area. Because it collects the loot as it drops is the map always clean and nothing will get lost on disconnects, server crashes or shut downs. The clients will only degenerate slowly, making it client and server friendly.

3. AutoSHXP

It is a script for automatic levelling characters in Stonehenge. It currently supports strikers and guardians (to jump into the centre), can be used in a party, can automatically inject exp boosters, optimizes itself but can also be tweaked to make it work for most cases.

4. AutoNPC

This a script for cheating NPCs for their rewards. One can identify quest rewards before accepting them (press F12 while the mouse hovers over the reward) and trigger the mail tool bug. It further allows to filter the quest rewards in extensive searches and it can do this for hours until a nice item shows up (i.e. cannonades with a high splash radius or Explosive Grenade 3 with ccm). It works with Conrad and Preston, as well as TechSmith66 and Neko (in Tokyo) and can search for cannonades, pistols, bolters, shields, and all 6 mod types.

5. Speedhack and others

It includes the map hack, radar hack and no censor hack of the original mmbbq 3.0.2 as well as the speed hack and makes the speed hack available as a command so one can change the speed in the game.

6. Occi jump cheat

One can jump from catacombs level 15 straight into the hellrift of Oculus with a simple command and thereby avoid running through level 15 in search of the rift.

7. KillMark

This is a script for sampling the life of Shulgoth in order to save the data to a file where it can be processed for further analysis. The main purpose is to have a tool for gathering statistical data and a means to make sound decisions when choosing weapons and mods. See also the sample data in the docs directory.

All scripts are controlled with in game commands.

Some of it is still work in progress (and comments in the scripts mark it as WiP). The scripts contain plenty of comments and anyone with a bit of programming experience should be able to pick it up and to make it theirs.

mmBBQ can extend any binary software with an pogrammable interface (API). It is free and easy to use without depencies required. Feel free to join us on freenode irc for development questions, suggestions or just to meet us.

mmBBQ’s base interface offers:
  • a generic injector that cares for your dll getting into a process
  • some abilities to hide itself from common anti hacking mechanisms
  • userinput send and capture module: common.userinput
  • target defined configuration: config
  • utilities package that contains logger and useful lua additions: common.utils
  • lua socket module for TCP communication: common.luasock
  • a relay bridging module for remote control: common.relay
  • pathfinding algorithm A* implementation: common.astar
  • basic debugging module: common.dbg
  • powerful codecaving / detours API: common.codecave
  • an module for generic assembler calls: common.asmcall
FAQs / Tipps / MustReads
  • Download the mmBBQ SDK, it contains many examples and is open source!
  • The “event” module doc is a MUST read, as it handles callbacks and asyncronous operations for your scripts: common.event
  • Any module wihtin the ‘common’ package is meant to be used for any target. So they are particular interesting.
  • Don’t forget to use module prefixes. Example: cfg() function in module ‘mmbbq’ becomes: mmbbq.cfg(...)
  • Use print_r(data) to display complex data
  • Use debugEvent(“EVENT_NAME”) to debug events
  • Look into official Lua DOCs:
  • Look into the LuaJIT extensions that are available in mmBBQ:
  • Always use the latest version when developing scripts

Original website is now down
This is what an actual hack made with this lib looks like

--- hell examples module
module("examples_hell", package.seeall, log.setup)

--[[ include any dependencies ]]--

local movebot_handle = nil;
local DIGITS = 0;
local function roundCoords(x,y,z)
    return math.round(x, DIGITS), math.round(y, DIGITS), math.round(z, DIGITS);
local function move(x, y, z)
    if isPaused() then return end
    if not (x and y and type(x) == "number" and type(y) == "number" ) then
        ERROR("move(x, y, z) supplied args are not numbers");
    -- third arg is opt. take current z
    if not (z and type(z) == "number") then
        local foo, bar, foobar = hell_map.getCoords();
        z = foobar;
    cx, cy, cz = roundCoords(hell_map.getCoords()); --getting current position
    dx, dy, dz = roundCoords(x, y, z);
    if(dx == cx and dy == cy and dz == cz) then
        INFO("move x:"" y:"" z:"" reached");
        movebot_handle = nil;
        vx, vy, vz = roundCoords(hell_env.checkCollision(x, y, z));
        dx, dy, dz = roundCoords(x, y, z);
        if(vx == dx and vy == dy and vz == dz) then
            INFO("move x:"..dx.." y:"..dy.." z:"" can be reached without collision");
            hell_cam.lookAt(x, y, z);
            INFO("move Collision at x:"..vx.." y:"..vy.." z:"..vz);
            movebot_handle = nil;
--- this starts a simple moveTo to algorithm that stop at the first collision
function moveTo(x, y, z)
    if not movebot_handle then
        movebot_handle = register(event.ONTICK, function() move(x, y, z) end);

--- stops the moveTo algorithm
function moveStop()
    if movebot_handle then
        movebot_handle = nil;
-- kill trigger
register(event.PAUSE, function(e)
    if (e.pause) then moveStop() end

-- Automatically takes Healing and Mana potions at given percentage
-- Usage:  startAP(50, 50)
local HP_READY = getCurrentMillis();
local MP_READY = getCurrentMillis();
local function callAP(percent_heal, percent_mana)
    -- [[ HEAL ]]--
    local maxhp = hell_char.getData()["Max HP"];
    local curhp = hell_char.getData()["Current HP"];
    if not maxhp or not curhp then return end
    if (curhp/maxhp*100) <= percent_heal and HP_READY < getCurrentMillis() then
        local obj ="medpack")[1];
        if obj then
            -- in hell HP causes cooldown of 10 secs and MP cooldown of 5 secs
            HP_READY = getCurrentMillis() + 10000;
            MP_READY = getCurrentMillis() + 5000;
            INFO("Auto Potter - HEAL");
    -- [[ MANA ]]--
    local maxmp = hell_char.getData()["Max Power"];
    local curmp = hell_char.getData()["Current Power"];
    if not maxmp or not curmp then return end
    if (curmp/maxmp*100) <= percent_mana and MP_READY < getCurrentMillis() then
        local obj ="powerpack")[1];
        if obj then
            -- in hell MP causes cooldown of 10 secs and HP cooldown of 5 secs
            HP_READY = getCurrentMillis() + 5000;
            MP_READY = getCurrentMillis() + 10000;
            INFO("Auto Potter - MANA");
--- call to start auto potter at a given percentage for health an mana
function startAP(percent_heal, percent_mana)
    register("STARTUP", function(e)
        if type(percent_heal) ~= "number" then percent_heal = 50 end
        if type(percent_mana) ~= "number" then percent_mana = 50 end
        INFO("Auto Potter - HEAL %i%%  MANA %i%%", percent_heal, percent_mana);
        register(event.ONTICK, function(e)
            if not isIngame() then return end
            callAP(percent_heal, percent_mana)

-- Automatically buys stuff when at merchant.
-- Usage: startAS({["large medpack"]=20, ["large powerpack"]=20, ["analyzer"]=20});
local AS_INVENTORY = hell_inv.MERCH_MISC;
local LAST_MERC = nil;
local function callAS(tabledata_buy)
    if LAST_MERC == hell_env.getNpcId_C() then return end
    LAST_MERC = hell_env.getNpcId_C();
    local tabledata_inv = {};
    -- first scan contents of players inventory
    for pattern,qty in pairs(tabledata_buy) do
        tabledata_inv[pattern] = 0;
        for _,i in pairs( do
            local qty = i.getStats("item_quantity");
            if qty == nil then qty = 1 end
            -- increment inventory table by found qty
            tabledata_inv[pattern] = tabledata_inv[pattern] + qty;
    -- now lets go shopping
    for pattern,qty in pairs(tabledata_buy) do
        local shop_item =[1];
        if shop_item ~= nil then
            local diff = qty - tabledata_inv[pattern];
            if diff > 0 then
                INFO("Auto Shopper - buy  %s[%i]", pattern, diff);
                --hell_inv.MAIN.move(shop_item); -- inv move is no go for shopping
                hell_env.buy_C(, LAST_MERC, diff);
                INFO("Auto Shopper - enough of %s[%i]", pattern, tabledata_inv[pattern]);
            INFO("cant buy %s[%i] here", pattern, qty);
--- call to start auto buy.
-- @param tabledata_buy is a table of string->qty mappings to have in inventory.
-- @usage startAS({["major health potion"]=20, ["major mana potion"]=20, ["scrying stone"]=20})
function startAS(tabledata_buy)
    register("STARTUP", function(e)
        -- dirty hack to check if merchant is available (test merchant inventory not empty)
        INFO("Auto Shopper - active");
        register("ONTICK", function(e)
            if not isIngame() then return end
            if AS_INVENTORY[1][1] then
                LAST_MERC = nil;

-- Opens Boxes, Doors, Ores ... automatically when beeing close to then
-- Usage: startAI()
local AI_MAXDIST = 2.5;
local AI_SCAN_DELAY = 5003;
local AI_IDS = {};

local AI_UNITFLAGS = {
    CRATE = 210,

local function callAI()
    -- scan for boxes and doors to use
    local player = hell_env.getPlayer();
    for id,timestamp in pairs(AI_IDS) do
        if hell_env.check(id) then
            local obj = hell_env.get(id);
            if timestamp < getCurrentMillis() - 2000 and obj and obj.getDist() < AI_MAXDIST then
                AI_IDS[id] = getCurrentMillis();
                if obj.unitflags == AI_UNITFLAGS.CRATE and obj.getStats("skill_seed 5") == nil then
                    INFO("Auto Interactor - CRATE [%i] %03i %s",, obj.unitflags, obj.model);
          "Use_Both_Weapons", obj.x,obj.y,obj.z);
--- call to start interactor
function startAI()
    register("STARTUP", function(e)
        INFO("Auto Interactor active");
        register(event.ONTICK, function(e)
            if not isIngame() then return end
    -- delay full scan
    timer(AI_SCAN_DELAY, function()
        if not isIngame() then return end
        AI_IDS = {};
        -- check for objects with requested unitflags
        for id, obj in pairs(hell_env.getEnvObjects()) do
            for s,unit_flags in pairs(AI_UNITFLAGS) do
                if obj.unitflags == unit_flags then
                    AI_IDS[id] = -1;
Change Log

- added lua console autocompletion and history

add: Win64 version 50% done
add: Linux version 32/64 20% done
add: MacOS version 00% done
imp: pdcurses console
imp: syntax highlighting
[odbg] collaborated reversing plugin
[poex] complete API
[sro] inventory API and a whole bot.
[hell] path finding performance and quality
[myth] spamfilter currently defect
[myth] add support for Korean and Russian client


MSC: moved any target related code and stuff to ./targets

V3.1.0_RC1 Oct 2014 - maintenance, release candidate
BNO: refactoring, some performance improvements, updated documentation
BNO: improved injector: UAC aware, can now specify target from command line
BNO: builtin scripts are now gzip-compressed, and decompress 'on-the-fly' when used
BNO: made Lua memory allocator and deadlock timeout configurable
BNO: updated to LuaJIT 2.0.3
BNO: some bugfixes, code cleanup, improved mmbbq core stability
BNO: updated to LuaJIT 2.0.2
RLA: [poex] movement stuff
BNO: [odbg] added target label importer: autoaddr.lua
BNO: added codecave mode INTERCEPT_PATCH
RLA: [poex] MH and ZH
RLA: [poex] target added
BNO: implemented static heapmanager
BNO: updated to LuaJIT 2.0.1
MSC: odbg target improvements. An mmBBQ OllyDbg plugin.
MSC: finished work on lcpp. A Lua C-PreProcessor
BNO: added lua autocompletion and history

V3.0.2 Apr 2013 - hell, myth, bugfixes&improvements
MSC: [sro] updated to client version 1.406
BNO: improved lua exception handling
BNO: [hell] added radar hack
MSC+BNO: [hell] update to client version:
MSC: added first version of lcpp - Lua PreProcessor
MSC+BNO: fixed dbg.getModule() - crash and ordinals
MSC: fixed eject bug for INTERCEPT_NOPs
MWI: changed name to MSC :D
RLA+MWI: [sro] improved collision function and movement routing
RLA: updated to recent SRO version 28.08.2012
MWI: fixed the file read bug in asmdiff
MWI: 64Bit stuff, but nothing to release yet
MWI: increased luacall performance
MWI: fixed a memory leak
MWI: fixed dbg breakpoint module

V3.0.1 Aug 2012 - dbg module improvements
MWI: [myth/hell] fixed network packet parsing deadlocks
MWI: changed codecave threadid logic. 0:curr(default) -1:main
RLA+MIW: added libudis86 lua binding
MWI: improved dbg module. memory and execution breakpoints.
MWI: added shell32.IsUserAnAdmin() check to inject.lua
MWI: refactored asmcall module
MWI: added lua messageBox function
MWI: removed lua_checkargs(). switched to luaL_check...

V3.0.0 Aug 2012 - generic injection
MWI: made injector generic so any win32 can be used
MWI: fixed userinput using correct windows HWND
MWI: EXPERIMENTAL added asmdiff autoupdate mode
MWI: added asmdiff lua module

V2.4.1 Jul 2012 - LuaJIT added
MWI: update d apikey check to maj.min.mic version codes
MWI: [hell] client aniversary update 05.07.2012
MWI: slightly increased lua threadcall performance
MWI: added codecave lua module - setup codecaves from Lua
MWI: added asmcall lua module - invoke ASM directly from Lua
MWI: switched to LuaJIT 5.1 - ctypes and performance boost

V2.4 Jul 2012
MWI: changed from luadoc to ldoc which gives better HTML docs
MWI: [all] added "KEYUP" event for easier Lua key binding stuff.
RLA: added DirectX printing stuff (TRIANGLE,POINT,LINESTRIP)
MWI: [all] implemented score based spamfilter
MWI: fixed some GUI callbacks were not working / crashing
MWI: fixed spamfilter again
MWI: fixed "PAUSE" event

V2.3 Jun 2012
MWI+RLA: fixed a memory leak / close handle bug in debugging functions
MWI: fixed a bug in persistence.lua data storage manager
MWI: [all] added new events: debugEvent("MOUSE") debugEvent("KEYBOARD")
MWI: added mmBBQ SDK
MWI: fixed event.lua tests
RLA: [sro] added zoomhack
MWI: fixed Lua dofile() function wrapper to work as intended
RLA: updated [sro] to latest binary
MWI: fixed injector not causing to detect: unknown.exe
MWI: fixed start.bat for winXP32 users. thx@Coquitment

V2.2 14.06.2012
MWI: stabilized codecaving core. no more lockups finally

V2.1 12.06.2012
MWI: added more anti-anti hacking foobar
MWI: hardened apikey checks for security reasons

V2.0 08.06.2012
RLA: removed exported symbols from DLL build :) hi@magma

V1.9 03.06.2012
MWI: ingame command handling

V1.8 31.05.2012
RLA: [sro] grab item added
RLA: [sro] dies, pick, add events added
RLA: [sro] getting model string and some lua events added

V1.7 31.05.2012
MWI: added console function

V1.6 28.05.2012
MWI: [myth] update for client content patch
RLA: [sro] collosion detection
RLA: added sro_launcher
RLA+MWI: [sro] defeated hackshield :)

V1.5 04.04.2012
MWI: improved examples a lot (pot, shop, interact...)
MWI: [hell], [myth] improved environment module
MWI: [myth] targeting
MWI: ported hell_env module to [myth]
MWI: moved all targets into one dll
MWI: fixed symbols package loader
MWI: added [myth] character selection
MWI: implemented [hell] event.COMMAND
MWI: updated [myth] project
MWI: implemented common LUA itnerface for all targets
MWI: added lua relay connection
RLA: added new TARGET [sro]
MWI: added lua sockets
MWI: upgraded to lua5.2
MWI: added Lua function _G.getVersion()

V1.4 15.12.2011
RLA: instance reset bugfix
MWI: fixed hell_map.getCollision(...)
MWI: fixed moveit.lua
MWI: fixed hell_global.sendCommand("/w ...")
FSA: fixed hell_env object quality on "rocket" mods
MWI: fixed hell_global.isIngame()
MWI: added exe md5sum check override
MWI: added de-censor option in config.lua

V1.3 01.12.2011
NHO: LUA double precision by inline asm
RLA: added setdifficulty
MWI: added astar.lua routing module
MWI: improved default spam filter regex set
RLA: added rundll32 loader
RLA: fixed Win Vista bug
MWI: removed winject.exe from project
MWI: added MD5SUM check of target binary
RLA: improved instance reset
MWI: improved event module a bit for SW events
MWI: improve asmcall a bit

V1.2 24.11.2011
MWI+RLA: [hell] client version update

V1.1 23.11.2011
MWI: added windows installer
RLA: added event.CHAT for received chat messaged
RLA: added spamfilter
MWI: improved hell_inv module
MWI+RLA: added more examples

V1.0 18.11.2011 (RELEASE)
RLA: [hell] instance reset
RLA: hell_inv inventory lua module
MWI: added apikey checks

V0.9 15.11.2011
MWI: rewrote LUA DLL symbols package loader
MWI: reduced codebase
RLA: added own injection tool

V0.8 06.11.2011
MWI: implemented main thread lua call injection
MWI: improved stability
RLA: [hell] added collision detection for real movement

V0.7 27.10.2011
MWI: added main thread asmcall injection
RLA: [hell] added environment support
RLA: [hell] added skill support
RLA: [hell] added inventory support
MWI: added Autologin feature
MWI: added config.lua for customizing

V0.6 07.09.2011
MWI: implemented user32 input recorder using WindowMessageLoop
MWI: added persistence lua table support

V0.5 02.09.2011
MWI: [myth] updated to V33 02.09.2011
MWI: [hell] Added basic GUI support
RLA: Fixed gcc + mingw + lua issues

V0.4 10.08.2011
RLA: Ported project to work with gcc / mingw
RLA: Added [hell] target

V0.3 30.06.2011
MWI: [myth] Added attackToPrimary/Secondary functions
MWI: [myth] Added movement functions

V0.2 25.06.2011
MWI: Added LUA EVENT interface register() unregister() EVENT_...
MWI: Added LUA timed excecution delay(fctn, millis)

V0.1 24.06.2011
LUA apidoc see
DLL that covers movment, cam, coords and various other function
Winject loader
First release
Last update
4.00 star(s) 1 ratings

More resources from Rake

Latest reviews

Great tool thanks!
Community Mods