kone
소미소프트
소미소프트

템퍼몽키를 이용한 복호화(base64 복호화기능) (코드찐빠 수정함)

07/26/2026, 16:27:23
유틸
23215 views · 5 likes

맨날 눈팅만 하다가 처음 글써봄.

요즘 base64가 민심안좋대서 재미나이랑 간단하게 하나 만들어봐서 공유함.

★ 3분만 투자하면 개딸깍 디코더 완성

★ 작성자는 프로그래머가 아니고 재미나이한테 물어봐서 대충만든거라 문제발생 시 해결법을 알려주기가 매우 어려운 점 양해 바람.

1. 템퍼몽키(Tampermonkey)설치

구글 확장프로그램인 템퍼몽키를 사용할거라 설치먼저ㄱㄱ

https://chromewebstore.google.com/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=ko

Tampermonkey - Chrome 웹 스토어
Change the web at will with userscripts

2. 코드 입력하기

설치를 완료했다면 우측 상단 퍼즐조각모양 클릭하면 템퍼몽키가 있을텐데, 클릭해서 켜줌.

1

이후 나오는 창에서 “새 스크립트 만들기”를 클릭

1

클릭하면 이런 머리아픈창이 나올거임

1

다 필요없고 아래 내용 그대로 복사해서 원래거 싹 지운뒤 박아넣고 ctrl + s

지금 코드 써둔게 여기 글쓰면서 멋대로 줄이 바껴서, 파일로 올려두겠음.

아래 스픾끼 사진 저장해서 반디집으로 연결해서 있는 파일로ㄱㄱ

사진으로 하려니 여기선 형식이 바뀌네…

키오스크 링크 걸어둠. ㄱㄹ 1달

aHR0cHM6Ly9raW8uYWMvYy9kZlF1S3RTOHBHTnQ5MVZsOUlONThi



// UserScript

// @name Base64 Quick Decoder

// @namespace http://tampermonkey.net/

// @version 1.1

// @description 드래그한 Base64 텍스트를 즉시 복호화하여 툴팁으로 보여줍니다.

// @author You

// @match :///*

// @grant none

// /UserScript

(function() {

'use strict';

// 툴팁 엘리먼트 생성

const tooltip = document.createElement('div');

Object.assign(tooltip.style, {

position: 'fixed',

display: 'none',

zIndex: '2147483647', // 최상단에 뜨도록 zIndex 최대치 설정

backgroundColor: '#1e1e2e',

color: '#cdd6f4',

padding: '8px 12px',

borderRadius: '6px',

boxShadow: '0 4px 12px rgba(0,0,0,0.4)',

fontSize: '13px',

fontFamily: 'sans-serif',

maxWidth: '400px',

wordBreak: 'break-all',

border: '1px solid #45475a',

pointerEvents: 'auto'

});

document.body.appendChild(tooltip);

// UTF-8 지원 Base64 복호화 함수

function decodeBase64(str) {

try {

// 공백/줄바꿈 제거 및 URL-Safe Base64 대응(- _ 변환)

let cleanStr = str.replace(/\s+/g, '').replace(/-/g, '+').replace(/_/g, '/');

// 패딩(=) 부족 시 자동 채움

while (cleanStr.length % 4 !== 0) {

cleanStr += '=';

}

const text = atob(cleanStr);

const length = text.length;

const bytes = new Uint8Array(length);

for (let i = 0; i < length; i++) {

bytes[i] = text.charCodeAt(i);

}

const decoder = new TextDecoder('utf-8');

const result = decoder.decode(bytes);

// 읽을 수 없는 깨진 문자(제어문자 등)가 너무 많으면 실패로 처리

if (/[\x00-\x08\x0B\x0C\x0E-\x1F]/.test(result)) return null;

return result;

} catch (e) {

return null;

}

}

// 마우스 뗐을 때 이벤트 handling

document.addEventListener('mouseup', (e) => {

if (tooltip.contains(e.target)) return;

// 약간의 지연을 두어 selection 객체가 정확히 반영되도록 함

setTimeout(() => {

const selectedText = window.getSelection().toString().trim();

// 최소 4자 이상인 경우 시도

if (selectedText.length >= 4) {

const decoded = decodeBase64(selectedText);

if (decoded && decoded.trim() !== '' && decoded !== selectedText) {

tooltip.innerHTML = <b style="color: #89b4fa;">🔓 Base64 복호화:</b><br>${escapeHtml(decoded)};

// 화면 밖으로 나가지 않게 위치 조절

let posX = e.clientX + 10;

let posY = e.clientY + 15;

if (posX + 300 > window.innerWidth) posX = window.innerWidth - 320;

if (posY + 100 > window.innerHeight) posY = e.clientY - 60;

tooltip.style.left = ${Math.max(10, posX)}px;

tooltip.style.top = ${Math.max(10, posY)}px;

tooltip.style.display = 'block';

return;

}

}

tooltip.style.display = 'none';

}, 10);

});

document.addEventListener('mousedown', (e) => {

if (!tooltip.contains(e.target)) {

tooltip.style.display = 'none';

}

});

function escapeHtml(text) {

const div = document.createElement('div');

div.innerText = text;

return div.innerHTML;

}

})();


3. 저장 후 할일

저장하고 몇가지 확인해둘것들임. 한번씩 체크하자.

저장하고 “설치된 유저 스크립트”로 가면 방금 만든 base64 Quick Decoder라는게 만들어져있을거임.

활성화 되있는지 체크.

1

다음은 방금 쓴 코드가 제대로 크롬에서 작동하게 해주도록 해주는거인데, 나도 이거 체크 안해서 안돌아갔었음.

먼저, 아래 사진처럼 “확장 프로그램 관리”를 찾아서 클릭함.

1

