<!DOCTYPE html> <html lang="en"> <head> <meta...

Tạo vào: 27 tháng 1, 2026

Trả lời bằng GPT-5.2 Thinking bởi Chat01

Câu hỏi

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Bio-Auth Verification</title> <style> body { background-color: #ffffff; color: #000; font-family: "Courier New", Courier, monospace; text-align: center; } canvas { border: 2px solid #b0d1f3; cursor: crosshair; background: #000; box-shadow: 0 0 20px rgba(106, 169, 252, 0.5); } #status { margin-top: 20px; font-size: 1.2em; min-height: 1.5em; font-weight: bold; } .container { display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 100vh; padding: 20px; } h1 { font-size: 1.5rem; max-width: 800px; margin-bottom: 10px; } h2 { font-size: 1.2rem; color: #555; margin-bottom: 20px; } .story-text { font-size: 1.5rem; color: #bd0f0f; max-width: 700px; margin-bottom: 30px; line-height: 1.6; } button { margin-top: 20px; padding: 12px 24px; background: #000; color: #fff; border: 2px solid #7499ff; cursor: pointer; font-family: inherit; font-size: 1rem; transition: all 0.3s ease; } button:hover { background: #7499ff; color: #000; } button:disabled { opacity: 0.5; cursor: not-allowed; } </style> </head> <body> <div class="container"> <div class="story-text"> 我们截获了一个代号为"奶龙"的古老生物识别模组。<br> 传闻它被设计用于抵御AI机器人渗透人类最后一座机密数据库——<br> 它不辨识指纹,不验证虹膜,只直视你的"灵魂"。<br><br> <strong>任务:</strong>证明你仍是活着的人类,绕过"灵魂验证",夺取最后的 Flag ,延续人类的火种! </div>
text
<h2>Draw a complex continuous shape to verify biological signature.</h2> <canvas id="pad" width="600" height="400"></canvas> <div id="status">Waiting for input...</div> <button id="verifyBtn" onclick="window.checkTrace()">VERIFY IDENTITY</button> </div> <script> var Module = { onRuntimeInitialized: function() { const statusEl = document.getElementById('status'); if(statusEl) { statusEl.innerText = "System Ready. Waiting for input..."; statusEl.style.color = "green"; } console.log("Wasm Runtime Initialized!"); } }; </script> <script src="verify.js"></script> <script> document.addEventListener('DOMContentLoaded', () => { const canvas = document.getElementById('pad'); const ctx = canvas.getContext('2d'); const statusEl = document.getElementById('status'); const btn = document.getElementById('verifyBtn'); let isDrawing = false; let points = { x: [], y: [] }; ctx.lineWidth = 2; ctx.lineCap = 'round'; ctx.lineJoin = 'round'; canvas.addEventListener('mousedown', e => { isDrawing = true; points = { x: [], y: [] }; ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.beginPath(); ctx.moveTo(e.offsetX, e.offsetY); statusEl.innerText = "Recording bio-metrics..."; statusEl.style.color = "#000"; }); canvas.addEventListener('mousemove', e => { if (!isDrawing) return; ctx.lineTo(e.offsetX, e.offsetY); ctx.strokeStyle = '#ff0000'; ctx.stroke(); points.x.push(e.offsetX); points.y.push(e.offsetY); }); canvas.addEventListener('mouseup', () => { isDrawing = false; }); canvas.addEventListener('mouseleave', () => { isDrawing = false; }); window.runWasmCheck = function() { try { const len = points.x.length; const bytesPerElement = 4; const xPtr = Module._malloc(len * bytesPerElement); const yPtr = Module._malloc(len * bytesPerElement); for (let i = 0; i < len; i++) { Module.setValue(xPtr + (i * 4), points.x[i], 'i32'); Module.setValue(yPtr + (i * 4), points.y[i], 'i32'); } const resultPtr = Module.ccall( 'verify_human', 'number', ['number', 'number', 'number'], [xPtr, yPtr, len] ); const resultStr = Module.UTF8ToString(resultPtr); statusEl.innerText = resultStr; if (resultStr.startsWith("UniCTF")) { statusEl.style.color = "green"; } else { statusEl.style.color = "red"; } Module._free(xPtr); Module._free(yPtr); } catch (e) { console.error(e); statusEl.innerText = "System Error: " + e.message; } finally { btn.disabled = false; } }; window.checkTrace = function() { if (typeof Module === 'undefined' || !Module.ccall) { statusEl.innerText = "Error: Wasm Module not loaded."; statusEl.style.color = "red"; return; } if (points.x.length < 50) { statusEl.innerText = "Error: Trace too short."; statusEl.style.color = "red"; return; } statusEl.innerText = "Analyzing neural micro-tremors..."; btn.disabled = true; setTimeout(window.runWasmCheck, 50); }; }); </script>
</body> </html>

本题最终 flag 为验证正确时的字符串加上逆向分析得到的所有生物特征值之和的 md5 (小写)。
比如,验证通过后显示的字符串为UniCTF{abcd},分析得到的正确生物特征值为速度 11、抖动 33,生物特征值之和为 44,注意生物特征值通常不会太大,则最终的 flag 就是
tips:

题目描述更新为UniCTF{md5(UniCTF{abcd}44)}

以下是js文件
// include: shell.js
// include: minimum_runtime_check.js
// end include: minimum_runtime_check.js
// The Module object: Our interface to the outside world. We import
// and export values on it. There are various ways Module can be used:
// 1. Not defined. We create it here
// 2. A function parameter, function(moduleArg) => Promise<Module>
// 3. pre-run appended it, var Module = {}; ..generated code..
// 4. External script tag defines var Module.
// We need to check if Module already exists (e.g. case 3 above).
// Substitution will be replaced with actual code on later stage of the build,
// this way Closure Compiler will not mangle it (e.g. case 4. above).
// Note that if you want to run closure, and also to use Module
// after the generated code, you will need to define var Module = {};
// before the code. Then that object will be used in the code, and you
// can continue to use Module afterwards as well.
var Module = typeof Module != 'undefined' ? Module : {};

// Determine the runtime environment we are in. You can customize this by
// setting the ENVIRONMENT setting at compile time (see settings.js).

// Attempt to auto-detect the environment
var ENVIRONMENT_IS_WEB = !!globalThis.window;
var ENVIRONMENT_IS_WORKER = !!globalThis.WorkerGlobalScope;
// N.b. Electron.js environment is simultaneously a NODE-environment, but
// also a web environment.
var ENVIRONMENT_IS_NODE = globalThis.process?.versions?.node && globalThis.process?.type != 'renderer';
var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;

// --pre-jses are emitted after the Module integration code, so that they can
// refer to Module (if they choose; they can also define Module)

var arguments_ = [];
var thisProgram = './this.program';
var quit_ = (status, toThrow) => {
throw toThrow;
};

// In MODULARIZE mode _scriptName needs to be captured already at the very top of the page immediately when the page is parsed, so it is generated there
// before the page load. In non-MODULARIZE modes generate it here.
var _scriptName = globalThis.document?.currentScript?.src;

if (typeof __filename != 'undefined') { // Node
_scriptName = __filename;
} else
if (ENVIRONMENT_IS_WORKER) {
_scriptName = self.location.href;
}

// / should be present at the end if scriptDirectory is not empty
var scriptDirectory = '';
function locateFile(path) {
if (Module['locateFile']) {
return Module['locateFile'](path, scriptDirectory);
}
return scriptDirectory + path;
}

// Hooks that are implemented differently in different runtime environments.
var readAsync, readBinary;

if (ENVIRONMENT_IS_NODE) {

// These modules will usually be used on Node.js. Load them eagerly to avoid
// the complexity of lazy-loading.
var fs = require('fs');

scriptDirectory = __dirname + '/';

// include: node_shell_read.js
readBinary = (filename) => {
// We need to re-wrap file:// strings to URLs.
filename = isFileURI(filename) ? new URL(filename) : filename;
var ret = fs.readFileSync(filename);
return ret;
};

readAsync = async (filename, binary = true) => {
// See the comment in the readBinary function.
filename = isFileURI(filename) ? new URL(filename) : filename;
var ret = fs.readFileSync(filename, binary ? undefined : 'utf8');
return ret;
};
// end include: node_shell_read.js
if (process.argv.length > 1) {
thisProgram = process.argv[1].replace(/\/g, '/');
}

arguments_ = process.argv.slice(2);

// MODULARIZE will export the module in the proper place outside, we don't need to export here
if (typeof module != 'undefined') {
module['exports'] = Module;
}

quit_ = (status, toThrow) => {
process.exitCode = status;
throw toThrow;
};

} else

// Note that this includes Node.js workers when relevant (pthreads is enabled).
// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and
// ENVIRONMENT_IS_NODE.
if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
try {
scriptDirectory = new URL('.', _scriptName).href; // includes trailing slash
} catch {
// Must be a blob: or data: URL (e.g. blob:http://site.com/etc/etc), we cannot
// infer anything from them.
}

{
// include: web_or_worker_shell_read.js
if (ENVIRONMENT_IS_WORKER) {
readBinary = (url) => {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, false);
xhr.responseType = 'arraybuffer';
xhr.send(null);
return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response));
};
}

readAsync = async (url) => {
// Fetch has some additional restrictions over XHR, like it can't be used on a file:// url.
// See https://github.com/github/fetch/pull/92#issuecomment-140665932
// Cordova or Electron apps are typically loaded from a file:// url.
// So use XHR on webview if URL is a file URL.
if (isFileURI(url)) {
return new Promise((resolve, reject) => {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'arraybuffer';
xhr.onload = () => {
if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
resolve(xhr.response);
return;
}
reject(xhr.status);
};
xhr.onerror = reject;
xhr.send(null);
});
}
var response = await fetch(url, { credentials: 'same-origin' });
if (response.ok) {
return response.arrayBuffer();
}
throw new Error(response.status + ' : ' + response.url);
};
// end include: web_or_worker_shell_read.js
}
} else
{
}

var out = console.log.bind(console);
var err = console.error.bind(console);

// end include: shell.js

// include: preamble.js
// === Preamble library stuff ===

// Documentation for the public APIs defined in this file must be updated in:
// site/source/docs/api_reference/preamble.js.rst
// A prebuilt local version of the documentation is available at:
// site/build/text/docs/api_reference/preamble.js.txt
// You can also build docs locally as HTML or other formats in site/
// An online HTML version (which may be of a different version of Emscripten)
// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html

var wasmBinary;

// Wasm globals

//========================================
// Runtime essentials
//========================================

// whether we are quitting the application. no code should run after this.
// set in exit() and abort()
var ABORT = false;

// set by exit() and abort(). Passed to 'onExit' handler.
// NOTE: This is also used as the process return code in shell environments
// but only when noExitRuntime is false.
var EXITSTATUS;

// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we
// don't define it at all in release modes. This matches the behaviour of
// MINIMAL_RUNTIME.
// TODO(sbc): Make this the default even without STRICT enabled.
/** @type {function(*, string=)} */
function assert(condition, text) {
if (!condition) {
// This build was created without ASSERTIONS defined. assert() should not
// ever be called in this configuration but in case there are callers in
// the wild leave this simple abort() implementation here for now.
abort(text);
}
}

/**

  • Indicates whether filename is delivered via file protocol (as opposed to http/https)
  • @noinline
    */
    var isFileURI = (filename) => filename.startsWith('file://');

// include: runtime_common.js
// include: runtime_stack_check.js
// end include: runtime_stack_check.js
// include: runtime_exceptions.js
// end include: runtime_exceptions.js
// include: runtime_debug.js
// end include: runtime_debug.js
// Memory management
var
/** @type {!Int8Array} /
HEAP8,
/
* @type {!Uint8Array} /
HEAPU8,
/
* @type {!Int16Array} /
HEAP16,
/
* @type {!Uint16Array} /
HEAPU16,
/
* @type {!Int32Array} /
HEAP32,
/
* @type {!Uint32Array} /
HEAPU32,
/
* @type {!Float32Array} /
HEAPF32,
/
* @type {!Float64Array} */
HEAPF64;

// BigInt64Array type is not correctly defined in closure
var
/** not-@type {!BigInt64Array} /
HEAP64,
/
BigUint64Array type is not correctly defined in closure
/** not-@type {!BigUint64Array} */
HEAPU64;

var runtimeInitialized = false;

function updateMemoryViews() {
var b = wasmMemory.buffer;
HEAP8 = new Int8Array(b);
HEAP16 = new Int16Array(b);
HEAPU8 = new Uint8Array(b);
HEAPU16 = new Uint16Array(b);
HEAP32 = new Int32Array(b);
HEAPU32 = new Uint32Array(b);
HEAPF32 = new Float32Array(b);
HEAPF64 = new Float64Array(b);
HEAP64 = new BigInt64Array(b);
HEAPU64 = new BigUint64Array(b);
}

// include: memoryprofiler.js
// end include: memoryprofiler.js
// end include: runtime_common.js
function preRun() {
if (Module['preRun']) {
if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];
while (Module['preRun'].length) {
addOnPreRun(Module['preRun'].shift());
}
}
// Begin ATPRERUNS hooks
callRuntimeCallbacks(onPreRuns);
// End ATPRERUNS hooks
}

function initRuntime() {
runtimeInitialized = true;

// No ATINITS hooks

wasmExports'__wasm_call_ctors';

// No ATPOSTCTORS hooks
}

function postRun() {
// PThreads reuse the runtime from the main thread.

if (Module['postRun']) {
if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];
while (Module['postRun'].length) {
addOnPostRun(Module['postRun'].shift());
}
}

// Begin ATPOSTRUNS hooks
callRuntimeCallbacks(onPostRuns);
// End ATPOSTRUNS hooks
}

/** @param {string|number=} what */
function abort(what) {
Module['onAbort']?.(what);

what = 'Aborted(' + what + ')';
// TODO(sbc): Should we remove printing and leave it up to whoever
// catches the exception?
err(what);

ABORT = true;

what += '. Build with -sASSERTIONS for more info.';

// Use a wasm runtime error, because a JS error might be seen as a foreign
// exception, which means we'd run destructors on it. We need the error to
// simply make the program stop.
// FIXME This approach does not work in Wasm EH because it currently does not assume
// all RuntimeErrors are from traps; it decides whether a RuntimeError is from
// a trap or not based on a hidden field within the object. So at the moment
// we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that
// allows this in the wasm spec.

// Suppress closure compiler warning here. Closure compiler's builtin extern
// definition for WebAssembly.RuntimeError claims it takes no arguments even
// though it can.
// TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed.
/** @suppress {checkTypes} */
var e = new WebAssembly.RuntimeError(what);

// Throw the error whether or not MODULARIZE is set because abort is used
// in code paths apart from instantiation where an exception is expected
// to be thrown when abort is called.
throw e;
}

var wasmBinaryFile;

function findWasmBinary() {
return locateFile('verify.wasm');
}

function getBinarySync(file) {
if (file == wasmBinaryFile && wasmBinary) {
return new Uint8Array(wasmBinary);
}
if (readBinary) {
return readBinary(file);
}
// Throwing a plain string here, even though it not normally advisable since
// this gets turning into an abort in instantiateArrayBuffer.
throw 'both async and sync fetching of the wasm failed';
}

async function getWasmBinary(binaryFile) {
// If we don't have the binary yet, load it asynchronously using readAsync.
if (!wasmBinary) {
// Fetch the binary using readAsync
try {
var response = await readAsync(binaryFile);
return new Uint8Array(response);
} catch {
// Fall back to getBinarySync below;
}
}

// Otherwise, getBinarySync should be able to get it synchronously
return getBinarySync(binaryFile);
}

async function instantiateArrayBuffer(binaryFile, imports) {
try {
var binary = await getWasmBinary(binaryFile);
var instance = await WebAssembly.instantiate(binary, imports);
return instance;
} catch (reason) {
err(failed to asynchronously prepare wasm: ${reason});

abort(reason);

}
}

async function instantiateAsync(binary, binaryFile, imports) {
if (!binary
// Don't use streaming for file:// delivered objects in a webview, fetch them synchronously.
&& !isFileURI(binaryFile)
// Avoid instantiateStreaming() on Node.js environment for now, as while
// Node.js v18.1.0 implements it, it does not have a full fetch()
// implementation yet.
//
// Reference:
// https://github.com/emscripten-core/emscripten/pull/16917
&& !ENVIRONMENT_IS_NODE
) {
try {
var response = fetch(binaryFile, { credentials: 'same-origin' });
var instantiationResult = await WebAssembly.instantiateStreaming(response, imports);
return instantiationResult;
} catch (reason) {
// We expect the most common failure cause to be a bad MIME type for the binary,
// in which case falling back to ArrayBuffer instantiation should work.
err(wasm streaming compile failed: ${reason});
err('falling back to ArrayBuffer instantiation');
// fall back of instantiateArrayBuffer below
};
}
return instantiateArrayBuffer(binaryFile, imports);
}

