Reverse Engineering

Burhansweeper

Points 100

Solves 22

bur bur bur bur burhanpedia


A game.zip file is provided, containing the game’s executable and shared libraries like love.dll and lua51.dll. So, it’s clear that this is a game made with LÖVE (a 2D game engine that uses Lua as its programming language).

Searching for keywords like “love2d reverse engineering,” I found a user in this post stating that you can extract the .exe file to get Lua files, assets, and the like.

alt text

After extracting, we can see several Lua files and three folders. However, these Lua files have been compiled into luajit bytecode, so we need to decompile them to see their contents. We can use luadec to decompile these Lua files.

So, from all the decompilation results, I concluded that there are three important files: enc.lua, cell.lua, elems.lua, and main.lua.

In the enc.lua file, we can find the drawWin() function.

function r0_0.drawWin()
  -- line: [73, 92] id: 1
  local r0_1 = love.graphics.newFont(20)
  love.graphics.push()
  love.graphics.setColor(1, 1, 1)
  love.graphics.setFont(r0_1)
  local r2_1 = r0_0.decrypt(_G.WIN_MSG, r0_0.hash(_G.CLICKED))
  love.graphics.print(r2_1, (_G.X - r0_1:getWidth(r2_1)) / 2, (_G.Y - r0_1.getHeight(r0_1)) / 2)
  love.graphics.pop()
end

We can see here that there is a decrypt function where we need two globals, namely _G.WIN_MSG and _G.CLICKED. Where _G.WIN_MSG is in main.lua and CLICKED is the number of clicks we made in the game when we clicked safely. So when is drawWin() called?

if CELLS_CLICKED == _G.TOTAL_SAFE then
  love.graphics.setColor(0, 0, 0)
  love.graphics.rectangle("fill", 0, 0, _G.X, _G.Y)
  r5_0.drawWin()
end

So our CELLS_CLICKED should be the same as _G.TOTAL_SAFE which is 70 so how does this CELLS_CLICKED increase?

local r4_1 = r3_0.mousePressedMines(mf, r0_1, r1_1, r2_1)
if r4_1.revealed then
  CELLS_CLICKED = CELLS_CLICKED + 1
  if not r4_1.safe then
    hitMine = true
  end
end

It turns out this increases if we click on a safe cell. Now, how do we know if the cell we clicked on is safe or not? Since r3_0 is an elems, the function is in elems.lua.

function r0_0.mousePressedMines(r0_3, r1_3, r2_3, r3_3)
  -- line: [214, 263] id: 3
  local r4_3 = r14_0(r0_3)
  local r5_3 = r4_3.cellSize + r4_0
  local r6_3 = r4_3.mfW * r4_3.cellSize + (r4_3.mfW - 1) * r4_0
  local r7_3 = r4_3.mfH * r4_3.cellSize + (r4_3.mfH - 1) * r4_0
  if r1_3 < r4_3.gridStartX or r4_3.gridStartX + r6_3 < r1_3 or r2_3 < r4_3.gridStartY or r4_3.gridStartY + r7_3 < r2_3 then
    return {
      revealed = false,
      safe = false,
    }
  end
  local r8_3 = r12_0(math.floor((r1_3 - r4_3.gridStartX) / r5_3) + 1, 1, r4_3.mfW)
  local r9_3 = r12_0(math.floor((r2_3 - r4_3.gridStartY) / r5_3) + 1, 1, r4_3.mfH)
  local r11_3 = r2_3 - r4_3.gridStartY
  if r4_3.cellSize < (r1_3 - r4_3.gridStartX) % r5_3 or r4_3.cellSize < r11_3 % r5_3 then
    return {
      revealed = false,
      safe = false,
    }
  end
  local r12_3 = _G.CURRENT_DEPTH
  local r13_3 = r0_0.revealedCells
  local r14_3 = r0_0.revealedCells[r12_3]
  if not r14_3 then
    r14_3 = {}
  end
  r13_3[r12_3] = r14_3
  r13_3 = r0_0.revealedCells[r12_3]
  r14_3 = r0_0.revealedCells[r12_3][r8_3]
  if not r14_3 then
    r14_3 = {}
  end
  r13_3[r8_3] = r14_3
  if r0_0.revealedCells[r12_3][r8_3][r9_3] then
    return {
      revealed = false,
      safe = true,
    }
  end
  r13_3 = r0_3.cells[r8_3][r9_3][r12_3]
  r14_3 = r13_3.isSafe(r13_3)
  if r14_3 then
    r0_0.revealedCells[r12_3][r8_3][r9_3] = true
    table.insert(_G.CLICKED, {
      r8_3,
      r9_3,
      r12_3
    })
  end
  local r15_3 = r10_0
  local r16_3 = r10_0[r12_3]
  if not r16_3 then
    r16_3 = {}
  end
  r15_3[r12_3] = r16_3
  r15_3 = r10_0[r12_3]
  r16_3 = r10_0[r12_3][r8_3]
  if not r16_3 then
    r16_3 = {}
  end
  r15_3[r8_3] = r16_3
  r10_0[r12_3][r8_3][r9_3] = 0
  return {
    revealed = true,
    safe = r14_3,
  }
end

r14_3 is the result of cell.isSafe() for that (x=r8_3, y=r9_3, z=_G.CURRENT_DEPTH). If true, it marks the cell “revealed” and appends (x,y,z) to _G.CLICKED. This is the exact dataset that becomes the decryption key after sorting and hashing.

