https://alpacahack.com/daily/challenges/renda

コード

(難読化されているため省略)

🤔

<aside> 💡

以降 JavaScript を整形できるエディタがあると非常に役に立ちます

</aside>

とりあえず index.html で DevTools を開くと click イベントハンドラがついていることがわかる

image.png

index.html:6 をクリックすると、イベントハンドラは 6 行目の以下で定義されていることがわかる

document['addE' + 'vent' + UN(-'0x236', -'0x227') + Uy(0x87, '0x7f')]('clic' + 'k', function() {

clic + k という名前になっていて不穏であるが、続きを読む

var X = -0x7 + 0x25f + -0xa * 0x3c;
document["addE" + "vent" + UN(-"0x236", -"0x227") + Uy(0x87, "0x7f")](
  "clic" + "k",
  function () {
    const hV = { /* ... */ }
    function Ul(I, V) {
      return u(I - -hn.I, V);
    }
    const V = {};
    ((V[Up(-hV.I, -hV.V) + "E"] = "(((." + "+)+)" + "+)+$"),
      (V["uajP" + "d"] = Ul(-hV.N, hV.y)),
      (V[Up(-hV.p, -hV.l) + "B"] = function (p, l) {
        return p >= l;
      }),
      (V[Ul(-hV.C, hV.e) + "s"] = function (p, l) {
        return p !== l;
      }),
      (V[Ul(-hV.f, hV.L) + "d"] = "EuyX" + "L"));
    function Up(I, V) {
      return UN(I, V - hu.I);
    }
    ((V["EqGu" + "m"] = Up(-hV.v, -hV.A) + "c"),
      (V[Ul(-hV.x, hV.q) + "Z"] = UC(hV.Y, hV.W)));
    const N = V;
    X++;
    function UC(I, V) {
      return Uy(I - hI.I, V);
    }
    document["getE" + UC(hV.a, hV.o) + "ntBy" + "Id"](N["uajP" + "d"])[

index.html:6:16276

  return n();
}
var X = -0x7 + 0x25f + -0xa * 0x3c;
document["addE" + "vent" + UN(-"0x236", -"0x227") + Uy(0x87, "0x7f")](
  "clic" + "k",

index.html:6:17189

  (V[Ul(-hV.x, hV.q) + "Z"] = UC(hV.Y, hV.W)));
const N = V;
X++;
function UC(I, V) {
  return Uy(I - hI.I, V);

index.html:6:17245

document["getE" + UC(hV.a, hV.o) + "ntBy" + "Id"](N["uajP" + "d"])[
  Ul(-hV.D, hV.S) + Up(-hV.b, -hV.w) + "ent"
] = Ul(-hV.J, hV.Q) + Up(-hV.d, -hV.k) + X;
if (N[Ul(-hV.z, hV.q) + "B"](X, 0x1 * 0xf75d + 0x4bef + 0x4354)) {
  if (N["buAy" + "s"](N[Up(-hV.E, -hV.O) + "d"], N["EqGu" + "m"])) {
    const p = [

X と比較している怪しい演算が2つあるので、これを DevTools の console または node いずれか好きな方から実行する