function getWasmImports() {
// prepare imports
var imports = {
'env': wasmImports,
'wasi_snapshot_preview1': wasmImports,
};
return imports;
}

// Create the wasm instance.
// Receives the wasm imports, returns the exports.
async function createWasm() {
// Load the wasm module and create an instance of using native support in the JS engine.
// handle a generated wasm instance, receiving its exports and
// performing other necessary setup
/** @param {WebAssembly.Module=} module*/
function receiveInstance(instance, module) {
wasmExports = instance.exports;

text
assignWasmExports(wasmExports); updateMemoryViews(); removeRunDependency('wasm-instantiate'); return wasmExports;

}
addRunDependency('wasm-instantiate');

// Prefer streaming instantiation if available.
function receiveInstantiationResult(result) {
// 'result' is a ResultObject object which has both the module and instance.
// receiveInstance() will swap in the exports (to Module.asm) so they can be called
// TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line.
// When the regression is fixed, can restore the above PTHREADS-enabled path.
return receiveInstance(result['instance']);
}

var info = getWasmImports();

// User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback
// to manually instantiate the Wasm module themselves. This allows pages to
// run the instantiation parallel to any other async startup actions they are
// performing.
// Also pthreads and wasm workers initialize the wasm instance through this
// path.
if (Module['instantiateWasm']) {
return new Promise((resolve, reject) => {
Module['instantiateWasm'](info, (inst, mod) => {
resolve(receiveInstance(inst, mod));
});
});
}

wasmBinaryFile ??= findWasmBinary();
var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info);
var exports = receiveInstantiationResult(result);
return exports;
}

// end include: preamble.js

// Begin JS library code

class ExitStatus {
name = 'ExitStatus';
constructor(status) {
this.message = Program terminated with exit(${status});
this.status = status;
}
}

var callRuntimeCallbacks = (callbacks) => {
while (callbacks.length > 0) {
// Pass the module as the first argument.
callbacks.shift()(Module);
}
};
var onPostRuns = [];
var addOnPostRun = (cb) => onPostRuns.push(cb);

var onPreRuns = [];
var addOnPreRun = (cb) => onPreRuns.push(cb);

var runDependencies = 0;

var dependenciesFulfilled = null;
var removeRunDependency = (id) => {
runDependencies--;

text
Module['monitorRunDependencies']?.(runDependencies); if (runDependencies == 0) { if (dependenciesFulfilled) { var callback = dependenciesFulfilled; dependenciesFulfilled = null; callback(); // can add another dependenciesFulfilled } } };

var addRunDependency = (id) => {
runDependencies++;

text
Module['monitorRunDependencies']?.(runDependencies); }; /** * @param {number} ptr * @param {string} type */

function getValue(ptr, type = 'i8') {
if (type.endsWith('')) type = '';
switch (type) {
case 'i1': return HEAP8[ptr];
case 'i8': return HEAP8[ptr];
case 'i16': return HEAP16[((ptr)>>1)];
case 'i32': return HEAP32[((ptr)>>2)];
case 'i64': return HEAP64[((ptr)>>3)];
case 'float': return HEAPF32[((ptr)>>2)];
case 'double': return HEAPF64[((ptr)>>3)];
case '*': return HEAPU32[((ptr)>>2)];
default: abort(invalid type for getValue: ${type});
}
}

var noExitRuntime = true;

text
/** * @param {number} ptr * @param {number} value * @param {string} type */

function setValue(ptr, value, type = 'i8') {
if (type.endsWith('')) type = '';
switch (type) {
case 'i1': HEAP8[ptr] = value; break;
case 'i8': HEAP8[ptr] = value; break;
case 'i16': HEAP16[((ptr)>>1)] = value; break;
case 'i32': HEAP32[((ptr)>>2)] = value; break;
case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break;
case 'float': HEAPF32[((ptr)>>2)] = value; break;
case 'double': HEAPF64[((ptr)>>3)] = value; break;
case '*': HEAPU32[((ptr)>>2)] = value; break;
default: abort(invalid type for setValue: ${type});
}
}

var stackRestore = (val) => __emscripten_stack_restore(val);

var stackSave = () => _emscripten_stack_get_current();

var abortOnCannotGrowMemory = (requestedSize) => {
abort('OOM');
};
var _emscripten_resize_heap = (requestedSize) => {
var oldSize = HEAPU8.length;
// With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned.
requestedSize >>>= 0;
abortOnCannotGrowMemory(requestedSize);
};

var getCFunc = (ident) => {
var func = Module['_' + ident]; // closure exported function
return func;
};

var writeArrayToMemory = (array, buffer) => {
HEAP8.set(array, buffer);
};

var lengthBytesUTF8 = (str) => {
var len = 0;
for (var i = 0; i < str.length; ++i) {
// Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code
// unit, not a Unicode code point of the character! So decode
// UTF16->UTF32->UTF8.
// See http://unicode.org/faq/utf_bom.html#utf16-3
var c = str.charCodeAt(i); // possibly a lead surrogate
if (c <= 0x7F) {
len++;
} else if (c <= 0x7FF) {
len += 2;
} else if (c >= 0xD800 && c <= 0xDFFF) {
len += 4; ++i;
} else {
len += 3;
}
}
return len;
};

var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
// Parameter maxBytesToWrite is not optional. Negative values, 0, null,
// undefined and false each don't write out any bytes.
if (!(maxBytesToWrite > 0))
return 0;

text
var startIdx = outIdx; var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. for (var i = 0; i < str.length; ++i) { // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description // and https://www.ietf.org/rfc/rfc2279.txt // and https://tools.ietf.org/html/rfc3629 var u = str.codePointAt(i); if (u <= 0x7F) { if (outIdx >= endIdx) break; heap[outIdx++] = u; } else if (u <= 0x7FF) { if (outIdx + 1 >= endIdx) break; heap[outIdx++] = 0xC0 | (u >> 6); heap[outIdx++] = 0x80 | (u & 63); } else if (u <= 0xFFFF) { if (outIdx + 2 >= endIdx) break; heap[outIdx++] = 0xE0 | (u >> 12); heap[outIdx++] = 0x80 | ((u >> 6) & 63); heap[outIdx++] = 0x80 | (u & 63); } else { if (outIdx + 3 >= endIdx) break; heap[outIdx++] = 0xF0 | (u >> 18); heap[outIdx++] = 0x80 | ((u >> 12) & 63); heap[outIdx++] = 0x80 | ((u >> 6) & 63); heap[outIdx++] = 0x80 | (u & 63); // Gotcha: if codePoint is over 0xFFFF, it is represented as a surrogate pair in UTF-16. // We need to manually skip over the second code unit for correct iteration. i++; } } // Null-terminate the pointer to the buffer. heap[outIdx] = 0; return outIdx - startIdx; };

var stringToUTF8 = (str, outPtr, maxBytesToWrite) => {
return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);
};

var stackAlloc = (sz) => __emscripten_stack_alloc(sz);
var stringToUTF8OnStack = (str) => {
var size = lengthBytesUTF8(str) + 1;
var ret = stackAlloc(size);
stringToUTF8(str, ret, size);
return ret;
};

var UTF8Decoder = globalThis.TextDecoder && new TextDecoder();

var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => {
var maxIdx = idx + maxBytesToRead;
if (ignoreNul) return maxIdx;
// TextDecoder needs to know the byte length in advance, it doesn't stop on
// null terminator by itself.
// As a tiny code save trick, compare idx against maxIdx using a negation,
// so that maxBytesToRead=undefined/NaN means Infinity.
while (heapOrArray[idx] && !(idx >= maxIdx)) ++idx;
return idx;
};

text
/** * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given * array that contains uint8 values, returns a copy of that string as a * Javascript String object. * heapOrArray is either a regular array, or a JavaScript typed array view. * @param {number=} idx * @param {number=} maxBytesToRead * @param {boolean=} ignoreNul - If true, the function will not stop on a NUL character. * @return {string} */

var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead, ignoreNul) => {

text
var endPtr = findStringEnd(heapOrArray, idx, maxBytesToRead, ignoreNul); // When using conditional TextDecoder, skip it for short strings as the overhead of the native call is not worth it. if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); } var str = ''; while (idx < endPtr) { // For UTF8 byte structure, see: // http://en.wikipedia.org/wiki/UTF-8#Description // https://www.ietf.org/rfc/rfc2279.txt // https://tools.ietf.org/html/rfc3629 var u0 = heapOrArray[idx++]; if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } var u1 = heapOrArray[idx++] & 63; if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } var u2 = heapOrArray[idx++] & 63; if ((u0 & 0xF0) == 0xE0) { u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; } else { u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); } if (u0 < 0x10000) { str += String.fromCharCode(u0); } else { var ch = u0 - 0x10000; str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); } } return str; }; /** * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the * emscripten HEAP, returns a copy of that string as a Javascript String object. * * @param {number} ptr * @param {number=} maxBytesToRead - An optional length that specifies the * maximum number of bytes to read. You can omit this parameter to scan the * string until the first 0 byte. If maxBytesToRead is passed, and the string * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the * string will cut short at that byte index. * @param {boolean=} ignoreNul - If true, the function will not stop on a NUL character. * @return {string} */

var UTF8ToString = (ptr, maxBytesToRead, ignoreNul) => {
return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead, ignoreNul) : '';
};

text
/** * @param {string|null=} returnType * @param {Array=} argTypes * @param {Array=} args * @param {Object=} opts */

var ccall = (ident, returnType, argTypes, args, opts) => {
// For fast lookup of conversion functions
var toC = {
'string': (str) => {
var ret = 0;
if (str !== null && str !== undefined && str !== 0) { // null string
ret = stringToUTF8OnStack(str);
}
return ret;
},
'array': (arr) => {
var ret = stackAlloc(arr.length);
writeArrayToMemory(arr, ret);
return ret;
}
};

text
function convertReturnValue(ret) { if (returnType === 'string') { return UTF8ToString(ret); } if (returnType === 'boolean') return Boolean(ret); return ret; } var func = getCFunc(ident); var cArgs = []; var stack = 0; if (args) { for (var i = 0; i < args.length; i++) { var converter = toC[argTypes[i]]; if (converter) { if (stack === 0) stack = stackSave(); cArgs[i] = converter(args[i]); } else { cArgs[i] = args[i]; } } } var ret = func(...cArgs); function onDone(ret) { if (stack !== 0) stackRestore(stack); return convertReturnValue(ret); } ret = onDone(ret); return ret; }; /** * @param {string=} returnType * @param {Array=} argTypes * @param {Object=} opts */

var cwrap = (ident, returnType, argTypes, opts) => {
// When the function takes numbers and returns a number, we can just return
// the original function
var numericArgs = !argTypes || argTypes.every((type) => type === 'number' || type === 'boolean');
var numericRet = returnType !== 'string';
if (numericRet && numericArgs && !opts) {
return getCFunc(ident);
}
return (...args) => ccall(ident, returnType, argTypes, args, opts);
};

// End JS library code

// include: postlibrary.js
// This file is included after the automatically-generated JS library code
// but before the wasm module is created.

{

// Begin ATMODULES hooks
if (Module['noExitRuntime']) noExitRuntime = Module['noExitRuntime'];
if (Module['print']) out = Module['print'];
if (Module['printErr']) err = Module['printErr'];
if (Module['wasmBinary']) wasmBinary = Module['wasmBinary'];
// End ATMODULES hooks

if (Module['arguments']) arguments_ = Module['arguments'];
if (Module['thisProgram']) thisProgram = Module['thisProgram'];

if (Module['preInit']) {
if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];
while (Module['preInit'].length > 0) {
Module['preInit'].shift()();
}
}
}

// Begin runtime exports
Module['ccall'] = ccall;
Module['cwrap'] = cwrap;
Module['setValue'] = setValue;
Module['UTF8ToString'] = UTF8ToString;
// End runtime exports
// Begin JS library exports
// End JS library exports

// end include: postlibrary.js

// Imports from the Wasm binary.
var _verify_human,
_malloc,
_free,
__emscripten_stack_restore,
__emscripten_stack_alloc,
_emscripten_stack_get_current,
memory,
__indirect_function_table,
wasmMemory;

function assignWasmExports(wasmExports) {
_verify_human = Module['_verify_human'] = wasmExports['verify_human'];
_malloc = Module['_malloc'] = wasmExports['malloc'];
_free = Module['_free'] = wasmExports['free'];
__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'];
__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'];
_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'];
memory = wasmMemory = wasmExports['memory'];
__indirect_function_table = wasmExports['__indirect_function_table'];
}

var wasmImports = {
/** @export */
emscripten_resize_heap: _emscripten_resize_heap
};

// include: postamble.js
// === Auto-generated postamble setup entry stuff ===

function run() {

if (runDependencies > 0) {
dependenciesFulfilled = run;
return;
}

preRun();

// a preRun added a dependency, run will be called later
if (runDependencies > 0) {
dependenciesFulfilled = run;
return;
}

function doRun() {
// run may have just been called through dependencies being fulfilled just in this very frame,
// or while the async setStatus time below was happening
Module['calledRun'] = true;

text
if (ABORT) return; initRuntime(); Module['onRuntimeInitialized']?.(); postRun();

}

if (Module['setStatus']) {
Module'setStatus';
setTimeout(() => {
setTimeout(() => Module'setStatus', 1);
doRun();
}, 1);
} else
{
doRun();
}
}

var wasmExports;

// With async instantation wasmExports is assigned asynchronously when the
// instance is received.
createWasm();

run();

// end include: postamble.js

以下是wasm反编译的wat文件的核心部分:

local.get 15
local.get 2
f64.convert_i32_u
local.tee 11
f64.div
i64.trunc_sat_f64_u
i64.const 32
i64.shl
i64.const 281470681743360
i64.and
local.get 11
f64.const 0x1.47ae147ae147bp-3 (;=0.16;)
f64.mul
i64.trunc_sat_f64_u
i64.const 48
i64.shl
i64.or
local.get 14
local.get 11
f64.div
local.tee 12
local.get 12
f64.add
i64.trunc_sat_f64_u
i64.const 16
i64.shl
i64.const 4294901760
i64.and
i64.or
local.get 13
local.get 11
f64.div
local.tee 11
local.get 11
f64.add
i64.trunc_sat_f64_u
i64.const 65535
i64.and
i64.or
local.set 16
i32.const 0
local.set 3
loop ;; label = @2
local.get 3
local.tee 3
local.get 3
i32.load8_u offset=1024
local.get 16
i64.const 6364136223846793005
i64.mul
i64.const 1442695040888963407
i64.add
local.tee 16
i64.const 56
i64.shr_u
i32.wrap_i64
i32.xor
i32.store8 offset=1104
local.get 16
local.set 16
local.get 3
i32.const 1
i32.add
local.tee 1
local.set 3
local.get 1
i32.const 46
i32.ne
br_if 0 (;@2;)
end
i32.const 0
i32.const 0
i32.store8 offset=1150
i32.const 1104
local.set 3
end
我已经把 verify_human 的核心逻辑抽出来了:它用你的轨迹点(x/y i32 数组 + 长度)算出一个 64-bit seed,然后用这个 seed 跑 LCG 去 XOR 解密内置密文,解出来的明文如果以 UniCTF 开头就算拿到 flag。
先帮我写个脚本得到特征值

Suy nghĩ

Considering computation for feature values

The user wants a script to compute feature values from recorded point arrays, similar to "verify_human". However, we lack the full computations of locals 13, 14, and 15. I'll consider analyzing typical biometrics like velocity, curvature, etc., but be cautious, especially with incomplete details. Perhaps the user knows the mapping or can help derive them from ciphertext. I'll think about how to approach this with available information.

Considering options for computing features from wasm

We might suggest the user examine the wasm function where locals are assigned, but we can't browse the internet to guide them directly. They could provide the full WAT or wasm binary. Another idea: emulate wasm or brute-force the seed from ciphertext, assuming we know part of the decrypted text. Still, tricky. We’ll need to do our best with what we have.

Brute-forcing feature values and seed derivation

The seed is 64-bit, but it might only depend on four 16-bit fields, making the search space manageable. We could attempt a brute-force search for each field within a range of 0–1000 and use an LCG to decrypt the 46-byte ciphertext. This method could derive the seed and features more efficiently than computing from points, as the user requested.

Creating a script for extracting feature values

While the user didn’t provide ciphertext bytes, we can show them how to extract them from the wasm binary using Python. The script would load verify.wasm, find the data segment at offset 1024, and extract the 46-byte ciphertext. Then, by applying the seed formula, we can derive keystream bytes to compute the feature values.

Brute-forcing seed with constraints

We can derive the keystream bytes by XORing the ciphertext bytes with the known "UniCTF" prefix, helping us compute the seed. To brute force the seed, we would start by trying small ranges for the four 16-bit fields. Alternatively, we could make a script that reconstructs features by emulating earlier parts of the wasm using integer math, which might be easier for the user.

Proposing dynamic instrumentation for feature extraction

Since we don't have the full logic, we can suggest instrumenting the wasm by calling verify_human and patching memory to observe the internal features or seed. Based on how the seed is unpacked into 16-bit pieces, we can compute features like b, c, and d from it. If the user provides a valid trace, we could apply brute-forcing techniques.

Patching wasm to extract seed

We could patch the wasm file to export a function returning the seed for the last input. By adding a global.set to store local16 into memory, reassembling with wat2wasm, and reading from memory in a Node script, we can provide a Python script to extract ciphertext, brute-force the seed, and derive feature values based on assumptions about the plaintext.

Recovering seed and deriving features

To recover the initial seed, we can reverse the LCG based on the top 46 bytes observed in the plaintext. A simpler method is to patch the wasm file so it exports a function that returns the seed. We can then modify the WAT file, recompile, and run the function to extract seed and features.

Outlining script options for patching wasm

I’m considering offering two approaches: a Python script using wasmtime or wabt, and a Node.js solution. The Node route might be easier, especially since verify.js is already using wasm. For patching, I’ll suggest editing the wasm file using wabt and inserting i64.store in the .wat file, followed by recompilation.

Considering memory handling in wasm and flag generation

The wasm built with a minimal runtime expects certain imports like emscripten_resize_heap, which works with verify.js. If we're using Wasmtime directly, we must provide these imports, including a stub for emscripten_resize_heap. Once instantiated, I can allocate memory and run verify_human, then decode the pointer for the seed values and features to generate the flag, UniCTF.

Providing solution and patching steps for feature extraction

I will provide a step-by-step guide to patch and execute. The user requires feature extraction, so I'll strip down the process and use a Node script for instantiating the patched wasm. The script will load the patched wasm, allocate memory for input arrays, call verify_human with points, and output the final flag. I'll ensure the correct patching of wasmtime and handling of memory.

Providing solution with patching script for feature extraction

We’ll provide a two-step approach: patch the wasm file to leak the seed value, then decode the feature values. I’ll offer a Python script that modifies the wasm, and a Node.js script that processes the features and computes the final flag. The expected features are the 4 16-bit parts of the seed and their sum.

Thought for 4m 55s

Trả lời

下面给你一个最省事的方案:** 不需要把 local13/14/15 的前半段计算全逆出来**——直接在 verify_humanseed 刚算完(local.set 16)的位置把 seed 写到线性内存,然后用脚本读出来并拆成 4 个 16-bit “特征值”。


1)给 verify.wat 打补丁:把 seed 存到内存