function r0_0.isSafe(r0_1)
  -- line: [19, 43] id: 1
  local r1_1 = r0_1.x
  local r2_1 = r0_1.y
  local r3_1 = r0_1.z
  local r4_1 = {
    nil,
    "8b086383a7198331",
    "a9b692550cc0f7f5",
    "b0b909d976004ec4",
    "f41ffbeee187e196",
    "0003ecb317464021",
    "da1c8435445c1911",
    "e3f3a11350ab2f1b",
    "f487cb0cb274985a",
    "7d0794365098fe9b",
    "21d0154651618672",
    "7bed6f85c47b5716",
    "e77eaab06692db91",
    "0b825cdf48054cc5",
    "cac6139603012b76",
    "b36d4292e3836717",
    "58dca52604a10cc9",
    "7e68cf5b3cdcc63f",
    "7c3d54174a37a7c8",
    "11ff4ee926bb37a4",
    "63f3884422021122",
    "bdcf12b90b7d0585",
    "c07e91b14b246089",
    "6676cd16954a5945",
    "f8fed551bbdbdae2",
    "2071ad22dc0ef1aa",
    "6e0558ff006e6378",
    "be9db55232fcf23e",
    "512b7a400687951f",
    "511287b0b00bd48e",
    "c502948028e6736b",
    "95aa3a491a7a1a9e",
    "80cbba6d0a78c66b",
    "1c71982e6b2a839a",
    "211ae8862a8ec6bb",
    "441db02d818902f6",
    "7ff6c3cb41cafcc5",
    "c7622c661fc9f404",
    "6e70a7a6bf24a3b5",
    "bce1853e7a22bd06",
    "ede08eada8b70a05",
    "7d67b0f64122229a",
    "559a4dbaadc63863",
    "73246b69b6e93b94",
    "e3c6b96aeaaba63c",
    "2e090c2bb8d03f37",
    "d5352762560eaa93",
    "6b9976ead6f538e2",
    "800bc774ee4c9abf",
    "a70a4385c5a9c1e3",
    "504890a525a269d9",
    "d97b0912efea7883",
    "5c8d659c018ce8d3",
    "cb0c44182288783e",
    "c3586bf717ed2fe4",
    "6e7ab1cfe90c21ab",
    "d340351393467df9",
    "1e98b7a1afebf662",
    "412d5cb3888d2082",
    "092e05e1153b6850",
    "5cac7c8162641e79",
    "125c9d51ff1e830a",
    "ae4248b0f8139d85",
    "c66101259d277b28",
    "3fe648d2182bca2d",
    "533b82521038b593",
    "1433ddbbc56ad287",
    "5a5ba449571cdcc8",
    "43eb35843b3c1f91",
    "551c08983a6facb5",
    "374b1d850b95f31d",
    "41f5c23b59068096",
    "61cfbfc9b58de6dd",
    "cc48256872e3c462",
    "01af79cdf3e0d079",
    "0f3c45b943c479d3",
    "b50d3448ae08d415",
    "2eefc0af8c255fe3",
    "9154f851ccf3dc64",
    "d4ca9764e3ca8f1a",
    "5531acbbf4339359",
    "e01b954446baaf66",
    "0d7326003ea4b196",
    "437c0d433253a063",
    "3172b1f74b323b0a",
    "a35afd3b4fc07d56",
    "f7f744485cc22c6e",
    "66aec8cec26ce8a4",
    "2e3e99781985eea6",
    "de67c8f76a2a0318",
    "5669dd69ca6d8ac9",
    "8c3e75d93a1c5884",
    "88ecddfbd7e7b2f6",
    "6fa3b5d67933e963",
    "bdd59cb997bd2da8",
    "31b67c90de20a328",
    "07852c77314259eb",
    "3c45f78069d7f536",
    "d5478ae4df8cbdcf",
    "b0559e1df23ae9af",
    "75dcb521bba96a54",
    "ff051eca1645f00b",
    "6742cc171d27d5fa",
    "1cc3e0d97f701923",
    "2a36abb111f62781",
    "f1161e776d9988b6",
    "9b1b15b23e58a3ff",
    "6bd1d309ca116058",
    "16ce4a9cd249d2c9",
    "1e4302b4498aef99",
    "f072705954d2fab9",
    "888312c0427de158",
    "f0e36f0bbc4e92fc",
    "8c657b5ee3dd162e",
    "e8d8eaa4d6f4e693",
    "3dbd89832e6c1a68",
    "6b31d305732b6c0d",
    "3df99d491ac9e013",
    "7a58cd27b6fe12c3",
    "813a39881a8f5cf9",
    "c711884fdfc0ede7",
    "6095360d1f44d2c4",
    "8718a37070c0baca",
    "66f2570458f3ef43",
    "99ba3187b785db16",
    "e095980f403ca13c",
    "c242139c514f9b9a",
    "1880851fe45d5bf7",
    "17d0c7136fd2e728",
    "2aa5208b81ccf27e",
    "349f858b24297ae0",
    "86e24a7be8e05f2b",
    "ffb8b26d9426f0fe",
    "385e5d6c3b995ec8",
    "881696da95d4eefe",
    "924eeb095f2cab5d",
    "2ba083ad0f2af719",
    "9998b1b1bef2e036",
    "4c38f5a9f57e2ea1",
    "f19bda0031e06dc5",
    "28e9887b63b92e14",
    "e40c916464337574",
    "2aff0927afe95b33",
    "00af48823c64845b",
    "1a3d8728c51d1a0c",
    "bf5fcb864a4d0643",
    "1f549d7951b5c58f",
    "2eb8cf5e874cd786",
    "785a05518ec31a52",
    "d9e11221916934a3",
    "717d9447e7251e05",
    "52cab44ace44c736",
    "b2d028beff9dc6d4",
    "f5de72c6cbe25978",
    "1a85efdad71213eb",
    "ecf8aa3e3410e20f",
    "f1f86b2a07070247",
    "f1ad94f99e45d605",
    "9f6c57bd9ad8e1a0",
    "b83f8bf56143da9f",
    "48fe5b4b6f1ee78a",
    "676120c8a2f7a3cc",
    "684be2678743b5d4",
    "34c62f3506412681",
    "8b85a19d3f39c038",
    "95c925666ee3ef58",
    "da9aca4fb9388a24",
    "7f651fea83e8f7dc",
    "4b3faf0765ada606",
    "6a5ba72e6ae23d5f",
    "185297c1a1390dbd"
  }
  local r5_1 = {
    nil,
    "3919ea621056d864",
    "02c681d7cc3e4a4b",
    "f4cbc21d523a7a8e",
    "71fdbf511fc9416f",
    "f4d00c9cf6d72b27",
    "bf8b94160c0f912f",
    "e5030755ec81cbe0",
    "0325d6c1080c79e1",
    "e4f2c3ab5b54ae53",
    "393a1a94b0e3a733",
    "5a0b8382a457705f",
    "9e3b6232cb7bd60e",
    "7382c3c1ae4d06c6",
    "a710bf2254470971",
    "bc326c0db05535f6",
    "36a516d225315abf",
    "28aa7ac9f621f25a",
    "ac3ee0977802ad9e",
    "1b5dae259b45744c",
    "027cbcf7bc30db15",
    "7e02bbb5a0080e68",
    "5ce5695fc14e6302",
    "0503393543d166cb",
    "767b5a3e8de74030",
    "bb0346db30223523",
    "9511fd971a097d21",
    "c4eceac7365bd580",
    "7d96506f20ae2206",
    "7e94da5740443ec8",
    "33c995ef4bb3f05a",
    "3764691a1b638fd5",
    "17d18472fc4d59e9",
    "2fe269ee87e93bf6",
    "949c716196f7d1ee",
    "1663c1c95236db16",
    "b0c9e7a9e1f907bf",
    "cc15ae341213c374",
    "eaefda8f2aedd6d0",
    "5260cea8cceb03fd",
    "14bf92e800e28664",
    "77b95f280695a686",
    "03b1101c22e41e08",
    "0fa56d7c020cc7b7",
    "75c8c98216e17608",
    "10227fa31647ccfd",
    "84ef557b626c0d70",
    "884d34eece35617d",
    "815106adc7256d3f",
    "5ca16e365a26913e",
    "3e470efba934845a",
    "1e7fdd3affa21e01",
    "c36562c53838cb8e",
    "10aab89f099100ba",
    "050221c4bce41e51",
    "a49f835079f0d470",
    "a24cc8ec4a0372f4",
    "1219bf7ef233f045",
    "89999daa9d362b62",
    "f183f7424acde76b",
    "864a936a35324151",
    "95a383a442c051ab",
    "9458350d6e174b2c",
    "fb8f7c51fd0144b9",
    "85eeadccc1794b55",
    "09ca6900764c6f43",
    "58c73a965e924d59",
    "744fb3f7a4e56015",
    "fd71d6c2cea354a7",
    "98c1d47c393b8a87",
    "a532a7380c18ccfb",
    "defea5cebe1a8054",
    "bbe814c133ff5912",
    "c55d1110f4ca2099",
    "572e10fe14a83e36",
    "c9b1cb30ca668f20",
    "3cf5c245480fd471",
    "e43f460454555b2a",
    "4a46e7abb931e762",
    "96eee7fdfe9d5362",
    "d37fbb06388ef92a",
    "519278624a8832d5",
    "d6c2fba0fe4dc21d",
    "8359d08d9b60ccfd",
    "10788a26641c4187",
    "1cb16d7ccd265877",
    "16adc2f18817fbf8",
    "7af7aa4e9120a33b",
    "157ab10e223cfa86",
    "014e9fb03ec3e152",
    "3e03c0cd7f382bfa",
    "9a0251ab1bca1c47",
    "3773b01776ce0156",
    "93661967c5350c19",
    "ffca1716a06b8c84",
    "7195242ffc970357",
    "54469967e163370b",
    "9c8902aec0f62d83",
    "60e7548f2980518b",
    "06cddd50035d89b1",
    "7cf6977351f5e913",
    "7fdc10869c66195e",
    "44d39c6e5e7b45bf",
    "56ae331cef94dc85",
    "ebcbd43c67c580c8",
    "2cfa73d1bf1c3028",
    "4c30fcc85a514069",
    "72586738b687dd11",
    "558b0b585c427f28",
    "9d3013df6b413a07",
    "7d28809654c99976",
    "3a50377f8f5efd15",
    "8950101d9f3e8417",
    "3c328a440b398326",
    "3703843e80f39188",
    "aa615f5000881af1",
    "b23d7cbfdc71ee1b",
    "0f5135115926fb85",
    "f9a43657b0c3abe9",
    "e162b61d3d7146e5",
    "323775c4f9b6ce6a",
    "00092cab56c063b7",
    "cd6f3117349be031",
    "7c367013d0f47641",
    "fc595889b32c31df",
    "40c4fad484744b31",
    "ac699b3c4bd5d6e2",
    "5620abf0ed6570b5",
    "1a4de96cd3a2fa4d",
    "f302016db2fbc8db",
    "a1b22f60cfdd66cb",
    "5083b6c278d4d12e",
    "5119b118f91db186",
    "3456d1f927098019",
    "27991ee8d8a3187e",
    "b37415448f52de64",
    "0b42d71285c2346b",
    "d66d3f2c187ac599",
    "b117636b9bae2bce",
    "dde0438d507326ad",
    "ed6eaaf2becfb33f",
    "aa6e3c31416abdb1",
    "1368807b39cf381a",
    "545aaf0a3bc6b7c9",
    "949192369aff2a2a",
    "133806ca086fa756",
    "cb06ae8f4f7338b3",
    "f4e3e60f85b2e5ac",
    "4eea0d0ff3fdf721",
    "a88d93eb9353450a",
    "19d853112b38ca27",
    "7f8d950933e78ca1",
    "e6ed7f393091d090",
    "d1e1c441b1bb21a0",
    "bf3b2d402ccd6fbc",
    "aa2170e35b0fef42",
    "d0dda5e6a709b521",
    "4940f484332ce1ec",
    "ca902d4a8acbdea1",
    "ddb8d361ee700085",
    "a72ee2ce95a69a57",
    "e4a64360f61e588c",
    "34fa9bb3c6be0fdf",
    "600cb180b5f3ecfc",
    "89de0fd153857c6f",
    "b45dcf719696d9f7",
    "73cd9f27540deebf",
    "8cc98cec8aab5c68",
    "891b18b759447efa",
    "0e1d52a5c3f576d6",
    "4e3f79891e92947d"
  }
  local r6_1 = {
    nil,
    "72dbc1d0c9905717",
    "52bb7cc738dbf5e5",
    "7f80e6caa06901e1",
    "2c903ae837b047fd",
    "3b7dc65fd47fd991",
    "48b361d46638bfa4",
    "a7bb4472588958f3",
    "5c3d91e81ae54157",
    "0252b081bda70b47",
    "481d60bc802f5158",
    "53e38ea20dcd0179",
    "e0c7bfa5b8e4ae0c",
    "2cde073b39dd6bb1",
    "6ad4a6b1e5ea5569",
    "585579aed1c5241b",
    "3d734d729009b74c",
    "a829c72c42755e38",
    "e66f404f78b6875b",
    "59933d776452c8a5",
    "a5a2b61e6d380d20",
    "6a175db84aeefddb",
    "62f73707683b924b",
    "f2adeac9190ca809",
    "0927a0c81213ef0e",
    "28fdc24c9abb066e",
    "a2de21b4327dde0e",
    "c5207b559b018772",
    "87557ad1d2f9c362",
    "ae6ce4a7288056e4",
    "c403741c4121989a",
    "262b06d105e1c865",
    "b22eb34537f6f675",
    "2f5b70c621fdcb0d",
    "8c9a013ab70c0434",
    "0aab5e232c5075e4",
    "f6c9da6121853fcc",
    "27bb55ca7d1e8404",
    "26773930fcd8dfa9",
    "ad8fa913d25b3970",
    "9d551151d7152670",
    "332d88d62030ed15",
    "f87f6a02d81b2a46",
    "1090b9e9eba719a3",
    "52a6932d5af5316a",
    "770c3cbf77615a1d",
    "d15eff82084cddbc",
    "cdad86ca9450d1c1",
    "61f1658abb279309",
    "c13ed90781221133",
    "6686fc4c74906865",
    "35ea9e03d5f2f465",
    "18bed1232c7d6375",
    "0baee19b37f19906",
    "2021dc8bd93e4492",
    "f37f3f2b0dc57a86",
    "ce8457d59078a699",
    "9ecd60ff3bca4fec",
    "162fda1c3929b763",
    "6a6408e6702b2586",
    "ffab53082b58bed6",
    "1c63ed9164d61acf",
    "120e52d7b556d767",
    "bba1dc9846ddd9a4",
    "ed053874ca199cc5",
    "2c3f699f4b5f7734",
    "46957db596ec41cc",
    "17402467b764a015",
    "078468f27b81b84b",
    "1b365a4dfc8a9d9d",
    "d58144b2c72e6dbb",
    "a77b6cbdf6fae167",
    "09a1b036b82baba3",
    "5904c93073387f89",
    "01ce4b291ad3ecd2",
    "0ebe0fb634f8e4ac",
    "3bbcf69de876e98a",
    "34847964b077f2b9",
    "4fdc8d7d404bc073",
    "a025f0314b164d72",
    "aaf5060b9517ba4f",
    "236b565af6b51282",
    "8b49203c3d36d3f6",
    "46d4c7c3285e2d04",
    "6557739a67283a8d",
    "c1fcf0cd023db10f",
    "1ad269a743bd01b5",
    "eedaf2856c6f433b",
    "46c1776477b5d009",
    "165940940a02a187",
    "03b0bd366e8184f8",
    "fa3cfb3f1bb823aa",
    "18cb37e2865113e6",
    "58eb0dd988df36c5",
    "f2a0f718b02f355a",
    "92c5fd0421c1d619",
    "86cb35a822329fe1",
    "2f1d593cd98cb5bf",
    "85a915d17097bdeb",
    "bb4d3bd125603e48",
    "072ba5cc0e81ff74",
    "fb8a0d2da8683cec",
    "e7d5f7be5195d606",
    "a0d9819c45694767",
    "2e0b3dc70916553a",
    "ee14860f6bd0506d",
    "3837e1aa083f578c",
    "b906e4061c4a678d",
    "f5334f59cc820a5c",
    "35edaef5199e008d",
    "5c2e13bb6c475cb7",
    "580ade0f132b4228",
    "a0d177b4967a6d99",
    "f7961248034a58c4",
    "8352dd9eb8b64669",
    "a1271642c26ded1a",
    "b0f40e2bace115cb",
    "3fd388b5f0aea188",
    "7a64ce427ce0ca96",
    "b96cb18015f6896c",
    "19b8db7132366437",
    "40dd2b010d461c24",
    "51e8ea280b44e169",
    "caa1aedb2a6ce96b",
    "5cd53812071ab9bb",
    "9532f197bbc85d99",
    "b366c0efba99d592",
    "434dbd07bc54f593",
    "cb68dbec7d3df253",
    "0f9c6877b9e900ca",
    "da4d43f295ce9263",
    "2b1545d9e4c56859",
    "9cfd3c755be26b4e",
    "14a79e51478113c6",
    "369b906a75d37219",
    "70260742c2952154",
    "de2d0a787b335176",
    "ccbcd0d62f439eac",
    "8ba5ef4e282bf7bc",
    "673a620c399f2825",
    "228971770cc3111e",
    "d40fbd13d527595c",
    "2782526eaa0c5c25",
    "858a794b9a1df6e2",
    "15811bd57b46d002",
    "43e8852bef636588",
    "3ef4ba73834a4409",
    "68bf6c87ebcd6379",
    "314e9ad1bb068ed1",
    "2f1987bf98c09d2f",
    "9f484139a27415ae",
    "d4b9aead1dd10a59",
    "4be84111a613654b",
    "f72b71f2cf7221d1",
    "283f3aceea5cb2cb",
    "d8f548dedc438e25",
    "f8b7291025863577",
    "93a2b2c622983580",
    "2aec3694418f35d8",
    "74e9f3d8efbda803",
    "a080bd4f0f513eec",
    "c24703aeed68217a",
    "bb34d581b8484ccf",
    "e64474fd91f16a08",
    "9ec5adcb162fea7b",
    "e4890f15c8a2d18e",
    "23c657f2efda7731",
    "9e6296be2bb963df",
    "a93706e865c271f4",
    "337b02741a9561b6",
    "770e6f5e2f55c90a"
  }
  local function r7_1(r0_2)
    -- line: [28, 30] id: 2
    return string.sub(love.data.encode("string", "hex", love.data.hash("sha256", tostring(r0_2 % 4294967296))), 1, 16)
  end
  local r8_1 = r7_1(r1_0.bxor(r1_1 * 73856093, r1_0.bxor(r2_1 * 19349663, r3_1 * 83492791)))
  local r9_1 = r7_1(r1_0.bxor(r1_0.bor(r1_0.lshift(r1_1, 11), r1_0.bor(r1_0.lshift(r2_1, 5), r1_0.lshift(r3_1, 3))), r1_1 * r2_1 * r3_1))
  local r10_1 = r7_1((r1_0.bxor(r1_1, r1_0.lshift(r3_1, 7)) + r1_0.bxor(r2_1, r1_0.lshift(r1_1, 3)) - r1_0.bxor(r3_1, r1_0.lshift(r2_1, 1))) % 4294967296)
  local r11_1 = false
  local r12_1 = false
  local r13_1 = false
  for r17_1, r18_1 in ipairs(r4_1) do
    if r18_1 == r8_1 then
      r11_1 = true
      break
    end
  end
  for r17_1, r18_1 in ipairs(r5_1) do
    if r18_1 == r9_1 then
      r12_1 = true
      break
    end
  end
  for r17_1, r18_1 in ipairs(r6_1) do
    if r18_1 == r10_1 then
      r13_1 = true
      break
    end
  end
  local r14_1 = r11_1
  if r14_1 then
    r14_1 = r12_1
    if r14_1 then
      r14_1 = r13_1
    end
  end
  return r14_1
