DeCSS 의 구조는?
아래 472바이트짜리 펄 코드로 DVD암호를 깰수 있다고 하는데요.... 이거 어떻게 쓰는 건지, 이 프로그램이 왜 만들어졌는지, 프로그램 분석 좀 해주실 분 누구 없나요?
우리나라에도 머리좋은 사람들 많을테니 부디 잘 알아듣게 설명 좀 부탁드립니당~~
---------------
#!/usr/bin/perl
# 472-byte qrpff, Keith Winstein and Marc Horowitz
# MPEG 2 PS VOB file -> descrambled output on stdout.
# usage: perl -I :::: qrpff
# where k1..k5 are the title key bytes in least to most-significant order
s''$/=2048;while(<>){G=29;R=142;if((@a=unqT="C*",_)[20]&48){D=89;_=unqb24,qT,@
b=map{ord qB8,unqb8,qT,_^$a[--D]}@INC;s/...$/1$&/;Q=unqV,qb25,_;H=73;O=$b[4]<<9
|256|$b[3];Q=Q>>8^(P=(E=255)&(Q>>12^Q>>4^Q/8^Q))<<17,O=O>>8^(E&(F=(S=O>>14&7^O)
^S*8^S<<6))<<9,_=(map{U=_%16orE^=R^=110&(S=(unqT,"xbntdxbzx14d")[_/16%8]);E
^=(72,@z=(64,72,G^=12*(U-2?0:S&17)),H^=_%64?12:0,@z)[_%8]}(16..271))[_]^((D>>=8
)+=P+(~F&E))for@a[128..$#a]}print+qT,@a}';s/[D-HO-U_]/$$&/g;s/q/pack+/g;eval
---------------
댓글
perl은 가장게으른 자들을 위한 프로그램이라고하죠. 레리 월이 말했
perl은 가장게으른 자들을 위한 프로그램이라고
하죠. 레리 월이 말했던 것처럼...
난해해보이는 것은 줄바꿈을 하지않았다는 거죠.
그에 의도는 바이트수를 줄이려는 의도였겠지요
그리고 둘째는 특수변수, 일반펄프로그램에서는
잘 나오지 않는 변수들이 등장한다는 거죠.
$뒤에 붙는 기호들은 특수한 변수입니다.
그러니 난해해 보입니다. 물론, 특수변수를 사람의
눈으로 쉽게이해하게 할 수 있지만 코드를 줄이기
위해서 한 것입니다.
코드자체의 특수변수를 알고 싶다면 perldoc perlvar.pod 하시면 볼수 있구요.
decss에 관한건 opendvd.org에서 dvd에 관한 자료를
충분히 숙지해야할 듯 하네요... 위 7줄짜리코드는
dvd시장의 기업들이 자사들의 이익을 도모하기위해
만든 css코드가 얼마나 허술한가를 보여주기 위한것이니
코딩스타일이 형편없다는 둥 할 문제는 아니군요.
울나라사람들 남 잘되는 꼴은 잘 못보나봐요...
빈정거리기나 하구... 그들의 깊은 철학과 열정을 비웃는 다면 진정 프로그래머가 아닌듯 하군요...
저런식으로 소스를 적는건 신의 경지에 오른 프로그래머...아니면..
저런식으로 소스를 적는건
신의 경지에 오른 프로그래머...아니면..
소스의 유지보수 개념조차 모르는 왕초보...
둘중 하나입니다.
펄이 C의 구조와 쉘스크립트의 편리성을
가진 아주 간단하고 쉽고 편하게 쓸수 있는
유용한 언어인데...
모르는 사람이 보면 펄이 어셈블리어쯤 되는줄 알겠어요..
쩝..주석은 둘째치고...왜 세미콜론(;) 뒤에 줄내리기 조차 안하는
쩝..주석은 둘째치고...
왜 세미콜론(;) 뒤에 줄내리기 조차 안하는 건지??
저런식으로 소스 적으면..
만든 장본인도 분석하고 못하는 사태가
발생할텐데....쩝
소스는 보기 쉽게~
사실.. 그 코드는 줄내리기를 안하고..무작정 쓴 거라서 보기 어렵습
사실.. 그 코드는 줄내리기를 안하고..
무작정 쓴 거라서 보기 어렵습니다.
; 부분마다 줄내리기를 하면 굉장히 쉽게
보실 수 있습니다. (그 소스 정돈 진짜 안됐다..)
정돈 잘된 소스의 진짜 보기 좋은예는
http://home.hanmir.com/~jennix/search.cgi
에 있는 소스를 보시면 알 것입니다.
제가 올린 소스는 멀티쓰레드에다 소켓을 쓰는
인공지능 메타 검색엔진으로.. 보기 편하게
작성되었고, Thread 와 Socket 모듈이 필수이죠.
(Thread 모듈은 Perl 5.005 정식부터 지원됨.)
저처럼.. 만드는 사람만 있다면.. 정말 펄
코더들은 천재취급 당하는 일이 없겠죠..(^_^)
이거 어떻게 돌아가는지 설명할수 있는 사람 정말 없나여? 대충이라두...
이거 어떻게 돌아가는지 설명할수 있는 사람 정말 없나여? 대충이라두....
외국애들은 이런걸 만들어 내는데 우리는 이게 뭔지 이해도 못하는 수준이라면....
혹시 CSS 에 대해서는 잘 아시는건가요? 아니더라고 관
혹시 CSS 에 대해서는 잘 아시는건가요?
아니더라고 관심이 있으시면 저 밑에 씨프로그램으로
하나씩 따라가보셔도 될텐데요...
대개 남이 알아보기 어렵게 저런식으로 만들어
놓은걸 - obfuscation 이라고 하나요? 대회도 있을텐데
- 따라가보면서 펼쳐놓을 만큼 시간이 남지 않는듯합니다.
정말 관심이 있다면야 모를까요...
Perl은 $를 많이 쓴다고 하던데...이 코드 보니까...정말이
Perl은 $를 많이 쓴다고 하던데...
이 코드 보니까...정말이네여...--a
펄코드는 정말 암호네여...저게 뭔말이여~ 읽기도 싫은데,
펄코드는 정말 암호네여...
저게 뭔말이여~
읽기도 싫은데, 쓴넘은 뭐하는 놈인지...
저위에 # 주석은 알겠는데-_-;;;;아래 펄 코드가 매우 무섭네요.
저위에 # 주석은 알겠는데-_-;;;;
아래 펄 코드가 매우 무섭네요..
펄 코딩은 원래 저렇게 하는 건가요??
지금 까지 내가 알고 있는 펄 프로그래머 들은 저런 엽기적인 언어를 쓰나요??-_-;; 설마..
아는게 파이쏭, PHP, C, Basic밖에 없는 지라..펄이 C랑 비스무리 하다는 소리를 듣긴 했는데..
-_-;;
저두 펄이라는 언어의 코드를 첨 구경하고 있는데여. -_-;C코드
저두 펄이라는 언어의 코드를 첨 구경하고
있는데여. -_-;
C코드만 보다가 저거 보니까...
약간 지저분하다는 느낌이 드네엽. -_-;
과연 저거보고 바로 코드를 이해할수 있는 사람이 있을까요?
autography
인간에게는 자신의 운명을 거부할 권리가 있다.
글쎄요... 어렵게 만들려고 작정한다면 perl이 c보다 더 심하겠죠.
글쎄요... 어렵게 만들려고 작정한다면 perl이 c보다 더 심하겠죠.
C 프로그램을 정리하면 다음과 같습니다. 좀 보기가 편해졌죠? :)
#define m(i) (x[i]^s[i+84])<<
unsigned char x[5],y,s[2048];
main(n) {
for (read(0,x,5); read(0,s,n=2048); write(1,s,n))
if (s[y = s[13]%8+20] / 16 %4 == 1) {
int i = m(1)17^256+m(0)8,
k = m(2)0,
j = m(4)17^m(3)9^k*2-k%8^8,
a = 0,
c = 26;
for (s[y]-=16; --c; j*=2)
a = a*2^i&1,
i = i/2^j&1<<24;
for (j = 127; ++j < n; c = c > y)
c += y =i^i/8^i>>4^i>>12,
i = i>>8^y<<17,
a ^= a>>14,
y = a^a*8^a<<6,
a = a>>8^y<<9,
k = s[j],
k = "7Wo~'G_\216"[k&7] + 2 ^ "cr3sfw6v;*k+>/n."[k>>4] * 2^k * 257/8,
s[j] = k^(k&k*2&34)*6^c+~y;
}
}
이 프로그램은 "콘텐트 스크램블링 시스템 DVD" 화일을 해독하는 거랍니
이 프로그램은 "콘텐트 스크램블링 시스템 DVD" 화일을 해독하는 거랍니다. 아마도, 케이블 유료화면의 스크램블링을 깨는 그런류의 프로그램으로 생각되네요. CSS=Content Scrambling System, 그래서 그것을 풀어 내는 de를 붙여서, DeCSS라고 이름 붙은 것 같네요.
물론, DVD에 저장된 데이터를 푸는 코덱은 아닐겁니다. 그럼 코드가 이렇게 길 수 가 없겠죠?
위 코드가 지저분하다고 하는데, 원래 펄이 C보다는 훨씬 코드가 깔금합니다.
위 코드는 472바이트의 C코드를 442바이트로 줄인 펄 코드죠.
원래 C 코드는 아래와 같습니다.
---------------
#define m(i)(x[i]^s[i+84])<<
unsigned char x[5],y,s[2048];main(n){for(read(0,x,5);read(0,s,n=2048);write(1,s
,n))if(s[y=s[13]%8+20]/16%4==1){int i=m(1)17^256+m(0)8,k=m(2)0,j=m(4)17^m(3)9^k
*2-k%8^8,a=0,c=26;for(s[y]-=16;--c;j*=2)a=a*2^i&1,i=i/2^j&1<<24;for(j=127;++j ;c=c>y)c+=y=i^i/8^i>>4^i>>12,i=i>>8^y<<17,a^=a>>14,y=a^a*8^a<<6,a=a>>8^y<<9,k=s
[j],k="7Wo~'G_\216"[k&7]+2^"cr3sfw6v;*k+>/n."[k>>4]*2^k*257/8,s[j]=k^(k&k*2&34)
*6^c+~y;}}
흠... 그래도 저에게는 C가 Perl버전보다 훨씬 쉽게쓰인 것으로
흠... 그래도 저에게는 C가 Perl버전보다 훨씬 쉽게
쓰인 것으로 보이는데요? 적어도 여기서는 일반적인
C만 사용되어 있으니까 읽을 수나 있지요. Perl
버전은 영...
댓글 달기