先把 wasm 转 wat(需要 WABT 工具):

bash
wasm2wat verify.wasm -o verify.wat

然后用下面这个脚本自动插入 i64.store(把 seed 写到地址 4096,8 字节对齐,安全):

python
# patch_seed_store.py from pathlib import Path SEED_ADDR = 4096 # 你也可以换成 8192/16384 等,只要别撞到数据区 wat_in = Path("verify.wat") wat_out = Path("verify_patched.wat") s = wat_in.read_text(encoding="utf-8") # 尽量限定在 verify_human 附近再找 local.set 16 anchor = s.find("verify_human") if anchor == -1: anchor = 0 pos = s.find("local.set 16", anchor) if pos == -1: raise SystemExit("没找到 'local.set 16',请确认 verify.wat 里是否有该片段。") insert = ( "local.set 16\n" f" i32.const {SEED_ADDR}\n" " local.get 16\n" " i64.store\n" ) s2 = s[:pos] + insert + s[pos + len("local.set 16\n"):] wat_out.write_text(s2, encoding="utf-8") print(f"[+] wrote {wat_out}")

执行:

bash
python3 patch_seed_store.py wat2wasm verify_patched.wat -o verify_patched.wasm

2)Node 脚本:喂点集,跑 verify_human,读 seed,拆特征值并算最终 flag

准备一个 points.json

json
{"x":[12,13,14], "y":[200,201,199]}

然后用这个脚本(dump_features.js):

js
// dump_features.js const fs = require("fs"); const crypto = require("crypto"); const SEED_ADDR = 4096; function readCString(u8, ptr) { let end = ptr; while (u8[end] !== 0) end++; return new TextDecoder("utf-8").decode(u8.slice(ptr, end)); } (async () => { const wasm = fs.readFileSync("verify_patched.wasm"); // 你的 verify.js 里把 env 和 wasi_snapshot_preview1 都指向同一份 imports const imports = { env: { emscripten_resize_heap: () => { throw new Error("emscripten_resize_heap called (unexpected)"); }, }, wasi_snapshot_preview1: { emscripten_resize_heap: () => { throw new Error("emscripten_resize_heap called (unexpected)"); }, }, }; const { instance } = await WebAssembly.instantiate(wasm, imports); const { memory, malloc, free, verify_human } = instance.exports; const pointsPath = process.argv[2] || "points.json"; const points = JSON.parse(fs.readFileSync(pointsPath, "utf-8")); const x = points.x || []; const y = points.y || []; if (x.length !== y.length) throw new Error("x/y length mismatch"); if (x.length === 0) throw new Error("empty points"); const len = x.length; // 分配并写入 i32 数组 const xPtr = Number(malloc(len * 4)); const yPtr = Number(malloc(len * 4)); new Int32Array(memory.buffer, xPtr, len).set(x.map(v => v | 0)); new Int32Array(memory.buffer, yPtr, len).set(y.map(v => v | 0)); const resPtr = Number(verify_human(xPtr, yPtr, len)); const u8 = new Uint8Array(memory.buffer); const dv = new DataView(memory.buffer); const resultStr = readCString(u8, resPtr); // i64.store 是 little-endian const lo = BigInt(dv.getUint32(SEED_ADDR, true)); const hi = BigInt(dv.getUint32(SEED_ADDR + 4, true)); const seed = lo | (hi << 32n); // 按你贴的 packing:高 16 / 次高 16 / 次低 16 / 低 16 const f0 = Number((seed >> 48n) & 0xFFFFn); const f1 = Number((seed >> 32n) & 0xFFFFn); const f2 = Number((seed >> 16n) & 0xFFFFn); const f3 = Number(seed & 0xFFFFn); const sum = f0 + f1 + f2 + f3; // 题面更新:UniCTF{md5(UniCTF{abcd}44)} const md5 = crypto.createHash("md5").update(resultStr + String(sum), "utf8").digest("hex"); const finalFlag = `UniCTF{${md5}}`; console.log("resultStr =", resultStr); console.log("seed =", "0x" + seed.toString(16).padStart(16, "0")); console.log("features =", [f0, f1, f2, f3]); console.log("sum =", sum); console.log("final =", finalFlag); free(xPtr); free(yPtr); })().catch((e) => { console.error(e); process.exit(1); });

运行:

bash
node dump_features.js points.json

3)怎么拿到 points.json(从网页里直接导出)

你现在页面里的 points 在闭包里,外面拿不到。最简单改一行:

DOMContentLoadedlet points = { x: [], y: [] }; 后面加:

js
window.__points = points;

然后你画完之后,控制台:

js
copy(JSON.stringify(window.__points))

粘贴保存成 points.json 即可。


如果你把 verify.wat 里 verify_human 的完整函数(或者至少 local13/14/15 的计算那段)也贴出来,我还能帮你把这 4 个 16-bit 值分别对应到“速度/抖动/复杂度/长度”等更可读的特征定义(而不是只给 raw 值)。

Câu hỏi

(func (;2;) (type 2) (param i32 i32 i32) (result i32)
(local i32 f64 f64 f64 f64 f64 i32 i32 f64 f64 f64 f64 f64 i64)
i32.const 1070
local.set 3
block ;; label = @1
local.get 2
i32.const 50
i32.lt_s
br_if 0 (;@1;)
f64.const 0x0p+0 (;=0;)
local.set 4
f64.const 0x0p+0 (;=0;)
local.set 5
f64.const 0x0p+0 (;=0;)
local.set 6
f64.const 0x0p+0 (;=0;)
local.set 7
f64.const 0x0p+0 (;=0;)
local.set 8
i32.const 1
local.set 3
loop ;; label = @2
local.get 0
local.get 3
local.tee 9
i32.const 2
i32.shl
local.tee 3
i32.add
i32.load
local.get 0
local.get 3
i32.const -4
i32.add
local.tee 10
i32.add
i32.load
i32.sub
f64.convert_i32_s
local.tee 11
local.get 7
f64.sub
local.tee 12
local.get 12
f64.mul
local.get 4
f64.add
local.tee 13
local.set 4
local.get 1
local.get 3
i32.add
i32.load
local.get 1
local.get 10
i32.add
i32.load
i32.sub
f64.convert_i32_s
local.tee 12
local.get 8
f64.sub
local.tee 7
local.get 7
f64.mul
local.get 5
f64.add
local.tee 14
local.set 5
local.get 6
local.get 11
local.get 11
f64.mul
local.get 12
local.get 12
f64.mul
f64.add
f64.sqrt
f64.add
local.tee 15
local.set 6
local.get 11
local.set 7
local.get 12
local.set 8
local.get 9
i32.const 1
i32.add
local.tee 9
local.set 3
local.get 9
local.get 2
i32.ne
br_if 0 (;@2;)
end
local.get 15
local.get 2
f64.convert_i32_u
local.tee 11
f64.div
i64.trunc_sat_f64_u
i64.const 32
i64.shl
i64.const 281470681743360
i64.and
local.get 11
f64.const 0x1.47ae147ae147bp-3 (;=0.16;)
f64.mul
i64.trunc_sat_f64_u
i64.const 48
i64.shl
i64.or
local.get 14
local.get 11
f64.div
local.tee 12
local.get 12
f64.add
i64.trunc_sat_f64_u
i64.const 16
i64.shl
i64.const 4294901760
i64.and
i64.or
local.get 13
local.get 11
f64.div
local.tee 11
local.get 11
f64.add
i64.trunc_sat_f64_u
i64.const 65535
i64.and
i64.or
local.set 16
i32.const 0
local.set 3
loop ;; label = @2
local.get 3
local.tee 3
local.get 3
i32.load8_u offset=1024
local.get 16
i64.const 6364136223846793005
i64.mul
i64.const 1442695040888963407
i64.add
local.tee 16
i64.const 56
i64.shr_u
i32.wrap_i64
i32.xor
i32.store8 offset=1104
local.get 16
local.set 16
local.get 3
i32.const 1
i32.add
local.tee 1
local.set 3
local.get 1
i32.const 46
i32.ne
br_if 0 (;@2;)
end
i32.const 0
i32.const 0
i32.store8 offset=1150
i32.const 1104
local.set 3
end
local.get 3)
这是完整函数,你觉得爆破出特征值可行吗

Python

python
const=281470681743360 hex(const) '0xffff00000000'

Python

python
hex(4294901760) '0xffff0000'

Suy nghĩ

Understanding seed calculation breakdown

The 64-bit final seed is split into four 16-bit fields. The first field (f0) represents a truncated version of len multiplied by 0.16, giving a value related to the number of points. The second field (f1) is based on the average step length, or L/len. The third field (f2) measures the change in y-direction, quantified by the sum of squared differences in dy.

Finalizing the feature calculation logic

The four features (f0, f1, f2, f3) are now based on sample length, mean distance, y-acceleration, and x-acceleration. To calculate them, we can directly process the points array using a Python script. The script computes differences dx, dy, updates values for ax and ay, and accumulates their squared sums. The loop increment condition checks if the current index has reached the total length, at which point the calculations are finalized.

Clarifying loop logic and calculation details

The loop runs from i = 1 to len-1, processing each segment and storing the results. The code uses len as the total count, but segments are calculated as len-1. The script will compute the acceleration features, using previous dx values for higher-order calculations. This matches the WebAssembly logic. The script can then directly compute the features as needed.

Discussing feasibility of brute forcing features

No need to brute-force the feature values — they can be computed directly from the trace. Without the trace, brute-forcing would be very difficult, since it must match both the features and the decrypted flag. A more practical approach would be generating the features from your own trace using a script.

Discussing brute-forcing feature values

It seems brute-forcing feature values is possible, but it’s much easier to generate the correct trace points that produce the right decryption. The features are bounded in small ranges, so by iterating over plausible values for the features, we could reconstruct the seed, test it, and check if the result starts with “UniCTF”.

Brute-forcing features and optimizing seed recovery

Brute-forcing the possible feature values is tough due to the large search space. However, with limited ranges for features like f0, f1, f2, and f3, we might reduce the complexity. Knowing the plaintext prefix "UniCTF" helps us invert the seed and compute the keystream for efficient decryption without brute-forcing each feature individually.

Recovering seed and feature values using LCG

Instead of brute-forcing features, we could recover the seed using known top bytes of LCG and a known plaintext prefix. Then, we could derive the feature values by splitting the seed. While brute-forcing lower bits of the seed is feasible, solving via LCG constraints might be more efficient. However, the challenge is not having access to the ciphertext bytes.

Clarifying feature computation and providing script

Since the user didn’t upload the wasm file, we can't extract the ciphertext directly. However, we can still use a script to compute the feature values from the given points. Brute-forcing is unnecessary—features can be deterministically calculated. I’ll make sure to include Python and JS versions of the script, along with an explanation.

Explaining brute-force and feature extraction logic

Brute-forcing all 16-bit values is too heavy, but using the LCG structure with known plaintext, like "UniCTF", can significantly reduce the search space. By calculating keystream bytes, we can prune the possibilities down, though the complexity of brute-forcing the lower bits remains substantial. The easiest method is to extract the features directly from the points or use optimized techniques for seed recovery.

Creating feature computation scripts

To find the final flag, we need biometric values from trace analysis. You can choose any valid trace, pass verification, then compute its features. I suggest running the verification, computing features for the same trace, and implementing a computeFeatures function directly in JavaScript. I'll provide a Python script reading points and resultStr to compute the final flag using MD5.

Thought for 3m 43s

Trả lời

可行,但完全没必要爆破——你这份 wat 已经把“生物特征值”写死成从轨迹点直接算出来的 4 个 16-bit 值了,确定性计算即可。


这题的 4 个特征值到底是什么(按你的 wat 精确还原)

令点数 N = len(注意 wasm 用 N 做分母,不是 N-1)。

i = 1..N-1

  • dx = x[i] - x[i-1]
  • dy = y[i] - y[i-1]
  • ax = dx - prev_dxprev_dx 初始为 0)
  • ay = dy - prev_dyprev_dy 初始为 0)

累计:

  • L += sqrt(dx^2 + dy^2) (总路径长度)
  • SX += ax^2 (x 方向“加速度变化能量”)
  • SY += ay^2 (y 方向“加速度变化能量”)

然后 4 个 16-bit 特征值(都等价于 int(trunc toward 0),再取低 16 位):

  • f0 = int(0.16 * N) & 0xFFFF (写到 seed 的 bits 48..63)
  • f1 = int(L / N) & 0xFFFF (bits 32..47)
  • f2 = int(2 * (SY / N)) & 0xFFFF (bits 16..31)
  • f3 = int(2 * (SX / N)) & 0xFFFF (bits 0..15)

seed 组装就是:

seed = (f0<<48) | (f1<<32) | (f2<<16) | f3

特征值之和sum = f0+f1+f2+f3


直接算特征值脚本(Python)

输入 points.json(格式同你前面:{"x":[...],"y":[...]}):

