'Common Tip/보안(Security)'에 해당되는 글 5건

  1. 2009.08.13 RSA XML문서 전자서명 예제
  2. 2009.08.13 Rijndael 암호 예제
  3. 2009.08.11 DES 암호 예제
  4. 2009.03.24 닷넷 소스 보안
  5. 2008.09.06 9월6일 1회 수업
Common Tip/보안(Security)2009. 8. 13. 10:06

민범규님의 글(Devpia 펌)
RSACryptoServiceProvider

 CSP(암호화 서비스 공급자) 제공한 RSA 알고리즘의 구현을 사용하여 비대칭 암호화와 해독을 수행합니다.

클래스는 상속될 없습니다

이것은 RSA 기본 구현입니다.

Microsoft Enhanced Cryptographic Provider 설치되어 있는 경우 RSACryptoServiceProvider에서는 길이가 384 - 16384비트(8비트 단위로 증가) 키를 지원하고 Microsoft Base Cryptographic Provider 설치되어 있는 경우에는 길이가 384 - 512비트(8비트 단위로 증가) 키를 지원합니다.

Microsoft CAPI(Cryptographic API)와의 상호 운용

비관리 CAPI RSA 구현과 달리 RSACryptoServiceProvider 클래스는 암호화 후와 암호 해독 전에 바이트의 암호화된 배열에 대한 순서를 반대로 바꿉니다. 기본적으로 RSACryptoServiceProvider 클래스로 암호화된 데이터는 CAPI CryptDecrypt 함수로 암호 해독할 없으며 CAPI CryptEncrypt 메서드로 암호화된 데이터는 RSACryptoServiceProvider 클래스로 암호 해독할 없습니다.

API 상호 운용 역순서 지정에 대한 보완 작업을 수행하지 않으면 RSACryptoServiceProvider 클래스가 CryptographicException throw합니다.

CAPI 상호 운용하려면 암호화된 데이터가 다른 API 상호 운용되기 전에 암호화된 바이트의 순서를 직접 반대로 바꿔야 합니다. Array..::.Reverse 메서드를 호출하여 관리되는 바이트 배열의 순서를 쉽게 반대로 바꿀 있습니다.

 인터넷에서 찿아본 설명들

RSA공개키 암호시스템의 하나로, 암호화 뿐만 아니라 전자서명이 가능한 최초의 알고리즘으로 알려져 있다. RSA가 갖는 전자서명 기능은 인증을 요구하는전자 상거래 등에 RSA의 광범위한 활용을 가능하게 하였다.

1977로널드 라이베스트(Ron Rivest), 아디 샤미르(Adi Shamir), 레오널드 애들먼(Leonard Adleman)의 연구에 의해 체계화되었으며, RSA라는 이름은 이들 3명의 이름 앞글자를 딴 것이다. 이 세 발명자는 이 공로로 2002튜링상을 수상했다.

RSA 암호체계의 안정성은 큰 숫자를 소인수분해하는 것이 어렵다는 것에 기반을 두고 있다. 그러므로 큰 수의 소인수분해를 획기적으로 빠르게 할 수 있는 알고리즘이 발견된다면 이 암호 체계는 가치가 떨어질 것이다. 1993 피터 쇼어쇼어 알고리즘을 발표하여, 양자 컴퓨터를 이용하여 임의의 정수를 다항 시간 안에 소인수분해하는 방법을 발표하였다. 따라서 양자 컴퓨터가 본격적으로 실용화되면 RSA 알고리즘은 무용지물이 될 것이다. 그러나 양자 컴퓨터가 이 정도 수준으로 실용화되려면 아직 여러 해가 더 필요할 것으로 보인다.

RSA 암호화 알고리즘은 1983에 발명자들이 소속되어 있던 매사추세츠 과대학교(MIT)에 의해 미국특허로 등록되었고, 2000 9월 21에 그 특허가 만료되었다

