9148c358d0
Topic_Agent/Topic_Blog/Topics/Topics_Biz/Topics_Meeting/Topics_Rag의 마크다운 지식 문서를 Topic_General/Topic_Programming/Topic_Graphic/Topic_Business 4개 카테고리로 재분류. - 중복 제거: frontmatter의 status:duplicate/merged + duplicate_of/redirect_to 필드로 자기 자신을 중복으로 선언한 리다이렉트 stub 1032개 제거, 완전 동일 내용 파일 472개 제거, 동일 파일명·다른 내용 충돌 시 더 큰(완전한) 버전만 유지(162개 제거) — 총 1639개 중복 제거. - 분류: 폴더 단위로 명확한 항목(AI_and_ML/Coding/Architecture 등 → Programming, Comfyui/Visual_Effects → Graphic, Topics_Biz/Topics_Meeting/사업 등 → Business, Poetic_Blog_Writing/창의성/Game_Design 등 → General)은 폴더 우선순위로, 나머지 혼재 폴더(Topic_Agent/Topic_Blog/Topics 루트/Thinking & Reasoning/Other/UI_UX_Assets)는 title/tags 키워드 스코어링으로 파일 단위 분류(불명확한 경우 General로 폴백). 원본 폴더명은 "From_*" 서브폴더로 보존해 추적 가능성 유지. - 최종 배치: Programming 2784 / General 1608 / Graphic 285 / Business 249 = 4926개 문서. - 에이전트 운영 상태(.astra/.agent/.obsidian/sessions/memory/_company/docs/lessons/_shared/src)는 지식 콘텐츠가 아니므로 재분류 대상에서 제외하고 원위치 유지. - Topics/Topic_email(상위 보호 폴더 Topic_email과 파일명 100% 중복) 삭제 — 보호 폴더 자체는 미변경. - 완전히 비게 된 Topic_Agent/Topic_Blog/Topics_Biz/Topics_Rag 폴더 제거.
4.5 KiB
4.5 KiB
id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, verification_status, tags, raw_sources, last_reinforced, github_commit, tech_stack
| id | title | category | status | canonical_id | aliases | duplicate_of | source_trust_level | confidence_score | verification_status | tags | raw_sources | last_reinforced | github_commit | tech_stack | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| wiki-2026-0508-code-obfuscation | Code Obfuscation | 10_Wiki/Topics | verified | self |
|
none | A | 0.9 | applied |
|
2026-05-10 | pending |
|
Code Obfuscation
매 한 줄
"매 reverse-engineering cost 의 raise — semantic 보존하면서 readability 파괴". Crypto 처럼 secrecy 가 아닌 cost-shifting — determined attacker 는 매 결국 풀 수 있음. 매 modern usage: anti-piracy, anti-cheating, license validation, 매 LLM-based deobfuscation 의 등장으로 의미 retreat.
매 핵심
매 layer
- Lexical: rename identifier (
x_a1b2c3). - Control flow: opaque predicate, control-flow flattening.
- Data: string encryption, constant unfolding.
- Anti-analysis: anti-debug, VM detection, integrity check.
- Virtualization: custom VM bytecode (VMProtect, Themida).
매 trade-off
- Performance: 2-10× slowdown (virtualization 시).
- Size: 2-5× binary bloat.
- Stability: false positive 가능 (anti-debug).
- Security: 매 cost-raise 만 — break 시간을 hours → weeks 로.
매 응용
- JavaScript bundle (anti-scraping).
- Mobile app DRM, license check.
- Game anti-cheat (e.g., VAC, EAC).
- Malware (defensive obfuscation).
💻 패턴
String encryption
// Before
const KEY = "secret-api-key";
// After
const _0xa1b2 = ['c2VjcmV0', 'LWFwaQ==', 'LWtleQ=='];
const _0xc3d4 = (i) => atob(_0xa1b2[i]);
const KEY = _0xc3d4(0) + _0xc3d4(1) + _0xc3d4(2);
Control-flow flattening
// Before: linear flow
void f() { a(); b(); c(); }
// After: dispatcher loop
void f_obf() {
int state = 0;
while (state != -1) {
switch (state) {
case 0: a(); state = 7; break;
case 7: b(); state = 3; break;
case 3: c(); state = -1; break;
}
}
}
Opaque predicate
// Always true at runtime, hard to determine statically
auto opaque = [](int x) { return (x*x*x - x) % 3 == 0; }; // always true for any int
if (opaque(rand())) real_logic();
else fake_branch(); // dead but appears live to disassembler
Identifier mangling (terser)
// terser config
{
mangle: {
toplevel: true,
properties: { regex: /^_/ }
},
compress: { passes: 3, dead_code: true }
}
Anti-debug (browser)
setInterval(() => {
const t = performance.now();
debugger; // pauses if devtools open
if (performance.now() - t > 100) {
// devtools detected
location.href = 'about:blank';
}
}, 1000);
LLVM IR pass (obfuscator-llvm style)
struct StringObfPass : PassInfoMixin<StringObfPass> {
PreservedAnalyses run(Module &M, ModuleAnalysisManager&) {
for (auto &GV : M.globals()) {
if (auto *CDA = dyn_cast<ConstantDataArray>(GV.getInitializer())) {
if (CDA->isString()) xor_encrypt(GV);
}
}
return PreservedAnalyses::none();
}
};
매 결정 기준
| 상황 | Approach |
|---|---|
| Web bundle anti-scraping | terser + javascript-obfuscator |
| Native binary (commercial) | VMProtect / Themida |
| Open-source w/ embedded secret | DON'T — use server-side proxy |
| Game anti-cheat | Kernel driver + virtualization |
| Mobile DRM | Hardware-backed (TEE, SEP) — obfuscation 보조 |
기본값: Don't obfuscate — secrets belong server-side. Necessary 시 매 layered defense.
🔗 Graph
- 응용: Malware Analysis
🤖 LLM 활용
언제: Defense-in-depth context, malware analysis 학습, anti-tamper design. 언제 X: Hiding actual secrets — broken by definition. 매 server-side 가 답.
❌ 안티패턴
- Security through obscurity (alone): 매 always falls.
- Embedding API key in client: obfuscation 으로도 매 보호 불가.
- Custom crypto: roll-your-own → obfuscation 보다 매 weaker.
- Performance ignored: 10× slowdown 으로 UX 망침.
- No update path: 매 break 되면 매 fresh release 필요 — automation 필수.
🧪 검증 / 중복
- Verified (Collberg taxonomy, obfuscator-llvm, javascript-obfuscator).
- 신뢰도 A.
🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — obfuscation taxonomy + JS/LLVM patterns |