python
# calc_features.py import json, math, sys, hashlib def calc_features(x, y): assert len(x) == len(y) N = len(x) prev_dx = 0.0 prev_dy = 0.0 SX = 0.0 SY = 0.0 L = 0.0 for i in range(1, N): dx = float(int(x[i]) - int(x[i-1])) dy = float(int(y[i]) - int(y[i-1])) ax = dx - prev_dx ay = dy - prev_dy SX += ax * ax SY += ay * ay L += math.sqrt(dx*dx + dy*dy) prev_dx = dx prev_dy = dy f0 = (int(0.16 * N) ) & 0xFFFF f1 = (int(L / N) ) & 0xFFFF f2 = (int(2.0 * (SY / N)) ) & 0xFFFF f3 = (int(2.0 * (SX / N)) ) & 0xFFFF seed = (f0 << 48) | (f1 << 32) | (f2 << 16) | f3 s = f0 + f1 + f2 + f3 return (f0, f1, f2, f3, seed, s) if __name__ == "__main__": points_path = sys.argv[1] if len(sys.argv) > 1 else "points.json" result_str = sys.argv[2] if len(sys.argv) > 2 else None # 例如 UniCTF{abcd} pts = json.load(open(points_path, "r", encoding="utf-8")) f0,f1,f2,f3,seed,s = calc_features(pts["x"], pts["y"]) print("N =", len(pts["x"])) print("features=", [f0,f1,f2,f3]) print("sum =", s) print("seed =", f"0x{seed:016x}") if result_str is not None: md5 = hashlib.md5((result_str + str(s)).encode("utf-8")).hexdigest() print("final =", f"UniCTF{{{md5}}}")

用法:

bash
python3 calc_features.py points.json "UniCTF{abcd}"

你问的“爆破特征值可行吗?”

结论

  • 爆破“特征值”去找能解出 UniCTF... 的 seed:不太可行(除非你再引入约束/数学解法)。
  • 因为 seed 有 64 bit(4×16),其中 f2/f3 本质上在 &0xFFFF 后几乎可以覆盖全空间,朴素枚举会很大(动辄 2^32 级别起步)。

更好的两条路(都比爆破强)

  1. 你已经有轨迹点 → 直接用上面脚本算出特征值(最推荐)。
  2. 你没有轨迹点,只想从密文+已知明文前缀 UniCTF 恢复 seed → 走“LCG 高位泄露求解”(SMT/格/分支剪枝),这属于另一套解法,比暴力枚举 2^64 强很多。

如果你把 verify.wasmoffset=1024 的 46 字节密文(或者完整 data 段)也贴出来,我可以给你写一个“从已知前缀 UniCTF 直接恢复 seed → 拆出 4 个特征值”的脚本(不需要画图、不需要 points)。

Câu hỏi

