---
title: 破解 wordle 完全手冊
tags: web
---
## wordle 是什麼
wordle 是一種字謎遊戲,每天都會有一個五個字母的英文單字做為答案,每一輪可以猜一個英文單字,系統會告訴你猜中哪幾個字,以及哪幾個字位置是錯的,以及哪些沒猜中,然後作為線索繼續往下猜,共有六次機會
## 前言
老實說當初只是想把 wordle 的字庫拉出來做個幫助猜字的工具而已,沒想到會意外的發現 wordle 網站的秘密。
說了一堆遊戲規則這邊沒打算教你要怎麼正確的玩這個遊戲,~~因此想研究玩遊戲方法的可以關閉分頁離開了~~,這篇的目的是解析 wordle 網頁背後的秘密。
## 如何破解
首先打開 wordle 網頁,把原始碼拿出來看之後會發現他有載入一個 js 檔案
```havascript
// https://www.nytimes.com/games/wordle/main.4d41d2be.js
...
var Ma=["cigar","rebut","sissy","humph","awake","blush",...]
var Oa=["aahed","aalii","aargh","aarti","abaca","abaci","abacs","abaft","abaka","abamp","aband",...]
...
```
當中可以看到兩 list 一個照著字母排列,另一個沒有,這邊可以稍微猜一下,沒事幹嘛拆成兩個 list,其中一個 list 是照字母順序排列,另一個則沒有,於是把前幾次的答案拿進去搜,結果發現答案都在 ```Ma``` 裡面,而且 index 位置還是跟 wordle 的第 N 個題目一樣,那結果很明顯了,每天答案就會是 Ma[題目編號]。
後來 wordle 出了許多的變種,同樣的做法可以套用到所有的 wordle 系列的遊戲
然後我就再也不完 wordle 了 QQ
## 延伸-如何玩 passwordle
這也是 wordle 的其中一個變種,但有趣的是他的答案是 random 的,每次進入網站答案都不一樣,所以大家一起玩是不會有共同答案的,而且他也是輸入一個字串,他會回傳 sha256 的結果並告訴你 hash 的哪邊不符合,想當然,這種方法用完 wordle 的方式會猜到天花地老,於是我又去看人家原始碼了XDD
``` javascript
// https://rsk0315.github.io/playground/js/passwordle.js
function randomPassword() {
let letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
let digits = '0123456789';
let punctuation = '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~';
let s = letters.repeat(7) + digits.repeat(4) + punctuation.repeat(3);
let length = 14;
let res = Array.from({length}, (() => s[randomInt(s.length)])).join('');
debugger; // どうぞ
return res;
}
```
一進來就先看 randomPassword 的是如何產生的,而注意到了他其實有塞了一段```debugger; // どうぞ```,看起來就是要請我用,當然我也毫不客氣打開了 chrome 檢查工具,然後重新整理網頁,由於他在 function 內有塞斷點的關係在網頁載入的時候程式執行會停在那個位置,因此就可以先檢視 res 的變數內容,最後就得到我們要的答案了。

## reference
1. [wordle](https://www.nytimes.com/games/wordle/index.html)
2. [passwordle](https://rsk0315.github.io/playground/passwordle.html)