2009년 11월 11일 수요일

[분기 Crack] abex 1 Crack

제목 : abex #1

목적 : 프로그램 내 분기를 파악하여 변형 시킨다.

파일명 : abexcm1.exe (첨부파일)

내부 로직 :

GetDriverType을 얻어와 해당 값을 감소 시키고

비교 값을 증가 시켜 결과를 나타나게 한다.

GetDriverType결과 값 감소, 감소 (결과값 -2)

VS

비교값 증가, 증가, 증가 (3)

-> 같을 경우 : success

-> 다를 경우 : fail

GetDriverType Return 값은 현재 '3'의 값을 Return 시키고 있다.

결론 적으로 '3' - '2' VS '3' = 같지 않음.

같지 않은 경우 -> Fail 창 보임

성공을 위해서는 Return 값이 '5'가 되어야 함.

 

입력 값 변환 Logic :

1. 분기문을 강제 수정(가장 많이 쓰인 방식 - naver상 검색 결과는 대부분 이 방식)

2. 해당 감소문 NOP 처리(여기서 사용한 방식)

-40101E 주소라인 NOP처리

-401023 주소 라인 NOP처리

사용 Tool : OllyDbg

난이도 : ★☆☆☆☆

-------------------------------------------------------------------------------

Debug 화면 Capture

1. 내부 Logic 점검 (8라인 부터 15번 라인)

2. 해당 API 점검 (GetDriverType) (현재는 '3' Drive Fixed 값이 Return 됨 - 5가 Return 되어야 Success 가능)

3. Return 값 수정이 어려운 관계로 감소 부분을 NOP 처리 시킴(9,13 라인)

                                                                                                                               

4. Success

 

Crack me #1

제목 : Crack me #1

목적 : 시리얼을 프로그램 내부에서 추출 하여 시리얼 생성기를 만든다.

파일명 : due-cm1.exe (첨부파일)

내부 로직 :

미리 정의 되어있던 시리얼 값

"0x7B,0x61,0x65,0x78,0x64

,0x6D,0x26,0x6B,0x7A,0x69

 ,0x6B,0x63,0x65,0x6D,0x26

 ,0x3C,0x26,0x66,0x6D,0x7F

 ,0x6A,0x61,0x6D,0x7B,0x26

 ,0x6A,0x71,0x26,0x6C,0x7D

 ,0x6D,0x64,0x61,0x7B,0x7C"

과 사용자가 입력한 값을 비교해서 정확히 일치 할 경우 Success 하는 프로그램

입력 값 변환 Logic :

사용자 입력값을 3번에 걸쳐서 변환 시킨다.

a(사용자 입력 값) xor 0x43

a xor 0x1E

a xor 0x55

 

시리얼 생성기 프로그램 소스 :

#include <vector>

#include <cstdio>

#include <string>

#include <sstream>

using namespace std;

 

int main()

{

    char a[35] = {0x7B,0x61,0x65,0x78,0x64

                 ,0x6D,0x26,0x6B,0x7A,0x69

                 ,0x6B,0x63,0x65,0x6D,0x26

                 ,0x3C,0x26,0x66,0x6D,0x7F

                 ,0x6A,0x61,0x6D,0x7B,0x26

                 ,0x6A,0x71,0x26,0x6C,0x7D

                 ,0x6D,0x64,0x61,0x7B,0x7C

                 };

    int b = 35;

    for(int i = 0 ; i < b; i++){

            a[i] = a[i]^0x43;

            a[i] = a[i]^0x1E;        

            a[i] = a[i]^0x55;

    }

    printf("%s",a);

    scanf("%d",&b);

}

사용 Tool : OllyDbg

난이도 : ★★☆☆☆

-------------------------------------------------------------------------------

Debug 화면 Capture (ㅠ,.ㅠ 에잇~ 이미지 잘못 올렸네요~ 다음꺼 올릴때는 잘올리겠습니다. ^^)

1. 임의 값을 입력해서 프로그램 내부 Logic 점검

2. 내부 Logic파악과 비교 대상이 되는 String 파악

3. 파악된 Logic과 String을 대상으로 Key generator 개발

4. Success

11월 퀴즈 및 정답

1. 봉식씨는 모두 8개의 구슬을 갖고 있습니다. 그런데 이중 단 1개의 구슬만 조금더 무겁습니다. 봉식씨는 양팔저울을 단 2번만 사용 할 수 있는데요~ 어떻게 해야 이 1개의 구슬을 찾을 수 있을까요?

펼쳐두기..