end

Safety is purely deterministic based on (x,y,z) via three 32-bit–reduced integers run through SHA-256 (hex), truncated to 16 hex chars. If all three truncations appear in TABLE1, TABLE2, and TABLE3 respectively, the cell is safe. There’s no randomness: the safe set is fixed for the whole 3D grid.

import hashlib
import base64

TABLE1 = {
    '8b086383a7198331',
    'a9b692550cc0f7f5',
    'b0b909d976004ec4',
    'f41ffbeee187e196',
    '0003ecb317464021',
    'da1c8435445c1911',
    'e3f3a11350ab2f1b',
    'f487cb0cb274985a',
    '7d0794365098fe9b',
    '21d0154651618672',
    '7bed6f85c47b5716',
    'e77eaab06692db91',
    '0b825cdf48054cc5',
    'cac6139603012b76',
    'b36d4292e3836717',
    '58dca52604a10cc9',
    '7e68cf5b3cdcc63f',
    '7c3d54174a37a7c8',
    '11ff4ee926bb37a4',
    '63f3884422021122',
    'bdcf12b90b7d0585',
    'c07e91b14b246089',
    '6676cd16954a5945',
    'f8fed551bbdbdae2',
    '2071ad22dc0ef1aa',
    '6e0558ff006e6378',
    'be9db55232fcf23e',
    '512b7a400687951f',
    '511287b0b00bd48e',
    'c502948028e6736b',
    '95aa3a491a7a1a9e',
    '80cbba6d0a78c66b',
    '1c71982e6b2a839a',
    '211ae8862a8ec6bb',
    '441db02d818902f6',
    '7ff6c3cb41cafcc5',
    'c7622c661fc9f404',
    '6e70a7a6bf24a3b5',
    'bce1853e7a22bd06',
    'ede08eada8b70a05',
    '7d67b0f64122229a',
    '559a4dbaadc63863',
    '73246b69b6e93b94',
    'e3c6b96aeaaba63c',
    '2e090c2bb8d03f37',
    'd5352762560eaa93',
    '6b9976ead6f538e2',
    '800bc774ee4c9abf',
    'a70a4385c5a9c1e3',
    '504890a525a269d9',
    'd97b0912efea7883',
    '5c8d659c018ce8d3',
    'cb0c44182288783e',
    'c3586bf717ed2fe4',
    '6e7ab1cfe90c21ab',
    'd340351393467df9',
    '1e98b7a1afebf662',
    '412d5cb3888d2082',
    '092e05e1153b6850',
    '5cac7c8162641e79',
    '125c9d51ff1e830a',
    'ae4248b0f8139d85',
    'c66101259d277b28',
    '3fe648d2182bca2d',
    '533b82521038b593',
    '1433ddbbc56ad287',
    '5a5ba449571cdcc8',
    '43eb35843b3c1f91',
    '551c08983a6facb5',
    '374b1d850b95f31d',
    '41f5c23b59068096',
    '61cfbfc9b58de6dd',
    'cc48256872e3c462',
    '01af79cdf3e0d079',
    '0f3c45b943c479d3',
    'b50d3448ae08d415',
    '2eefc0af8c255fe3',
    '9154f851ccf3dc64',
    'd4ca9764e3ca8f1a',
    '5531acbbf4339359',
    'e01b954446baaf66',
    '0d7326003ea4b196',
    '437c0d433253a063',
    '3172b1f74b323b0a',
    'a35afd3b4fc07d56',
    'f7f744485cc22c6e',
    '66aec8cec26ce8a4',
    '2e3e99781985eea6',
    'de67c8f76a2a0318',
    '5669dd69ca6d8ac9',
    '8c3e75d93a1c5884',
    '88ecddfbd7e7b2f6',
    '6fa3b5d67933e963',
    'bdd59cb997bd2da8',
    '31b67c90de20a328',
    '07852c77314259eb',
    '3c45f78069d7f536',
    'd5478ae4df8cbdcf',
    'b0559e1df23ae9af',
    '75dcb521bba96a54',
    'ff051eca1645f00b',
    '6742cc171d27d5fa',
    '1cc3e0d97f701923',
    '2a36abb111f62781',
    'f1161e776d9988b6',
    '9b1b15b23e58a3ff',
    '6bd1d309ca116058',
    '16ce4a9cd249d2c9',
    '1e4302b4498aef99',
    'f072705954d2fab9',
    '888312c0427de158',
    'f0e36f0bbc4e92fc',
    '8c657b5ee3dd162e',
    'e8d8eaa4d6f4e693',
    '3dbd89832e6c1a68',
    '6b31d305732b6c0d',
    '3df99d491ac9e013',
    '7a58cd27b6fe12c3',
    '813a39881a8f5cf9',
    'c711884fdfc0ede7',
    '6095360d1f44d2c4',
    '8718a37070c0baca',
    '66f2570458f3ef43',
    '99ba3187b785db16',
    'e095980f403ca13c',
    'c242139c514f9b9a',
    '1880851fe45d5bf7',
    '17d0c7136fd2e728',
    '2aa5208b81ccf27e',
    '349f858b24297ae0',
    '86e24a7be8e05f2b',
    'ffb8b26d9426f0fe',
    '385e5d6c3b995ec8',
    '881696da95d4eefe',
    '924eeb095f2cab5d',
    '2ba083ad0f2af719',
    '9998b1b1bef2e036',
    '4c38f5a9f57e2ea1',
    'f19bda0031e06dc5',
    '28e9887b63b92e14',
    'e40c916464337574',
    '2aff0927afe95b33',
    '00af48823c64845b',
    '1a3d8728c51d1a0c',
    'bf5fcb864a4d0643',
    '1f549d7951b5c58f',
    '2eb8cf5e874cd786',
    '785a05518ec31a52',
    'd9e11221916934a3',
    '717d9447e7251e05',
    '52cab44ace44c736',
    'b2d028beff9dc6d4',
    'f5de72c6cbe25978',
    '1a85efdad71213eb',
    'ecf8aa3e3410e20f',
    'f1f86b2a07070247',
    'f1ad94f99e45d605',
    '9f6c57bd9ad8e1a0',
    'b83f8bf56143da9f',
    '48fe5b4b6f1ee78a',
    '676120c8a2f7a3cc',
    '684be2678743b5d4',
    '34c62f3506412681',
    '8b85a19d3f39c038',
    '95c925666ee3ef58',
    'da9aca4fb9388a24',
    '7f651fea83e8f7dc',
    '4b3faf0765ada606',
    '6a5ba72e6ae23d5f',
    '185297c1a1390dbd',
}

