๋น๋ฐ๋ฒํธ๋ฅผ ์์ด๋ฒ๋ ค ํธ์งํ ์ ์๊ฒ ๋ ๋ด ์์ ํ์ผ์ ์ํธ/ํตํฉ๋ฌธ์ ๋ณดํธ์ ์ด๊ธฐ ์ํธ๋ฅผ ํด์ ํด ์ฃผ๋ Windows ๋ฐ์คํฌํฑ ์ฑ์ ๋๋ค.
- ์ฌ๋ฌ ์ข ๋ฅ์ ์์ "๋ณดํธ"๋ฅผ ํ ๋ฒ์ ํด์
- ์ผ๊ด ์ฒ๋ฆฌ โ ์ฌ๋ฌ ํ์ผ์ด๋ ํด๋๋ฅผ ํ๊บผ๋ฒ์ ํ์ ๋ฃ์ด ์์ฐจ ํด์
- ๋๋๊ทธ ์ค ๋๋กญ โ ํ์ผ/ํด๋๋ฅผ ์ฐฝ์ ๋์ด๋ค ๋์ผ๋ฉด ๋ฐ๋ก ์ถ๊ฐ
- ์๋ณธ ๋ณด์กด โ ๊ธฐ๋ณธ์ ์ผ๋ก
์๋ณธ๋ช _unlocked.xlsx๋ก ์ ์ฅ(์๋ณธ์ ๊ทธ๋๋ก). ์ต์ ์ผ๋ก ๋ฎ์ด์ฐ๊ธฐ ์ ํ ๊ฐ๋ฅ - ๋น๋๊ธฐ ์ฒ๋ฆฌ + ์งํ๋ฅ โ ํฐ ํ์ผ์์๋ ํ๋ฉด์ด ๋ฉ์ถ์ง ์์
- ๊ฒฐ๊ณผ ๋ก๊ทธ / ํ์ผ๋ณ ์ํ ํ์
- ์๋ ์ ๋ฐ์ดํธ ํ์ธ โ GitHub Releases ์์ ์ ๋ฒ์ ์ ๊ฐ์งํด ์๋ฆผ
| ๋ณดํธ ์ข ๋ฅ | ์ค๋ช | ์ง์ |
|---|---|---|
| ์ํธ ๋ณดํธ (Sheet protection) | ์
ํธ์ง ์ ๊ธ (sheetProtection) |
โ |
| ํตํฉ๋ฌธ์ ๋ณดํธ (Workbook protection) | ์ํธ ์ถ๊ฐ/์ญ์ /์ด๋ ์ ๊ธ (workbookProtection) |
โ |
| ์ฐ๊ธฐ ์์ฝ ์ํธ (Write reservation) | ์ฝ๊ธฐ ์ ์ฉ ๊ถ์ฅ / ์์ ์ํธ (fileSharing) |
โ |
| ์ด๊ธฐ ์ํธ (ํ์ผ ์ ์ฒด ์ํธํ) | ํ์ผ์ ์ด ๋ ์๊ตฌํ๋ ์ํธ (AES ์ํธํ) โ ์ํธ ์ ๋ ฅ ์ ๋ณตํธํ | โ |
| VBA ํ๋ก์ ํธ ์ํธ | ๋งคํฌ๋ก ํธ์ง๊ธฐ ์ ๊ธ | โณ ์์ |
| ํ์ | ์ง์ |
|---|---|
.xlsx (ํตํฉ๋ฌธ์) |
โ |
.xlsm (๋งคํฌ๋ก ํฌํจ) |
โ |
.xltx / .xltm (์์ ํ์ผ) |
โ |
.xls (97โ2003 ๋ ๊ฑฐ์) |
๐ ๊ฐ์ง ํ ์๋ด (ํด์ ๋ ์์ ) |
- ์ต์ ๋ฆด๋ฆฌ์ฆ ์์
Unlocker_For_ExcelSheet-win-x64.exe๋ฅผ ๋ด๋ ค๋ฐ์ต๋๋ค. - ์คํํฉ๋๋ค. (๋ณ๋ ์ค์น ๋ถํ์ โ ๋จ์ผ ์คํ ํ์ผ, .NET ๋ฐํ์ ํฌํจ)
- Windows SmartScreen ๊ฒฝ๊ณ ๊ฐ ๋จ๋ฉด ์ถ๊ฐ ์ ๋ณด โ ์คํ ์ ๋๋ฌ ์คํํฉ๋๋ค.
์ฑ ๋ด [์ ๋ฐ์ดํธ ํ์ธ] ๋ฒํผ์ผ๋ก ์ ๋ฒ์ ์ ํ์ธํ ์ ์๊ณ , ์ ๋ฒ์ ์ด ์์ผ๋ฉด ์์ ์ ํ๋จ ์ํ์ค์ ์๋ฆผ์ด ํ์๋ฉ๋๋ค.
- [ํ์ผ ์ถ๊ฐ] ๋๋ [ํด๋ ์ถ๊ฐ] ๋ก ์์ ํ์ผ์ ํ์ ๋ฃ์ต๋๋ค. (์ฐฝ์ ๋๋๊ทธ๋ ๊ฐ๋ฅ)
- ํ์ํ๋ฉด [์๋ณธ ๋ฎ์ด์ฐ๊ธฐ] ๋ฅผ ์ฒดํฌํฉ๋๋ค. (๊ธฐ๋ณธ๊ฐ: ์๋ณธ ๋ณด์กด,
*_unlocked๋ก ์ ์ฅ) - [ํด์ ์์] ์ ๋๋ฆ ๋๋ค.
- ์ด๊ธฐ ์ํธ๊ฐ ๊ฑธ๋ฆฐ ํ์ผ์ ์ฒ๋ฆฌ ์ค ์ํธ ์ ๋ ฅ ์ฐฝ์ด ๋น๋๋ค. (์ํธ๋ฅผ ์์์ผ ๋ณตํธํ ๊ฐ๋ฅ)
- ์๋ฃ๋๋ฉด [๊ฒฐ๊ณผ ํด๋ ์ด๊ธฐ] ๋ก ๊ฒฐ๊ณผ ํ์ผ์ ํ์ธํฉ๋๋ค.
.xlsx/.xlsm ๋ฑ OOXML ํ์ผ์ ๋ด๋ถ๊ฐ ZIP + XML ๊ตฌ์กฐ์
๋๋ค. ์ด ์ฑ์:
- ์๋ณธ์ ๊ฑด๋๋ฆฌ์ง ์๋๋ก ์์ ํด๋์ ๋ณต์ฌ๋ณธ์ ๋ง๋ค๊ณ ,
- ๋ด๋ถ XML(
xl/worksheets/*.xml,xl/workbook.xml)์ XML ํ์๋ก ์ ํํ ๋ถ์ํดsheetProtectionยทworkbookProtectionยทfileSharing์์๋ฅผ ์ ๊ฑฐํ ๋ค, - ์ฑ๊ณตํ๋ฉด ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํฉ๋๋ค.
์ด๊ธฐ ์ํธ๋ก ์ํธํ๋ ํ์ผ์ ZIP ์ด ์๋๋ผ CFB(OLE2) ์ปจํ ์ด๋ + AES ์ํธํ (ECMA-376) ์ด๋ฏ๋ก, ์ ๋ ฅํ ์ํธ๋ก ๋ณตํธํํ ๋ค ์ ๊ณผ์ ์ ์ ์ฉํฉ๋๋ค. (๋ณตํธํ์๋ NPOI ์ฌ์ฉ)
# ์๊ตฌ: .NET 9 SDK, Windows
git clone https://github.com/BaeTab/Unlocker_For_ExcelSheet.git
cd Unlocker_For_ExcelSheet
# ์คํ
dotnet run --project Unlocker_For_ExcelSheet
# ๋จ์ผ ์คํ ํ์ผ(์์ฒด ํฌํจ) ๊ฒ์
dotnet publish Unlocker_For_ExcelSheet/Unlocker_For_ExcelSheet.csproj \
-c Release -r win-x64 --self-contained true \
-p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true์ด ๋๊ตฌ๋ ๋ณธ์ธ์ด ์์ ํ๊ฑฐ๋ ํด์ ๊ถํ์ด ์๋ ํ์ผ์ ์์ด๋ฒ๋ฆฐ ๋ณดํธ๋ฅผ ํธ๋ ์ฉ๋์ ๋๋ค. ํ์ธ์ ํ์ผ์ด๋ ๊ถํ ์๋ ํ์ผ์ ๋ณดํธ๋ฅผ ๋ฌด๋จ์ผ๋ก ํด์ ํ๋ ๋ฐ ์ฌ์ฉํ์ง ๋ง์ธ์. ์ด๊ธฐ ์ํธ๋ฅผ ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ์ ๋ณต๊ตฌ(๋ฌด์ฐจ๋ณ ๋์ ๋ฑ)๋ ์ง์ํ์ง ์์ต๋๋ค.
- .NET 9 / WinForms (C#)
System.IO.Compression(OOXML ZIP ํธ์ง),System.Xml.Linq(XML ์์ )- NPOI (์ด๊ธฐ ์ํธ ๋ณตํธํ)
์ด์ ยท PR ํ์ํฉ๋๋ค.