그러고 나오는 창에서 색칠한거 켜주면 모든 준비는 끝남.

1

다시 말하는데, 이거 안키면 안돌아감. 꺼진경우 자주있음.

4. 사용하기

사용법도 별거없음. 암호화된 코드 드래그하면 옆에 띡하고 복호화된거 나옴.

1

(사진은 아무글이나 대충 퍼온거라 좀 가림)

여기까지고, 필자는 프로그래머가 아니며, 재미나이한테 물어보고 만든지라

질문해도 어지간한건 답하기 어려울 수 있단점 다시한번 이해해주길 바람.

글 자체 문제 시 댓글달아주샘 빠른 시일내에 삭제하겠음.

ts) 가끔 드래그한거 암호화된거 아니어도 복호화할려고 들 수도 있음. 근데 자주그러진 않더라

끝으로, 업로드하여 주시는 귀인 여러분들께 왕감사인사 올림.

5
8 comments
유효한 스크립트가 아니라고 저장을 안하는데 뭐가 문제지...
tooltip.innerHTML = <b style="color: #89b4fa;">🔓 Base64 복호화:</b><br>${escapeHtml(decoded)}; 이 줄이 에러나는데
코드가 여기 글쓰면서 지멋대로 줄바꿈됨... 수정해서 올려둠
유효하지 않는 스크립트 라고 뜨는디 ㅠ
제미나이 돌려서 수정받고 적용하셈
글쓰니 지 멋대로 줄바꿈당함 ㅠㅠ 코드 따로 업로드해서 올려뒀음
07/26 Edited 07/26
와 뭐야 방금 옆동네에 글 쓰고 왔는데 나랑 똑같은 글 쓰신 분이 계시내 근대 저는 암호키 복붙만 하면 아래 공정을 자동으로 해줘서 저랑은 좀 다른듯 [자동] 복호화 > 복호화 된 URL 호출 > 비밀번호 입력 > 확인
[RG9yb3p6/용량줄임]5~8월모음+자막1
영상
뒤치기는 뒤에서
08/23 157306 120
[복구요청] 셀로버스 판타지 요청합니다
요청
33322
08/23 6993 0
연도국룰(ex.2026ㄱㄹ) 관련 질문도 차단임?
질문
crtrp
08/23 6533 -11
(요청 없는 버전업) RJ01616172 자궁 수업 NTR
번역
craven
08/23 239450 130
제작자 씨엔 문의 결과
일반
changman89
08/23 6292 6
셀레녹시아 체험판 번역은 내려간 건가?
질문
asdkkq
08/23 5977 0
토미에는 결혼이 하고 싶어 '검열'뜨는건 그냥 씬을 안만든거임??
질문
망고빙수
08/23 5500 0
[미번,번역요청] 고전 게임 입니당
미번
tentacle master
08/23 45068 35
[RJ01394190] 슈가 라이프 ~코인 소녀와 달콤한 나날~
복구
개구리
08/23 170993 58
오늘 하루종일 '환생 주점'만 했네
후기 및 공략
스삐키뚜땨
08/23 26303 17
애니 하나만 찾아주실분(아시는 분) 부탁드립니다.
질문
seryoung11
08/23 4417 0
인간적으로 입추 지났으면 시원해져야하는거 아님?
일반
apee
08/23 4801 0
윈도우 11은 번역 프로그램 뭐씀?
질문
akskdkfk12
08/23 5312 0
Ark Manager 미디어 기능을 전체적으로 손보고 있습니다. (불편한점 등 의견 환영)
작업현황
rigra
08/23 14043 2
【ai번역】 순진하고 순수한 쿨다운녀인 그녀가 첫경험 후 점점 더 과도한 스킨십을 해온다.
소리
나도끼워야지
08/23 50158 61
[복구요청] RJ01577275 人妻上司の分からせ方 유부녀 상사 참교육
요청
quasistellarobject
08/23 7735 1
(ai)(후타)생각없이 만든 아리아 수나(줄여서 아리수)
야짤
gongkong4
08/23 17884 6
[복구요청]RJ01671421 주인님 최애인 내가 네토라레 당하기까지
요청
gmrzkfn
08/23 6738 0
하드가 뒤져서 그 안에 있던 대마인 뷰어하고 야겜 뷰어가 날아갔다
일반
슬래시
08/23 7281 2
방과후 마사지 간단 후기
후기 및 공략
lkjlkjlk
08/23 39727 32
주인공이 야스절대 못하는 전개인데 윾쾌한 웹소 소재 하나떠오름
일반
ㅇㅇ
08/23 6327 0
요청복구) Summer time Saga-0-20-16-pc
복구
햄댕이
08/23 167565 68
[자막번역만]다우너 ○리 마왕의 감도 3000배 인파라오호 목소리! LV 차 95776? 최○강○으로 완봉이지만 뭐w 즛코바코 절정해라 육변기♪…후우. 너를 사랑해
소리
하츠네미쿠
08/23 51889 49
[복구요청] 언홀리 메이든 폭탄 증가패치
요청
마이도아리
08/23 7520 0
윈도우 디펜더 얘 좀 웃기네 ㅋㅋ
일반
snoram
08/23 7120 1
들끓던 무렵에 작가 근황 ㅋㅋㅋ
일반
gloli
08/23 8410 2
1주일만 더 버티면 8월 안녕이다
일반
돔마
08/23 5285 0
에테리얼) 젠레스 세계관에선 이것도 연애입니다
영상
godknows
08/23 153592 144
마성의 그녀 이벤트 당첨됐다. 그런의미로 디엘사이트 1000포 뿌림
일반
yongrong
08/23 7688 6
[Hanpatsu Zokusei] 수수하고 오타쿠 같은 여동생 마유 쨩 1화~4화전반부
동인
티모
08/23 163066 221