TABLE2 = {
    '3919ea621056d864',
    '02c681d7cc3e4a4b',
    'f4cbc21d523a7a8e',
    '71fdbf511fc9416f',
    'f4d00c9cf6d72b27',
    'bf8b94160c0f912f',
    'e5030755ec81cbe0',
    '0325d6c1080c79e1',
    'e4f2c3ab5b54ae53',
    '393a1a94b0e3a733',
    '5a0b8382a457705f',
    '9e3b6232cb7bd60e',
    '7382c3c1ae4d06c6',
    'a710bf2254470971',
    'bc326c0db05535f6',
    '36a516d225315abf',
    '28aa7ac9f621f25a',
    'ac3ee0977802ad9e',
    '1b5dae259b45744c',
    '027cbcf7bc30db15',
    '7e02bbb5a0080e68',
    '5ce5695fc14e6302',
    '0503393543d166cb',
    '767b5a3e8de74030',
    'bb0346db30223523',
    '9511fd971a097d21',
    'c4eceac7365bd580',
    '7d96506f20ae2206',
    '7e94da5740443ec8',
    '33c995ef4bb3f05a',
    '3764691a1b638fd5',
    '17d18472fc4d59e9',
    '2fe269ee87e93bf6',
    '949c716196f7d1ee',
    '1663c1c95236db16',
    'b0c9e7a9e1f907bf',
    'cc15ae341213c374',
    'eaefda8f2aedd6d0',
    '5260cea8cceb03fd',
    '14bf92e800e28664',
    '77b95f280695a686',
    '03b1101c22e41e08',
    '0fa56d7c020cc7b7',
    '75c8c98216e17608',
    '10227fa31647ccfd',
    '84ef557b626c0d70',
    '884d34eece35617d',
    '815106adc7256d3f',
    '5ca16e365a26913e',
    '3e470efba934845a',
    '1e7fdd3affa21e01',
    'c36562c53838cb8e',
    '10aab89f099100ba',
    '050221c4bce41e51',
    'a49f835079f0d470',
    'a24cc8ec4a0372f4',
    '1219bf7ef233f045',
    '89999daa9d362b62',
    'f183f7424acde76b',
    '864a936a35324151',
    '95a383a442c051ab',
    '9458350d6e174b2c',
    'fb8f7c51fd0144b9',
    '85eeadccc1794b55',
    '09ca6900764c6f43',
    '58c73a965e924d59',
    '744fb3f7a4e56015',
    'fd71d6c2cea354a7',
    '98c1d47c393b8a87',
    'a532a7380c18ccfb',
    'defea5cebe1a8054',
    'bbe814c133ff5912',
    'c55d1110f4ca2099',
    '572e10fe14a83e36',
    'c9b1cb30ca668f20',
    '3cf5c245480fd471',
    'e43f460454555b2a',
    '4a46e7abb931e762',
    '96eee7fdfe9d5362',
    'd37fbb06388ef92a',
    '519278624a8832d5',
    'd6c2fba0fe4dc21d',
    '8359d08d9b60ccfd',
    '10788a26641c4187',
    '1cb16d7ccd265877',
    '16adc2f18817fbf8',
    '7af7aa4e9120a33b',
    '157ab10e223cfa86',
    '014e9fb03ec3e152',
    '3e03c0cd7f382bfa',
    '9a0251ab1bca1c47',
    '3773b01776ce0156',
    '93661967c5350c19',
    'ffca1716a06b8c84',
    '7195242ffc970357',
    '54469967e163370b',
    '9c8902aec0f62d83',
    '60e7548f2980518b',
    '06cddd50035d89b1',
    '7cf6977351f5e913',
    '7fdc10869c66195e',
    '44d39c6e5e7b45bf',
    '56ae331cef94dc85',
    'ebcbd43c67c580c8',
    '2cfa73d1bf1c3028',
    '4c30fcc85a514069',
    '72586738b687dd11',
    '558b0b585c427f28',
    '9d3013df6b413a07',
    '7d28809654c99976',
    '3a50377f8f5efd15',
    '8950101d9f3e8417',
    '3c328a440b398326',
    '3703843e80f39188',
    'aa615f5000881af1',
    'b23d7cbfdc71ee1b',
    '0f5135115926fb85',
    'f9a43657b0c3abe9',
    'e162b61d3d7146e5',
    '323775c4f9b6ce6a',
    '00092cab56c063b7',
    'cd6f3117349be031',
    '7c367013d0f47641',
    'fc595889b32c31df',
    '40c4fad484744b31',
    'ac699b3c4bd5d6e2',
    '5620abf0ed6570b5',
    '1a4de96cd3a2fa4d',
    'f302016db2fbc8db',
    'a1b22f60cfdd66cb',
    '5083b6c278d4d12e',
    '5119b118f91db186',
    '3456d1f927098019',
    '27991ee8d8a3187e',
    'b37415448f52de64',
    '0b42d71285c2346b',
    'd66d3f2c187ac599',
    'b117636b9bae2bce',
    'dde0438d507326ad',
    'ed6eaaf2becfb33f',
    'aa6e3c31416abdb1',
    '1368807b39cf381a',
    '545aaf0a3bc6b7c9',
    '949192369aff2a2a',
    '133806ca086fa756',
    'cb06ae8f4f7338b3',
    'f4e3e60f85b2e5ac',
    '4eea0d0ff3fdf721',
    'a88d93eb9353450a',
    '19d853112b38ca27',
    '7f8d950933e78ca1',
    'e6ed7f393091d090',
    'd1e1c441b1bb21a0',
    'bf3b2d402ccd6fbc',
    'aa2170e35b0fef42',
    'd0dda5e6a709b521',
    '4940f484332ce1ec',
    'ca902d4a8acbdea1',
    'ddb8d361ee700085',
    'a72ee2ce95a69a57',
    'e4a64360f61e588c',
    '34fa9bb3c6be0fdf',
    '600cb180b5f3ecfc',
    '89de0fd153857c6f',
    'b45dcf719696d9f7',
    '73cd9f27540deebf',
    '8cc98cec8aab5c68',
    '891b18b759447efa',
    '0e1d52a5c3f576d6',
    '4e3f79891e92947d',
}

