목차

반응형

참고사이트

https://www.comodossl.co.kr/certificate/ssl-installation-guides/Apache-privatekey-crt.aspx


추가해야하는 내용

openssl csr 생성 하는 방법까지 추가해서 넣기

포트 443 열기

포트 사용중인거 확인하기 443


SSL 서버에 적용하기 메뉴얼


주요 경로

/usr/local/apache-tomcat-6.0.20

/etc/httpd/conf.d

/etc/httpd/conf

/usr/local/apache/conf/extra

/usr/local/apache/conf


순서

1. httpd.conf의 ssl.conf 참조 주석 해제

2. worker 설정

3. ssl.conf 설정

4. 인증서 password 설정

5. 테스트


*항상 수정하는 파일의 원본 파일을 백업해 둘 것*



1. /usr/local/apache/conf/httpd.conf

httpd.conf 파일의 ssl.conf 파일을 참조하도록 주석을 해제해야함.

해당 파일을 찾다보면 위와 같은 라인의 주석을 해제하자 (없으면 주석해제한 코드를 추가)

#Include conf/extra/httpd-ssl.conf



2. 톰캣과 아파치의 연동이 되고 worker 설정이 아래와 같다고 가정하에...

worker.list=worker1

worker.worker1.port=8009

worker.worker1.host=localhost

worker.worker1.type=ajp13

#worker.worker1.lbfactor=11

자세한 내용은 아래 링크 참조

http://kkamagistory.tistory.com/37



3. ssl.conf 설정

LoadModule ssl_module modules/mod_ssl.so

NameVirtualHost *:443

Listen 443


AddType application/x-x509-ca-cert .crt

AddType application/x-pkcs7-crl    .crl

#SSLPassPhraseDialog  builtin

SSLPassPhraseDialog exec:/usr/local/apache/test_ssl/passwd.sh


SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000)

SSLSessionCacheTimeout  300


SSLMutex default

SSLRandomSeed startup file:/dev/urandom  512

SSLRandomSeed connect builtin

SSLCryptoDevice builtin


## SSL Virtual Host Context


<VirtualHost *:443>

ServerAdmin root@localhost

ServerName www.test.or.kr

#ServerAlias www.test.or.kr

DocumentRoot /home/test/webapps/ROOT

ErrorLog    /var/log/httpd/ssl-test.or.kr-error_log

TransferLog /var/log/httpd/ssl-test.or.kr_access_log


