
camoufox v152.0.4-beta.29
๐ฆ ์ํฐ ํ์ง ๋ธ๋ผ์ฐ์
Camoufox
Camoufox๋ ์น ์คํฌ๋ํ ๋ฐ AI ์์ด์ ํธ๋ฅผ ์ํด ๊ตฌ์ถ๋ ์คํ ์์ค ์ํฐ ํ์ง ๋ธ๋ผ์ฐ์ ์ ๋๋ค. ๐ฆ
โ ๏ธ ์ด ํ๋ก์ ํธ๋ ๊ฐ๋ฐ ์ค์ ๋๋ค. ์์ ์ ์ธ ํ๋ก๋์ ์ฌ์ฉ์๋ ์ ํฉํ์ง ์์ ์ ์์ต๋๋ค. โ ๏ธ
[!NOTE] ๋ชจ๋ ์ต์ ๋ฌธ์๋ camoufox.com์์ ํ์ธํ ์ ์์ต๋๋ค.
[!NOTE] ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ github.com/CloverLabsAI/camoufox ๋ฐ github.com/VulpineOS/VulpineOS์์ ํ๋ฐํ ์งํ ์ค์ ๋๋ค.
์ด ์ ์ฅ์๋ ์ฒดํฌํฌ์ธํธ ๋ฆด๋ฆฌ์ค๋ฅผ ๋ณํฉํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ ๋ง์คํฐ ๋ณต์ฌ๋ณธ์ผ๋ก ์ทจ๊ธํด์ผ ํฉ๋๋ค.
์คํฐ์
๋ชจ๋ ๋ณด๊ธฐ/์ ๊ธฐ
| Scrapfly๋ ์ค์ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง, ๋กํ ์ดํ ํ๋ก์, ํ๊ฑฐํ๋ฆฐํธ(TLS, HTTP, ๋ธ๋ผ์ฐ์ )๋ฅผ ๊ด๋ฆฌํ์ฌ ๋ชจ๋ ์ฃผ์ ์ํฐ๋ด์ ์ฐํํจ์ผ๋ก์จ ์คํฌ๋ํ ๊ณผ์ ์ ๋จ์ํํ๋ ์ํฐํ๋ผ์ด์ฆ๊ธ ์น ์คํฌ๋ํ API ์๋ฃจ์ ์ ๋๋ค. Scrapfly๋ ๋ํ ๋ถ์ ๋์๋ณด๋์ ์ฑ๊ณต๋ฅ /์ฐจ๋จ๋ฅ ์ ์์ธํ ์ธก์ ํ์ฌ ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ์ ์ ๊ณตํฉ๋๋ค. |
| Clover Labs๋ ์ฑ์ฅ๊ณผ ์ ํต์ ์ํ AI ์์ด์ ํธ๋ฅผ ๊ตฌ์ถํ๋ ํ ๋ก ํ ๊ธฐ๋ฐ์ ๋ฒค์ฒ ์คํ๋์ค์ ๋๋ค. |
| SerpApi, ์น ๊ฒ์ API๋ฅผ ํตํด ๊ฐ๋จํ API๋ก Google ๋ฐ ๊ธฐํ ๊ฒ์ ์์ง์ ์คํฌ๋ํํ์ธ์. |
|
Talordata๋ Google ๋ฐ ๊ธฐํ ๊ฒ์ ์์ง์ ๋งค์ฐ ์ ๋ ดํ ๋น์ฉ์ผ๋ก ์คํฌ๋ํํ๋ ๊ฐ๋จํ ์น ๊ฒ์ API์
๋๋ค. ๊ฐ์
์ 1,000ํ ๋ฌด๋ฃ ์์ฒญ์ด ์ ๊ณต๋๋ฉฐ, ์ฑ๊ณต์ ์ธ ์๋ต 1,000ํ๋น $0.25๋ง ์ง๋ถํ๋ฉด ๋ฉ๋๋ค. ์คํจํ ์คํฌ๋ํ์ ๋ํ ์๊ธ์ ์์ต๋๋ค. ํ ์ธ ์ฝ๋ CAMOUFOX๋ฅผ ์ฌ์ฉํ์ฌ 10% ํ ์ธ๋ ๊ฐ๊ฒฉ์ผ๋ก Residential ํ๋ก์๋ฅผ ์ด์ฉํ์ธ์. [Discord] |
|
์ํฐ๋ด์ ๋ซ๊ณ ์ด์๋จ๋ ์น ๋ฐ์ดํฐ. Crawlbase๋ ๊ฐ๋ฐ์์ AI ํ์๊ฒ ์ ๋ขฐํ ์ ์๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค: 99% ์ฑ๊ณต๋ฅ ์ ํฌ๋กค๋ฌ, ํฌ๋กค๋ง API, ์ค๋งํธ AI ํ๋ก์, ์น MCP ์๋ฒ๋ฅผ ํตํด ์คํฌ๋ํผ์ ์์ด์ ํธ๊ฐ ๋ฉ์ถ์ง ์๋๋ก ํฉ๋๋ค. ์ฌ๋ฌ๋ถ์ ๊ตฌ์ถ๋ง ํ๋ฉด ๋๊ณ , ์ธํ๋ผ๋ ์ ํฌ๊ฐ ์ฒ๋ฆฌํฉ๋๋ค. ์ฝ๋ CAMOUFOX๋ก ์ฒซ 3๊ฐ์ 15% ํ ์ธ โ crawlbase.com |
| Scrappey๋ ์ฑ๊ณตํ ์คํฌ๋ํ์ ๋ํด์๋ง ์๊ธ์ ๋ถ๊ณผํ๋ ์น ์คํฌ๋ํ API๋ก, ๊ตฌ๋ ์์ด ์ฌ์ฉํ ๋งํผ ์ง๋ถํฉ๋๋ค. ๋ณต์กํ ์ฌ์ดํธ๋ฅผ ์คํฌ๋ํํ์ธ์. Residential ํ๋ก์ ํฌํจ, ์จ๊ฒจ์ง ํ๋ก์ ์๊ธ์ด๋ ๋ง๋ฃ๋๋ ์์ก ์์. ์ง์ HTTP, ์ ์ฒด ๋ธ๋ผ์ฐ์ ๋ ๋๋ง, JavaScript-heavy ํ์ด์ง, ์คํฌ๋ฆฐ์ท, ์ธ์ , 30๊ฐ ์ด์์ ๋ธ๋ผ์ฐ์ ์ก์ ๋ฐ ํ ๋ฒ์ 200๊ฐ ์ด์์ ๋์ ์ธ์ ์ ์ํ ํ๋์ API โ 1000๋ช ์ด์์ ๊ฐ๋ฐ์์ AI ์์ด์ ํธ๊ฐ ์ ๋ขฐํฉ๋๋ค. ์ฝ๋ CAMOUFOX๋ก 10% ํ ์ธ์ ๋ฐ์ผ์ธ์. |
ํ๋ก์ ์ ๊ณต์ ์ฒด
Camoufox๋ ๋กํ ์ดํ ํ๋ก์(๊ฐ๊ธ์ residential IP)์ ํจ๊ป ์ฌ์ฉํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๋ค์ ์ ๊ณต์ ์ฒด๋ฅผ ํ์ธํด๋ณด์ธ์:
|
๐ Camoufox ร ProxyEmpire Camoufox๋ฅผ ์คํ ์ค์ด์ ๊ฐ์? ํ๋ก์ ๊ณ์ธต์ด ํ์ฅ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค โ ์ฐจ๋จ๋๊ฑฐ๋ ์๋๊ฑฐ๋. ProxyEmpire๋ ๋ค์์ ์ ๊ณตํฉ๋๋ค: โข ๐ 30M+ Residential IP (170๊ฐ๊ตญ ์ด์) โข ๐ฑ 4G/5G ๋ชจ๋ฐ์ผ ํ๋ก์ โข ๐ ๋กํ ์ดํ & ์คํฐํค ์ธ์ โข โก ๋ฌด์ ํ ๋์ ์ธ์ โข ๐ฏ ์ ํํ ์ง๋ฆฌ์ ํ๊ฒํ โข HTTP, HTTPS & SOCKS5 ์ง์ ์คํฌ๋ํ, ์๋ํ ๋ฐ ๊ณ ๋์ ์๋ฐํ ์ํฌํ๋ก์ฐ๋ฅผ ์ํด ๊ตฌ์ถ๋์์ต๋๋ค. ๐ฅ ํน๋ณ ์ ๊ณต - ์ฝ๋ Camoufox30 ์ฌ์ฉ 30% ๋ฐ๋ณต ํ ์ธ์ ๋ฐ์ผ์ธ์ (์ฒซ ๋ฌ๋ง์ด ์๋๋๋ค). ํ๋ก์๋ฅผ ์ ๊ทธ๋ ์ด๋ํ๊ณ ์ฐจ๋จ์ ์ค์ด๋ฉฐ ์ ๋๋ก ํ์ฅํ์ธ์. |
|
์๋
ํ์ธ์, ์ ํฌ๋ ํ๋ก์๊ฐ ๋ณต์กํ๊ฑฐ๋ ๋น์ธ๋ฉด ์ ๋๋ค๋ ์๊ฐ์ผ๋ก BirdProxies๋ฅผ ๋ง๋ค์์ต๋๋ค. 195๊ฐ ์ด์์ ์์น์์ ๋น ๋ฅธ residential ๋ฐ ISP ํ๋ก์, ํฉ๋ฆฌ์ ์ธ ๊ฐ๊ฒฉ, ์ค์ ์ง์์ ์ ๊ณตํฉ๋๋ค. ๋๋ฉ ํ์ด์ง์์ FlappyBird ๊ฒ์์ ํ๋ ์ดํ๊ณ ๋ฌด๋ฃ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์๋ณด์ธ์! ์ง๊ธ ์ฌ์ฉํด๋ณด๊ธฐ | Discord |
|
RapidProxy - ํ๋ฆฌ๋ฏธ์ ํ๋ก์๋ก ๋ฐ์ดํฐ์ ํ์ ์ค์ด์ฃผ์ธ์. ๐ ํ๋ก์ ๋ฌด๋ฃ ์ฒดํ + ์ฝ๋ RAPID10 ์ฌ์ฉ ์ 10% ํ ์ธ ์ RapidProxy์ธ๊ฐ? โข ๐ 200๊ฐ ์ด์์ ๊ตญ๊ฐ ๋ฐ ์ง์ญ์์ 90M+ IP โข โพ๏ธ ํธ๋ํฝ ๋ง๋ฃ ์์ โ ์ธ์ ๋ ์ง ์ฌ์ฉ, ๋ถ๋ด ์์ โข ๐ฅ ์ต๋ ์ฑ๋ฅ์ ์ํ ๋ฌด์ ํ ๋์์ฑ โข ๐ฐ GB๋น $0.65๋ถํฐ ์์ โ ํ์ฅ์ ์ต์ ํ โข ๐ ์ ํํ ์ง๋ฆฌ์ ์ ๊ทผ์ ์ํ ๋์ ์์ค ํ๊ฒํ โข ๐ ํ์์ ๋ง์ถ ์ ์ฐํ ์ธ์ ์ ์ด ์ง๊ธ ๋ฌด๋ฃ ์ฒดํํ์ ์์ํ๊ณ RapidProxy์ ๋น ๋ฅด๊ณ ์์ ์ ์ด๋ฉฐ ํ์ฅ ๊ฐ๋ฅํ ํ๋ก์ ์ฑ๋ฅ์ ๊ฒฝํํด๋ณด์ธ์. |
|
Swiftproxy - ํ์ฅ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์์ง์ ์ํ ๊ณ ์ฑ๋ฅ Residential ํ๋ก์ ์ ๋ขฐํ ์ ์๋ ์ํฐ ํ์ง ํ๋ก์ ์ธํ๋ผ๊ฐ ํ์ํ ๊ฐ๋ฐ์๋ฅผ ์ํด ๊ตฌ์ถ๋์์ต๋๋ค. Swiftproxy๋ ๋๊ท๋ชจ ์คํฌ๋ํ ๋ฐ ์๋ํ๋ฅผ ์ํ ์์ ์ ์ธ ์ฐ๊ฒฐ, ๋์ ์ฑ๊ณต๋ฅ , ์ ์ฐํ ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค. โข ๐ ์ค๋ฆฌ์ ์ผ๋ก ์์ฑ๋ residential IP๋ฅผ ํตํ 195๊ฐ ์ด์์ ์์น โข ๐ ์ ํํ ์ง๋ฆฌ์ ํ๊ฒํ ์ด ๊ฐ๋ฅํ ๋กํ ์ดํ ๋ฐ ์คํฐํค ์ธ์ โข โก ์ํฐ ์ฐจ๋จ ๋ฐ ๋์ ์ฑ๊ณต๋ฅ ์ ์ต์ ํ โข ๐ HTTP / HTTPS / SOCKS5 ์ง์ โข ๐งช ํ ์คํธ์ฉ ๋ฌด๋ฃ 500MB ํธ๋ผ์ด์ผ โข ๐ธ Camoufox ์ฌ์ฉ์๋ฅผ ์ํ ํน๋ณ ํ ์ธ ์ฝ๋: PROXY90 - 10% ์ต์ ๋์: ์น ์คํฌ๋ํ, ์๋ํ, ๋ค์ค ๊ณ์ ๊ด๋ฆฌ, ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ถ์ถ |
|
MangoProxy๋ ์์ ์ฑ, ์๋ ๋ฐ ์ต๋ช
์ฑ์ด ์ค์ํ ์ ๋ฌธ ์์
์ ์ํด ์ค๊ณ๋ Residential, ISP, ๋ชจ๋ฐ์ผ ๋ฐ ๋ฐ์ดํฐ์ผํฐ ํ๋ก์ ์๋น์ค์
๋๋ค. ISP ์ ์ ํ๋ก์ 8% ํ ์ธ์ ์ํด ์ฝ๋ DAIJRO๋ฅผ ์ฌ์ฉํ์ธ์. |
|
9Proxy๋ ๋จ $0.018/IP ๋๋ $0.68/GB๋ถํฐ ์์ํ๋ residential ํ๋ก์๋ฅผ ์ ๊ณตํฉ๋๋ค. 90๊ฐ๊ตญ ์ด์์์ 2,000๋ง ๊ฐ ์ด์์ IP. ์คํฐํค ๋๋ ๋กํ
์ดํ
์ธ์
, ๋ฐ์คํฌํฑ ๋๋ ๋ชจ๋ฐ์ผ ์ฑ์์ ๊ด๋ฆฌ ๊ฐ๋ฅํฉ๋๋ค. |
|
NodeMaven: ์์ฅ์์ ๊ฐ์ฅ ๋์ ํ์ง์ IP๋ฅผ ์ ๊ณตํ๋ ๊ฐ์ฅ ์ ๋ขฐํ ์ ์๋ ํ๋ก์ ์ ๊ณต์
์ฒด. ์๋ํ, ์น ์คํฌ๋ํ, SEO ์ฐ๊ตฌ ๋ฐ ์์ ๋ฏธ๋์ด ๊ด๋ฆฌ๋ฅผ ์ํ ์ต๊ณ ์ ์๋ฃจ์ . NodeMaven์ด ์ ๊ณตํ๋ ๊ฒ: โข ์ต๋ 7์ผ๊ฐ ์ง์๋๋ ์คํฐํค ์ธ์ โข 99.9% ๊ฐ๋ ์๊ฐ โข IP ํํฐ๋ง: ๋ชจ๋ ํ๋ก์์ ์ฌ๊ธฐ ์ ์ <97% โข KYC ๋ถํ์ โข ํธ๋ํฝ ์บ์๋ฐฑ โ GB๋ฅผ ์ฌ์ฉํ๊ณ ์ต๋ 10% ๋๋ ค๋ฐ๊ธฐ ํน๋ณ ์ ๊ณต: ์ฝ๋ CAMOUFOX35๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ 35% ํ ์ธ์ ๋ฐ์ผ์ธ์. |
|
Proxidize | Camoufox๋ฅผ ์ํ ๋ชจ๋ฐ์ผ ๋ฐ Residential ํ๋ก์ Camoufox๋ฅผ ๊ท๋ชจ์ ๋ง๊ฒ ์คํ ์ค์ด์ ๊ฐ์? ๋ธ๋ผ์ฐ์ ์ค์ ์ ์ ๋ฐ์ ๋ถ๊ณผํฉ๋๋ค. ํ๋ก์ ๊ณ์ธต๋ ์ค์ํฉ๋๋ค. Proxidize๋ ์คํฌ๋ํ, ๋ธ๋ผ์ฐ์ ์๋ํ, SEO ๋ชจ๋ํฐ๋ง, AI ์์ด์ ํธ ๋ฐ ๋ฐ์ดํฐ ์์ง ์ํฌํ๋ก์ฐ๋ฅผ ์ํด ๊ตฌ์ถ๋ ๋ชจ๋ฐ์ผ ๋ฐ residential ํ๋ก์๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ Proxidize์ธ๊ฐ? โข ์ค์ 4G ๋ฐ 5G ๋ชจ๋ฐ์ผ ํ๋ก์ โข 195๊ฐ๊ตญ ์ด์์ Residential ํ๋ก์ โข ๋กํ ์ดํ ๋ฐ ์คํฐํค ์ธ์ โข ๋์ ์์ค ๋ฐ ํต์ ์ฌ ํ๊ฒํ โข ๋ฌด์ ํ ๋์์ฑ โข HTTP(S), SOCKS5 ๋ฐ UDP over SOCKS ์ง์ โข ํ๋์จ์ด๋ DIY ์ค์ ๋ถํ์ ์ฅ์น, ์๋ฒ ๋๋ ํ๋ก์ ๋กํ ์ด์ ์ ์ง์ ๊ด๋ฆฌํ์ง ์๊ณ ๋ ์ ๋ขฐํ ์ ์๋ ํ๋ก์ ์ธํ๋ผ๊ฐ ํ์ํ ํ์ ์ํด ๊ตฌ์ถ๋์์ต๋๋ค. Camoufox ์ฌ์ฉ์ ํน๋ณ ์ ๊ณต: ์ฝ๋ CAMOUFOX20์ ์ฌ์ฉํ์ฌ 20% ํ ์ธ์ ๋ฐ์ผ์ธ์. ์ง๊ธ ์์: https://proxidize.com |
์๊ฐ
Camoufox๋ ์น ์คํฌ๋ํ ๋ฐ AI ์์ด์ ํธ๋ฅผ ์ํด ์ค๊ณ๋ Firefox ํฌํฌ์ ๋๋ค. ํค๋๋ฆฌ์ค์ด๋ฉฐ, ํ์ง ๋ถ๊ฐ๋ฅํ๊ณ , ๋๊ท๋ชจ๋ก ์คํ๋๋๋ก ์ต์ ํ๋์ด ์์ต๋๋ค. ์คํ๋ ๋๋ง๋ค ์ค์ ๋๋ฐ์ด์ค ๋ถํฌ์์ ์ถ์ถ๋ ์๋ก์ด ์ ์์ ์ป์ด ์ผ๋ฐ ํธ๋ํฝ์ ์์ฐ์ค๋ฝ๊ฒ ์์ฌ ๋์ ๋์ง ์์ต๋๋ค.
์ฃผ์ ํน์ง
- AI ์์ด์ ํธ์ฉ์ผ๋ก ์ ์ ๐ค
- ์ต์ํ ๋ฐ ๊ฒฝ๋ํ๋ Firefox โ ๋น ๋ฅธ ์คํ, ์ ๋ ดํ ์ด์ ๋น์ฉ
- Python ์ธํฐํ์ด์ค๋ฅผ ํตํ ๋๋กญ์ธ Playwright ํธํ์ฑ
- ์ํฐ๋ด ์์คํ ์ ๋ณด์ด์ง ์์ ๋ก์ปฌ ๋๋ ํด๋ผ์ฐ๋์์ ์์ด์ ํธ ํด๋ฌ์คํฐ๋ฅผ ํ๋๊ทธ ์์ด ์คํ ๊ฐ๋ฅ
- ์ค๊ณ์ ํ์ง ๋ถ๊ฐ๋ฅ ๐ญ
- ํ์ด์ง ์๋ํ๊ฐ JavaScript ๊ฒ์ฌ์์ ์จ๊ฒจ์ง๋๋ค. ์์ธํ ๋ด์ฉ์ stealth ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์.
- ํ๊ฑฐํ๋ฆฐํธ ์ฃผ์
๋ฐ ๋กํ
์ด์
(JavaScript ์ฃผ์
์์ด!)
- ๋ชจ๋ navigator ์์ฑ (๋๋ฐ์ด์ค, OS, ํ๋์จ์ด, ๋ธ๋ผ์ฐ์ ๋ฑ) โ
- ํ๋ฉด ํฌ๊ธฐ, ํด์๋, ์ฐฝ ๋ฐ ๋ทฐํฌํธ ์์ฑ โ
- ์์น ์ ๋ณด, ์๊ฐ๋, ๋ก์ผ์ผ ๋ฐ Intl ์คํธํ โ
- WebRTC IP ์คํธํ (ํ๋กํ ์ฝ ์์ค) โ
- ์์ฑ, ์์ฑ ์ฌ์ ์๋ ๋ฑ โ
- ๊ทธ ์ธ์๋ ๋ง์ต๋๋ค!
- ๊ทธ๋ํฝ ํ๊ฑฐํ๋ฆฐํ
๋ฐฉ์ง
- WebGL ๋งค๊ฐ๋ณ์, ์ง์๋๋ ํ์ฅ, ์ปจํ ์คํธ ์์ฑ ๋ฐ ์ ฐ์ด๋ ์ ๋ฐ๋ ํ์ โ
- ๊ธ๊ผด ์คํธํ ๋ฐ ํ๊ฑฐํ๋ฆฐํ ๋ฐฉ์ง โ
- ์๋ํ์ ์ต์ ํ
- ์ฌ๋๊ณผ ์ ์ฌํ ๋ง์ฐ์ค ์์ง์ ๐ฑ๏ธ
- ๊ด๊ณ ์ฐจ๋จ ๋ฐ ์ฐํ ๐ก๏ธ
- CSS ์ ๋๋ฉ์ด์ ์์ ๐จ
- ๊ฒฝ๋ํ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ํจ์จ ์ต์ ํ โก
- ์ ๋ฐ์ดํธ ๋ฐ ์๋ ํ๊ฑฐํ๋ฆฐํธ ์ฃผ์ ์ ์ํ PyPi ํจํค์ง ๐ฆ
- ์ต์ Firefox ๋ฒ์ ์ ์ ์ง ๐
ํ๊ฑฐํ๋ฆฐํธ ์ฃผ์
Camoufox์์ ๋ฐ์ดํฐ๋ C++ ๊ตฌํ ์์ค์์ ๊ฐ๋ก์ฑ์ด์ง๋ฏ๋ก JavaScript ๊ฒ์ฌ๋ฅผ ํตํด ๋ณ๊ฒฝ ์ฌํญ์ ํ์งํ ์ ์์ต๋๋ค.
๊ฐ๋ณ ํ๊ฑฐํ๋ฆฐํธ ์์ฑ์ ์คํธํํ๋ ค๋ฉด ์คํธํํ ์์ฑ์ด ํฌํจ๋ JSON์ Python ์ธํฐํ์ด์ค์ ์ ๋ฌํ์ธ์:```py
with Camoufox(config={"property": "value"}) as browser:
์ฌ์ฉ์๊ฐ ์ค์ ํ์ง ์์ ๊ตฌ์ฑ ๋ฐ์ดํฐ๋ [BrowserForge](https://github.com/daijro/browserforge) ์ง๋ฌธ์ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ์ฑ์์ง๋๋ค. ์ด ์ง๋ฌธ์ ์ค์ ํธ๋ํฝ์์ ๋ํ๋๋ ๊ธฐ๊ธฐ ํน์ฑ์ ํต๊ณ์ ๋ถํฌ๋ฅผ ๋ชจ๋ฐฉํฉ๋๋ค.
[[๊ตฌํ๋ ์์ฑ ๋ณด๊ธฐ](https://camoufox.com/fingerprint/)]
---
## Python ์ฌ์ฉ๋ฒ
Camoufox๋ ๊ธฐ์กด Playwright ์ฝ๋์ ํธํ๋ฉ๋๋ค. ๋ธ๋ผ์ฐ์ ์ด๊ธฐํ๋ง ๋ณ๊ฒฝํ๋ฉด ๋ฉ๋๋ค.
**Sync API**```python
from camoufox.sync_api import Camoufox
with Camoufox() as browser:
page = browser.new_page()
page.goto("https://example.com")
๋น๋๊ธฐ API```python from camoufox.async_api import AsyncCamoufox
async with AsyncCamoufox() as browser: page = await browser.new_page() await page.goto("https://example.com")
[[์ค์น ๋ฐ ์ฌ์ฉ๋ฒ](https://camoufox.com/python/)]
### ํ๋์จ์ด ์คํธํ์ ์ต๋ํ ํ์ฉํ๊ธฐ
์์ ์ ์ธ ๋ฆด๋ฆฌ์ฆ๋ฅผ ์ํด์๋ ํญ์ ๋ฉ์ธ [`camoufox`](https://pypi.org/project/camoufox/) pip ํจํค์ง๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ํ์ง๋ง ์ปจํ
์คํธ๋ณ ์ง๋ฌธ๊ณผ ํ๋์จ์ด ์คํธํ์ ํ์ฉํ๋ ค๋ฉด [`cloverlabs-camoufox`](https://pypi.org/project/cloverlabs-camoufox/) ํจํค์ง๋ฅผ ์ฌ์ฉํ์ธ์. ์ด ํจํค์ง๋ ๊ฐ ๋ฆด๋ฆฌ์ฆ๋ง๋ค ์
๋ฐ์ดํธ๋๋ ๋ฐ๋ฉด, ๊ณต์ ํจํค์ง๋ ์ง์ฐ ์ถ์๋ฉ๋๋ค.
๋ ํจํค์ง ๊ฐ์ ์ถฉ๋์ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ฐ์ ํ๊ฒฝ์ ์ฌ์ฉํ๊ณ ์๋์ง ํ์ธํ์ธ์.
**์ค์น**```bash
pip install cloverlabs-camoufox
์ต์ ์ฌ์ ๋ฆด๋ฆฌ์ค ๋ธ๋ผ์ฐ์ ๊ฐ์ ธ์ค๊ธฐ (์ต์ ํจ์น์ ๊ถ์ฅ๋จ)```bash python -m camoufox sync python -m camoufox set official/prerelease python -m camoufox fetch
**์ฌ์ฉ๋ฒ** โ API๋ ์์ ํจํค์ง์ ๋์ผํฉ๋๋ค.```python
from camoufox.sync_api import Camoufox
with Camoufox() as browser:
page = browser.new_page()
page.goto("https://example.com")
์ค์ ์ง๋ฌธ ํ๋ฆฌ์ (v149+ ๋ฐ์ด๋๋ฆฌ ๊ถ์ฅ)
๊ธฐ๋ณธ์ ์ผ๋ก, ์ง๋ฌธ ๊ฐ์ BrowserForge์ ์ํด ํฉ์ฑ๋ฉ๋๋ค. ๋ณต์กํ ์ผ๊ด์ฑ ๊ฒ์ฌ๋ฅผ ๋ ์ ํํผํ๊ธฐ ์ํด, ๋ฒ๋ค๋ ํ๋ฆฌ์ (์ค์ Firefox ํธ๋ํฝ์์ ์์ง๋ ์ค์ ์ง๋ฌธ)์ ์ ํํ์ธ์:```python with Camoufox(fingerprint_preset=True, os="macos") as browser: ...
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฐ์ด๋๋ฆฌ ๋ฒ์ ์ ๋ฐ๋ผ ์๋ ๋ผ์ฐํ
๋ฉ๋๋ค: Firefox โฅ 149๋ `fingerprint-presets-v150.json`์ ๋ก๋ํฉ๋๋ค(312๊ฐ์ ํ๋ฆฌ์
, v149โv152 ํฌํจ, macOS 67๊ฐ / Windows 180๊ฐ / Linux 65๊ฐ). ์ด์ ๋ฐ์ด๋๋ฆฌ๋ ์๋ ๋ฒ๋ค๋ก ํด๋ฐฑ๋ฉ๋๋ค. UA ๋ฌธ์์ด์ ํ์ฑ ๋ฐ์ด๋๋ฆฌ์ ๋ง๊ฒ ๋ค์ ์์ฑ๋๋ฏ๋ก, ์ตํธ์ธ(opt in)์ ๋ฒ์ ๊ฐ์ ์์ ํฉ๋๋ค. ํน์ ํ๊ฑฐํ๋ฆฐํธ๋ฅผ ๊ณ ์ ํ๋ ค๋ฉด `True` ๋์ ํ๋ฆฌ์
๋์
๋๋ฆฌ๋ฅผ ์ ๋ฌํ์ธ์.
---
## Capabilities
Below is a list of patches and features implemented in Camoufox.
### ํ๊ฑฐํ๋ฆฐํธ ์คํธํ
- Navigator ์์ฑ ์คํธํ (์ฅ์น, ๋ธ๋ผ์ฐ์ , ๋ก์ผ์ผ ๋ฑ)
- ํ๋ฉด ํฌ๊ธฐ, ํด์๋ ๋ฑ ์๋ฎฌ๋ ์ด์
์ง์
- WebGL ๋งค๊ฐ๋ณ์, ์ง์ ํ์ฅ, ์ปจํ
์คํธ ์์ฑ ๋ฐ ์
ฐ์ด๋ ์ ๋ฐ๋ ํ์ ์คํธํ
- ๋ด๋ถ ๋ฐ ์ธ๋ถ ์ฐฝ ๋ทฐํฌํธ ํฌ๊ธฐ ์คํธํ
- AudioContext ์ํ๋ ์ดํธ, ์ถ๋ ฅ ์ง์ฐ ์๊ฐ ๋ฐ ์ต๋ ์ฑ๋ ์ ์คํธํ
- ์ฅ์น ์์ฑ ๋ฐ ์ฌ์ ์๋ ์คํธํ
- ์ฌ์ฉ ๊ฐ๋ฅํ ๋ง์ดํฌ, ์น์บ ๋ฐ ์คํผ์ปค ๊ฐ์ ์คํธํ
- ๋คํธ์ํฌ ํค๋(Accept-Languages ๋ฐ User-Agent)๊ฐ navigator ์์ฑ๊ณผ ์ผ์นํ๋๋ก ์คํธํ๋ฉ๋๋ค
- ํ๋กํ ์ฝ ์์ค์์์ WebRTC IP ์คํธํ
- ์ง๋ฆฌ์ ์์น, ์๊ฐ๋ ๋ฐ ๋ก์ผ์ผ ์คํธํ
- ๋ฐฐํฐ๋ฆฌ API ์คํธํ
- ๊ธฐํ
### ์คํ
์ค ํจ์น
- ๋ฉ์ธ ์๋ ์คํ ๋์ถ์ ๋ฐฉ์งํฉ๋๋ค. ๋ชจ๋ ํ์ด์ง ์์ด์ ํธ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์๋๋ฐ์ค ์ฒ๋ฆฌ๋ฉ๋๋ค.
- ํ๋ ์ ์คํ ์ปจํ
์คํธ ๋์ถ ๋ฐฉ์ง
- `navigator.webdriver` ๊ฐ์ง ์์
- ํฌ์ธํฐ ์ ํ์ ํตํ Firefox ํค๋๋ฆฌ์ค ๊ฐ์ง ์์ ([#26](https://github.com/daijro/camoufox/issues/26))
- ์ ์ฌ์ ์ผ๋ก ๋์ถ๋ ์ ์๋ ์ํฐ ์ค/๋ฉํ ๋ทฐํฌํธ ์ฒ๋ฆฌ ํจ์น ์ ๊ฑฐ
- ๊ธฐ๋ณธ์ด ์๋ ํ๋ฉด ๋ฐ ์ฐฝ ํฌ๊ธฐ ์ฌ์ฉ
- ํผ์ ์ฝํ
์ธ ๊ฒฉ๋ฆฌ ์ฌํ์ฑํ
- PDF.js ์ฌํ์ฑํ
- ๊ธฐํ ๋์ถ ๊ตฌ์ฑ ์์ฑ ๋ณ๊ฒฝ
- ์ฌ๋๊ณผ ์ ์ฌํ ์ปค์ ์ด๋
### ํฐํธ ํ๊ฑฐํ๋ฆฐํ
๋ฐฉ์ง
- ์ฌ์ฉ์ ์์ด์ ํธ์ ๋ง๋ ์ฌ๋ฐ๋ฅธ ์์คํ
ํฐํธ๋ฅผ ์๋์ผ๋ก ์ฌ์ฉ
- Windows, Mac ๋ฐ Linux ์์คํ
ํฐํธ ๋ฒ๋ค ์ ๊ณต
- ๋ฌธ์ ๊ฐ๊ฒฉ์ ๋ฌด์์๋ก ์คํ์
ํ์ฌ ํฐํธ ๋ฉํธ๋ฆญ ํ๊ฑฐํ๋ฆฐํ
๋ฐฉ์ง
### Playwright ์ง์
- ์ต์ Firefox๋ฅผ ์ํ Playwright์ ์ปค์คํ
๊ตฌํ
- ๋ด ํ์ง๋ฅผ ํํผํ๊ธฐ ์ํ ๋ค์ํ ๊ตฌ์ฑ ํจ์น
### ๋๋ธ๋กํธ/์ต์ ํ
- _๋งค์ฐ ๋ง์_ Mozilla ์๋น์ค๋ฅผ ์ ๊ฑฐ/๋นํ์ฑํํ์ต๋๋ค. ์๋ณธ Mozilla Firefox๋ณด๋ค ๋น ๋ฅด๊ฒ ์คํ๋๋ฉฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ ์ ์ต๋๋ค(200MB).
- LibreWolf ๋ฐ Ghostery์ ํจ์น๋ก ํ
๋ ๋ฉํธ๋ฆฌ ๋ฐ ๋ธ๋กํธ ์ ๊ฑฐ ์ง์
- PeskyFox, LibreWolf ๋ฑ์ ๋๋ธ๋กํธ ๊ตฌ์ฑ
- FastFox์ ์๋ ๋ฐ ๋คํธ์ํฌ ์ต์ ํ
- ๋ชจ๋ CSS ์ ๋๋ฉ์ด์
์ ๊ฑฐ
- ๋ฏธ๋๋ฉ๋ฆฌ์คํธ ํ
๋ง
- ๊ธฐํ
### ์ ๋์จ
- `addons` ์์ฑ์ ๊ฒฝ๋ก ๋ชฉ๋ก์ ์ ๋ฌํ์ฌ ๋๋ฒ๊ทธ ์๋ฒ ์์ด Firefox ์ ๋์จ ๋ก๋
- ์ปค์คํ
๊ฐ์ธ์ ๋ณด ๋ณดํธ ํํฐ๊ฐ ํฌํจ๋ uBlock Origin ์ถ๊ฐ
- ์ ๋์จ์ ํญ์ ์ด ์ ์์
- ์ ๋์จ์ด ์ํฌ๋ฆฟ ๋ชจ๋์์ ์๋์ผ๋ก ํ์ฑํ๋จ
- ์ ๋์จ์ด ์๋์ผ๋ก ํด๋ฐ์ ๊ณ ์ ๋จ
- uBO ํ๋ฆฌํ์นญ์ผ๋ก DNS ๋์ถ ์์
### Python ์ธํฐํ์ด์ค
- ์ค์ ๋ถํฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ณ ์ ํ ์ฅ์น ํน์ฑ์ ์๋์ผ๋ก ์์ฑํ์ฌ Camoufox์ ์ฃผ์
- WebGL ํ๊ฑฐํ๋ฆฐํธ ์ฃผ์
๋ฐ ์ํ
- ๋์ OS์ ๋ฐ๋ผ ์ฌ๋ฐ๋ฅธ ์์คํ
ํฐํธ์ ์๋ธํฝ์
์ํฐ์จ๋ฆฌ์ด์ฑ ๋ฐ ํํ
์ฌ์ฉ
- ํ๋ก์์ ๋์ ์ง์ญ์์ ๋ชฉํ ์ง๋ฆฌ์ ์์น, ์๊ฐ๋ ๋ฐ ๋ก์ผ์ผ์ ๊ณ์ฐํ์ฌ ํ๋ก์ ํ์ง ๋ฐฉ์ง
- ํ๋ก์ ๋์ ์ง์ญ์ ์ธ์ด ์ฌ์ฉ์ ๋ถํฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ธ๋ผ์ฐ์ ์ธ์ด ๊ณ์ฐ ๋ฐ ์คํธํ
- Playwright๋ฅผ ์ง์ํ๋ ๋ค๋ฅธ ์ธ์ด์์ Camoufox๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ์๊ฒฉ ์๋ฒ ํธ์คํ
- ํค๋๋ฆฌ์ค ์๋ฒ์์ Camoufox๋ฅผ ํค๋ํ(Headful) ๋ฐฉ์์ผ๋ก ์คํํ๊ธฐ ์ํ ๋ด์ฅ ๊ฐ์ ๋์คํ๋ ์ด ๋ฒํผ
- ์ด๋ฏธ์ง ๋ก๋ฉ, WebRTC ๋ฐ WebGL ์ ํ
- ๊ธฐํ
> [!NOTE]
> Camoufox๋ Chromium ํ๊ฑฐํ๋ฆฐํธ ์ฃผ์
์ ์์ ํ ์ง์ํ์ง **์์ต๋๋ค**. ์ผ๋ถ WAF(์: [Interstitial](https://nopecha.com/demo/cloudflare))๋ Spidermonkey ์์ง ๋์์ ํ
์คํธํ๋ฏ๋ก ์คํธํ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
---
# Stealth Overview
## How Camoufox hides its automation library
> [!WARNING]
> **2026๋
๊ธฐ์ค ํ์ฌ ์ํ**:
> ๊ฐ์ธ ์ฌ์ ์ผ๋ก ์ธํด 1๋
๊ฐ ์ ์ง๋ณด์๊ฐ ์ค๋จ๋์์ต๋๋ค. ๊ธฐ๋ณธ Firefox ๋ฒ์ ๋ฐ ์๋ก ๋ฐ๊ฒฌ๋ ํ๊ฑฐํ๋ฆฐํธ ๋ถ์ผ์น๋ก ์ธํด Camoufox์ ์ฑ๋ฅ์ด ์ ํ๋์์ต๋๋ค. **Camoufox๋ ํ์ฌ ํ๋ฐํ ๊ฐ๋ฐ ์ค์
๋๋ค.**
Camoufox์์๋ Playwright์ ๋ด๋ถ Page Agent ์ฝ๋๊ฐ ๋ชจ๋ ์๋๋ฐ์ค ์ฒ๋ฆฌ ๋ฐ ๊ฒฉ๋ฆฌ๋ฉ๋๋ค. ์ด๋ก ์ธํด ํ์ด์ง๊ฐ JavaScript ๊ฒ์ฌ๋ฅผ ํตํด Playwright์ ์กด์ฌ๋ฅผ ๊ฐ์งํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํด์ง๋๋ค.
์ผ๋ฐ์ ์ผ๋ก Playwright๋ `window.__playwright__binding__`๊ณผ ๊ฐ์ JavaScript๋ฅผ ํ์ด์ง์ ์ฃผ์
ํ์ฌ ์์ ์ฟผ๋ฆฌ, JavaScript ํ๊ฐ, ์ด๊ธฐํ ์คํฌ๋ฆฝํธ ์คํ ๋ฑ์ ์์
์ ์ํํ๋ฉฐ, ์ด๋ ์น์ฌ์ดํธ์์ ๊ฐ์ง๋ ์ ์์ต๋๋ค. Camoufox์์๋ ์ด๋ฌํ ์์
์ด ํ์ด์ง ์ธ๋ถ์ ๊ฒฉ๋ฆฌ๋ ๋ฒ์์์ ์ฒ๋ฆฌ๋ฉ๋๋ค. ์ฆ, ์น์ฌ์ดํธ๋ Playwright๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฃผ์
ํ๋ JavaScript๋ฅผ ๋ ์ด์ '๋ณผ' ์ ์์ต๋๋ค. ์ด๋ก ์ธํด Playwright์ ํ์ ์ด ์์ ํ ์ ๊ฑฐ๋ฉ๋๋ค.
ํ์ง๋ง ์๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์จ๊ธฐ๋๋ผ๋ Camoufox๋ ํ๊ฑฐํ๋ฆฐํธ ์ํ์ ๋ถ์ผ์น์ ๋ฉด์ญ์ด ์๋๋๋ค. ์ด๋ฅผ ๋ฐ๊ฒฌํ๊ณ ์์ ํ๊ธฐ ์ํ ์ ์ง๋ณด์๊ฐ ์ฌ์ ํ ํ์ํฉ๋๋ค.
### ํ์ด์ง ์ํธ์์ฉ
์ํฐ๋ด ์์คํ
์ ๋ํ ํด๋ผ์ด์ธํธ ์ธก ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ์ฌ ์ฌ์ฉ์ ํ๋์ ๋ชจ๋ํฐ๋งํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ง์ฐ์ค ์์ง์, ํด๋ฆญ, ์คํฌ๋กค, ๊ทธ๋ฆฌ๊ณ ์์
๊ฐ์ ํ์ด๋ฐ ํจํด์ ์ฐพ์ต๋๋ค.
<video controls src="https://github.com/user-attachments/assets/6d33d6af-3537-4603-bf24-6bd3f4f8f455" width="200px" loop muted></video>
Camoufox๋ ์ธ๊ฐ๊ณผ ์ ์ฌํ ๋ง์ฐ์ค ์์ง์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ต์ ์ ๋คํฉ๋๋ค. ์์ฐ์ค๋ฌ์ด ์์ง์ ์๊ณ ๋ฆฌ์ฆ์ ์๋ [riflosnake์ HumanCursor](https://github.com/riflosnake/HumanCursor)์์ ๊ฐ์ ธ์ C++๋ก ๋ค์ ์์ฑ๋์์ผ๋ฉฐ, ๋ ๊ฑฐ๋ฆฌ ์ธ์์ ์ธ ๊ถค์ ์ ์ํด ์์ ๋์์ต๋๋ค.
ํ์ง๋ง ์ด๋ ์๋ฒฝํ์ง ์์ต๋๋ค. ์ถฉ๋ถํ ์ ๊ตํ ๋ถ์์ ํตํด ์ฌ์ ํ ๊ฐ์ง๋ ์ ์์ต๋๋ค. (ํฅํ ์์
์ค)
---
## How Camoufox rotates identities
AI ์์ด์ ํธ๋ ํ๋๊ทธ๊ฐ ์ง์ ๋๊ฑฐ๋ ์๋ ์ ํ ์์ด ์ฌ๋ฌ ์ธ์
์์ ์๋ํด์ผ ํฉ๋๋ค. IP ์ฃผ์๋ฅผ ์ํํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ต๋๋ค. ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์ธ์
์ ์์ฒ ๊ฐ์ ์ ํธ๋ฅผ ์ ๋ฌํ์ฌ ๊ณ ์ ํ **ํ๊ฑฐํ๋ฆฐํธ**๋ฅผ ์์ฑํฉ๋๋ค. ์น์ฌ์ดํธ๋ OS, GPU, ํ๋ฉด ํด์๋, ํฐํธ, ์๊ฐ๋ ๋ฑ์ ๋ณผ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ ํธ๊ฐ ์ผ๊ด๋์ง ์๊ฑฐ๋ ๋น์ ์์ ์ด๋ฉด ์ฐจ๋จ๋ฉ๋๋ค.
### ์์ฅ ์ ์ ์จ ๋ถํฌ
๊ฐ ์คํ ์ค์ธ ๋ด ์ธ์คํด์ค์ ๋ํด IP๋ฅผ ์ํํ๋๋ผ๋ ์น ์ ๊ทผ ๋ฐฉํ๋ฒฝ์ ์ฌ์ ํ ๋จธ์ ๋ฌ๋์ ์ฌ์ฉํ์ฌ ๋ค์ด์ค๋ ์น ํธ๋ํฝ์ ๋ถ์ํ์ฌ ๋น์ ์ ์ฌ๋ถ๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค. Linux ์์ฅ ์ ์ ์จ์ด 5%์๋ค๋ฉด ๊ฐ์๊ธฐ 20%๊ฐ ๋๋ ๊ฒ์ ์ํ ์ ํธ์
๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ชจ๋ Linux ์ฌ์ฉ์์๊ฒ ์กฐ๊ฑด ์์ด ์บก์ฐจ๋ฅผ ์๊ตฌํฉ๋๋ค.
Camoufox๋ [BrowserForge](https://github.com/daijro/browserforge)์ ํ๊ฑฐํ๋ฆฐํธ ์์ฑ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ํธ๋ํฝ์์ ์ฅ์น ๋ฐ์ดํฐ์ ํต๊ณ์ ๋ถํฌ๋ฅผ ๋ชจ๋ฐฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Camoufox๋ 5%์ ํ๋ฅ ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ Linux ์ฌ์ฉ์์ฒ๋ผ ๋ณด์ด๊ฒ ๋ง๋ญ๋๋ค. ๊ทธ 5% ์ค์์ 2560x1440 ํ๋ฉด ํด์๋๋ฅผ 9.5%, Intel HD GPU๋ฅผ 27.5%์ ํ๋ฅ ๋ก ์คํธํํฉ๋๋ค.
### How can Camoufox be detected?
Camoufox๋ ์ฌ๋ฐ๋ฅธ ์์ฅ ์ ์ ์จ๋ก ํ๊ฑฐํ๋ฆฐํธ๋ฅผ ์คํธํํ ์ ์์ต๋๋ค. ํ์ง๋ง **ํ๊ฑฐํ๋ฆฐํธ๋ ๋ด๋ถ์ ์ผ๋ก๋ ์ผ๊ด๋์ด์ผ ํฉ๋๋ค.** Apple M1 GPU๊ฐ ์๋ Windows ์ฌ์ฉ์ ์์ด์ ํธ, Windows DirectX ๋ ๋๋ฌ๊ฐ ์๋ macOS ์ฌ์ฉ์ ์์ด์ ํธ, ๋ฐ์คํฌํ ํ๋ฉด ํด์๋๋ฅผ ๊ฐ์ง ๋ชจ๋ฐ์ผ ์ฅ์น๋ ๋ชจ๋ ๋ถ๊ฐ๋ฅํ๋ฉฐ ์์ฌ์ค๋ฌ์ด ๊ฒ์ผ๋ก ํ๋๊ทธ๊ฐ ์ง์ ๋ฉ๋๋ค.
์ค๋๋ ฅ ์๋ ์คํธํ๋ ํ๊ฑฐํ๋ฆฐํธ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ๋ณ๊ฒฝํด์ผ ํ๋ ์์ฒ ๊ฐ์ง ๋ฐ์ดํฐ ํฌ์ธํธ ์ค ๊ฐ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋ก ์ผ๊ด๋์ด์ผ ํ๋๋ฐ, Camoufox๋ ํญ์ ์ฑ๊ณตํ์ง๋ ์์ต๋๋ค. ์ํฐ๋ด ์ ๊ณต์
์ฒด๋ ๋จ ํ๋์ ๋
ํนํ ๋ถ์ผ์น๋ผ๋ ์ฐพ๊ธฐ ์ํด Camoufox๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ํ
์คํธํ ๋ค์ ์ฆ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํฌ๋ฆฝํธ๋ฅผ ์
๋ฐ์ดํธํ์ฌ ์ด๋ฅผ ํ
์คํธํฉ๋๋ค.
---
## How does Camoufox compare to other solutions?
### JavaScript ๊ธฐ๋ฐ ์๋ฃจ์
๊ณผ๊ฑฐ์๋ ๊ฐ๋ฐ์๋ค์ด JavaScript๋ฅผ ์ฃผ์
ํ์ฌ ์ด๋ฌํ ๊ฐ์ ์คํธํํ๋ ค๊ณ ํ์ง๋ง, JavaScript๊ฐ ๋ชจ๋ ๊ฒ์ ์คํธํํ ์ ์๊ธฐ ๋๋ฌธ์ ์์ ์ ์ผ๋ก ์๋ํ์ง ์์ต๋๋ค. ๋ถ์์ ํ ์ปค๋ฒ๋ฆฌ์ง๋ ์ผ๊ด๋์ง ์์ ํ๊ฑฐํ๋ฆฐํธ๋ฅผ ์ด๋ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋คํธ์ํฌ ์์ฒญ์ User Agent๊ฐ navigator์ User Agent์ ์ผ์นํ์ง ์์ผ๋ฉด ์ํฐ๋ด ์์คํ
์ด ํ๋๊ทธ๋ฅผ ์ง์ ํฉ๋๋ค.
๋ํ ์ฃผ์
๋ ๋ชจ๋ JavaScript๋ ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ๊ฐ์ง ๊ฐ๋ฅํฉ๋๋ค. ์ํฐ๋ด ์์คํ
์ `Object.getOwnPropertyDescriptor`๊ฐ ๋ฎ์ด์ฐ์ฌ์ง ์์ฑ์ ๋๋ฌ๋ด๋์ง, ํจ์์ `toString()`์ด ๋ ์ด์ `[native code]`๋ฅผ ๋ฐํํ์ง ์๋์ง(ํ์ด์ฌํน๋์์์ ๋๋ฌ๋), ๋๋ window ์ปจํ
์คํธ์ ๋ฐ์ดํฐ๊ฐ worker ์ค๋ ๋ ์ปจํ
์คํธ์ ์ผ์นํ์ง ์๋์ง ํ์ธํ ์ ์์ต๋๋ค. ์ฐํ ๋ฐฉ๋ฒ๋ ํ๊ณ๊ฐ ์์ผ๋ฉฐ, ์ถฉ๋ถํ ๊น์ด ํ๊ณ ๋ค๋ฉด JS ์ฃผ์
์ ๊ฐ์งํ ๋ฐฉ๋ฒ์ ํญ์ ์กด์ฌํฉ๋๋ค.
#### Camoufox์ ์ ๊ทผ ๋ฐฉ์
Camoufox๋ ๋ธ๋ผ์ฐ์ ์ C++ ๊ตฌํ ์์ค์์ ํธ์ถ์ ๊ฐ๋ก์ฑ๊ธฐ ๋๋ฌธ์ ํ์ด์ฌํน๋ ๋ชจ๋ ๊ฐ์ฒด์ ์์ฑ์ด ๋ค์ดํฐ๋ธ๋ก ๋ณด์
๋๋ค. ๊ฐ์งํ JavaScript ํ์ด์ฌํน์ด ์์ต๋๋ค.
Camoufox๋ ๋ํ Browserforge๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๊ด๋๊ณ ์ค๋๋ ฅ ์๋ ํ๊ฑฐํ๋ฆฐํธ๋ฅผ ์์ฑํ๋ ค๊ณ ์๋ํฉ๋๋ค. ํ์ง๋ง ์ด๋ ์์ ์ค๋ช
ํ ๋ฐ์ดํฐ ๋ถ์ผ์น์ ๊ฐ์ ๋ณต์กํ ํ๊ฑฐํ๋ฆฐํธ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ํด ์ฌ์ ํ ๊ฐ์ง๋ ์ ์์ต๋๋ค.
<hr width=50>
### CDP ๊ธฐ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
CDP(Chrome DevTools Protocol)๋ Chromium๊ณผ Firefox์ ๋ด์ฅ๋ ์๋ํ ํ๋กํ ์ฝ์
๋๋ค. ๊ทธ๋ฌ๋ CDP๋ ์๋ํ ํ๋กํ ์ฝ์ด๋ผ๋ ์ฌ์ค์ ์จ๊ธฐ๋ ค๋ ๋
ธ๋ ฅ์ ์ ํ ํ์ง ์์ผ๋ฉฐ, ๊ทธ ๊ธฐ๋ฅ์ ๋ง์ ๋ถ๋ถ์ ํ์ด์ง ๋ฒ์์ ๋
ธ์ถํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก๋ `navigator.webdriver`๊ฐ true์ธ์ง ํ์ธํ๊ฑฐ๋, ์คํ ๋๋ฒ๊ฑฐ๋ฅผ ์ฝ๋ ๊ฒ์ ์ก์๋ด๊ฑฐ๋, ChromeDriver๊ฐ ๋ด๋ถ ํต์ ์ ์ํด document ๊ฐ์ฒด์ ์ฃผ์
ํ๋ ๋ณ์๋ฅผ ํ์ธํ๋ ๋ฑ์ด ์์ต๋๋ค.
#### Camoufox์ ์ ๊ทผ ๋ฐฉ์
Playwright๋ Chromium์ ์ ์ดํ๊ธฐ ์ํด CDP๋ฅผ ์ฌ์ฉํ์ง๋ง, Firefox์๋ _Juggler_๋ฅผ ์ฌ์ฉํฉ๋๋ค. Juggler๋ Firefox๊ฐ CDP๋ฅผ ์ง์ํ๊ธฐ ์ ์ ๊ฐ๋ฐ๋ ์ปค์คํ
ํ๋กํ ์ฝ์
๋๋ค([์๋ณธ ์ ์ฅ์](https://github.com/puppeteer/juggler)). ์ด๋ Firefox ๋ด์ ๋ณ๋ ๋ชจ๋์ด๋ฉฐ ํต์ฌ ๋ธ๋ผ์ฐ์ ์ ์ผ๋ถ๊ฐ ์๋๋๋ค. ๋ฐ๋ผ์ ํ์ด์ง์ ๋ฌด์์ ๋
ธ์ถํ ์ง ํธ์งํ๊ณ ์ ์ดํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค.
Camoufox๋ Juggler์ ํจ์น๋ฅผ ์ ์ฉํ์ฌ ์์
ํ ์ ์๋ ๊ฒฉ๋ฆฌ๋ ํ์ด์ง '๋ณต์ฌ๋ณธ'์ ์ ๊ณตํฉ๋๋ค. Playwright๋ ์์ฒด ๋ฒ์ ์ ํ์ด์ง๋ฅผ ์์ ๋กญ๊ฒ ์ฝ๊ณ ํธ์งํ ์ ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ์ ์์ ์ผ๋ก ์๋ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ค์ ํ์ด์ง๋ ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ์ ํ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค. ๋ํ ํ์ด์ง๋ getter ํ์ด์ฌํน๊ณผ ๊ฐ์ ํธ๋ฆญ์ ํตํด ๋ฌด์ธ๊ฐ๋ฅผ ์ฝ๊ฑฐ๋ ์์๋ฅผ ๊ฐ์ํ๊ธฐ ์ํด ๋ฆฌ์ค๋๊ฐ ์ถ๊ฐ๋๋ ๊ฒ์ ๊ฐ์งํ ์ ์์ต๋๋ค.
๋ํ Juggler๋ Firefox์ ์๋ ์ฌ์ฉ์ ์
๋ ฅ ํธ๋ค๋ฌ๋ฅผ ํตํด ์ง์ ์
๋ ฅ์ ์ ์กํ๋ฏ๋ก, ์ผ๋ฐ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ ๋์ ์ ํํ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. Camoufox๋ ๋ํ Firefox์ ํค๋๋ฆฌ์ค ๋ชจ๋์ ํจ์น๋ฅผ ์ ์ฉํ์ฌ ์ผ๋ฐ ์ฐฝ์์ ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ๋ง๋ญ๋๋ค. ๊ทธ๋ฌ๋ ๋๋น์ฑ
์ผ๋ก, ํค๋๋ฆฌ์ค ๋ชจ๋๊ฐ ๋์ถ๋ ๊ฒฝ์ฐ Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ [๊ฐ์ ๋์คํ๋ ์ด](https://camoufox.com/python/virtual-display/)์์ Camoufox๋ฅผ ์คํํ ์ ์์ต๋๋ค.
---
<h1 align="center">Build System</h1>
> [!WARNING]
> ์๋ ๋ด์ฉ์ Camoufox๋ฅผ ๋น๋ํ๊ณ ๋๋ฒ๊น
ํ๋ ๋ฐ ๊ด์ฌ์ด ์๋ ์ฌ๋๋ค์ ์ํ ๊ฒ์
๋๋ค. Playwright ์ฌ์ฉ ๋ฐฉ๋ฒ์ [์ฌ๊ธฐ](https://github.com/daijro/camoufox/tree/main/pythonlib#camoufox-python-interface)๋ฅผ ์ฐธ์กฐํ์ธ์.
### ๊ฐ์
๋ค์์ ๋น๋ ์์คํ
๊ณผ ๊ด๋ จ make ๋ช
๋ น์ด์ ๋ค์ด์ด๊ทธ๋จ์
๋๋ค:```mermaid
graph TD
FFSRC[Firefox Source] -->|make fetch| REPO
subgraph REPO[Camoufox Repository]
PATCHES[Fingerprint masking patches]
ADDONS[uBlock & B.P.C.]
DEBLOAT[Debloat/optimizations]
SYSTEM_FONTS[Win, Mac, Linux fonts]
JUGGLER[Patched Juggler]
end
subgraph Local
REPO -->|make dir| PATCH[Patched Source]
PATCH -->|make build| BUILD[Built]
BUILD -->|make package-linux| LINUX[Linux Portable]
BUILD -->|make package-windows| WIN[Windows Portable]
BUILD -->|make package-macos| MAC[macOS Portable]
end
์ด๋ ์๋ LibreWolf ๋น๋ ์์คํ ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ต๋๋ค.
๋น๋ CLI
[!WARNING] Camoufox์ ๋น๋ ์์คํ ์ Linux์์ ์ฌ์ฉํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. WSL์ ์๋ํ์ง ์์ต๋๋ค!
๋จผ์ , Git์ผ๋ก ์ด ์ ์ฅ์๋ฅผ ํด๋ก ํ์ญ์์ค:```bash git clone --depth 1 https://github.com/daijro/camoufox cd camoufox
๋ค์์ผ๋ก, ๋ค์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ Camoufox ์์ค ์ฝ๋๋ฅผ ๋น๋ํ์ญ์์ค:```bash
make dir
๋ถํธ์คํธ๋ํ ์ ์, ํฌํผ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์์คํ
๋น๋ ์์กด์ฑ์ ์ค์นํฉ๋๋ค. ์ด ์คํฌ๋ฆฝํธ๋ ํ๋ซํผ์ ๊ฐ์งํ๊ณ ์ ์ ํ ํจํค์ง ๊ด๋ฆฌ์(macOS์์๋ Homebrew, Linux์์๋ apt/dnf/pacman)๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋์ ํ์ํ ๋ชจ๋ ๊ฒ(Python โฅ 3.11, Rust, aria2, p7zip, go, msitools, wget, sqlite`, ๋ฐ ํต์ฌ ๋น๋ ๋๊ตฌ)์ ์ค์นํฉ๋๋ค:```bash
bash scripts/install-deps.sh
> [!NOTE]
> ์์กด์ฑ ์ค์น ํ๋ก๊ทธ๋จ์ ํ์ฌ๊น์ง macOS์์๋ง ํ
์คํธ๋์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ Camoufox๋ฅผ ๋น๋ํ ์ ์๋๋ก ์์คํ
์ ๋ถํธ์คํธ๋ฉํด์ผ ํฉ๋๋ค. ์ด ์์
์ ํ ๋ฒ๋ง ์ํํ๋ฉด ๋ฉ๋๋ค. ๋ค์ ๋ช
๋ น์ ์คํํ์ฌ ์ํํฉ๋๋ค:```bash
make bootstrap
๋ง์ง๋ง์ผ๋ก ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ Camoufox๋ฅผ ๋น๋ํ๊ณ ํจํค์งํ ์ ์์ต๋๋ค:```bash python3 multibuild.py --target linux windows macos --arch x86_64 arm64 i686
์๋ก์ด ๋น๋์ ๊ฒฝ์ฐ, `i686`์ Windows์์๋ง ์ง์๋ฉ๋๋ค. ์ง์๋์ง ์๋ ๋์/์ํคํ
์ฒ ์กฐํฉ์ ๊ฑด๋๋๋๋ค.
<details>
<summary>
CLI ๋งค๊ฐ๋ณ์
</summary>```bash
Options:
-h, --help show this help message and exit
--target {linux,windows,macos} [{linux,windows,macos} ...]
Target platforms to build
--arch {x86_64,arm64,i686} [{x86_64,arm64,i686} ...]
Target architectures to build for each platform
--bootstrap Bootstrap the build system
--clean Clean the build directory before starting
Example:
$ python3 multibuild.py --target linux windows macos --arch x86_64 arm64
Docker ์ฌ์ฉ
Camoufox๋ ๋ชจ๋ ํ๋ซํผ์์ Docker๋ฅผ ํตํด ๋น๋ํ ์ ์์ต๋๋ค.
- Firefox์ ์์ค ์ฝ๋๊ฐ ํฌํจ๋ Docker ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค:```bash docker build -t camoufox-builder .
2. Camoufox ํจ์น๋ฅผ ๋์ ํ๋ซํผ ๋ฐ ์ํคํ
์ฒ๋ก ๋น๋:```bash
docker run -v "$(pwd)/dist:/app/dist" camoufox-builder --target <os> --arch <arch>
๋ก์ปฌ ~/.mozbuild ๋๋ ํ ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์?
ํธ์คํธ์ .mozbuild ๋๋ ํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด, ๋ค์ ๋ช
๋ น์ด๋ฅผ ๋์ ์ฌ์ฉํ์ฌ docker๋ฅผ ์คํํ ์ ์์ต๋๋ค:```bash
docker run
-v "$HOME/.mozbuild":/root/.mozbuild:rw,z
-v "$(pwd)/dist:/app/dist"
camoufox-builder
--target
--arch
</details>
<details>
<summary>
Docker CLI ๋งค๊ฐ๋ณ์
</summary>```bash
Options:
-h, --help show this help message and exit
--target {linux,windows,macos} [{linux,windows,macos} ...]
Target platforms to build
--arch {x86_64,arm64,i686} [{x86_64,arm64,i686} ...]
Target architectures to build for each platform
--bootstrap Bootstrap the build system
--clean Clean the build directory before starting
Example:
$ docker run -v "$(pwd)/dist:/app/dist" camoufox-builder --target windows macos linux --arch x86_64 arm64 i686
๋น๋ ์ํฐํฉํธ๋ ์ด์ dist/ ํด๋ ์๋์ ์์ฑ๋์ด ๋ํ๋ฉ๋๋ค.
๊ฐ๋ฐ ๋๊ตฌ
์ด ์ ์ฅ์์๋ scripts/developer.py ์๋์ ๊ฐ๋ฐ์ UI๊ฐ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค:```
make edits
ํจ์น๋ ์ฌ๊ธฐ์ ํธ์ง, ์์ฑ, ์ ๊ฑฐ ๋ฐ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
<img src="https://assets.kitploit.com/production/public/readmes/41473/19bffc384c42fb6eb69b3ee59622daed4770cf0f11ffe39401eca57a7d2457f4.png">
### ํจ์น ๋ง๋๋ ๋ฐฉ๋ฒ
1. ๊ฐ๋ฐ์ UI์์ **Reset workspace**๋ฅผ ํด๋ฆญํฉ๋๋ค.
2. ํ์์ ๋ฐ๋ผ `camoufox-*/` ํด๋์์ ๋ณ๊ฒฝํฉ๋๋ค. `make build`์ `make run`์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ํ
์คํธํ ์ ์์ต๋๋ค.
3. ๋ณ๊ฒฝ์ด ์๋ฃ๋๋ฉด **Write workspace to patch**๋ฅผ ํด๋ฆญํ๊ณ ํจ์น ํ์ผ์ ์ ์ฅํฉ๋๋ค.
### ๊ธฐ์กด ํจ์น ์์
๋ฐฉ๋ฒ
1. ๊ฐ๋ฐ์ UI์์ **Edit a patch**๋ฅผ ํด๋ฆญํฉ๋๋ค.
2. ํธ์งํ ํจ์น๋ฅผ ์ ํํฉ๋๋ค. ์์
๊ณต๊ฐ์ด ์ ํํ ํจ์น์ ์ํ๋ก ์ฌ์ค์ ๋ฉ๋๋ค.
3. ๋ณ๊ฒฝ์ด ์๋ฃ๋๋ฉด **Write workspace to patch**๋ฅผ ๋๋ฅด๊ณ ๊ธฐ์กด ํจ์น ํ์ผ์ ๋ฎ์ด์๋๋ค.
---
## Leak ๋๋ฒ๊น
์ด๊ฒ์ WAF ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋๋๋
ํํ์ง ์๊ณ ๋์๋ฅผ ํ๋จํ๋ ์ ํ๋ก์ธ์ค๋ฅผ ๋ณด์ฌ์ฃผ๋ ์์๋์
๋๋ค. ์ด ๋ฐฉ๋ฒ์ ํ
์คํธ ์ฌ์ดํธ๊ฐ ํ๋๊ทธ๋ฅผ ํ์ํ ๋๊น์ง Camoufox์ ๊ธฐ๋ฅ์ Firefox ์์ค ์ฝ๋์ ์ ์ง์ ์ผ๋ก ๋ค์ ๋์
ํฉ๋๋ค.
์ด ํ๋ก์ธ์ค๋ Linux ์์คํ
์ด ํ์ํ๋ฉฐ Firefox ๋น๋ ๋๊ตฌ๊ฐ ์ค์น๋์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค([์ฌ๊ธฐ](https://github.com/daijro/camoufox?tab=readme-ov-file#build-cli) ์ฐธ์กฐ).
<details>
<summary>
์์๋ ๋ณด๊ธฐ...
</summary>```mermaid
flowchart TD
A[Start] --> B[Does website flag in the official Firefox?]
B -->|Yes| C[Likely bad IP/rate-limiting. If the website fails on both headless and headful mode on the official Firefox distribution, the issue is not with the browser.]
B -->|No| D["Run make ff-dbg(1) and build(2) a clean distribution of Firefox. Does the website flag in Firefox **headless** mode(4)?"]
D -->|Yes| E["Does the website flag in headful mode(3) AND headless mode(4)?"]
D -->|No| F["Open the developer UI(5), apply config.patch, then rebuild(2). Does the website still flag(3)?"]
E -->|No| G["Enable privacy.resistFingerprinting in the config(6). Does the website still flag(3)?"]
E -->|Yes| C
G -->|No| H["In the config(6), enable FPP and start omitting overrides until you find the one that fixed the leak."]
G -->|Yes| I[If you get to this point, you may need to deobfuscate the Javascript behind the website to identify what it's testing.]
F -->|Yes| K["Open the developer UI, apply the playwright bootstrap patch, then rebuild. Does it still flag?"]
F -->|No| J["Omit options from camoufox.cfg(6) and rerun(3) until you find the one causing the leak."]
K -->|No| M[Juggler needs to be debugged to locate the leak.]
K -->|Yes| L[The issue has nothing to do with Playwright. Apply the rest of the Camoufox patches one by one until the one causing the leak is found.]
M --> I
์ธ์ฉ๋ ๋ช ๋ น์ด
| # | ๋ช ๋ น์ด | ์ค๋ช |
|---|---|---|
| (1) | make ff-dbg | ์ต์ ํจ์น๋ฅผ ์ ์ฉํ ๊ธฐ๋ณธ Firefox๋ฅผ ์ค์ ํฉ๋๋ค. |
| (2) | make build | ์์ค ์ฝ๋๋ฅผ ๋น๋ํฉ๋๋ค. |
| (3) | make run | ๋น๋๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ์คํํฉ๋๋ค. |
| (4) | make run args="--headless https://test.com" | ํค๋๋ฆฌ์ค ๋ชจ๋๋ก URL์ ์คํํฉ๋๋ค. ๋ชจ๋ ๋ฆฌ๋๋ ์ ์ด ์ฝ์์ ์ถ๋ ฅ๋์ด ํ ์คํธ ํต๊ณผ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. |
| (5) | make edits | ๊ฐ๋ฐ์ UI๋ฅผ ์ฝ๋๋ค. ์ฌ์ฉ์๊ฐ ํจ์น๋ฅผ ์ ์ฉ/์ทจ์ํ๊ณ ํ์ฌ ์ ์ฉ๋ ํจ์น๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. |
| (6) | make edit-cfg | ๊ธฐ๋ณธ ์์คํ ํธ์ง๊ธฐ๋ก camoufox.cfg๋ฅผ ํธ์งํฉ๋๋ค. |
๊ฐ์ฌ
๋๋ธ๋กํ ๋ฐ ์ฐธ๊ณ ์๋ฃ:
- LibreWolf: ๋๋ธ๋กํธ ํจ์น ๋ฐ ๋น๋ ์์คํ ์๊ฐ
- BetterFox: ์๋ ๋ฐ ๋๋ธ๋กํธ ํ๊ฒฝ ์ค์
- Ghostery: ๋๋ธ๋กํธ ์ฐธ๊ณ (์จ๋ณด๋ฉ ๋ฉ์์ง ๋นํ์ฑํ)
์น ์คํฌ๋ํ ๋ฐ ํ ์คํธ:
- riflosnake/HumanCursor: ์๋ณธ ์ธ๊ฐํ ์ปค์ ์ด๋ ์๊ณ ๋ฆฌ์ฆ, C++๋ก ํฌํ ๋จ
- CreepJS, Browserleaks, BrowserScan - ์ ์ฉํ ๋์ถ ํ ์คํธ ์ฌ์ดํธ
UI ํ ๋ง:
- Jamir-boop/minimalisticfox: Camoufox์ ์ต์ CSS ํ ๋ง์ ์๊ฐ์ ์ค (๋งํฌ)