TABLE3 = {
    '72dbc1d0c9905717',
    '52bb7cc738dbf5e5',
    '7f80e6caa06901e1',
    '2c903ae837b047fd',
    '3b7dc65fd47fd991',
    '48b361d46638bfa4',
    'a7bb4472588958f3',
    '5c3d91e81ae54157',
    '0252b081bda70b47',
    '481d60bc802f5158',
    '53e38ea20dcd0179',
    'e0c7bfa5b8e4ae0c',
    '2cde073b39dd6bb1',
    '6ad4a6b1e5ea5569',
    '585579aed1c5241b',
    '3d734d729009b74c',
    'a829c72c42755e38',
    'e66f404f78b6875b',
    '59933d776452c8a5',
    'a5a2b61e6d380d20',
    '6a175db84aeefddb',
    '62f73707683b924b',
    'f2adeac9190ca809',
    '0927a0c81213ef0e',
    '28fdc24c9abb066e',
    'a2de21b4327dde0e',
    'c5207b559b018772',
    '87557ad1d2f9c362',
    'ae6ce4a7288056e4',
    'c403741c4121989a',
    '262b06d105e1c865',
    'b22eb34537f6f675',
    '2f5b70c621fdcb0d',
    '8c9a013ab70c0434',
    '0aab5e232c5075e4',
    'f6c9da6121853fcc',
    '27bb55ca7d1e8404',
    '26773930fcd8dfa9',
    'ad8fa913d25b3970',
    '9d551151d7152670',
    '332d88d62030ed15',
    'f87f6a02d81b2a46',
    '1090b9e9eba719a3',
    '52a6932d5af5316a',
    '770c3cbf77615a1d',
    'd15eff82084cddbc',
    'cdad86ca9450d1c1',
    '61f1658abb279309',
    'c13ed90781221133',
    '6686fc4c74906865',
    '35ea9e03d5f2f465',
    '18bed1232c7d6375',
    '0baee19b37f19906',
    '2021dc8bd93e4492',
    'f37f3f2b0dc57a86',
    'ce8457d59078a699',
    '9ecd60ff3bca4fec',
    '162fda1c3929b763',
    '6a6408e6702b2586',
    'ffab53082b58bed6',
    '1c63ed9164d61acf',
    '120e52d7b556d767',
    'bba1dc9846ddd9a4',
    'ed053874ca199cc5',
    '2c3f699f4b5f7734',
    '46957db596ec41cc',
    '17402467b764a015',
    '078468f27b81b84b',
    '1b365a4dfc8a9d9d',
    'd58144b2c72e6dbb',
    'a77b6cbdf6fae167',
    '09a1b036b82baba3',
    '5904c93073387f89',
    '01ce4b291ad3ecd2',
    '0ebe0fb634f8e4ac',
    '3bbcf69de876e98a',
    '34847964b077f2b9',
    '4fdc8d7d404bc073',
    'a025f0314b164d72',
    'aaf5060b9517ba4f',
    '236b565af6b51282',
    '8b49203c3d36d3f6',
    '46d4c7c3285e2d04',
    '6557739a67283a8d',
    'c1fcf0cd023db10f',
    '1ad269a743bd01b5',
    'eedaf2856c6f433b',
    '46c1776477b5d009',
    '165940940a02a187',
    '03b0bd366e8184f8',
    'fa3cfb3f1bb823aa',
    '18cb37e2865113e6',
    '58eb0dd988df36c5',
    'f2a0f718b02f355a',
    '92c5fd0421c1d619',
    '86cb35a822329fe1',
    '2f1d593cd98cb5bf',
    '85a915d17097bdeb',
    'bb4d3bd125603e48',
    '072ba5cc0e81ff74',
    'fb8a0d2da8683cec',
    'e7d5f7be5195d606',
    'a0d9819c45694767',
    '2e0b3dc70916553a',
    'ee14860f6bd0506d',
    '3837e1aa083f578c',
    'b906e4061c4a678d',
    'f5334f59cc820a5c',
    '35edaef5199e008d',
    '5c2e13bb6c475cb7',
    '580ade0f132b4228',
    'a0d177b4967a6d99',
    'f7961248034a58c4',
    '8352dd9eb8b64669',
    'a1271642c26ded1a',
    'b0f40e2bace115cb',
    '3fd388b5f0aea188',
    '7a64ce427ce0ca96',
    'b96cb18015f6896c',
    '19b8db7132366437',
    '40dd2b010d461c24',
    '51e8ea280b44e169',
    'caa1aedb2a6ce96b',
    '5cd53812071ab9bb',
    '9532f197bbc85d99',
    'b366c0efba99d592',
    '434dbd07bc54f593',
    'cb68dbec7d3df253',
    '0f9c6877b9e900ca',
    'da4d43f295ce9263',
    '2b1545d9e4c56859',
    '9cfd3c755be26b4e',
    '14a79e51478113c6',
    '369b906a75d37219',
    '70260742c2952154',
    'de2d0a787b335176',
    'ccbcd0d62f439eac',
    '8ba5ef4e282bf7bc',
    '673a620c399f2825',
    '228971770cc3111e',
    'd40fbd13d527595c',
    '2782526eaa0c5c25',
    '858a794b9a1df6e2',
    '15811bd57b46d002',
    '43e8852bef636588',
    '3ef4ba73834a4409',
    '68bf6c87ebcd6379',
    '314e9ad1bb068ed1',
    '2f1987bf98c09d2f',
    '9f484139a27415ae',
    'd4b9aead1dd10a59',
    '4be84111a613654b',
    'f72b71f2cf7221d1',
    '283f3aceea5cb2cb',
    'd8f548dedc438e25',
    'f8b7291025863577',
    '93a2b2c622983580',
    '2aec3694418f35d8',
    '74e9f3d8efbda803',
    'a080bd4f0f513eec',
    'c24703aeed68217a',
    'bb34d581b8484ccf',
    'e64474fd91f16a08',
    '9ec5adcb162fea7b',
    'e4890f15c8a2d18e',
    '23c657f2efda7731',
    '9e6296be2bb963df',
    'a93706e865c271f4',
    '337b02741a9561b6',
    '770e6f5e2f55c90a',
}