RSA는 두 개의 를 사용한다. 여기서 키란 메시지를 열고 잠그는 상수(constant)를 의미한다. 이 중 공개키(public key)는 모두에게 알려져 있으며, 메시지를 암호화(encrypt)하는데 쓰인다. 이렇게 암호화된 메시지는 개인(private key)를 가진 자만이 복호화(decrypt)하여 열어볼 수 있다. 다시 말하면, 누구나 어떤 메시지를 암호화할 수 있지만, 그것을 해독하여 열람할 수 있는 사람은 개인키를 지닌 단 한 사람 뿐인 것이다. RSA는 소인수분해의 난해함에 기반하여, 공개키만을 가지고는 개인키를 쉽게 짐작할 수 없도록 디자인되어 있다.

보다 이해하기 쉬운 예를 들자면, A라는 사람에게 B라는 사람이 메시지를 전하고자 할 때 B A의 열린 자물쇠를 들고 와 그의 메시지를 봉인하고, 그런 다음 A에게 전해 주면, 자물쇠의 열쇠를 가지고 있는 A가 그 메시지를 열어보는 식이 된다. 중간에 그 메시지를 가로채는 사람은 그 열쇠를 가지고 있지 않으므로 메시지를 열람할 수 없다. 그리고 RSA의 디자인 상, 그 열쇠는 자물쇠의 형태만 보고서는 쉽게 제작할 수가 없게 되어 있다.

 XML문서 서명 예제

//XML 서명

        private void btn전자서명_Click(object sender, EventArgs e)

        {

            CspParameters cspParams = new CspParameters();

            cspParams.KeyContainerName = "XML_DSIG_RSA_KEY";

 

            RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(cspParams);

 

            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.PreserveWhitespace = true;

            xmlDoc.Load(strSource);     //서명 전 XML 읽기

            textBox1.Text = xmlDoc.OuterXml; //서명전 파일 보기

 

            SignedXml signedXml = new SignedXml(xmlDoc);

            signedXml.SigningKey = rsaKey;

 

            Reference reference = new Reference();

            reference.Uri = "";

 

            XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();

            reference.AddTransform(env);

            signedXml.AddReference(reference);

            signedXml.ComputeSignature();

            XmlElement xmlDigitalSignature = signedXml.GetXml();

            XmlElement root = xmlDoc.DocumentElement;

            root.InsertAfter(xmlDoc.ImportNode(xmlDigitalSignature, true), root.FirstChild);

           

            xmlDoc.Save(strOutput);             //서명한 XML생성

            textBox2.Text = xmlDoc.OuterXml;

        }

 

        //XML 서명

        private void btn서명확인_Click(object sender, EventArgs e)

        {

            CspParameters cspParams = new CspParameters();

            cspParams.KeyContainerName = "XML_DSIG_RSA_KEY";

            RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(cspParams);

 

            XmlDocument xmlDoc = new XmlDocument();

 

            xmlDoc.PreserveWhitespace = true;

            xmlDoc.Load(strOutput);

 

            //

            SignedXml signedXml = new SignedXml(xmlDoc);

            XmlNodeList nodeList = xmlDoc.GetElementsByTagName("Signature");

 

            if (nodeList.Count <= 0)

                throw new CryptographicException("XML파일에 Signature Element는 하나만 존재하여야 합니다.");

 

            signedXml.LoadXml((XmlElement)nodeList[0]);

            bool result= signedXml.CheckSignature(rsaKey);

     

            if (result)

                textBox3.Text = "서명과 일치 합니다";

            else

                textBox3.Text = "서명과 불칠칭 합니다.";

        }




Posted by penguindori
Common Tip/보안(Security)2009. 8. 13. 09:56

민범규님의 글(Devpia 펌)
RijndaelManaged을 사용하여 암호화 복호화 하는 예제을

MSDN의 내용을 최대한 간단히 만들어 본것입니다.

다음에는 XML서명에 관하여 간단한 예제를 올릴려고 합니다.

대칭형 암호화

1.     ACE

2.     DES

3.     DSE

4.     RC2

5.     Rijndael

6.     TripleDES


RijndaelManaged

현재 표준임.


테스트 예제

1 미리보기


