进来是个简单的扫雷
看源码是纯js写的
看了下主要格子之类的生成逻辑在jms.js里
其中flag的输出条件也包含在jms.js
格式化了一下
看特征是base64了,然后又经过了别的操作,不过他混淆了一下就懒得看了。
知道的是每过一个难度的都可以拿到1/3个flag,三个都过了拼一起就行
其index.js 作为入口
var jms = null,
timeHandle = null;
window.onload = function () {
var radios = document.getElementsByName("level");
for (var i = 0, j = radios.length; i < j; i++) {
radios[i].onclick = function () {
if (jms != null)
if (jms.landMineCount > 0)
if (!confirm("纭畾缁撴潫褰撳墠娓告垙锛�"))
return false;
var value = this.value;
init(value, value, value * value / 5 - value, value * value / 5);
document.getElementById("JMS_main").style.width = value * 40 + 180 + 60 + "px";
}
}
init(10, 10);
};
function init(rowCount, colCount, minLandMineCount, maxLandMineCount) {
var doc = document,
landMineCountElement = doc.getElementById("landMineCount"),
timeShow = doc.getElementById("costTime"),
beginButton = doc.getElementById("begin");
if (jms != null) {
clearInterval(timeHandle);
timeShow.innerHTML = 0;
landMineCountElement.innerHTML = 0;
}
jms = JMS("landmine", rowCount, colCount, minLandMineCount, maxLandMineCount);
jms.endCallBack = function () {
clearInterval(timeHandle);
};
jms.landMineCallBack = function (count) {
landMineCountElement.innerHTML = count;
};
//涓衡€滃紑濮嬫父鎴忊€濇寜閽粦瀹氫簨浠�
beginButton.onclick = function () {
jms.play();//鍒濆鍖�
//鏄剧ず鍦伴浄涓暟
landMineCountElement.innerHTML = jms.landMineCount;
//寮€濮�
jms.begin();
//鏇存柊鑺辫垂鏃堕棿
timeHandle = setInterval(function () {
timeShow.innerHTML = parseInt((new Date() - jms.beginTime) / 1000);
}, 1000);
};
}
下了几个断点
切换到中级难度,可见init调用时传入了15
而后走到调用了JMS
这里传入了30和45
然后到jms.js里生成就变成了30和45之间rand
跑飞一下看看
首先我改掉了他web的html传参的这仨
全改成了1
通关了但是不弹flag
然后考虑了下可能是click的参与到了后续的flag输出的运算,于是还原了下,只改了雷的传参部分
修改init的两个相关雷数量的传参
初始的init也可以改一下,不然第一次的初级还是正常的10个雷,需要来回切一下