JkMount /* worker1

JkMount /*.article worker1

JkMount /*.do worker1

JkMount /servlet/* worker1

JkMount /*.jsp worker1


LogLevel error

SSLEngine on

SSLProtocol all -SSLv2


SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW


SSLCertificateFile /usr/local/apache/test_ssl/www_ggtest_or_kr_cert.pem

SSLCertificateKeyFile /usr/local/apache/test_ssl/www.ggtest.or.kr.key

SSLCertificateChainFile /usr/local/apache/test_ssl/ChainCA1.crt

SSLCACertificateFile /usr/local/apache/test_ssl/RootCA.crt


<Files ~ "\.(cgi|shtml|phtml|php3?)$">

    SSLOptions +StdEnvVars

</Files>


SetEnvIf User-Agent ".*MSIE.*" \

nokeepalive ssl-unclean-shutdown \

downgrade-1.0 force-response-1.0


CustomLog logs/gg.or.kr_ssl_request_log \

  "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"


</VirtualHost>



*확인사항*

JkMount뒤의 텍스트에는 워커의 이름이 붙어야한다.

DocumentRoot가 맞는 확인

443포트가 열려있는지 확인

하단의

SSLCertificateFile /usr/local/apache/test_ssl/www_ggtest_or_kr_cert.pem

SSLCertificateKeyFile /usr/local/apache/test_ssl/www.ggtest.or.kr.key

SSLCertificateChainFile /usr/local/apache/test_ssl/ChainCA1.crt

SSLCACertificateFile /usr/local/apache/test_ssl/RootCA.crt

는 인증서 파일이 제대로 위치하였는지 확인



4. 인증서 password 설정

SSLPassPhraseDialog exec:/usr/local/apache/test_ssl/passwd.sh

해당 스크립트는 서버 부팅시 입력해야하는 ssl 인증서의 비밀번호를 자동으로 입력하기 위한 설정이다.


passwd.sh를 까보면...


echo "test4848"


echo 뒤에 비밀번를 넣어주면 된다.

이후 passwd.sh 파일의 권한은 755로 줘야한다.



5. 테스트를 하기 위해서

182.162.27.29가 작업중인 서버의 주소고 ggtest.or.kr이 목표로 하는 주소라면

hosts 파일을 아래와 같은 방식으로 설정한다


182.162.27.29 ggtest.or.kr

182.162.27.29 www.ggtest.or.kr


이후 브라우저로 https://www.ggtest.or.kr 에 접속된다면 성공이다.

반응형

'보안 > SSL' 카테고리의 다른 글

SSL 작업하면서 궁금한 점들  (0) 2018.04.03
반응형

ssl(아차피,윈도우 환경) 작업을 하면서 궁금했던점을 모으고 조사해보았다.


왜 ssl은 443 포트로 열어두는가?


도대체 그놈의 pem, key, crt 파일들은 뭔가?


mod_ssl은 뭔가?


ssl-conf 설정 파일중 SSLCACertificateFile, SSLCertificateChainFile, SSLCertificateFile ... 얘네들은 다 뭐하는 놈들인가?


RootCA와 ChainCA1 체인파일은 왜이렇게 많은가?


ssl의 작동 원리는 무엇인가?


피들러는 뭔데 https 트래픽도 볼 수 있게 해주는건가?

반응형

'보안 > SSL' 카테고리의 다른 글

아파치 httpd.conf ssl.conf SSL 설정하기  (0) 2018.04.06
반응형

지뢰찾기를 자동으로 풀어버리는 프로그램을 만든다.

지뢰찾기 - 리버싱

을 먼저 읽어보면 도움이 될듯.

핵심원리

1. 지뢰찾기의 지뢰 정보를 가지고 있는 메모리 덤프를 찾음.

2. 지뢰정보를 받아옴.

3. 지뢰찾기 프로그램에 지뢰가 아닌 부분을 모두다 마우스 클릭하는 입력을함.


프로그램 폼


메모리 덤프를 읽어오는 부분 최대크기의 지뢰판을 형성하면 최대 864의 크기만큼 담기므로 864로 하였다.


while(true)
{
 //행 populate
 if (buffer[x + y * 32] + buffer[x + 1 + y * 32] != 0x20)//의미있는 열임.
 {
     while (true)
     {
         //열 populate
         //buffer[x + y * 32] 주소임
         if (buffer[x + y * 32] != 0x10)
         {
             if (buffer[x + y * 32] != 0x8F)
                click(x, y);
             x++;
         }
         else
         {
             y++;
             x = 1; 
             break;
         }
     }
 }
 else
     break;
}

지뢰정보를 어떻게 읽어올지 고민을 해봤는데

1,1에서 x좌표를 계속 증가시키다가 0x10(지뢰아님) 0x8F(지뢰) 둘다 아닌경우 다음 행으로 넘어감.



지뢰찾기에 마우스 이벤트를 보내는 부분.

지뢰한블록당 32px이므로 칸단 16px씩 이동하면 된다.(단위가 px인지는 모르겠지만 하여튼 들어맞음)

또한 시작지점은 18,60정도로하면 1,1의 지뢰부분이다.

그리고 가장중요한건데 메시지를 보낼때 이동할 좌표값을 넣는건데 쉬프트 연산자가 필요하다

x와 y로 이루어진 값들을 하나의 값으로 표현한뒤에 그것을 보내줘서 인식시키는데

int value = (y_start + (y-1)*16 << 16) + x_start + (x-1)*16;

            SendMessage(process.MainWindowHandle, 0x20, (uint)value, 0x000000001);

            SendMessage(process.MainWindowHandle, 0x20, (uint)value, 0x020100001);

            PostMessage(process.MainWindowHandle, 0x201, 0x000000001, (uint)value);

            PostMessage(process.MainWindowHandle, 0x202, 0x000000000, (uint)value);

보면 value가 x와 y로 이루어진 값이다.

직접 microsoft spy++을 봐보면 좌표부분의 데이터를 전송할때 0x???????? 이런식으로 보낸다.

그중에 앞의 4개의 ????가 y좌표를 나타내고 뒤의 ????가 x좌표를 나타낸다. 물론 16진수로 나타내어져있다.

따라서 x와 y의 값으로 나타내기위해서는 먼저 y좌표에 2^16을 곱하여 왼쪽으로 4칸이동시키고 x좌표값은 그냥 더해주면된다. 16진수로 바꿔줘야하고

그렇게 보내면 프로그램이 원하는 좌표로 이동하여 보내진다.



minesweeper.zip

해당 프로젝트 파일



반응형

'보안 > 리버싱' 카테고리의 다른 글

reversing - minesweeper  (0) 2017.01.25
반응형

winmine.exe


지뢰찾기 매크로를 만들려고 한다.

올리디버거로 먼저 지뢰찾기를 분석하였다.


http://www.morwire.com/index.php/reverse-engineering/5-introduction-to-reversing-minesweeper

이곳에서 자세한 정보를 얻을 수 있었음.

위의 글은 지뢰찾기를 시작할때 타이머가 작동하므로 독자적인 timer를 만들어서 사용한 것이 아니라면 user32.dll중에 settimer를 사용할 것이라고 가정하여 프로그램의 도입부분을 찾아내었다.





01003818에서 CMP를 통하여 DS:[010057A4]=00000000의 값과 0을 비교한다.

만약에 프로그램이 처음이 아니면 DS:[010057A4]=00000000의 값이 DS:[010057A4]=00000001이런식으로 바뀌므로

아래의 JNZ를 통하여 처음이면 타이머를 설정하기위하여 그대로 내려가고 처음이 아니라면 

0100386B  |> 841D 00500001  TEST BYTE PTR DS:[1005000],BL            ;  처음아니면 일로옴

이곳으로 내려가게된다.


지뢰찾기에서 맨처음은 항상 통과한다는것을 찾아내었다.

지뢰정보는 덤프 1005340에 담겨있다.


그림을 보면 현재 1,3이 지뢰인것을 알 수 있다. (위의 사이트 참조)

0100389B  |. 8A9402 4053000>MOV DL,BYTE PTR DS:[EDX+EAX+1005340] 에 브레이크 포인트를 걸어준뒤

1,3의 좌표를 누르면



누른부분의 좌표의 값이 8F에서 80으로 바뀌게된다. 원래 지뢰를 누르면 일단 그자리의 값이 80으로 바뀐다. (나중에 설명함)

이후 계속 돌리면 



분명 지뢰였던 부분이 지뢰가 아닌것으로 바뀌게된다. 맨처음일때 걸렸으면 알아서 수정해주는 기능이 있는것으로 보인다. 하지만 이부분은 더 깊이 조사할 생각은 없다.


그 이후 지뢰에대한 데이터가 저장되어있는것은 위의 페이지에 상세하게 나와있으므로 생략하고 나는 지뢰를 눌렀을때의 작동원리를 살펴보겠다.



먼저 다시 새로 시작한뒤에 맨처음에는 지뢰를 누르면 바뀌어버리기 때문에 정상적인 칸을 눌러주고 지뢰를 누르자.

위의 사진을 보면 2,2가 지뢰다. 따라서 1,2를 누른뒤 2,2를 누르겠다.


그러면 다시 2,2의 좌표가 80으로 바뀐다.

그렇다면 분명 코드중에 80과 비교하는 코드가 있을것이다. 그것을 찾아보았다.


어느정도 따라가다보면 

01003529  |. F602 80        TEST BYTE PTR DS:[EDX],80

의 코드를 볼 수 있다.[EDX]에 담긴 값과 80을 비교하라고 하는데 코드를 읽어보면 EDX에 사용자가 누른 값의 데이터의 주소를 넣어놓았으므로 실질적으로는

01003529  |. F602 80        TEST 80,80 인 상태다.

지뢰를 의미하는 것끼리 비교하라는 것이니까 무언가 느낌이 지뢰를 판별하려는 것임을 알수있다.

한번 테스트용으로 아래의 JE에서 원래는 점프가 일어나면 안되지만 0인 ZF를 1로 바꾸어 진행시켜보았다.

따라서 아래의 JE문에서 점프가 발생하였다.

그리고 진행시켜보면 지뢰찾기 프로그램에서 지뢰가 아니라고 뜨는 것을 알 수 있다.

지뢰정보를 보면 정보가 약간 모순적이게도 지뢰였던 자신과 오른쪽의 지뢰를 합쳐 주변에 지뢰가 2개있다고 말해준다. 또한 판에 있는 8F의 개수를 세어보면 지뢰가 총 9개밖에 안된다.

한번 클리어를 해보았다.


분명 지뢰는 9개이며 이상한 칸도 있지만 클리어는 하였다.

위의 TEST 80부분이 지뢰인지 판단하는 핵심기능임을 알 수 있다.


다음은 이 정보들을 토대로 지뢰찾기를 자동으로 클리어해주는 매크로를 만들고자 한다.


못깨는 지뢰찾기.exe

그전에 test부분을 수정하여 누르는 곳이 어디던 항상 틀림표시 되도록하는 못깨는 지뢰찾기를 만들어보았다.

친구를 골탕먹이기 좋을것같다.


지뢰찾기 매크로

반응형

'보안 > 리버싱' 카테고리의 다른 글

C# - minesweepr hack + macro  (0) 2017.02.06