private
void RijndaelManagedDemo_Load(object sender, EventArgs e)

        {

            textBox1.Text = "가나다라마바사아자차카타파하";

            textBox1.Text += "\r\n1234567890";

            textBox1.Text += "\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ";

            textBox1.Text += "\r\nabcdefghijklmnopqrstuvwxyz";

            txtKey.Text = "12345678901234567890123456789012";//16,24,32 1

            txtIV.Text = "1234567890123456";// 16자리

    

        }

 

        private void btn암호화_Click(object sender, EventArgs e)

        {           

            MemoryStream msEncrypt = null;

            CryptoStream csEncrypt = null;

            StreamWriter swEncrypt = null;

            RijndaelManaged aesAlg = null;

 

            aesAlg = new RijndaelManaged();

            aesAlg.Key = Encoding.Default.GetBytes(txtKey.Text);

            aesAlg.IV = Encoding.Default.GetBytes(txtIV.Text);

 

            ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

 

            msEncrypt = new MemoryStream();

            csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);

            swEncrypt = new StreamWriter(csEncrypt);

 

            swEncrypt.Write(textBox1.Text);

 

            if (swEncrypt != null) swEncrypt.Close();

            if (csEncrypt != null) csEncrypt.Close();

            if (msEncrypt != null) msEncrypt.Close();

            if (aesAlg != null) aesAlg.Clear();

 

            textBox2.Text = Convert.ToBase64String(msEncrypt.ToArray());

        }

 

        private void btn복호화_Click(object sender, EventArgs e)

        {

            MemoryStream msDecrypt = null;

            CryptoStream csDecrypt = null;

            StreamReader srDecrypt = null;

            RijndaelManaged aesAlg = null;

            string plaintext = null;

 

            aesAlg = new RijndaelManaged();

            aesAlg.Key = Encoding.Default.GetBytes(txtKey.Text);

            aesAlg.IV = Encoding.Default.GetBytes(txtIV.Text);

 

            ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);

 

            byte[] cipherText = Convert.FromBase64String(textBox2.Text);

            msDecrypt = new MemoryStream(cipherText);

            csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);

            srDecrypt = new StreamReader(csDecrypt);

 

            plaintext = srDecrypt.ReadToEnd();

 

            if (srDecrypt != null)  srDecrypt.Close();

            if (csDecrypt != null)  csDecrypt.Close();

            if (msDecrypt != null)  msDecrypt.Close();

            if (aesAlg != null)    aesAlg.Clear();

 

            textBox3.Text = plaintext;

       }


Posted by penguindori
Common Tip/보안(Security)2009. 8. 11. 11:01
 DES 암호 예제  | 보안 프로그래밍

민범규님의 글(Devpia 펌)
2009-08-09 오후 7:15:36

암호화에 관련하여  이제 까지 거의 무관심하다가

국세청 세금계산서 관련 개발 설명서 보니 기본은 알아야

할것 같아 MSDN등 찾아 보고 있읍니다.

 

공부하면서 테슽트 한 내용 올려봅니다

제 같은 조보자를 위한것입니다.

 

모든 예제는 DESCryptoServiceProvider 등에서 자동으로 생성된

Key,IV을 사용하는데

전 이것은 테스트박스에서 입력받게 약간 고쳤읍니다.

 

DESCryptoServiceProvider

예외

상황

CryptographicException

데이터 암호화 표준( DES) 암호화 서비스 공급자를 사용할 없는 경우


 
 
아래는 구글에서 찾아 보고 복사한 내용입니다
DES(Data Encryption Standard)블록 암호의 일종으로, 미국 NBS (National Bureau of Standards, 현재 NIST)에서 국가 표준으로 정한 암호이다. DES대칭키 암호이며, 56비트의 키를 사용한다.

DES개인키를 사용하여 데이터를 암호화하는 방법으로서 널리 사용되며, 미국 정부는 이 알고리즘을 해독하기 어렵다고 판정하고 다른 나라들에 수출하는 것을 금지하고 있다. DES에는 72,000,000,000,000,000 (72천조)개 이상의 암호 키가 사용되는 것이 가능하다. 주어진 각 메시지를 위한 키는, 이렇게 막대한 량의 키 중에서 무작위로 선택된다. 다른 개인키 암호화 방법과 마찬가지로, 송신자와 수신자 둘 모두는 동일한 개인키를 알고, 사용해야만 한다.