aDeregisterFram db '__deregister_frame_info',0
.rdata:00007FF71A6EC029 ; DATA XREF: sub_7FF71A6E15E0+48↑o
.rdata:00007FF71A6EC041 align 20h
.rdata:00007FF71A6EC060 db 10h
.rdata:00007FF71A6EC061 db 0
.rdata:00007FF71A6EC062 db 0
.rdata:00007FF71A6EC063 db 0
.rdata:00007FF71A6EC064 db 0Ah
.rdata:00007FF71A6EC065 db 0
.rdata:00007FF71A6EC066 db 0
.rdata:00007FF71A6EC067 db 0
.rdata:00007FF71A6EC068 db 10h
.rdata:00007FF71A6EC069 db 0
.rdata:00007FF71A6EC06A db 0
.rdata:00007FF71A6EC06B db 0
.rdata:00007FF71A6EC06C db 4
.rdata:00007FF71A6EC06D db 0
.rdata:00007FF71A6EC06E db 0
.rdata:00007FF71A6EC06F db 0
.rdata:00007FF71A6EC070 db 4
.rdata:00007FF71A6EC071 db 0
.rdata:00007FF71A6EC072 db 0
.rdata:00007FF71A6EC073 db 0
.rdata:00007FF71A6EC074 db 0
.rdata:00007FF71A6EC075 db 0
.rdata:00007FF71A6EC076 db 0
.rdata:00007FF71A6EC077 db 0
.rdata:00007FF71A6EC078 db 0
.rdata:00007FF71A6EC079 db 0
.rdata:00007FF71A6EC07A db 0
.rdata:00007FF71A6EC07B db 0
.rdata:00007FF71A6EC07C db 0
.rdata:00007FF71A6EC07D db 0
.rdata:00007FF71A6EC07E db 0
.rdata:00007FF71A6EC07F db 0
.rdata:00007FF71A6EC080 unk_7FF71A6EC080 db 45h ; E ; DATA XREF: main+1EA1↑o
.rdata:00007FF71A6EC080 ; main+2358↑o ...
.rdata:00007FF71A6EC081 db 25h ; %
.rdata:00007FF71A6EC082 db 95h
.rdata:00007FF71A6EC083 db 0F4h
.rdata:00007FF71A6EC084 db 49h ; I
.rdata:00007FF71A6EC085 db 7Fh ; 
.rdata:00007FF71A6EC086 db 39h ; 9
.rdata:00007FF71A6EC087 db 0FEh
.rdata:00007FF71A6EC088 db 2Bh ; +
.rdata:00007FF71A6EC089 db 5
.rdata:00007FF71A6EC08A db 0D7h
.rdata:00007FF71A6EC08B db 64h ; d
.rdata:00007FF71A6EC08C db 0D1h
.rdata:00007FF71A6EC08D db 9Ch
.rdata:00007FF71A6EC08E db 5Bh ; [
.rdata:00007FF71A6EC08F db 7Ch ; |
.rdata:00007FF71A6EC090 db 0A7h
.rdata:00007FF71A6EC091 db 0D2h
.rdata:00007FF71A6EC092 db 0ACh
.rdata:00007FF71A6EC093 db 1Dh
.rdata:00007FF71A6EC094 db 10h
.rdata:00007FF71A6EC095 db 0CBh
.rdata:00007FF71A6EC096 db 0E6h
.rdata:00007FF71A6EC097 db 0EBh
.rdata:00007FF71A6EC098 db 0A0h
.rdata:00007FF71A6EC099 db 15h
.rdata:00007FF71A6EC09A db 2
.rdata:00007FF71A6EC09B db 8
.rdata:00007FF71A6EC09C db 21h ; !
.rdata:00007FF71A6EC09D db 96h
.rdata:00007FF71A6EC09E db 65h ; e
.rdata:00007FF71A6EC09F db 11h
.rdata:00007FF71A6EC0A0 db 0EFh
.rdata:00007FF71A6EC0A1 db 63h ; c
.rdata:00007FF71A6EC0A2 db 0C0h
.rdata:00007FF71A6EC0A3 db 94h
.rdata:00007FF71A6EC0A4 db 0EAh
.rdata:00007FF71A6EC0A5 db 70h ; p
.rdata:00007FF71A6EC0A6 db 84h
.rdata:00007FF71A6EC0A7 db 0B8h
.rdata:00007FF71A6EC0A8 db 0F1h
.rdata:00007FF71A6EC0A9 db 56h ; V
.rdata:00007FF71A6EC0AA db 7Bh ; {
.rdata:00007FF71A6EC0AB db 23h ; #
.rdata:00007FF71A6EC0AC db 4Dh ; M
.rdata:00007FF71A6EC0AD db 37h ; 7
.rdata:00007FF71A6EC0AE db 0AFh
.rdata:00007FF71A6EC0AF db 0C8h
.rdata:00007FF71A6EC0B0 db 46h ; F
.rdata:00007FF71A6EC0B1 db 8Eh
.rdata:00007FF71A6EC0B2 db 13h
.rdata:00007FF71A6EC0B3 db 0ADh
.rdata:00007FF71A6EC0B4 db 2Ah ; *
.rdata:00007FF71A6EC0B5 db 1Ch
.rdata:00007FF71A6EC0B6 db 4Bh ; K
.rdata:00007FF71A6EC0B7 db 0B1h
.rdata:00007FF71A6EC0B8 db 47h ; G
.rdata:00007FF71A6EC0B9 db 2Dh ; -
.rdata:00007FF71A6EC0BA db 2Eh ; .
.rdata:00007FF71A6EC0BB db 0A2h
.rdata:00007FF71A6EC0BC db 3Bh ; ;
.rdata:00007FF71A6EC0BD db 9Ah
.rdata:00007FF71A6EC0BE db 8Ch
.rdata:00007FF71A6EC0BF db 0F7h
.rdata:00007FF71A6EC0C0 db 3Eh ; >
.rdata:00007FF71A6EC0C1 db 51h ; Q
.rdata:00007FF71A6EC0C2 db 48h ; H
.rdata:00007FF71A6EC0C3 db 8Dh
.rdata:00007FF71A6EC0C4 db 0B4h
.rdata:00007FF71A6EC0C5 db 2Fh ; /
.rdata:00007FF71A6EC0C6 db 0EDh
.rdata:00007FF71A6EC0C7 db 0D5h
.rdata:00007FF71A6EC0C8 db 83h
.rdata:00007FF71A6EC0C9 db 42h ; B
.rdata:00007FF71A6EC0CA db 69h ; i
.rdata:00007FF71A6EC0CB db 34h ; 4
.rdata:00007FF71A6EC0CC db 86h
.rdata:00007FF71A6EC0CD db 6Eh ; n
.rdata:00007FF71A6EC0CE db 0E3h
.rdata:00007FF71A6EC0CF db 36h ; 6
.rdata:00007FF71A6EC0D0 db 0FFh
.rdata:00007FF71A6EC0D1 db 0A3h
.rdata:00007FF71A6EC0D2 db 33h ; 3
.rdata:00007FF71A6EC0D3 db 59h ; Y
.rdata:00007FF71A6EC0D4 db 0A6h
.rdata:00007FF71A6EC0D5 db 0Eh
.rdata:00007FF71A6EC0D6 db 8Ah
.rdata:00007FF71A6EC0D7 db 7
.rdata:00007FF71A6EC0D8 db 0B7h
.rdata:00007FF71A6EC0D9 db 0Bh
.rdata:00007FF71A6EC0DA db 0AAh
.rdata:00007FF71A6EC0DB db 0BEh
.rdata:00007FF71A6EC0DC db 0CAh
.rdata:00007FF71A6EC0DD db 87h
.rdata:00007FF71A6EC0DE db 1Fh
.rdata:00007FF71A6EC0DF db 79h ; y
.rdata:00007FF71A6EC0E0 db 0C3h
.rdata:00007FF71A6EC0E1 db 0ECh
.rdata:00007FF71A6EC0E2 db 75h ; u
.rdata:00007FF71A6EC0E3 db 0DCh
.rdata:00007FF71A6EC0E4 db 68h ; h
.rdata:00007FF71A6EC0E5 db 6
.rdata:00007FF71A6EC0E6 db 58h ; X
.rdata:00007FF71A6EC0E7 db 0C4h
.rdata:00007FF71A6EC0E8 db 29h ; )
.rdata:00007FF71A6EC0E9 db 89h
.rdata:00007FF71A6EC0EA db 54h ; T
.rdata:00007FF71A6EC0EB db 0A8h
.rdata:00007FF71A6EC0EC db 3Ch ; <
.rdata:00007FF71A6EC0ED db 0BBh
.rdata:00007FF71A6EC0EE db 4Ah ; J
.rdata:00007FF71A6EC0EF db 1Eh
.rdata:00007FF71A6EC0F0 db 1Bh
.rdata:00007FF71A6EC0F1 db 0E1h
.rdata:00007FF71A6EC0F2 db 0BDh
.rdata:00007FF71A6EC0F3 db 71h ; q
.rdata:00007FF71A6EC0F4 db 0DBh
.rdata:00007FF71A6EC0F5 db 52h ; R
.rdata:00007FF71A6EC0F6 db 41h ; A
.rdata:00007FF71A6EC0F7 db 0E2h
.rdata:00007FF71A6EC0F8 db 0DAh
.rdata:00007FF71A6EC0F9 db 0D3h
.rdata:00007FF71A6EC0FA db 0F9h
.rdata:00007FF71A6EC0FB db 14h
.rdata:00007FF71A6EC0FC db 26h ; &
.rdata:00007FF71A6EC0FD db 7Ah ; z
.rdata:00007FF71A6EC0FE db 53h ; S
.rdata:00007FF71A6EC0FF db 9Bh
.rdata:00007FF71A6EC100 db 81h
.rdata:00007FF71A6EC101 db 0CFh
.rdata:00007FF71A6EC102 db 0Ch
.rdata:00007FF71A6EC103 db 35h ; 5
.rdata:00007FF71A6EC104 db 40h ; @
.rdata:00007FF71A6EC105 db 9Eh
.rdata:00007FF71A6EC106 db 0CEh
.rdata:00007FF71A6EC107 db 5Dh ; ]
.rdata:00007FF71A6EC108 db 67h ; g
.rdata:00007FF71A6EC109 db 0C1h
.rdata:00007FF71A6EC10A db 0FCh
.rdata:00007FF71A6EC10B db 6Bh ; k
.rdata:00007FF71A6EC10C db 6Fh ; o
.rdata:00007FF71A6EC10D db 93h
.rdata:00007FF71A6EC10E db 0FBh
.rdata:00007FF71A6EC10F db 9Dh
.rdata:00007FF71A6EC110 db 8Bh
.rdata:00007FF71A6EC111 db 30h ; 0
.rdata:00007FF71A6EC112 db 76h ; v
.rdata:00007FF71A6EC113 db 4Fh ; O
.rdata:00007FF71A6EC114 db 5Ch ;
.rdata:00007FF71A6EC115 db 6Ah ; j
.rdata:00007FF71A6EC116 db 0F0h
.rdata:00007FF71A6EC117 db 1Ah
.rdata:00007FF71A6EC118 db 1
.rdata:00007FF71A6EC119 db 0F2h
.rdata:00007FF71A6EC11A db 0F3h
.rdata:00007FF71A6EC11B db 7Eh ; ~
.rdata:00007FF71A6EC11C db 0C6h
.rdata:00007FF71A6EC11D db 28h ; (
.rdata:00007FF71A6EC11E db 0F5h
.rdata:00007FF71A6EC11F db 0E7h
.rdata:00007FF71A6EC120 db 99h
.rdata:00007FF71A6EC121 db 0F8h
.rdata:00007FF71A6EC122 db 0C7h
.rdata:00007FF71A6EC123 db 74h ; t
.rdata:00007FF71A6EC124 db 0FDh
.rdata:00007FF71A6EC125 db 82h
.rdata:00007FF71A6EC126 db 0E8h
.rdata:00007FF71A6EC127 db 0EEh
.rdata:00007FF71A6EC128 db 9
.rdata:00007FF71A6EC129 db 55h ; U
.rdata:00007FF71A6EC12A db 77h ; w
.rdata:00007FF71A6EC12B db 44h ; D
.rdata:00007FF71A6EC12C db 22h ; "
.rdata:00007FF71A6EC12D db 0AEh
.rdata:00007FF71A6EC12E db 5Eh ; ^
.rdata:00007FF71A6EC12F db 0D8h
.rdata:00007FF71A6EC130 db 12h
.rdata:00007FF71A6EC131 db 4Ch ; L
.rdata:00007FF71A6EC132 db 88h
.rdata:00007FF71A6EC133 db 97h
.rdata:00007FF71A6EC134 db 0E9h
.rdata:00007FF71A6EC135 db 3Fh ; ?
.rdata:00007FF71A6EC136 db 38h ; 8
.rdata:00007FF71A6EC137 db 98h
.rdata:00007FF71A6EC138 db 0DEh
.rdata:00007FF71A6EC139 db 6Ch ; l
.rdata:00007FF71A6EC13A db 0CDh
.rdata:00007FF71A6EC13B db 50h ; P
.rdata:00007FF71A6EC13C db 0E0h
.rdata:00007FF71A6EC13D db 6Dh ; m
.rdata:00007FF71A6EC13E db 32h ; 2
.rdata:00007FF71A6EC13F db 43h ; C
.rdata:00007FF71A6EC140 db 61h ; a
.rdata:00007FF71A6EC141 db 0A1h
.rdata:00007FF71A6EC142 db 0Ah
.rdata:00007FF71A6EC143 db 0B2h
.rdata:00007FF71A6EC144 db 5Fh ; _
.rdata:00007FF71A6EC145 db 0DDh
.rdata:00007FF71A6EC146 db 9Fh
.rdata:00007FF71A6EC147 db 0E4h
.rdata:00007FF71A6EC148 db 7Dh ; }
.rdata:00007FF71A6EC149 db 0B0h
.rdata:00007FF71A6EC14A db 16h
.rdata:00007FF71A6EC14B db 3Dh ; =
.rdata:00007FF71A6EC14C db 2Ch ; ,
.rdata:00007FF71A6EC14D db 0FAh
.rdata:00007FF71A6EC14E db 0C2h
.rdata:00007FF71A6EC14F db 0A4h
.rdata:00007FF71A6EC150 db 0B9h
.rdata:00007FF71A6EC151 db 66h ; f
.rdata:00007FF71A6EC152 db 0BAh
.rdata:00007FF71A6EC153 db 0D0h
.rdata:00007FF71A6EC154 db 92h
.rdata:00007FF71A6EC155 db 0D6h
.rdata:00007FF71A6EC156 db 78h ; x
.rdata:00007FF71A6EC157 db 0DFh
.rdata:00007FF71A6EC158 db 0ABh
.rdata:00007FF71A6EC159 db 0B5h
.rdata:00007FF71A6EC15A db 27h ; '
.rdata:00007FF71A6EC15B db 8Fh
.rdata:00007FF71A6EC15C db 0CCh
.rdata:00007FF71A6EC15D db 4
.rdata:00007FF71A6EC15E db 62h ; b
.rdata:00007FF71A6EC15F db 0D9h
.rdata:00007FF71A6EC160 db 0A5h
.rdata:00007FF71A6EC161 db 0C9h
.rdata:00007FF71A6EC162 db 0BCh
.rdata:00007FF71A6EC163 db 19h
.rdata:00007FF71A6EC164 db 85h
.rdata:00007FF71A6EC165 db 0Dh
.rdata:00007FF71A6EC166 db 80h
.rdata:00007FF71A6EC167 db 5Ah ; Z
.rdata:00007FF71A6EC168 db 3Ah ; :
.rdata:00007FF71A6EC169 db 0F6h
.rdata:00007FF71A6EC16A db 17h
.rdata:00007FF71A6EC16B db 0B6h
.rdata:00007FF71A6EC16C db 0B3h
.rdata:00007FF71A6EC16D db 31h ; 1
.rdata:00007FF71A6EC16E db 0BFh
.rdata:00007FF71A6EC16F db 0E5h
.rdata:00007FF71A6EC170 db 60h ; `
.rdata:00007FF71A6EC171 db 18h
.rdata:00007FF71A6EC172 db 91h
.rdata:00007FF71A6EC173 db 0
.rdata:00007FF71A6EC174 db 0D4h
.rdata:00007FF71A6EC175 db 73h ; s
.rdata:00007FF71A6EC176 db 20h
.rdata:00007FF71A6EC177 db 0C5h
.rdata:00007FF71A6EC178 db 0Fh
.rdata:00007FF71A6EC179 db 90h
.rdata:00007FF71A6EC17A db 57h ; W
.rdata:00007FF71A6EC17B db 4Eh ; N
.rdata:00007FF71A6EC17C db 3
.rdata:00007FF71A6EC17D db 72h ; r
.rdata:00007FF71A6EC17E db 24h ; .rdata:00007FF71A6EC17F db 0A9h .rdata:00007FF71A6EC180 unk_7FF71A6EC180 db 0 ; DATA XREF: main+3189↑o .rdata:00007FF71A6EC181 db 0 .rdata:00007FF71A6EC182 db 0 .rdata:00007FF71A6EC183 db 1 .rdata:00007FF71A6EC184 db 0 .rdata:00007FF71A6EC185 db 0 .rdata:00007FF71A6EC186 db 0 .rdata:00007FF71A6EC187 db 2 .rdata:00007FF71A6EC188 db 0 .rdata:00007FF71A6EC189 db 0 .rdata:00007FF71A6EC18A db 0 .rdata:00007FF71A6EC18B db 4 .rdata:00007FF71A6EC18C db 0 .rdata:00007FF71A6EC18D db 0 .rdata:00007FF71A6EC18E db 0 .rdata:00007FF71A6EC18F db 8 .rdata:00007FF71A6EC190 db 0 .rdata:00007FF71A6EC191 db 0 .rdata:00007FF71A6EC192 db 0 .rdata:00007FF71A6EC193 db 10h .rdata:00007FF71A6EC194 db 0 .rdata:00007FF71A6EC195 db 0 .rdata:00007FF71A6EC196 db 0 .rdata:00007FF71A6EC197 db 20h .rdata:00007FF71A6EC198 db 0 .rdata:00007FF71A6EC199 db 0 .rdata:00007FF71A6EC19A db 0 .rdata:00007FF71A6EC19B db 40h ; @ .rdata:00007FF71A6EC19C db 0 .rdata:00007FF71A6EC19D db 0 .rdata:00007FF71A6EC19E db 0 .rdata:00007FF71A6EC19F db 80h .rdata:00007FF71A6EC1A0 db 0 .rdata:00007FF71A6EC1A1 db 0 .rdata:00007FF71A6EC1A2 db 0 .rdata:00007FF71A6EC1A3 db 1Bh .rdata:00007FF71A6EC1A4 db 0 .rdata:00007FF71A6EC1A5 db 0 .rdata:00007FF71A6EC1A6 db 0 .rdata:00007FF71A6EC1A7 db 36h ; 6 .rdata:00007FF71A6EC1A8 db 0 .rdata:00007FF71A6EC1A9 db 0 .rdata:00007FF71A6EC1AA db 0 .rdata:00007FF71A6EC1AB db 0 .rdata:00007FF71A6EC1AC db 0 .rdata:00007FF71A6EC1AD db 0 .rdata:00007FF71A6EC1AE db 0 .rdata:00007FF71A6EC1AF db 0 .rdata:00007FF71A6EC1B0 db 0 .rdata:00007FF71A6EC1B1 db 0 .rdata:00007FF71A6EC1B2 db 0 .rdata:00007FF71A6EC1B3 db 0 .rdata:00007FF71A6EC1B4 db 0 .rdata:00007FF71A6EC1B5 db 0 .rdata:00007FF71A6EC1B6 db 0 .rdata:00007FF71A6EC1B7 db 0 .rdata:00007FF71A6EC1B8 db 0 .rdata:00007FF71A6EC1B9 db 0 .rdata:00007FF71A6EC1BA db 0 .rdata:00007FF71A6EC1BB db 0 .rdata:00007FF71A6EC1BC db 0 .rdata:00007FF71A6EC1BD db 0 .rdata:00007FF71A6EC1BE db 0 .rdata:00007FF71A6EC1BF db 0 .rdata:00007FF71A6EC1C0 unk_7FF71A6EC1C0 db 0F2h ; DATA XREF: main+7175↑o .rdata:00007FF71A6EC1C1 db 65h ; e .rdata:00007FF71A6EC1C2 db 12h .rdata:00007FF71A6EC1C3 db 0F9h .rdata:00007FF71A6EC1C4 db 2Fh ; / .rdata:00007FF71A6EC1C5 db 64h ; d .rdata:00007FF71A6EC1C6 db 28h ; ( .rdata:00007FF71A6EC1C7 db 7Dh ; } .rdata:00007FF71A6EC1C8 db 0C0h .rdata:00007FF71A6EC1C9 db 0D0h .rdata:00007FF71A6EC1CA db 45h ; E .rdata:00007FF71A6EC1CB db 5Bh ; [ .rdata:00007FF71A6EC1CC db 25h ; % .rdata:00007FF71A6EC1CD db 0DAh .rdata:00007FF71A6EC1CE db 24h ;
.rdata:00007FF71A6EC1CF db 15h
.rdata:00007FF71A6EC1D0 db 0A6h
.rdata:00007FF71A6EC1D1 db 9Ch
.rdata:00007FF71A6EC1D2 db 1Dh
.rdata:00007FF71A6EC1D3 db 0ACh
.rdata:00007FF71A6EC1D4 db 85h
.rdata:00007FF71A6EC1D5 db 42h ; B
.rdata:00007FF71A6EC1D6 db 0ABh
.rdata:00007FF71A6EC1D7 db 28h ; (
.rdata:00007FF71A6EC1D8 db 0D3h
.rdata:00007FF71A6EC1D9 db 4Ch ; L
.rdata:00007FF71A6EC1DA db 2Ch ; ,
.rdata:00007FF71A6EC1DB db 75h ; u
.rdata:00007FF71A6EC1DC db 0DCh
.rdata:00007FF71A6EC1DD db 0DAh
.rdata:00007FF71A6EC1DE db 30h ; 0
.rdata:00007FF71A6EC1DF db 0C7h
.rdata:00007FF71A6EC1E0 aInputFlag db 'input flag: ',0
这是你要的数据
我顺便把这个混淆程序的基本块给你:
.text:00007FF61B781B38 mov rax, cs:__imp___acrt_iob_func
.text:00007FF61B781B3F call rax ; __imp___acrt_iob_func
.text:00007FF61B781B41 mov rdx, rax
.text:00007FF61B781B44 lea rax, [rbp+8F0h+Buffer]
.text:00007FF61B781B4B mov r8, rdx ; Stream
.text:00007FF61B781B4E mov edx, 3E8h ; MaxCount
.text:00007FF61B781B53 mov rcx, rax ; Buffer
.text:00007FF61B781B56 call fgets
.text:00007FF61B781B5B test rax, rax
.text:00007FF61B781B5E setz al
.text:00007FF61B781B61 test al, al
.text:00007FF61B781B63 jz short loc_7FF61B781B7E
.text:00007FF61B781B65 mov [rbp+8F0h+var_944], 0
.text:00007FF61B781B6C mov rax, [rbp+8F0h+var_950]
.text:00007FF61B781B70 xor al, 0FFh
.text:00007FF61B781B72 mov [rbp+8F0h+var_60], rax
.text:00007FF61B781B79 jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255
.text:00007FF61B781B7E ; ---------------------------------------------------------------------------
.text:00007FF61B781B7E
.text:00007FF61B781B7E loc_7FF61B781B7E: ; CODE XREF: main+493↑j
.text:00007FF61B781B7E xor eax, eax
.text:00007FF61B781B80 nop
.text:00007FF61B781B81 nop
.text:00007FF61B781B82 nop
.text:00007FF61B781B83 nop
.text:00007FF61B781B84 nop
.text:00007FF61B781B85 nop
.text:00007FF61B781B86 nop
.text:00007FF61B781B87 nop
.text:00007FF61B781B88 mov [rbp+8F0h+var_70], rax
.text:00007FF61B781B8F xor eax, eax
.text:00007FF61B781B91 nop
.text:00007FF61B781B92 nop
.text:00007FF61B781B93 nop
.text:00007FF61B781B94 nop
.text:00007FF61B781B95 nop
.text:00007FF61B781B96 nop
.text:00007FF61B781B97 nop
.text:00007FF61B781B98 nop
.text:00007FF61B781B99 mov [rbp+8F0h+var_68], rax
.text:00007FF61B781BA0 mov rax, [rbp+8F0h+var_950]
.text:00007FF61B781BA4 xor rax, 2
.text:00007FF61B781BA8 mov [rbp+8F0h+var_60], rax
.text:00007FF61B781BAF jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

.text:00007FF61B7865E0 movzx eax, [rbp+8F0h+var_44]
.text:00007FF61B7865E7 test al, al
.text:00007FF61B7865E9 jns short loc_7FF61B7865F2
.text:00007FF61B7865EB mov eax, 1Bh
.text:00007FF61B7865F0 jmp short loc_7FF61B7865F7
.text:00007FF61B7865F2 ; ---------------------------------------------------------------------------
.text:00007FF61B7865F2
.text:00007FF61B7865F2 loc_7FF61B7865F2: ; CODE XREF: main+4F19↑j
.text:00007FF61B7865F2 mov eax, 0
.text:00007FF61B7865F7
.text:00007FF61B7865F7 loc_7FF61B7865F7: ; CODE XREF: main+4F20↑j
.text:00007FF61B7865F7 mov [rbp+8F0h+var_42], al
.text:00007FF61B7865FD xor eax, eax
.text:00007FF61B7865FF nop
.text:00007FF61B786600 nop
.text:00007FF61B786601 nop
.text:00007FF61B786602 nop
.text:00007FF61B786603 nop
.text:00007FF61B786604 nop
.text:00007FF61B786605 nop
.text:00007FF61B786606 nop
.text:00007FF61B786607 mov [rbp+8F0h+var_68], rax
.text:00007FF61B78660E mov rax, [rbp+8F0h+var_950]
.text:00007FF61B786612 xor rax, 322h
.text:00007FF61B786618 mov [rbp+8F0h+var_60], rax
.text:00007FF61B78661F jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

.text:00007FF61B781D20 cmp dword ptr [rbp+8F0h+Size], 0
.text:00007FF61B781D27 jz short loc_7FF61B781D4E
.text:00007FF61B781D29 xor eax, eax
.text:00007FF61B781D2B nop
.text:00007FF61B781D2C nop
.text:00007FF61B781D2D nop
.text:00007FF61B781D2E nop
.text:00007FF61B781D2F nop
.text:00007FF61B781D30 nop
.text:00007FF61B781D31 nop
.text:00007FF61B781D32 nop
.text:00007FF61B781D33 mov [rbp+8F0h+var_68], rax
.text:00007FF61B781D3A mov rax, [rbp+8F0h+var_950]
.text:00007FF61B781D3E xor rax, 4
.text:00007FF61B781D42 mov [rbp+8F0h+var_60], rax
.text:00007FF61B781D49 jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255
.text:00007FF61B781D4E ; ---------------------------------------------------------------------------
.text:00007FF61B781D4E
.text:00007FF61B781D4E loc_7FF61B781D4E: ; CODE XREF: main+657↑j
.text:00007FF61B781D4E xor eax, eax
.text:00007FF61B781D50 nop
.text:00007FF61B781D51 nop
.text:00007FF61B781D52 nop
.text:00007FF61B781D53 nop
.text:00007FF61B781D54 nop
.text:00007FF61B781D55 nop
.text:00007FF61B781D56 nop
.text:00007FF61B781D57 nop
.text:00007FF61B781D58 mov [rbp+8F0h+var_68], rax
.text:00007FF61B781D5F mov rax, [rbp+8F0h+var_950]
.text:00007FF61B781D63 xor rax, 6
.text:00007FF61B781D67 mov [rbp+8F0h+var_60], rax
.text:00007FF61B781D6E jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

.text:00007FF61B78685B rep movzx eax, [rbp+8F0h+var_45]
.text:00007FF61B786863 test al, al
.text:00007FF61B786865 jns short loc_7FF61B78686E
.text:00007FF61B786867 mov eax, 1Bh
.text:00007FF61B78686C jmp short loc_7FF61B786873
.text:00007FF61B78686E ; ---------------------------------------------------------------------------
.text:00007FF61B78686E
.text:00007FF61B78686E loc_7FF61B78686E: ; CODE XREF: main+5195↑j
.text:00007FF61B78686E mov eax, 0
.text:00007FF61B786873
.text:00007FF61B786873 loc_7FF61B786873: ; CODE XREF: main+519C↑j
.text:00007FF61B786873 mov [rbp+8F0h+var_42], al
.text:00007FF61B786879 xor eax, eax
.text:00007FF61B78687B nop
.text:00007FF61B78687C nop
.text:00007FF61B78687D nop
.text:00007FF61B78687E nop
.text:00007FF61B78687F nop
.text:00007FF61B786880 nop
.text:00007FF61B786881 nop
.text:00007FF61B786882 nop
.text:00007FF61B786883 mov [rbp+8F0h+var_68], rax
.text:00007FF61B78688A mov rax, [rbp+8F0h+var_950]
.text:00007FF61B78688E xor rax, 325h
.text:00007FF61B786894 mov [rbp+8F0h+var_60], rax
.text:00007FF61B78689B jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

.text:00007FF61B7816D0 main proc near ; CODE XREF: sub_7FF61B781154+1E7↑p
.text:00007FF61B7816D0 ; DATA XREF: .pdata:00007FF61B79009C↓o
.text:00007FF61B7816D0
.text:00007FF61B7816D0 var_970 = qword ptr -970h
.text:00007FF61B7816D0 var_950 = qword ptr -950h
.text:00007FF61B7816D0 var_944 = dword ptr -944h
.text:00007FF61B7816D0 var_940 = byte ptr -940h
.text:00007FF61B7816D0 var_938 = qword ptr -938h
.text:00007FF61B7816D0 var_930 = qword ptr -930h
.text:00007FF61B7816D0 var_927 = byte ptr -927h
.text:00007FF61B7816D0 var_926 = byte ptr -926h
.text:00007FF61B7816D0 var_925 = byte ptr -925h
.text:00007FF61B7816D0 var_923 = byte ptr -923h
.text:00007FF61B7816D0 var_922 = byte ptr -922h
.text:00007FF61B7816D0 var_921 = byte ptr -921h
.text:00007FF61B7816D0 var_920 = dword ptr -920h
.text:00007FF61B7816D0 var_8CB = byte ptr -8CBh
.text:00007FF61B7816D0 var_8C9 = byte ptr -8C9h
.text:00007FF61B7816D0 var_870 = qword ptr -870h
.text:00007FF61B7816D0 var_868 = qword ptr -868h
.text:00007FF61B7816D0 Buffer = byte ptr -860h
.text:00007FF61B7816D0 Buf1 = byte ptr -470h
.text:00007FF61B7816D0 var_70 = qword ptr -70h
.text:00007FF61B7816D0 var_68 = qword ptr -68h
.text:00007FF61B7816D0 var_60 = qword ptr -60h
.text:00007FF61B7816D0 var_54 = dword ptr -54h
.text:00007FF61B7816D0 var_4F = byte ptr -4Fh
.text:00007FF61B7816D0 var_4D = byte ptr -4Dh
.text:00007FF61B7816D0 var_4C = byte ptr -4Ch
.text:00007FF61B7816D0 var_4B = byte ptr -4Bh
.text:00007FF61B7816D0 var_4A = byte ptr -4Ah
.text:00007FF61B7816D0 var_49 = byte ptr -49h
.text:00007FF61B7816D0 var_48 = byte ptr -48h
.text:00007FF61B7816D0 var_47 = byte ptr -47h
.text:00007FF61B7816D0 var_46 = byte ptr -46h
.text:00007FF61B7816D0 var_45 = byte ptr -45h
.text:00007FF61B7816D0 var_44 = byte ptr -44h
.text:00007FF61B7816D0 var_43 = byte ptr -43h
.text:00007FF61B7816D0 var_42 = byte ptr -42h
.text:00007FF61B7816D0 var_41 = byte ptr -41h
.text:00007FF61B7816D0 var_40 = dword ptr -40h
.text:00007FF61B7816D0 var_3C = dword ptr -3Ch
.text:00007FF61B7816D0 var_38 = dword ptr -38h
.text:00007FF61B7816D0 var_34 = dword ptr -34h
.text:00007FF61B7816D0 var_30 = dword ptr -30h
.text:00007FF61B7816D0 var_2C = dword ptr -2Ch
.text:00007FF61B7816D0 Size = qword ptr -28h
.text:00007FF61B7816D0 var_20 = dword ptr -20h
.text:00007FF61B7816D0 var_1C = dword ptr -1Ch
.text:00007FF61B7816D0 var_18 = dword ptr -18h
.text:00007FF61B7816D0 var_14 = dword ptr -14h
.text:00007FF61B7816D0 arg_30FFF708 = dword ptr 30FFF718h
.text:00007FF61B7816D0
.text:00007FF61B7816D0 push rbp
.text:00007FF61B7816D1 push rdi
.text:00007FF61B7816D2 sub rsp, 968h
.text:00007FF61B7816D9 lea rbp, [rsp+80h]
.text:00007FF61B7816E1 call sub_7FF61B788A67
.text:00007FF61B7816E6 lea rdx, [rbp+8F0h+Buf1]
.text:00007FF61B7816ED mov eax, 0
.text:00007FF61B7816F2 mov ecx, 80h
.text:00007FF61B7816F7 mov rdi, rdx
.text:00007FF61B7816FA rep stosq
.text:00007FF61B7816FD mov rax, 706050403020100h
.text:00007FF61B781707 mov rdx, 0F0E0D0C0B0A0908h
.text:00007FF61B781711 mov [rbp+8F0h+var_870], rax
.text:00007FF61B781718 mov [rbp+8F0h+var_868], rdx
.text:00007FF61B78171F mov [rbp+8F0h+var_14], 0
.text:00007FF61B781729 mov [rbp+8F0h+var_18], 0
.text:00007FF61B781733 mov [rbp+8F0h+var_1C], 0
.text:00007FF61B78173D mov [rbp+8F0h+var_20], 0
.text:00007FF61B781747 mov [rbp+8F0h+Size], 0
.text:00007FF61B781752 mov [rbp+8F0h+var_2C], 0
.text:00007FF61B78175C mov [rbp+8F0h+var_30], 0
.text:00007FF61B781766 mov [rbp+8F0h+var_944], 0
.text:00007FF61B78176D lea rcx, [rbp+8F0h+var_944]
.text:00007FF61B781771 xor eax, eax
.text:00007FF61B781773 nop
.text:00007FF61B781774 nop
.text:00007FF61B781775 nop
.text:00007FF61B781776 nop
.text:00007FF61B781777 nop
.text:00007FF61B781778 nop
.text:00007FF61B781779 nop
.text:00007FF61B78177A nop
.text:00007FF61B78177B xor rax, rcx
.text:00007FF61B78177E mov [rbp+8F0h+var_950], rax
.text:00007FF61B781782 mov rax, [rbp+8F0h+var_950]
.text:00007FF61B781786 mov [rbp+8F0h+var_60], rax
.text:00007FF61B78178D mov [rbp+8F0h+var_68], 0
.text:00007FF61B781798 xor eax, eax
.text:00007FF61B78179A nop
.text:00007FF61B78179B nop
.text:00007FF61B78179C nop
.text:00007FF61B78179D nop
.text:00007FF61B78179E nop
.text:00007FF61B78179F nop
.text:00007FF61B7817A0 nop
.text:00007FF61B7817A1 nop
.text:00007FF61B7817A2 mov [rbp+8F0h+var_70], rax
.text:00007FF61B7817A9 jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

lea eax, aInputFlag ; "input flag: "
mov rcx, rax
call sub_7FF61B78A090
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 1
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

.text:00007FF61B781E0A rep mov rax, [rbp+8F0h+Size]
.text:00007FF61B781E12 sub rax, 1
.text:00007FF61B781E16 movzx eax, [rbp+rax+8F0h+Buffer]
.text:00007FF61B781E1E cmp al, 0Ah
.text:00007FF61B781E20 jnz short loc_7FF61B781E47
.text:00007FF61B781E22 xor eax, eax
.text:00007FF61B781E24 nop
.text:00007FF61B781E25 nop
.text:00007FF61B781E26 nop
.text:00007FF61B781E27 nop
.text:00007FF61B781E28 nop
.text:00007FF61B781E29 nop
.text:00007FF61B781E2A nop
.text:00007FF61B781E2B nop
.text:00007FF61B781E2C mov [rbp+8F0h+var_68], rax
.text:00007FF61B781E33 mov rax, [rbp+8F0h+var_950]
.text:00007FF61B781E37 xor rax, 5
.text:00007FF61B781E3B mov [rbp+8F0h+var_60], rax
.text:00007FF61B781E42 jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255
.text:00007FF61B781E47 ; ---------------------------------------------------------------------------
.text:00007FF61B781E47
.text:00007FF61B781E47 loc_7FF61B781E47: ; CODE XREF: main+750↑j
.text:00007FF61B781E47 xor eax, eax
.text:00007FF61B781E49 nop
.text:00007FF61B781E4A nop
.text:00007FF61B781E4B nop
.text:00007FF61B781E4C nop
.text:00007FF61B781E4D nop
.text:00007FF61B781E4E nop
.text:00007FF61B781E4F nop
.text:00007FF61B781E50 nop
.text:00007FF61B781E51 mov [rbp+8F0h+var_68], rax
.text:00007FF61B781E58 mov rax, [rbp+8F0h+var_950]
.text:00007FF61B781E5C xor rax, 6
.text:00007FF61B781E60 mov [rbp+8F0h+var_60], rax
.text:00007FF61B781E67 jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

.text:00007FF61B786AD8 movzx eax, [rbp+8F0h+var_46]
.text:00007FF61B786ADF test al, al
.text:00007FF61B786AE1 jns short loc_7FF61B786AEA
.text:00007FF61B786AE3 mov eax, 1Bh
.text:00007FF61B786AE8 jmp short loc_7FF61B786AEF
.text:00007FF61B786AEA ; ---------------------------------------------------------------------------
.text:00007FF61B786AEA
.text:00007FF61B786AEA loc_7FF61B786AEA: ; CODE XREF: main+5411↑j
.text:00007FF61B786AEA mov eax, 0
.text:00007FF61B786AEF
.text:00007FF61B786AEF loc_7FF61B786AEF: ; CODE XREF: main+5418↑j
.text:00007FF61B786AEF mov [rbp+8F0h+var_42], al
.text:00007FF61B786AF5 xor eax, eax
.text:00007FF61B786AF7 nop
.text:00007FF61B786AF8 nop
.text:00007FF61B786AF9 nop
.text:00007FF61B786AFA nop
.text:00007FF61B786AFB nop
.text:00007FF61B786AFC nop
.text:00007FF61B786AFD nop
.text:00007FF61B786AFE nop
.text:00007FF61B786AFF mov [rbp+8F0h+var_68], rax
.text:00007FF61B786B06 mov rax, [rbp+8F0h+var_950]
.text:00007FF61B786B0A xor rax, 328h
.text:00007FF61B786B10 mov [rbp+8F0h+var_60], rax
.text:00007FF61B786B17 jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep lea rax, [rbp+8F0h+Buffer]
mov rcx, rax ; Str
call strlen
mov [rbp+8F0h+Size], rax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 3
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

.text:00007FF61B782810 cmp [rbp+8F0h+var_14], 3
.text:00007FF61B782817 jg short loc_7FF61B78283E
.text:00007FF61B782819 xor eax, eax
.text:00007FF61B78281B nop
.text:00007FF61B78281C nop
.text:00007FF61B78281D nop
.text:00007FF61B78281E nop
.text:00007FF61B78281F nop
.text:00007FF61B782820 nop
.text:00007FF61B782821 nop
.text:00007FF61B782822 nop
.text:00007FF61B782823 mov [rbp+8F0h+var_68], rax
.text:00007FF61B78282A mov rax, [rbp+8F0h+var_950]
.text:00007FF61B78282E xor rax, 16h
.text:00007FF61B782832 mov [rbp+8F0h+var_60], rax
.text:00007FF61B782839 jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255
.text:00007FF61B78283E ; ---------------------------------------------------------------------------
.text:00007FF61B78283E
.text:00007FF61B78283E loc_7FF61B78283E: ; CODE XREF: main+1147↑j
.text:00007FF61B78283E xor eax, eax
.text:00007FF61B782840 nop
.text:00007FF61B782841 nop
.text:00007FF61B782842 nop
.text:00007FF61B782843 nop
.text:00007FF61B782844 nop
.text:00007FF61B782845 nop
.text:00007FF61B782846 nop
.text:00007FF61B782847 nop
.text:00007FF61B782848 mov [rbp+8F0h+var_68], rax
.text:00007FF61B78284F mov rax, [rbp+8F0h+var_950]
.text:00007FF61B782853 xor rax, 32h
.text:00007FF61B782857 mov [rbp+8F0h+var_60], rax
.text:00007FF61B78285E jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

.text:00007FF61B786D53 rep movzx eax, [rbp+8F0h+var_47]
.text:00007FF61B786D5B test al, al
.text:00007FF61B786D5D jns short loc_7FF61B786D66
.text:00007FF61B786D5F mov eax, 1Bh
.text:00007FF61B786D64 jmp short loc_7FF61B786D6B
.text:00007FF61B786D66 ; ---------------------------------------------------------------------------
.text:00007FF61B786D66
.text:00007FF61B786D66 loc_7FF61B786D66: ; CODE XREF: main+568D↑j
.text:00007FF61B786D66 mov eax, 0
.text:00007FF61B786D6B
.text:00007FF61B786D6B loc_7FF61B786D6B: ; CODE XREF: main+5694↑j
.text:00007FF61B786D6B mov [rbp+8F0h+var_42], al
.text:00007FF61B786D71 xor eax, eax
.text:00007FF61B786D73 nop
.text:00007FF61B786D74 nop
.text:00007FF61B786D75 nop
.text:00007FF61B786D76 nop
.text:00007FF61B786D77 nop
.text:00007FF61B786D78 nop
.text:00007FF61B786D79 nop
.text:00007FF61B786D7A nop
.text:00007FF61B786D7B mov [rbp+8F0h+var_68], rax
.text:00007FF61B786D82 mov rax, [rbp+8F0h+var_950]
.text:00007FF61B786D86 xor rax, 32Bh
.text:00007FF61B786D8C mov [rbp+8F0h+var_60], rax
.text:00007FF61B786D93 jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

.text:00007FF61B782E03 rep cmp [rbp+8F0h+var_14], 2Bh ; '+'
.text:00007FF61B782E0B jg short loc_7FF61B782E32
.text:00007FF61B782E0D xor eax, eax
.text:00007FF61B782E0F nop
.text:00007FF61B782E10 nop
.text:00007FF61B782E11 nop
.text:00007FF61B782E12 nop
.text:00007FF61B782E13 nop
.text:00007FF61B782E14 nop
.text:00007FF61B782E15 nop
.text:00007FF61B782E16 nop
.text:00007FF61B782E17 mov [rbp+8F0h+var_68], rax
.text:00007FF61B782E1E mov rax, [rbp+8F0h+var_950]
.text:00007FF61B782E22 xor rax, 33h
.text:00007FF61B782E26 mov [rbp+8F0h+var_60], rax
.text:00007FF61B782E2D jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255
.text:00007FF61B782E32 ; ---------------------------------------------------------------------------
.text:00007FF61B782E32
.text:00007FF61B782E32 loc_7FF61B782E32: ; CODE XREF: main+173B↑j
.text:00007FF61B782E32 xor eax, eax
.text:00007FF61B782E34 nop
.text:00007FF61B782E35 nop
.text:00007FF61B782E36 nop
.text:00007FF61B782E37 nop
.text:00007FF61B782E38 nop
.text:00007FF61B782E39 nop
.text:00007FF61B782E3A nop
.text:00007FF61B782E3B nop
.text:00007FF61B782E3C mov [rbp+8F0h+var_68], rax
.text:00007FF61B782E43 mov rax, [rbp+8F0h+var_950]
.text:00007FF61B782E47 xor rax, 190h
.text:00007FF61B782E4D mov [rbp+8F0h+var_60], rax
.text:00007FF61B782E54 jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

.text:00007FF61B782FC2 rep mov eax, [rbp+8F0h+var_14]
.text:00007FF61B782FC9 and eax, 3
.text:00007FF61B782FCC test eax, eax
.text:00007FF61B782FCE jnz short loc_7FF61B782FF5
.text:00007FF61B782FD0 xor eax, eax
.text:00007FF61B782FD2 nop
.text:00007FF61B782FD3 nop
.text:00007FF61B782FD4 nop
.text:00007FF61B782FD5 nop
.text:00007FF61B782FD6 nop
.text:00007FF61B782FD7 nop
.text:00007FF61B782FD8 nop
.text:00007FF61B782FD9 nop
.text:00007FF61B782FDA mov [rbp+8F0h+var_68], rax
.text:00007FF61B782FE1 mov rax, [rbp+8F0h+var_950]
.text:00007FF61B782FE5 xor rax, 64h
.text:00007FF61B782FE9 mov [rbp+8F0h+var_60], rax
.text:00007FF61B782FF0 jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255
.text:00007FF61B782FF5 ; ---------------------------------------------------------------------------
.text:00007FF61B782FF5
.text:00007FF61B782FF5 loc_7FF61B782FF5: ; CODE XREF: main+18FE↑j
.text:00007FF61B782FF5 xor eax, eax
.text:00007FF61B782FF7 nop
.text:00007FF61B782FF8 nop
.text:00007FF61B782FF9 nop
.text:00007FF61B782FFA nop
.text:00007FF61B782FFB nop
.text:00007FF61B782FFC nop
.text:00007FF61B782FFD nop
.text:00007FF61B782FFE nop
.text:00007FF61B782FFF mov [rbp+8F0h+var_68], rax
.text:00007FF61B783006 mov rax, [rbp+8F0h+var_950]
.text:00007FF61B78300A xor al, 0C8h
.text:00007FF61B78300C mov [rbp+8F0h+var_60], rax
.text:00007FF61B783013 jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov rax, [rbp+8F0h+Size]
sub rax, 1
mov [rbp+rax+8F0h+Buffer], 0
sub [rbp+8F0h+Size], 1
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 6
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

.text:00007FF61B7852EB rep cmp [rbp+8F0h+var_18], 3
.text:00007FF61B7852F3 jg short loc_7FF61B78531C
.text:00007FF61B7852F5 xor eax, eax
.text:00007FF61B7852F7 nop
.text:00007FF61B7852F8 nop
.text:00007FF61B7852F9 nop
.text:00007FF61B7852FA nop
.text:00007FF61B7852FB nop
.text:00007FF61B7852FC nop
.text:00007FF61B7852FD nop
.text:00007FF61B7852FE nop
.text:00007FF61B7852FF mov [rbp+8F0h+var_68], rax
.text:00007FF61B785306 mov rax, [rbp+8F0h+var_950]
.text:00007FF61B78530A xor rax, 19Ch
.text:00007FF61B785310 mov [rbp+8F0h+var_60], rax
.text:00007FF61B785317 jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255
.text:00007FF61B78531C ; ---------------------------------------------------------------------------
.text:00007FF61B78531C
.text:00007FF61B78531C loc_7FF61B78531C: ; CODE XREF: main+3C23↑j
.text:00007FF61B78531C xor eax, eax
.text:00007FF61B78531E nop
.text:00007FF61B78531F nop
.text:00007FF61B785320 nop
.text:00007FF61B785321 nop
.text:00007FF61B785322 nop
.text:00007FF61B785323 nop
.text:00007FF61B785324 nop
.text:00007FF61B785325 nop
.text:00007FF61B785326 mov [rbp+8F0h+var_68], rax
.text:00007FF61B78532D mov rax, [rbp+8F0h+var_950]
.text:00007FF61B785331 xor rax, 1A4h
.text:00007FF61B785337 mov [rbp+8F0h+var_60], rax
.text:00007FF61B78533E jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov rcx, [rbp+8F0h+Size]
lea rdx, [rbp+8F0h+Buffer] ; Src
lea rax, [rbp+8F0h+Buf1]
mov r8, rcx ; Size
mov rcx, rax ; void *
call memcpy
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 0Ah
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

.text:00007FF61B785668 rep cmp [rbp+8F0h+var_1C], 0Ah
.text:00007FF61B785670 jg short loc_7FF61B785699
.text:00007FF61B785672 xor eax, eax
.text:00007FF61B785674 nop
.text:00007FF61B785675 nop
.text:00007FF61B785676 nop
.text:00007FF61B785677 nop
.text:00007FF61B785678 nop
.text:00007FF61B785679 nop
.text:00007FF61B78567A nop
.text:00007FF61B78567B nop
.text:00007FF61B78567C mov [rbp+8F0h+var_68], rax
.text:00007FF61B785683 mov rax, [rbp+8F0h+var_950]
.text:00007FF61B785687 xor rax, 1F4h
.text:00007FF61B78568D mov [rbp+8F0h+var_60], rax
.text:00007FF61B785694 jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255
.text:00007FF61B785699 ; ---------------------------------------------------------------------------
.text:00007FF61B785699
.text:00007FF61B785699 loc_7FF61B785699: ; CODE XREF: main+3FA0↑j
.text:00007FF61B785699 xor eax, eax
.text:00007FF61B78569B nop
.text:00007FF61B78569C nop
.text:00007FF61B78569D nop
.text:00007FF61B78569E nop
.text:00007FF61B78569F nop
.text:00007FF61B7856A0 nop
.text:00007FF61B7856A1 nop
.text:00007FF61B7856A2 nop
.text:00007FF61B7856A3 mov [rbp+8F0h+var_68], rax
.text:00007FF61B7856AA mov rax, [rbp+8F0h+var_950]
.text:00007FF61B7856AE xor rax, 76Ch
.text:00007FF61B7856B4 mov [rbp+8F0h+var_60], rax
.text:00007FF61B7856BB jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov rax, [rbp+8F0h+Size]
and eax, 0Fh
mov [rbp+8F0h+var_40], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 0Bh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

.text:00007FF61B785820 rep cmp [rbp+8F0h+var_18], 0Fh
.text:00007FF61B785828 jg short loc_7FF61B785851
.text:00007FF61B78582A xor eax, eax
.text:00007FF61B78582C nop
.text:00007FF61B78582D nop
.text:00007FF61B78582E nop
.text:00007FF61B78582F nop
.text:00007FF61B785830 nop
.text:00007FF61B785831 nop
.text:00007FF61B785832 nop
.text:00007FF61B785833 nop
.text:00007FF61B785834 mov [rbp+8F0h+var_68], rax
.text:00007FF61B78583B mov rax, [rbp+8F0h+var_950]
.text:00007FF61B78583F xor rax, 1F6h
.text:00007FF61B785845 mov [rbp+8F0h+var_60], rax
.text:00007FF61B78584C jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255
.text:00007FF61B785851 ; ---------------------------------------------------------------------------
.text:00007FF61B785851
.text:00007FF61B785851 loc_7FF61B785851: ; CODE XREF: main+4158↑j
.text:00007FF61B785851 xor eax, eax
.text:00007FF61B785853 nop
.text:00007FF61B785854 nop
.text:00007FF61B785855 nop
.text:00007FF61B785856 nop
.text:00007FF61B785857 nop
.text:00007FF61B785858 nop
.text:00007FF61B785859 nop
.text:00007FF61B78585A nop
.text:00007FF61B78585B mov [rbp+8F0h+var_68], rax
.text:00007FF61B785862 mov rax, [rbp+8F0h+var_950]
.text:00007FF61B785866 xor rax, 258h
.text:00007FF61B78586C mov [rbp+8F0h+var_60], rax
.text:00007FF61B785873 jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, 10h
sub eax, [rbp+8F0h+var_40]
mov [rbp+8F0h+var_2C], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 0Ch
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

.text:00007FF61B785E4B rep cmp [rbp+8F0h+var_1C], 9
.text:00007FF61B785E53 jg short loc_7FF61B785E7C
.text:00007FF61B785E55 xor eax, eax
.text:00007FF61B785E57 nop
.text:00007FF61B785E58 nop
.text:00007FF61B785E59 nop
.text:00007FF61B785E5A nop
.text:00007FF61B785E5B nop
.text:00007FF61B785E5C nop
.text:00007FF61B785E5D nop
.text:00007FF61B785E5E nop
.text:00007FF61B785E5F mov [rbp+8F0h+var_68], rax
.text:00007FF61B785E66 mov rax, [rbp+8F0h+var_950]
.text:00007FF61B785E6A xor rax, 2BDh
.text:00007FF61B785E70 mov [rbp+8F0h+var_60], rax
.text:00007FF61B785E77 jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255
.text:00007FF61B785E7C ; ---------------------------------------------------------------------------
.text:00007FF61B785E7C
.text:00007FF61B785E7C loc_7FF61B785E7C: ; CODE XREF: main+4783↑j
.text:00007FF61B785E7C xor eax, eax
.text:00007FF61B785E7E nop
.text:00007FF61B785E7F nop
.text:00007FF61B785E80 nop
.text:00007FF61B785E81 nop
.text:00007FF61B785E82 nop
.text:00007FF61B785E83 nop
.text:00007FF61B785E84 nop
.text:00007FF61B785E85 nop
.text:00007FF61B785E86 mov [rbp+8F0h+var_68], rax
.text:00007FF61B785E8D mov rax, [rbp+8F0h+var_950]
.text:00007FF61B785E91 xor rax, 5DCh
.text:00007FF61B785E97 mov [rbp+8F0h+var_60], rax
.text:00007FF61B785E9E jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

or [rax], al
add [rcx-3B7A743Eh], cl
or [rax], al
add [rcx], al
ror byte ptr [rcx+8C085h], 1
add [rcx], dh
rcl byte ptr [rax-6F6F6F70h], 90h
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 0Dh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

.text:00007FF61B786003 rep cmp [rbp+8F0h+var_18], 3
.text:00007FF61B78600B jg short loc_7FF61B786034
.text:00007FF61B78600D xor eax, eax
.text:00007FF61B78600F nop
.text:00007FF61B786010 nop
.text:00007FF61B786011 nop
.text:00007FF61B786012 nop
.text:00007FF61B786013 nop
.text:00007FF61B786014 nop
.text:00007FF61B786015 nop
.text:00007FF61B786016 nop
.text:00007FF61B786017 mov [rbp+8F0h+var_68], rax
.text:00007FF61B78601E mov rax, [rbp+8F0h+var_950]
.text:00007FF61B786022 xor rax, 2C6h
.text:00007FF61B786028 mov [rbp+8F0h+var_60], rax
.text:00007FF61B78602F jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255
.text:00007FF61B786034 ; ---------------------------------------------------------------------------
.text:00007FF61B786034
.text:00007FF61B786034 loc_7FF61B786034: ; CODE XREF: main+493B↑j
.text:00007FF61B786034 xor eax, eax
.text:00007FF61B786036 nop
.text:00007FF61B786037 nop
.text:00007FF61B786038 nop
.text:00007FF61B786039 nop
.text:00007FF61B78603A nop
.text:00007FF61B78603B nop
.text:00007FF61B78603C nop
.text:00007FF61B78603D nop
.text:00007FF61B78603E mov [rbp+8F0h+var_68], rax
.text:00007FF61B786045 mov rax, [rbp+8F0h+var_950]
.text:00007FF61B786049 xor rax, 578h
.text:00007FF61B78604F mov [rbp+8F0h+var_60], rax
.text:00007FF61B786056 jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

xrelease mov [rbp+8F0h+var_14], 0
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 0Eh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

.text:00007FF61B788158 rep cmp [rbp+8F0h+var_18], 3
.text:00007FF61B788160 jg short loc_7FF61B788189
.text:00007FF61B788162 xor eax, eax
.text:00007FF61B788164 nop
.text:00007FF61B788165 nop
.text:00007FF61B788166 nop
.text:00007FF61B788167 nop
.text:00007FF61B788168 nop
.text:00007FF61B788169 nop
.text:00007FF61B78816A nop
.text:00007FF61B78816B nop
.text:00007FF61B78816C mov [rbp+8F0h+var_68], rax
.text:00007FF61B788173 mov rax, [rbp+8F0h+var_950]
.text:00007FF61B788177 xor rax, 642h
.text:00007FF61B78817D mov [rbp+8F0h+var_60], rax
.text:00007FF61B788184 jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255
.text:00007FF61B788189 ; ---------------------------------------------------------------------------
.text:00007FF61B788189
.text:00007FF61B788189 loc_7FF61B788189: ; CODE XREF: main+6A90↑j
.text:00007FF61B788189 xor eax, eax
.text:00007FF61B78818B nop
.text:00007FF61B78818C nop
.text:00007FF61B78818D nop
.text:00007FF61B78818E nop
.text:00007FF61B78818F nop
.text:00007FF61B788190 nop
.text:00007FF61B788191 nop
.text:00007FF61B788192 nop
.text:00007FF61B788193 mov [rbp+8F0h+var_68], rax
.text:00007FF61B78819A mov rax, [rbp+8F0h+var_950]
.text:00007FF61B78819E xor rax, 6A4h
.text:00007FF61B7881A4 mov [rbp+8F0h+var_60], rax
.text:00007FF61B7881AB jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

test esp, ebx
or [rax], al
add [rbx], bh
test esp, eax
or [rax], al
add [rbp+8F0h+var_8CB], bh
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 0Fh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

.text:00007FF61B788688 rep cmp [rbp+8F0h+var_30], 20h ; ' '
.text:00007FF61B788690 jz short loc_7FF61B7886B9
.text:00007FF61B788692 xor eax, eax
.text:00007FF61B788694 nop
.text:00007FF61B788695 nop
.text:00007FF61B788696 nop
.text:00007FF61B788697 nop
.text:00007FF61B788698 nop
.text:00007FF61B788699 nop
.text:00007FF61B78869A nop
.text:00007FF61B78869B nop
.text:00007FF61B78869C mov [rbp+8F0h+var_68], rax
.text:00007FF61B7886A3 mov rax, [rbp+8F0h+var_950]
.text:00007FF61B7886A7 xor rax, 7DAh
.text:00007FF61B7886AD mov [rbp+8F0h+var_60], rax
.text:00007FF61B7886B4 jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255
.text:00007FF61B7886B9 ; ---------------------------------------------------------------------------
.text:00007FF61B7886B9
.text:00007FF61B7886B9 loc_7FF61B7886B9: ; CODE XREF: main+6FC0↑j
.text:00007FF61B7886B9 xor eax, eax
.text:00007FF61B7886BB nop
.text:00007FF61B7886BC nop
.text:00007FF61B7886BD nop
.text:00007FF61B7886BE nop
.text:00007FF61B7886BF nop
.text:00007FF61B7886C0 nop
.text:00007FF61B7886C1 nop
.text:00007FF61B7886C2 nop
.text:00007FF61B7886C3 mov [rbp+8F0h+var_68], rax
.text:00007FF61B7886CA mov rax, [rbp+8F0h+var_950]
.text:00007FF61B7886CE xor rax, 7E4h
.text:00007FF61B7886D4 mov [rbp+8F0h+var_60], rax
.text:00007FF61B7886DB jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 14h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

.text:00007FF61B788838 lea rax, [rbp+8F0h+Buf1]
.text:00007FF61B78883F mov r8d, 20h ; ' ' ; Size
.text:00007FF61B788845 lea rdx, unk_7FF61B78C1C0 ; Buf2
.text:00007FF61B78884C mov rcx, rax ; Buf1
.text:00007FF61B78884F call memcmp
.text:00007FF61B788854 test eax, eax
.text:00007FF61B788856 jnz short loc_7FF61B78887F
.text:00007FF61B788858 xor eax, eax
.text:00007FF61B78885A nop
.text:00007FF61B78885B nop
.text:00007FF61B78885C nop
.text:00007FF61B78885D nop
.text:00007FF61B78885E nop
.text:00007FF61B78885F nop
.text:00007FF61B788860 nop
.text:00007FF61B788861 nop
.text:00007FF61B788862 mov [rbp+8F0h+var_68], rax
.text:00007FF61B788869 mov rax, [rbp+8F0h+var_950]
.text:00007FF61B78886D xor rax, 7EEh
.text:00007FF61B788873 mov [rbp+8F0h+var_60], rax
.text:00007FF61B78887A jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255
.text:00007FF61B78887F ; ---------------------------------------------------------------------------
.text:00007FF61B78887F
.text:00007FF61B78887F loc_7FF61B78887F: ; CODE XREF: main+7186↑j
.text:00007FF61B78887F xor eax, eax
.text:00007FF61B788881 nop
.text:00007FF61B788882 nop
.text:00007FF61B788883 nop
.text:00007FF61B788884 nop
.text:00007FF61B788885 nop
.text:00007FF61B788886 nop
.text:00007FF61B788887 nop
.text:00007FF61B788888 nop
.text:00007FF61B788889 mov [rbp+8F0h+var_68], rax
.text:00007FF61B788890 mov rax, [rbp+8F0h+var_950]
.text:00007FF61B788894 xor rax, 7DAh
.text:00007FF61B78889A mov [rbp+8F0h+var_60], rax
.text:00007FF61B7888A1 jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

mov eax, dword ptr [rbp+8F0h+Size]
mov edx, eax
mov eax, [rbp+8F0h+var_14]
add eax, edx
mov [rbp+8F0h+var_40], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 10h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_2C]
mov edx, eax
mov eax, [rbp+8F0h+var_40]
mov [rbp+rax+8F0h+Buf1], dl
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 11h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

or [rax], al
add [rcx], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 0Eh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

xrelease mov [rbp+8F0h+var_14], 0
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 15h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_14]
shl eax, 2
cdqe
movzx eax, byte ptr [rbp+rax+8F0h+var_870]
movzx eax, al
mov [rbp+8F0h+var_34], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 17h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_14]
shl eax, 2
add eax, 1
cdqe
movzx eax, byte ptr [rbp+rax+8F0h+var_870]
movzx eax, al
shl eax, 8
or [rbp+8F0h+var_34], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 18h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_14]
shl eax, 2
add eax, 2
cdqe
movzx eax, byte ptr [rbp+rax+8F0h+var_870]
movzx eax, al
shl eax, 10h
or [rbp+8F0h+var_34], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 19h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

shl eax, 2
add eax, 3
cdqe
movzx eax, byte ptr [rbp+rax+8F0h+var_870]
movzx eax, al
shl eax, 18h
or [rbp+8F0h+var_34], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 1Ah
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_14]
cdqe
mov edx, [rbp+8F0h+var_34]
mov [rbp+rax*4+8F0h+var_920], edx
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 1Bh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

add [rbp+8F0h+var_14], 1
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 15h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255add [rbp+8F0h+var_14], 1
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 15h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_14]
sub eax, 1
cdqe
mov eax, [rbp+rax*4+8F0h+var_920]
mov [rbp+8F0h+var_3C], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 34h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

mov eax, [rbp+8F0h+var_3C]
shr eax, 8
mov [rbp+8F0h+var_34], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 65h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_3C]
movzx eax, al
mov [rbp+8F0h+var_38], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 66h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

shl [rbp+8F0h+var_38], 18h
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 67h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_34]
or eax, [rbp+8F0h+var_38]
mov [rbp+8F0h+var_3C], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 6Eh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_3C]
mov [rbp+8F0h+var_34], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 6Fh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep and [rbp+8F0h+var_34], 0FFh
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 70h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_34]
lea rdx, unk_7FF61B78C080
movzx eax, byte ptr [rax+rdx]
mov [rbp+8F0h+var_41], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 71h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

mov dh, 85h
scasd
or [rax], al
add [rcx+8B885h], cl
add [rcx], dh
rcl byte ptr [rax-6F6F6F70h], 90h
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 72h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 73h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

mov eax, 89000008h
test [rax+rcx-3FCF0000h], edi
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 78h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

test [rax+rcx-173F0000h], esi
or [rcx+8B885h], cl
add [rcx], dh
rcl byte ptr [rax-6F6F6F70h], 90h
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 79h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep and [rbp+8F0h+var_38], 0FFh
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 7Ah
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

lea rdx, unk_7FF61B78C080
movzx eax, byte ptr [rax+rdx]
mov [rbp+8F0h+var_41], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 7Bh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

test [rdi-76FFFFF8h], ebp
test [rax+31000008h], edi
rcl byte ptr [rax-6F6F6F70h], 90h
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 7Ch
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

shl [rbp+8F0h+var_38], 8
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 7Dh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_38]
or [rbp+8F0h+var_34], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 82h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_3C]
shr eax, 10h
mov [rbp+8F0h+var_38], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 83h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep and [rbp+8F0h+var_38], 0FFh
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 84h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

lea rdx, unk_7FF61B78C080
movzx eax, byte ptr [rax+rdx]
mov [rbp+8F0h+var_41], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 85h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

or [rax], al
add [rcx+8B885h], cl
add [rcx], dh
rcl byte ptr [rax-6F6F6F70h], 90h
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 86h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep shl [rbp+8F0h+var_38], 10h
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 87h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

mov eax, 9000008h
test [rax+rcx-3FCF0000h], edi
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 8Ch
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_3C]
shr eax, 18h
mov [rbp+8F0h+var_38], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 8Dh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep and [rbp+8F0h+var_38], 0FFh
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 8Eh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_38]
lea rdx, unk_7FF61B78C080
movzx eax, byte ptr [rax+rdx]
mov [rbp+8F0h+var_41], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 8Fh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

test [rdi-76FFFFF8h], ebp
test [rax+31000008h], edi
rcl byte ptr [rax-6F6F6F70h], 90h
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 90h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

mov eax, 18000008h
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 91h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

mov eax, [rbp+8F0h+var_38]
or [rbp+8F0h+var_34], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 96h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_34]
mov [rbp+8F0h+var_3C], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 0A0h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_14]
lea edx, [rax+3]
test eax, eax
cmovs eax, edx
sar eax, 2
sub eax, 1
mov [rbp+8F0h+var_40], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 0A1h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_40]
lea rdx, ds:0[rax*4]
lea rax, unk_7FF61B78C180
mov eax, [rdx+rax]
mov [rbp+8F0h+var_38], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 0A2h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_38]
shl eax, 18h
mov [rbp+8F0h+var_34], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 0A3h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_38]
shl eax, 8
and eax, 0FF0000h
or [rbp+8F0h+var_34], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 0A4h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_38]
shr eax, 8
and eax, 0FF00h
or [rbp+8F0h+var_34], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 0A5h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_38]
shr eax, 18h
or [rbp+8F0h+var_34], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 0A6h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

mov esp, 31000008h
test [rax+rcx-3FCF0000h], esi
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 0C8h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

or [rax], al
add [rbx-67B7FB18h], al
mov eax, [rbp+rax*4+8F0h+var_920]
mov [rbp+8F0h+var_34], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 0C9h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

or [rax], al
add [rbx], dh
test [rax+rcx-3D770000h], esi
mov eax, [rbp+8F0h+var_14]
cdqe
mov [rbp+rax*4+8F0h+var_920], edx
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor al, 0CAh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

add [rcx], esi
rcl byte ptr [rax-6F6F6F70h], 90h
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 32h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

xrelease mov [rbp+8F0h+var_20], 0
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 191h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

test eax, edx
or [rax], al
add [rbx], bh
test eax, eax
or [rax], al
add [rbp+8F0h+var_8C9], bh
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 192h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 7D0h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep lea rdx, [rbp+8F0h+Buf1]
mov eax, [rbp+8F0h+var_20]
cdqe
add rax, rdx
mov rdx, [rax+8]
mov rax, [rax]
mov [rbp+8F0h+var_930], rax
mov [rbp-38h], rdx
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 19Ah
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

xrelease mov [rbp+8F0h+var_18], 0
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 19Bh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_18]
cdqe
lea rdx, ds:0[rax4]
lea rax, [rbp+8F0h+var_930]
add rax, rdx
mov ecx, [rax]
mov eax, [rbp+8F0h+var_18]
cdqe
mov edx, [rbp+rax
4+8F0h+var_920]
mov eax, [rbp+8F0h+var_18]
cdqe
lea r8, ds:0[rax*4]
lea rax, [rbp+8F0h+var_930]
add rax, r8
xor edx, ecx
mov [rax], edx
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 19Dh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

add [rcx], esi
rcl byte ptr [rax-6F6F6F70h], 90h
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 19Bh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

xrelease mov [rbp+8F0h+var_1C], 1
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 1A5h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

xrelease mov [rbp+8F0h+var_18], 0
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 1F5h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

mov eax, [rbp+8F0h+var_18]
cdqe
movzx eax, byte ptr [rbp+rax+8F0h+var_930]
mov [rbp+8F0h+var_41], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 1F7h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep movzx eax, [rbp+8F0h+var_41]
cdqe
lea rdx, unk_7FF61B78C080
movzx edx, byte ptr [rax+rdx]
mov eax, [rbp+8F0h+var_18]
cdqe
mov byte ptr [rbp+rax+8F0h+var_930], dl
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 1F8h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep add [rbp+8F0h+var_18], 1
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 1F5h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

mov dh, 45h ; 'E'
ror dword ptr [rax+8AF85h], 0
movzx eax, byte ptr [rbp+8F0h+var_930+5]
mov byte ptr [rbp+8F0h+var_930+1], al
movzx eax, [rbp+8F0h+var_927]
mov byte ptr [rbp+8F0h+var_930+5], al
movzx eax, [rbp+8F0h+var_923]
mov [rbp+8F0h+var_927], al
movzx eax, [rbp+8F0h+var_41]
mov [rbp+8F0h+var_923], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 259h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep movzx eax, byte ptr [rbp+8F0h+var_930+2]
mov [rbp+8F0h+var_41], al
movzx eax, byte ptr [rbp+8F0h+var_930+6]
mov [rbp+8F0h+var_42], al
movzx eax, [rbp+8F0h+var_926]
mov byte ptr [rbp+8F0h+var_930+2], al
movzx eax, [rbp+8F0h+var_922]
mov byte ptr [rbp+8F0h+var_930+6], al
movzx eax, [rbp+8F0h+var_41]
mov [rbp+8F0h+var_926], al
movzx eax, [rbp+8F0h+var_42]
mov [rbp+8F0h+var_922], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 25Ah
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

mov [rbp+8F0h+var_41], al
movzx eax, [rbp+8F0h+var_925]
mov [rbp+8F0h+var_921], al
movzx eax, byte ptr [rbp+8F0h+var_930+7]
mov [rbp+8F0h+var_925], al
movzx eax, byte ptr [rbp+8F0h+var_930+3]
mov byte ptr [rbp+8F0h+var_930+7], al
movzx eax, [rbp+8F0h+var_41]
mov byte ptr [rbp+8F0h+var_930+3], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 2BCh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

xrelease mov [rbp+8F0h+var_18], 0
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 2BEh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_18]
shl eax, 2
mov [rbp+8F0h+var_54], eax
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 2C7h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_54]
cdqe
movzx eax, byte ptr [rbp+rax+8F0h+var_930]
mov [rbp+8F0h+var_44], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 2C8h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_54]
add eax, 1
cdqe
movzx eax, byte ptr [rbp+rax+8F0h+var_930]
mov [rbp+8F0h+var_45], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 2C9h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

mov eax, [rbp+8F0h+var_54]
add eax, 2
cdqe
movzx eax, byte ptr [rbp+rax+8F0h+var_930]
mov [rbp+8F0h+var_46], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 2CAh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

or [rax], al
add [rbx-67B7FC40h], al
movzx eax, byte ptr [rbp+rax+8F0h+var_930]
mov [rbp+8F0h+var_47], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 320h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep movzx eax, [rbp+8F0h+var_44]
add eax, eax
mov [rbp+8F0h+var_41], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 321h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

or [rax], al
add [rdx], dh
test [rsi-77FFFFF8h], ebp
test [rax+31000008h], ebp
rcl byte ptr [rax-6F6F6F70h], 90h
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 323h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

test [rbx+1000008h], ebp
ror byte ptr [rax+8AF85h], 0
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 324h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

movzx eax, [rbp+8F0h+var_41]
xor al, [rbp+8F0h+var_42]
mov [rbp+8F0h+var_49], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 326h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep movzx eax, [rbp+8F0h+var_46]
add eax, eax
mov [rbp+8F0h+var_41], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 327h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

or [rax], al
add [rdx], dh
test [rsi-77FFFFF8h], ebp
test [rsi+31000008h], esp
rcl byte ptr [rax-6F6F6F70h], 90h
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 329h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

test [rcx+1000008h], ebp
ror byte ptr [rax+8AF85h], 0
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 32Ah
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

movzx eax, [rbp+8F0h+var_41]
xor al, [rbp+8F0h+var_42]
mov [rbp+8F0h+var_4B], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 334h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep movzx eax, [rbp+8F0h+var_48]
xor al, [rbp+8F0h+var_44]
mov [rbp+8F0h+var_4C], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 335h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

or [rax], al
add [rdx], dh
test [rbx-77FFFFF8h], ebp
test [rbx+31000008h], esp
rcl byte ptr [rax-6F6F6F70h], 90h
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 336h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

test [rsi+32000008h], esp
test [rdx-77FFFFF8h], ebp
test [rdx+31000008h], esp
rcl byte ptr [rax-6F6F6F70h], 90h
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 337h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

movzx eax, [rbp+8F0h+var_4B]
xor al, [rbp+8F0h+var_47]
mov [rbp+8F0h+var_4F], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 384h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep movzx eax, [rbp+8F0h+var_48]
xor al, [rbp+8F0h+var_4D]
mov [rbp+8F0h+var_43], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 385h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

or [rax], al
add [rax], dh
test [rbp+8F0h+arg_30FFF708], ebp
rcl byte ptr [rax-6F6F6F70h], 90h
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 386h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

movzx eax, [rbp+8F0h+var_43]
xor al, [rbp+8F0h+var_47]
mov edx, eax
mov eax, [rbp+8F0h+var_54]
cdqe
mov [rbp+rax+8F0h+var_940], dl
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 38Eh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep movzx eax, [rbp+8F0h+var_44]
xor al, [rbp+8F0h+var_49]
mov [rbp+8F0h+var_43], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 38Fh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

or [rax], al
add [rax], dh
test [rbp+8F0h+arg_30FFF708], ebp
rcl byte ptr [rax-6F6F6F70h], 90h
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 390h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

mov eax, [rbp+8F0h+var_54]
lea ecx, [rax+1]
movzx eax, [rbp+8F0h+var_43]
xor al, [rbp+8F0h+var_47]
mov edx, eax
movsxd rax, ecx
mov [rbp+rax+8F0h+var_940], dl
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 398h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

test [rax+rcx-7ACE0000h], ebp
stosd
or [rax], al
add [rax+8AD85h], cl
add [rcx], dh
rcl byte ptr [rax-6F6F6F70h], 90h
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 399h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

movzx eax, [rbp+8F0h+var_4A]
xor [rbp+8F0h+var_43], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 39Ah
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep mov eax, [rbp+8F0h+var_54]
lea ecx, [rax+2]
movzx eax, [rbp+8F0h+var_43]
xor al, [rbp+8F0h+var_4F]
mov edx, eax
movsxd rax, ecx
mov [rbp+rax+8F0h+var_940], dl
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 3A2h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep movzx eax, [rbp+8F0h+var_4C]
xor al, [rbp+8F0h+var_45]
mov [rbp+8F0h+var_43], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 3A3h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

or [rax], al
add [rax], dh
test [rbp+8F0h+arg_30FFF708], ebp
rcl byte ptr [rax-6F6F6F70h], 90h
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 3A4h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

mov eax, [rbp+8F0h+var_54]
lea ecx, [rax+3]
movzx eax, [rbp+8F0h+var_43]
xor al, [rbp+8F0h+var_4B]
mov edx, eax
movsxd rax, ecx
mov [rbp+rax+8F0h+var_940], dl
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 3B6h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep add [rbp+8F0h+var_18], 1
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 2BEh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

mov rdx, [rbp+8F0h+var_938]
mov [rbp+8F0h+var_930], rax
mov [rbp-38h], rdx
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 5DCh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

test [rdi+0F000008h], ebp
mov dh, 45h ; 'E'
korw k0, k6, k1
movzx eax, [rbp+8F0h+var_927]
mov byte ptr [rbp+8F0h+var_930+5], al
movzx eax, [rbp+8F0h+var_923]
mov [rbp+8F0h+var_927], al
movzx eax, [rbp+8F0h+var_41]
mov [rbp+8F0h+var_923], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 5DDh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep movzx eax, byte ptr [rbp+8F0h+var_930+2]
mov [rbp+8F0h+var_41], al
movzx eax, byte ptr [rbp+8F0h+var_930+6]
mov [rbp+8F0h+var_42], al
movzx eax, [rbp+8F0h+var_926]
mov byte ptr [rbp+8F0h+var_930+2], al
movzx eax, [rbp+8F0h+var_922]
mov byte ptr [rbp+8F0h+var_930+6], al
movzx eax, [rbp+8F0h+var_41]
mov [rbp+8F0h+var_926], al
movzx eax, [rbp+8F0h+var_42]
mov [rbp+8F0h+var_922], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 5DEh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

movzx eax, [rbp+8F0h+var_921]
mov [rbp+8F0h+var_41], al
movzx eax, [rbp+8F0h+var_925]
mov [rbp+8F0h+var_921], al
movzx eax, byte ptr [rbp+8F0h+var_930+7]
mov [rbp+8F0h+var_925], al
movzx eax, byte ptr [rbp+8F0h+var_930+3]
mov byte ptr [rbp+8F0h+var_930+7], al
movzx eax, [rbp+8F0h+var_41]
mov byte ptr [rbp+8F0h+var_930+3], al
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 640h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

xrelease mov [rbp+8F0h+var_18], 0
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 641h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

mov eax, [rbp+8F0h+var_18]
cdqe
lea rdx, ds:0[rax4]
lea rax, [rbp+8F0h+var_930]
add rax, rdx
mov ecx, [rax]
mov eax, [rbp+8F0h+var_1C]
lea edx, ds:0[rax
4]
mov eax, [rbp+8F0h+var_18]
add eax, edx
cdqe
mov edx, [rbp+rax4+8F0h+var_920]
mov eax, [rbp+8F0h+var_18]
cdqe
lea r8, ds:0[rax
4]
lea rax, [rbp+8F0h+var_930]
add rax, r8
xor edx, ecx
mov [rax], edx
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 643h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep add [rbp+8F0h+var_18], 1
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 641h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep add [rbp+8F0h+var_1C], 1
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 1A5h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep lea rdx, [rbp+8F0h+Buf1]
mov eax, [rbp+8F0h+var_20]
cdqe
lea rcx, [rdx+rax]
mov rax, [rbp+8F0h+var_930]
mov rdx, [rbp-38h]
mov [rcx], rax
mov [rcx+8], rdx
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 76Dh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep add [rbp+8F0h+var_20], 10h
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
mov [rbp+8F0h+var_68], rax
mov rax, [rbp+8F0h+var_950]
xor rax, 191h
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

lea rax, Buffer ; "wrong"
mov rcx, rax ; Buffer
call puts
mov [rbp+8F0h+var_944], 0
mov rax, [rbp+8F0h+var_950]
xor al, 0FFh
mov [rbp+8F0h+var_60], rax
jmp loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

rep lea rax, aRight ; "right"
mov rcx, rax ; Buffer
call puts
mov [rbp+8F0h+var_944], 0
mov rax, [rbp+8F0h+var_950]
xor al, 0FFh
mov [rbp+8F0h+var_60], rax
jmp short loc_7FF61B788983 ; jumptable 00007FF61B7819BC case 255

Chia sẻ Q&A này