2. 당신은 아무것도 없는 텅빈 공간에 서있습니다. 이 공간에는 물이 가득 찬 정 원통형 유리컵하나만 있습니다. 당신은 정확힌 50%의 물만을 컵에 남겨 놓은 채 나머지 50%의 물을 이 공간에 버려야만 합니다. 그러면 탈출 할 수 있습니다. 자 어떻게 탈 출할 수 있을까요?

펼쳐두기..

3. 다음 코드에서 print문을 실행 시키고 싶습니다. 어떻게 해야할까요? 그리고 무슨 이유 때문에 그렇게 해야할까요?(이유가 중요합니다. ^^)

 #include<stdio.h>

  #define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))

  int array[] = {23,34,12,17,204,99,16};

  int main()  {

      int d;

      for(d=-1;d <= TOTAL_ELEMENTS-2;d++)          

                 printf("%d\n",array[d+1]);

      int a;

      scanf("%d",&a);

      return 0;  

}

펼쳐두기..

4. 당신은 공주를 구하기 위해서 사막을 건너야 합니다. 이 사막을 건너는 데는 정확히 5일이 걸립니다. 그리고 한 사람이 들고 갈수 있는 식사량은 정확히 3일 치(3끼 기준입니다) 뿐입니다. 당신은 몇명이든 당신과 같은 조건을 갖는 일꾼을 고용할 수 있습니다. 과연 최소한 몇명의 일꾼을 데리고 가야 당신은 무사히 사막을 건널 수 있을까요?

추가 : 3끼중 단 한끼도 굶을 수 없습니다. 물론 일꾼도 마찬가지 입니다.

         어느 누구도 사막에 버려질 수 없습니다. 반듯이 살아야 합니다.

         도착 하고자 하는 상대편에서 어느 누구도 마중 나올 수 없습니다.

         일꾼은 반듯이 같은 날 동시에 일행들과 출발 해야 합니다.

펼쳐두기..

5.  3개의 모래시계가 있는데, 각각 12, 15, 20분짜리입니다.
이것들만 이용해서 7분을 재고 싶다면 어떻게 해야 할까요?
물론, 7분을 재기 전에 준비하는 시간이 최소가 되어야 합니다.
(여러가지 방법 중 최소의 방법입니다.)

펼쳐두기..

2009년 10월 30일 금요일

[알아봅시다] `한글.한글` 도메인 시대

제목 : 다국어 및 최상위 도메인 허용

차이점 :

 AS-IS

 T0-BE

 영문.최상위 21개 도메인

(www.naver.com)

 다국어.아무거나

(네이버.한국)