DES는 각 64 비트 데이터 블록에, 56 비트 길이의 키를 적용한다. 이 과정은 여러 가지 모드에서 실행될 수 있으며, 16번의 연산이 수반된다. 비록 DES가 강력한 암호화이라고 판단되고는 있지만, 많은 회사들은 세 개의 키가 잇달아 적용되는 "트리플 DES"를 사용한다. 그렇다고 해서 DES로 암호화된 메시지가 해독될 수 없다고 말하는 것은 아니다. 1997년 초에, 다른 암호화 방식의 소유자인 RSA DES 메시지 해독에 10,000 달러의 상금을 걸었다. 인터상에서 14,000명 이상의 사용자들이 다양한 키들을 시험하는 공동 노력으로 결국 그 메시지를 해독하였는데, 가능한 72천조 개의 키 중에서 고작 18천조 개의 시험을 통해 그 키가 발견되었다. 그러나, 오늘날 DES 암호화로 발송되는 것 중, 이러한 종류의 코드 해독 노력에 영향을 받을 것 같은 메시지는 거의 없다.

DES 1977년에 IBM에서 발명하였으며, 미국 국방부에 의해 채택되었다. 이것은 ANSI X3.92 X3.106 표준 및 미국 연방정부 FIPS 46 81 표준에 정의되어 있다. 이 암호화 알고리즘이 비우호적인 국가에 의해 사용될 수 있다는 염려 때문에, 미국 정부는 암호화 소프트웨어의 수출을 막고 있다. 그러나, 이 소프트웨어의 프리버전은 BBS나 웹사이트 등에서 어렵잖게 입수할 수 있다. 이 암호화 알고리즘이 깨지지 않고 비교적 오래 남아있을 것이라는 일부 관심이 있지만, NIST DES를 대체하기 위한 새로운 표준이나 대안에 관한 작업이 진행중이므로 DES를 다시 인증하는 일은 없을 것이라고 지적했다. 그후 2001년에 DES를 대체하는 표준으로 AES (Advanced Encryption Standard)가 선정되었다.

 

테스트 예제

1 미리보기


// 초기화

private void DesCryptoDemo_Load(object sender, EventArgs e)

        {

            textBox1.Text = "가나다라마바사아자차카타파하";

            textBox1.Text += "\r\n1234567890";

            textBox1.Text += "\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ";

            textBox1.Text += "\r\nabcdefghijklmnopqrstuvwxyz";

            txtKey.Text = "12345678";//필히 8자리

            txtIV.Text = "12345678";//필히 8자리

        }

 

//암호화

        private void button1_Click(object sender, EventArgs e)

        {                  

            DESCryptoServiceProvider DesKey = new DESCryptoServiceProvider();

            DesKey.Key = Encoding.Default.GetBytes(txtKey.Text);

            DesKey.IV = Encoding.Default.GetBytes(txtIV.Text);

                                                

            MemoryStream ms = new MemoryStream();

            CryptoStream encStream = new CryptoStream(ms, DesKey.CreateEncryptor(), CryptoStreamMode.Write);

 

            StreamWriter sw = new StreamWriter(encStream);

            sw.Write(textBox1.Text);

            sw.Close();

            encStream.Close();

 

            textBox2.Text = Convert.ToBase64String(ms.ToArray());

            ms.Close();

        }

 

 

//복호화 

        private void btn복호화_Click(object sender, EventArgs e)

        {

            DESCryptoServiceProvider DesKey = new DESCryptoServiceProvider();

            DesKey.Key = Encoding.Default.GetBytes(txtKey.Text);

            DesKey.IV = Encoding.Default.GetBytes(txtIV.Text);

           

            byte[] buffer = Convert.FromBase64String(textBox2.Text);

            MemoryStream ms = new MemoryStream(buffer);

 

            ICryptoTransform ct = DesKey.CreateDecryptor();

            CryptoStream encStream = new CryptoStream(ms, ct, CryptoStreamMode.Read);

            StreamReader sr = new StreamReader(encStream);

            textBox3.Text = sr.ReadToEnd();

            sr.Close();

            encStream.Close();

            ms.Close();

        }



