资安学习路上-picoCTF 解题(Web)3

10.Some Assembly Required 2

跟Some Assembly Required 1 一样

处理完比较可读的结果是这样

(async() => {  const edgeId = _0x5c00;  let _0x1adb5f = await fetch(./aD8SvhyVkb);  let rpm_traffic = await WebAssembly["instantiate"](await _0x1adb5f["arrayBuffer"]());  let updatedEdgesById = rpm_traffic[instance];  exports = updatedEdgesById[exports];})();/** * @return {undefined} */function onButtonPress() {  const navigatePop = _0x5c00;  let params = document[getElementById](input)[value];  for (let i = 0; i < params["length"]; i++) {    exports[copy_char](params[charCodeAt](i), i);  }  exports["copy_char"](0, params[length]);  if (exports[check_flag]() == 1) {    document["getElementById"](result)[ninnerHTML] = Correct;  } else {    document[getElementById](result)["innerHTML"] = Incorrect;  }}


感觉是下面这行,但目前还是不对

把wasm档转成c档,还是不行

反编译wasm成dcmp档

看到check_flag(),可以看到是跟8做xor的结果

export function check_flag():int {  var a:int = 0;  var b:int = 1072;  var c:int = 1024;  var d:int = strcmp(c, b);  var e:int = d;  var f:int = a;  var g:int = e != f;  var h:int = -1;  var i:int = g ^ h;  var j:int = 1;  var k:int = i & j;  return k;}

在看上面这段程式码,可以知道offset为1024,也就是8跟"xakgK\Ns>n;jl90;9:mjn9m<0n9::0::881<00?>u\00\00"这段做XOR,而flag应该是在1024位元后面,所以
data d_xakgKNsnjl909mjn9m0n9088100u(offset: 1024) =
"xakgK\Ns>n;jl90;9:mjn9m<0n9::0::881<00?>u\00\00";

进入python环境执行指令


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章