관련 기술 : `IDN ccTLD 패스트 트랙(Fast Track)'

-IDN : Internationalized Domain Name

          일반적으로 한글IDN을 한글 도메인이라고 합니다.

-IDNA : IDN in Application

           프로그램에서 유니코드로 작성된 주소를 PunnyCode로 변환하는 방식

-IDN TLD : IDN Top Level 도메인 (idn.idn)

           도메인 접미사까지 각국의 언어로 등록하는 최상위 국제도메인

- gTLD : generic top Level Domain

            일반 최상위 도메인

- IEFT : 인터넷 기술 표준화 기구(RFC 제작 등)

- KRNIC : 한국인터넷 정보센터 (NIDA 한국인터넷 진흥원으로 이름 변경)

-RACE : 비영어권 코드를 ASCII코드로 변환 하는 방법

-PunnyCode : IDN 표준 인코딩 (비영어권 코드를 ASCII로 변환)

 

관련 단체 : 국제인터넷주소기구(ICANN)

인터넷 도메인 관리와 정책을 결정하는 비영리 국제기구로, 국제인터넷주소관리기구라고도 한다. 국제적으로 인터넷 도메인 이름을 제공하거나, IP주소 번호 부여 등의 기능을 한다.

 

출처 : http://www.dt.co.kr/contents.html?article_no=2009103002011831699002

2009년 10월 27일 화요일

[Java] Sun Java System Web Server Unspecified Buffer Overflow Vulnerability

제목 : Java Web Server Overflow 취약점

위험 구분 : Critical 

설명 : Java WebServer 시스템 상에서 원격 악의적 접속자에 의해 서비스 거부 공격 또는 취약한 Web server를 통한 공격이 가능합니다. 본 내용은 사용자의 과다 요청으로 인해 예상치 않은 buffer overflow error 발 생이 가능하며 본 에러로 부터 악의적 사용자는 해당 Web Server를 마비시키 거나 변조된 우회 packet을 이용하여 악의적 코드를 실행 가능 합니다.

영향 범위 내 제품 군 :

Sun Java System Web Server version 7.0 Update 6 (7.0U6) and prior

해결 방법


참조

http://www.vupen.com/english/advisories/2009/3024
http://www.intevydis.com/blog/?p=79

2009년 10월 22일 목요일

[오라클] Oracle Products Code Execution and Security Bypass Vulnerabilities

제목 : Oracle Products Code Execution and Security Bypass Vulnerabilities

위험 구분 : Critical 

설명 : 다양한 Oracle 제품 및 BEA 제품들은 여러 취약점에 노출 되어있습니다. 특히 원격 악의적 사용자에 의한 서비스 거부 및 데이타 노출 및 수정등 중요한 정보가 전용될 가능 성이 있습니다. 이는 SQL 삽입, 보안 우회 공격 또는 비 정상 Command 요청에 따라 발생할 수 있습니다.

이번 이슈는 Advanced Queuing에 따른 에러로 부터 발생할 수 있습니다. 이에 따른 문제가 발생 할 수 있는 제품은 다음과 같습니다. Agile Engineering Data Management (EDM), Application Express, Auditing, Authentication, AutoVue, Business Intelligence Enterprise Edition, Core RDBMS, Data Mining, Data Pump, JD Edwards Tools, JRockit, Net Foundation Layer, Network Authentication, Oracle Advanced Benefits, Oracle Application Object Library, Oracle Applications Framework, Oracle Applications Technology Stack, Oracle Communications Order and Service Management, Oracle Spatial, Oracle Text, PeopleSoft Enterprise HCM (TAM), PeopleSoft PeopleTools & Enterprise Portal, PL/SQL, Portal, WebLogic Portal, WebLogic Server, and Workspace Manager components.

영향 범위 내 제품 군 :

Oracle Database 11g version 11.1.0.7
Oracle Database 10g Release 2 version 10.2.0.3
Oracle Database 10g Release 2 version 10.2.0.4
Oracle Database 10g version 10.1.0.5
Oracle Database 9i Release 2 version 9.2.0.8
Oracle Database 9i Release 2 version 9.2.0.8DV
Oracle Application Server 10g Release 3 (10.1.3) version 10.1.3.4.0
Oracle Application Server 10g Release 3 (10.1.3) version 10.1.3.5.0
Oracle Application Server 10g Release 2 (10.1.2) version 10.1.2.3.0
Oracle Business Intelligence Enterprise Edition version 10.1.3.4.0
Oracle Business Intelligence Enterprise Edition version 10.1.3.4.1
Oracle E-Business Suite Release 12 version 12.0.6
Oracle E-Business Suite Release 12 version 12.1
Oracle E-Business Suite Release 11i version 11.5.10.2
AutoVue version 19.3
Agile Engineering Data Management (EDM) version 6.1
PeopleSoft PeopleTools & Enterprise Portal version 8.49
PeopleSoft Enterprise HCM (TAM) version 8.9
PeopleSoft Enterprise HCM (TAM) version 9.0
JDEdward Tools version 8.98
Oracle WebLogic Server versions 10.0 through 10.0 MP1
Oracle WebLogic Server versions 10.3
Oracle WebLogic Server version 9.0 GA
Oracle WebLogic Server version 9.1 GA
Oracle WebLogic Server versions 9.2 through 9.2 MP3
Oracle WebLogic Server versions 8.1 through 8.1 SP5
Oracle WebLogic Server versions 7.0 through 7.0 SP6
Oracle WebLogic Portal versions 8.1 through 8.1 SP6
Oracle WebLogic Portal versions 9.2 through 9.2 MP3
Oracle WebLogic Portal versions 10.0 through 10.0MP1
Oracle WebLogic Portal versions 10.2 through 10.2MP1
Oracle WebLogic Portal versions 10.3 through 10.3.1
Oracle JRockit version R27.6.4 and prior (JDK/JRE 6, 5, 1.4.2)
Oracle Communications Order and Service Management version 2.8.0
Oracle Communications Order and Service Management version 6.2.0
Oracle Communications Order and Service Management version 6.3.0
Oracle Communications Order and Service Management version 6.3.1

해결 방법

Apply Critical Patch Update (Advisory October 2009) :
http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2009.html
참조

http://www.vupen.com/english/advisories/2009/2988
http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpuoct2009.htm

 

Advanced Queuing은 무엇입니까?

Advanced Queuing은 오라클의 데이타베이스 통합 대기열의 메시지 처리 기능입니다. 이 기능으로, 대기열의 메시지 처리 연산은 오라클 데이타베이스에서 SQL 연산을 하는 것과 유사하게 실행될 수 있습니다. 대기열의 메시지 처리 기능을 이용하면 오라클 데이타베이스상의 애플리케이션이 AQ 대기열에 있는 메시지를 통해 비동기적으로 통신할 수 있게 됩니다. 데이타베이스와의 통합으로 인해, 대기열의 메시지 처리에 전례 없는 높은 수준의 기능과 연산의 단순성, 신뢰성 및 보안성이 제공됩니다. 대기열의 메시지 처리에 있어, 감사와 추적 기능과 같은 고유한 메시지 관리 기능도 제공됩니다. AQ는 인터넷(http(s) 및 smtp)과 같은 다중 통신 채널도 지원합니다.l

2009년 10월 20일 화요일

10월 문제 해설

1. 5개의 가방이 있습니다. 각 가방에는 10개의 구슬이 들어있습니다. 4개의 가방에는 구슬 한개당 10 gram 구슬이 들어있고, 나머지 하나에는 9 gram 구슬이 들어있습니다. 단 한번 무게 재는 것을 허용합니다. 어떻게 가벼운 가방을 알 수 있을 까요?(양팔 저울이 아닙니다. 무게를 재는 저울입니다(one-tray))

펼쳐두기..

2. 양 갈래 길이 있습니다. 각각의 길은 참 마을 혹은 거짓마을로 가는 길입니다. 하루에 한번씩 양 마을에서 한명이 나와 길을 안내합니다. 참 마을 사람은 진실만, 거짓 마을 사람은 거짓만을 대답합니다. 어떻게 질문 해야 거짓 마을로 갈 수 있을까요?(길 안내인은 '예' '아니오' 로만 대답합니다.)

펼쳐두기..

3.  아래의 코드에서 한 자를 변화시켜 "9" 가 20번 나오게 해보세요.(추가나 삭제 아닙니다.)

int main()

{

    int i , n=20;  

    for(i =0 ; i < n ; i--)

    printf("9");

}

 

펼쳐두기..

 4. 다음에 들어올 값은?

 18, 46, 94, ?, 52, 61, 9, 4, 1

펼쳐두기..

5. 키가 서로 다른 100 명의 사람이 있습니다.. 키 순서에 따라 줄을 세우고 무작위로 흰 모자 혹은 검은 모자를 맨 뒤(키가 가장큰사람) 부터 머리에 씌웠습니다. 자기 자신은 자신이 무슨 모자를 썻는지 알 수 없습니다. 대신, 뒤의 사람은 그 앞에 있는 모든 사람이 어떤 모자를 썻는지 확인 할 수는 있습니다. 이 100명의 사람들은 토의를 거친 후, 줄을 섰고 한번은 99명이 자신의 모자를 알아 맞췄고, 한번은 100명의 모든 사람이 자신의 모자를 맞췄습니다. 어떻게 한 걸까요? (질문은 키가 가장큰 맨 뒷사람부터 키가 가장 작은 맨 앞 사람까지의 순서로 합니다.)

추가 : Rule -

1. 100명의 사람이 키 순서에 따라 줄을 선다.

2. 키가 제일 큰 맨 마지막 사람부터 무작위(흰색 혹은 검은 모자) 모자를 씌운다.

3. 자기 자신은 자신이 무슨 색 모자를 썻는지 모른다.

4. 진행자가 키가 제일 큰 사람부터 무슨 모자를 썻는지 질문 한다.(맨뒤에서 부터 한사람씩 앞으로 가며 질문)

5. 질문을 들은 답변자는 "검정 혹은 흰색" 으로만 답변 가능하다.(몸의 행동 등 불가)

6. 본 게임이 진행 되기전 100명의 사람은 상위 Rule을 이해 하고 토의를 할 기회를 1회받는다.

7. 키가 큰 뒤의 사람은 키가 작은 앞의 모든 사람들의 모자 색을 확인 할 수 있다.

8. 100명의 사람 전부 혹은 최소한 99명의 사람이 자기 자신의 모자 색을 맞추는 방법은?

펼쳐두기..

[Obfuscator 혼란] Java 역컴파일 방지 기법

제목 : Java 역컴파일 방지 기법 (Obfuscator)

내용 : 역컴파일에 약한 Java의 보안상 문제로 인해 역컴파일 방지 기법으로 "혼란 Obfuscator"를 사용함.

사용법 : http://rumkin.com/tools/compression/compress_huff.php

원 소스

<html>

<head>

</head>

<body>

<a>Reverse Engineering!!</a>

</body>

</html>

 

변경 후 소스

<script language="JavaScript1.2">

<!--

a="1R1^1e1f2g3O1a1b242J1_3R3X1Y1Z272Y1U1V3Q3S1S2K3L1H1O2i1K1L3Y3]1I3V3W1<1?1B"

+"1C3^3a1@3/3<1=3_3d1:3K3N";

l=new Array();

while(a.length){l.push((Y(a.charCodeAt(0))<<6)+Y(a.charCodeAt(1))-512);

a=a.slice(2,a.length)}

d="*aUaL.*Zhg:J4BHi2:1_jF:JG6[[0X*O]8[S[0U=VFc/e2:/I=h[,*SWAW*";

c=79;e=b=a=0;o="";

function Y(y){if(y>92)y--;return y-42}

function B(){if(a==0){b=Y(d.charCodeAt(e++));a=6;}

return ((b>>--a)&0x01);}

while(c--){i=0;while(l[i]<0){if(B())i=-l[i];else i++;}

o+=String.fromCharCode(l[i]);}document.write(o);

// --></script>

관련 Tool : http://jode.sourceforge.net

의의 : 해당 Tool을 사용하여 소스 자체를 난해화 시켜 역컴파일 시 사용자가 소스의 내용을 파악하기 어렵게 만든다.

[암호문] MIT Google Jobs

제목 : MIT 구글 인클루트를 위한 암호문

내용 : 어느날 MIT에 이하와 같은 Google의 문제가 전교에 배포 되었다고 합니다. 그래서 MIT학생들이 열씸히 풀었다고 하는데요 ^^~ 어떻게 푸는 건지 같이 생각 해봐요~

펼쳐두기..

영어 알파벳 , 한글 사용 빈도.

영어 알파벳 빈도

- E, T, O, A, N 순으로 많이 쓰임

- T 단어의 시작에 가장 많이 쓰임

- E 단어 마지막에 가장 많이 쓰임

- A와 I는 단어 하나로써 많이 쓰이는 문자이다.

- TO, IN 가장 빈번하게 많이 쓰이는 두 문자이다.

- THE, AND 가장 빈번하게 많이 쓰이는 세 문자이다.

- THAT 가장 빈번하게 많이 쓰이는 네 문자이다.

- LL,EE,TT,FF,OO,RR,NN,PP,CC 가장 빈번하게 많이 쓰이는 중복 문자

- THE,ING,ION,ENT 가장 빈번하게 많이 쓰이는 세 문자 결합

- N 모음뒤 가장 빈번한 자음

한글 빈도

초성의 자음 빈도 순위.
ㅇ 37184, 25%
ㄱ 18554, 12.7%
ㄷ 13269, 9%
ㅅ 12096, 8.3%
ㄹ 11271, 7.7%
ㄴ 10883
ㅈ 10370
ㅎ 9886
ㅁ 7848
ㅂ 5088
ㅊ 2383
ㄸ 1493
ㅌ 1384
ㅍ 1300
ㄲ 1186
ㅆ 743
ㅋ 521
ㅉ 360
ㅃ 310
------------
합계 146100, 100%

종성의 받침 빈도 순위.
ㄴ 20924, 32.4%
ㄹ 14495, 22.4%
ㅇ 7995, 12.4%
ㄱ 5880, 9.1%
ㅁ 4236, 6.6%
ㅆ 3370
ㅅ 2405
ㅂ 1575
ㄶ 539
ㅎ 535
ㅌ 528
ㅄ 482
ㄷ 441
ㅍ 349
ㅈ 305
ㄺ 270
ㅊ 210
ㄲ 169
ㄻ 121
ㅀ 92
ㄵ 82
ㄼ 64
ㅋ 22
ㄽ 12
ㄿ 12
ㄾ 12
ㄳ 10
------------------
합계 64600, 100%


중성의 모음 빈도 순위
ㅏ 34363, 23.5%
ㅣ 22284, 15.3%
ㅡ 20740, 14.2%
ㅓ 15540, 10.6%
ㅗ 14067, 9.6%
ㅜ 9480
ㅕ 6197
ㅔ 6134
ㅐ 5927
ㅢ 2797
ㅘ 2400
ㅛ 1310
ㅚ 1286
ㅑ 1039
ㅟ 810
ㅝ 565
ㅖ 527
ㅠ 475
ㅙ 131
ㅞ 30
ㅒ 26
--------------
합계 146100, 100%