번호: 1749 추천:0  / 읽음:42

Posted by penguindori
Common Tip/보안(Security)2009. 3. 24. 15:27
- 힘들게 개발한 프로젝트인데 실수로 그만 배포했던 DLL 파일만 남기고
  소스파일을 잃어버렸어요..ㅠㅠ 어떻하죠~~~?

- 요번에 저희 회사에서 출시된 신제품인데, 혹시 핵심 알고리즘의 소스코드가
  공개유출되지는 않을까요?

 닷넷 소스코드 관련된 이와 같이 문제들이 생겼을 때 도움을 될 수 있는

작지만 강력한 유틸리티 두 가지를 소개해드립니다. ^^

하나는 닷넷 모듈 역컴파일러와 또 하나는 난독화를 도와주는 유틸입니다.


주인공은 [.NET Reflector]와 [Dotfuscator]인데요,

빌드를 시작한지 꽤나 오래된 프로그램들이라 이미 잘 알고 계시는 분들도 많겠지만,

혹시나 아직 써보지 않으셨다면 정말 급할 때(특히나 Reflector)

매우 유용하실 겁니다. ^^

  - 이름 : Lutz Roeder의 닷넷 리플렉터~
          (http://www.aisto.com/roeder/dotnet/)

    - 최신버전 : 5.0.21.0 (2007.06.05일 현재)

    - 하는일 : IL로 만들어진 닷넷 어셈블리를 디어셈블해줌(!!)

    - 성능 : 매우 막강

    - 모양 : 이쁨

    - 용량 : 작음

    - 사용방법 : 실행 후 사용할 프레임워크 버전을 선택하고 디어셈블할 어셈블리 선택

    - 기타 : 유사품도 더 있으나, 가장 간결하고 깔끔함

 닷넷 어셈블리란 앞뒤빼고 한마디로 말하면 컴파일 후 생성된 DLL을 말하죠

그녀석을 디어셈블 한다는 얘기는 결국 .DLL 파일에서 다시 .CS 파일로 만든다는 얘기가 됩니다.

바로 Reverse-Engineering. 즉, 역컴파일을 해준다는 말이죠. ^^

이 리플렉터만 있으면, 모~~든 닷넷 DLL파일들만 있으면 .CS파일의 코드내용들을

볼 수 있다는 말이 됩니다.

그렇다고 해서 리플렉터를 해커들이나 쓰는 프로그램으로 오해하시면 안됩니다.;;;


System.Web... System.Data... System.Collections..

System.Drawing.. 등등. ^^ 많이 보시던 네임스페이스들이죠?

이와같은 닷넷 프레임워크의 어셈블리들의 메소드, 멤버변수 목록 확인은 기본~!

매일 습관적으로 선언하고, 또 사용하던 클래스들까지

실제 수행되는 코드들을 자세하고 알아 볼 수 있다는 점이야말로

리플렉터가 닷넷 개발자의 필수 유틸리티로 자리매김할 수 있었던 매력이죠.


객체 파기와 관련해서 쓰이는 .Dispose()와 .Close()....

어쩌면 이름만 틀리고 하는일은 똑같아 보이기도 하는 이녀석들의 차이점을

실제 코드상으로 확인해 볼 수도 있겠고,

또, 언제는 StringBuilder를 사용해야 좋고, 언제는 StringBuilder를 쓰면

메모리의 심각한 낭비가 발생하게 되는지의 이유를

바로 이 리플렉터를 이용하여 소스코드를 보면서 찾아볼 수도 있겟죠 ^^

 

사실 MS Visual Studio에는 리플렉터와 같은 기능으로

IL(Intermediate Language)코드를 보여주는 ILDASM(IL Disassembler)이란 녀석이 기본적으로 설치되어 있습니다.

[Visual Studio .NET 명령 프롬프트]를 실행 후에 [ildasm] 이라고 입력하면 이 녀석을 볼 수 있는데,

마찬가지로 DLL파일만 선택해주면 전체적인 메소들과 프로퍼티들 또, 코드 내용까지 보여 줍니다.

하지만 결정적으로 그 코드내용이 IL 형태 그대로(정말 그대~로;;) 보여주기 때문에

그걸 가지고 일반 유저들이 실제 소스코드를 복원하기엔 다소 무리가 있습니다.;;;


리플렉터는 바로 이런 단점을 보완하여 C#, VB, Delphi등의 고급언어로

코드를 완벽(거의)하게 또 편리하게 복원해 준다는게 장점입니다. ^^

 

모~든걸 뚫을 수 있는 창이 있으면 모~든걸 막는 방패도 있듯이

이번엔 소스코드를 어떻게든지 보호할 수 있도록 도와주는 유틸리티를 살펴보겠습니다.

소스 코드(또는 그에 대한 권리)를 판매에 포함하지 않고 S/W를 출시하게 되면

항상 역공학에 대한 걱정이 따라다니게 됩니다.

특히 자바나 닷넷과 같은 (비교적)최신 언어들은 편리해진 만큼

바로 위의 리플렉터와 같은 프로그램이 있을 정도로 소스코드가 쉽게 노출되어 있습니다.

이걸 최대한 어렵게 하자~는 것이 방패진영(^^;)의 방향인데요,

방법이야 조금만 검색엔진을 두드려도 많겠지만, 그걸 자동화시키고 조금이라도 더 강력하게 방어할 수 있는

Obfuscator들이 많이 나와 있습니다.

 


 - 이름 : PreEmptive Solutions의 Dotfuscator
          (http://www.preemptive.com/)

    - 최신버전 : 1.1 (Add-in 버전)

    - 하는일 : 어셈블리 소스를 못알아볼 정도로 최대한 복잡하게 만들어줌(-_-;;)

    - 성능 : 매우 막강

    - 모양 : 별로 안이쁨

    - 용량 : 작음(Visual Studio에 Add-in 되어있음)

    - 사용방법 : 난독화할 어셈블리 선택 후 빌드~

    - 기타 : 비주얼 스튜디오에 통합될 수 있다는 점에서 유사품과 차별화됨

 

Visual Studio 2003 버전부터 Dotfuscator가 자체 포함되기 시작했습니다.

원래는 Dotfuscator 4.0버전이 User당 2백만원씩이나 하는 상용S/W인데;;

그럼에도 불구하고 MS에서 막강한 그 유용함을 높이사 일부 기능을 축소시킨채로 Add-in 시킨 것입니다.

사실 어셈블리 파일이 사용자에게 배포되는 상황이라면

역컴파일을 막는다는 건 불가능합니다.;;

(따라서 가능한한 중요 모듈은 서버에서 실행되어야 바람직하겠죠~ ^^)

그럼에도 불구하고 배포를 하게 되는 경우, 역컴파일의 결과가 최대한 부실(;;)하도록

만들어주는 것이 Obfuscator들의 가장 큰 목적이라 할 수 있겠습니다.

주요 기능으로는

식별자 이름 바꾸기(그것도 다양한 방법으로;;), 사용하지 않는 메타데이터 제거, 접두어 이름 변경,

문자열 암호화, (무절제한) 메소드 오버로딩, 제어 흐름 애매하게 하기 등등이 있습니다.


식별자 이름을 바꾼다는게 GetDownload()와 같은 이름을 a().. -_-;; 이런식으로 바꿔준다는건데,

단순해 보이지만, 전체 프로세스 흐름을 모르는 상황에서 모든 메소드, 클래스들이

a...b.. c...x...q...w....(-_-;;) 이렇게만 딸랑 되어 있으면 정말 당황스럽습니다;;

(따라서~~~ 변수명명 규칙 등 코딩 표준안을 준수합시다~~~ >_</)

게다가 저렇게 가독성과 비례하는 긴~ 이름들을 짧게 한다는건

그만큼 실행시간을 최적화시킬 수 있다는 효과도 덤으로 얻을 수가 있는 이점이 있습니다.

이 점 때문에 꼭 난독화가 아니더라도 일부터 Obfuscator를 사용한 후 배포 하는 일도 있습니다.

그 외의 기능등도 모두 코드분석을 어렵게 하기와 관련이 있는 내용들입니다.


여기서 한가지 짚어볼 점이 있다면,

Obfuscator들의 해주는 일들과 정반대가 되도록 평소에 코딩을 한다면 어떻게 될까요? ^^

메소드명(변수, 클래스명 등등 포함)을 명확하게 사용하고,

메소드 오버라이딩도 가능한 적게 쓰고(이거야 뭐, 써야 좋은 경우도 당연히 있겠죠 ㅎㅎ),

모듈별 정규화를 통해 제어 흐름도 논리적으로 보기 편하게 하고...

결국은 누구나 분석하기 편한 깔끔한 코드가 될 것이라는 점입니다.

모듈을 난독화 해주는 Obfuscator에게서 거꾸로 배울 수 있다니...좀 아이러니 하죠 ㅎㅎ

 

자... 닷넷의 역공학과 난독화의 대표적인 프로그램들을 짚어봤는데,

물론 이와 같은 유틸리티들이 닷넷에만 있는 것은 아닙니다.

Java에도 JAD와 같은 대표적 역컴파일러가 있고, PreEmptive에서도

Dotfuscator의 자바버전인 DashO라는 제품을 빌드하고 있습니다.

개발자로서 코딩을 잘하는 것도 매우 중요한 능력이지만,

직접(또는 먼저) 만들진 못했더라도, 이런 자동화 도구들을 잘 알고

적재적소에 잘 이용할 수 있는 것도 능력중에 하나가 아닌가 싶습니다.

(물론 연구원이나 학생이라면 일부러 노가X 를 하는 경우도 있겠지만...ㅎㅎ)


개발 하시는데 유용한 도움이 되셨기를...^^


Posted by penguindori

hackersnews.co.kr

수업 정보 제공 SITE 입니다.
(해커 대학 공식 SITE)
-------------------------------
부라우저..

nc -L  -p 9389

=웹 해킹=
------------
인터넷 해킹 - 기법 - xss 쿠키 변조
                          -  Injection
시스템 해킹    -
네트워크 해킹 - 기법
                       도구
                       기타   <-- 이런식으로 정리를 하자.
----------------------------------------------
SQL Injection

' 1 =1 --
ID 창에 위의 내용을 입력후 비밀번호 아무거나.

owasp(open web application security project)

웹 응용프로그램의 보안을 유지하기 위한 프로젝트

webgoat 다운로드 받기

www.owasp.org

설치후 Relese 버전으로

http://127.0.0.1/WebGoat/attack
id guest pw guest

tool : 게임 은행 계좌
paros
achilles
burp proxy
webscarab
cooxie  : cookie값을 변경


acunetix : 스케너
exploitation framework  : 무로 PT(모의 침투)
metasploit                   : 무료

core-impact                : 유료 PT
=============================================================

cooxie

: cookie나 cache 전문 편집기
웹브라우저에서 로그인 하면 해당 javasciprt:document.cookie() <-- 편하게 보게 해주는것

============================================================

Session Management

=>
How to Spoof an Authentication Cookie

How to Spoof an Authentication Cookie

Login using the webgoat/webgoat account to see what happens. You may also try aspect/aspect. When you understand the authentication cookie, try changing your identity to alice.

Sign In

Please sign in to your account. See the OWASP admin if you do not have an account.
webgoat/webgoat
JSESSIONID=5F91D2F1B147319AFAA426A8ECDD8DAC
AuthCookie=65432ubphcfx  인증 쿠키

aspect/aspect
JSESSIONID=5F91D2F1B147319AFAA426A8ECDD8DAC
AuthCookie=65432udfqtb 인증 쿠키

패턴
alice
1 . AuthCookie=65432alice
2 . AuthCookie=65432ecila 거꿀로..
2 . AuthCookie=65432fdjmb 뒤에 영어 + 알파벳 하나씩 더하기


내일 설치할 경로 파로스
http://www.parosproxy.org

Posted by penguindori