def sha256_hex32(val: int) -> str:
    s = str(val % (2**32)).encode()
    h = hashlib.sha256(s).hexdigest()
    return h[:16]

def is_safe(x, y, z):
    h1 = sha256_hex32((x * 73856093) ^ (y * 19349663 ^ z * 83492791))
    h2 = sha256_hex32(((x << 11) | (y << 5) | (z << 3)) ^ (x * y * z))
    h3 = sha256_hex32(((x ^ (z << 7)) + (y ^ (x << 3)) - (z ^ (y << 1))) % (2**32))
    return h1 in TABLE1 and h2 in TABLE2 and h3 in TABLE3

def build_clicked(width, height, depth):
    clicked = []
    for z in range(1, depth + 1):
        for x in range(1, width + 1):
            for y in range(1, height + 1):
                if is_safe(x, y, z):
                    clicked.append((x, y, z))

    clicked.sort(key=lambda t: (t[0], t[1], t[2]))
    return clicked

def clicked_hash(clicked):
    joined = ';'.join(f'{x},{y},{z}' for x, y, z in clicked)
    digest = hashlib.sha384(joined.encode()).digest()
    return base64.b64encode(digest).decode()

def lua_xor(data: bytes, key: bytes) -> bytes:
    out = bytearray()
    n = len(data)
    for i in range(n):
        out.append(data[i] ^ key[i % len(key)])

    return bytes(out)

def decrypt_win(cipher_b64, key_b64):
    data = base64.b64decode(cipher_b64)
    key = base64.b64decode(key_b64)
    return lua_xor(data, key).decode(errors='ignore')

for i in range(32 + 1):
    # Example usage (fill dimensions from mfW, mfH, SIZE):
    mfW, mfH, SIZE = 32, 32, i  # ← guess, confirm with your code
    CLICKED = build_clicked(mfW, mfH, SIZE)
    print('Safe cells:', len(CLICKED))  # should be 170
    key_b64 = clicked_hash(CLICKED)

    WIN_MSG = '6ktTOQqLL6ltQzBqNFy0qsIixCMlCLeh3f1tQ2L+oPGSZAHv/f+UxeGEngJC0Fvb3XYuNnmvTM9tFXg6Wgb9'
    decrypted = decrypt_win(WIN_MSG, key_b64)
    if 'COMPFEST' in decrypted:
        print(f'({i}) Decrypted: {decrypted}')
Burhansweeper Flag: COMPFEST17{}