C# 등의 닷넷계열의 언어를 이용해서 프로그래밍을 하면 어셈블리를 이용해 리버스 엔지니어링이 매우 쉽게 됩니다.

실제로 .NET Reflector 등을 사용해보면 어셈블리에서 원본코드와 거의 동일한 소스코드도 뽑아낼 수 있습니다.

이런 것을 방지하기 위한 것이 난독화인데 여러가지 방법 중에 간단한 것은 메소드명, 변수명 등을 a, b, c 등 의미없는 단어로 변경하는 방법입니다.

이런 난독화를 하는 프로그램이 몇개 있지만 Visual Studio를 설치하면 "Dotfuscator Community Edition"이 같이 설치되서 사용할 수 있습니다.(Community Edition으로 기능상에 제약이 있습니다.)


아래 예제에서는 별다른 옵션을 주지 않고 기본설정만을 이용한 간단한 사용법을 알아보겠습니다.

실행 방법은 Visual Studio의 도구메뉴에서 "Dotfuscator Community Edition"를 클릭하시면 됩니다.(시작메뉴에서도 실행은 가능하지만 Visual Studio가 실행이 되있어야 실행이 됩니다.)

프로그램을 실행하면 등록과 관련된 창이 뜨는데 일단 무시하시고, 실행이 완료되면 'Input' 탭에서 열기 아이콘을 이용해서 난독화를 수행할 파일을 선택해 줍니다.

파일 추가 후에 File메뉴나 툴바의 저장버튼을 이용해서 적당한 폴더에 프로젝트를 저장합니다.
(이때 설정한 폴더경로는 결과물이 저장될 경로이기도 합니다.)


그 다음에는 'Build' 탭으로 이동해서 'Build' 버튼을 클릭함으로써 난독화를 시작합니다.
(Directory 그룹박스 설정을 통해 결과물이 저장될 경로 변경가능합니다.)


Build가 완료되면 결과가 나옵니다. 뭐 대충 메소드명이나 필드명 등을 전체 몇개 중 몇개를 바꿨다는 내용으로 나오네요...


결과 확인을 위해 'Output' 탭으로 이동하면 아래 화면처럼 Program클래스, Main메소드, Sum메소드의 이름이 각각 'a'로 변경된 것을 알수 있습니다.
(실제 결과물은 위에서 프로젝트 저장 폴더로 지정한 경로에 가면 있습니다.)


다음은 위에서 작업한 파일의 원본 소스의 일부와 난독화한 파일을 .NET Reflector로 봤을 때 어떻게 변경됐는지를 보여줍니다.

Sum메소드명이 a로 변경되었고, Sum메소드의 매개변수인 var1, var2 각각이 A_0, A_1로 변경되었습니다.

예제에서는 소스코드가 단순해서 난독화 결과를 보고도 분석이 가능하지만 소스코드가 복잡했다면 의미없는 메소드명과 변수명등으로 도배가 된 코드를 분석하기는 어려울 것입니다.

▣ 소스코드
class Program
{
    static void Main(string[] args)
    {
        string str = "Test Message";
        Console.WriteLine(str);

        Console.WriteLine(Sum(10, 20));
    }

    static int Sum(int var1, int var2)
    {
        return var1 + var2;
    }
}

▣ .NET Reflector 결과화면


더 많은 기능이나 자세한 옵션 등은 아래 MSDN 페이지를 참조바랍니다.
Posted by Gungume
,

Transmute란 웹브라우저간에 북마크를 공유할 수 있도록 변환을 해주는 프로그램입니다.

IE8 정식이 출시되면서 기존에 사용하던 크롬의 즐겨찾기와 동기화를 시키기 위해서 검색을 통해서 찾은 프로그램인데 크롬 -> IE8간의 변환만 해봤는데 별다른 문제는 없었습니다.

다운로드는 위의 링크를 통해서 받을 수 있고 설치버전 및 무설치버전이 있고 free입니다~

실행하기 위해서는 Microsoft .NET Framework v2.0이나 그 이상의 버전(.NET v3.5 SP1 추천)이 컴퓨터에 설치되어있어야 합니다.

홈페이지 메인인 위의 링크에 잘 나와있지만 지원되는 운영체제 및 브라우저 목록은 아래와 같습니다.'

운영체제 : Windows, Linux, Mac OS
브라우저 : Google Chrome, Mozilla Firefox, Microsoft Internet Explorer, Opera, Apple Safari, Chromium, Flock, Konqueror
Posted by Gungume
,
IE8과 크롬에서는 각각  InPrivate Browsing과 Incognito mode(시크릿 모드)라는 명칭으로 웹서핑시 정보를 저장하지않는 기능이 있습니다.

각각의 기능은 웹브라우저 실행 후 메뉴 등을 통해서 실행할 수도 있지만 단축아이콘의 Target 부분의 설정을 통해서 실행시부터 해당 기능으로 사용이 가능합니다.

아래는 각각 IE8과 크롬에서의 설정 예시이고, 각각 마지막에 "-private"와 "--incognito"를 지정해주면 됩니다.

IE8 : C:\Program Files\Internet Explorer\iexplore.exe -private
크롬 : C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe --incognito


Posted by Gungume
,
C#을 이용해서 웹페이지의 소스를 볼 수 있는 간단한 예제입니다.

웹페이지의 특성에 따라 인코딩 부분과 개행문자 부분은 변경해야 할 수도 있습니다.

using System.Net;
using System.IO;

WebRequest req = WebRequest.Create(url);
WebResponse res = req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
string result = sr.ReadToEnd().Replace("\n", "\r\n");

res.Close();
sr.Close();

(사용언어 / 제작툴 / .Net Framework버전 : C# / VS2008 / 3.5)


Posted by Gungume
,

캠영상받기_DirectX
     
캠영상받기_PictureBox



NyARToolkitCS를 이용해서 캠으로부터 들어오는 영상을 화면에 출력해주는 예제 소스입니다.

최종 출력은 위의 스샷 2개와 같으며, 각각 DirectX를 이용한 출력과 PictureBox 컨트롤에 출력하는 예제입니다.

아직 NyARToolkitCS과 DirectX 등에 대한 지식이 부족하여, 예제소스는 직접 코딩을 하기보다는 NyARToolkitCS의 예제 소스에서 캠영상 출력과 관련되는 부분만 남겼습니다.

(사용언어 / 제작툴 / .Net Framework버전 : C# / VS2008 / 3.5)
Posted by Gungume
,
August 2007 -> Managed DirectX의 샘플과 문서가 있는 가장 최신의 DirectX SDK 버전

Directx SDK (August 2007) 다운로드 페이지 가기...
Posted by Gungume
,

NyARToolkitCS

AR(증강현실) 2009. 2. 14. 11:20
NyARToolkitCS는 ARToolKit과 비슷한 것으로서 C#에서 증강현실을 쉽게 구현하도록 도와주는 오픈소스 라이브러리입니다.

.Net Framework 2.0과 .Net Compact Framework 3.5 기반이며 MDX(Managed DirectX)와 오픈소스인 DirectShow.NET을 사용해서 구현되어있습니다.

ARToolKit과 비교해서 문서 등은 거의 없지만, 많이 쓰는 것에 대해서는 상세한 주석이 달려있습니다.
(비록 주석이 일본어지만 구글번역기를 이용하면 대부분 깔끔하게 번역됩니다.)

Posted by Gungume
,
우선 ARToolKit의 기본적인 설정은 ARToolKit Documentation 참조. (Setting up ARToolKit)


Windows 7 + VS2008 sp1에서 ARToolKit을 컴파일하면 아래와 같은 오류메시지가 나옵니다.

"mt.exe : general error c101008d: Failed to write the updated manifest to the resource of file ".\FileName.exe". The binary is not a valid Windows image."

구글링을 해보니 백신을 종료해야 된다는 해결 방법도 있었지만 제 경우에 해당되는 상황이 아닌지 문제가 해결되지 않았습니다.

좀더 구글링을 해서 아래 사이트에서 해결 방법을 찾았습니다.

해결방법 부분만 정리하면 VS2008의 프로젝트 속성에서 구성속성 -> 링커 -> 고급에서 임의 기준 주소를 '이미지를 임의로 선택하지 않습니다. (/DYNAMICBASE:NO)'로 변경하고 컴파일하면 됩니다.

해당 옵션에 대한 자세한 정보는 아래 MSDN링크를 참조하세요.
Posted by Gungume
,
using System.Data;
using System.Data.SqlClient;

// 연결문자열  
string ConnectionString = "server=localhost(or ServerIP);database=DB_Name;user id=sa;password=sa";

// 1. 데이터베이스 연결  
SqlConnection conn = new SqlConnection(ConnectionString);

// 2. 명령문 만들기  
string query = "SELECT * FROM table";
SqlCommand cmd = new SqlCommand(query, conn);

// 3. DataAdapter 개체 생성
SqlDataAdapter ad = new SqlDataAdapter();
ad.SelectCommand = cmd;

// 4. DataSet 개체 생성 및 데이터 채우기
DataSet ds = new DataSet();
ad.Fill(ds);

// 5. DataSet 개체를 GridView 컨트롤에 바인딩
GridView1.DataSource = ds;
GridView1.DataBind();
Posted by Gungume
,
using System.Data;
using System.Data.SqlClient;

// 연결문자열
string ConnectionString = "server=localhost(or ServerIP);database=DB_Name;user id=sa;password=sa";

// 1. 데이터베이스 연결
SqlConnection conn = new SqlConnection(ConnectionString);
conn.Open();

// 2. 명령문 만들기
string query = "SELECT * FROM table WHERE id = @id";
SqlCommand cmd = new SqlCommand(query, conn);

// 둘 중 하나 사용~
cmd.Parameters.Add("@id", SqlDbType.VarChar).Value = "id_Value";
cmd.Parameters.AddWithValue("@id", "id_Value");

// 3. 명령 실행
SqlDataReader reader = cmd.ExecuteReader();

// 4. 실행 결과 보여주기
while (reader.Read())
{    
    // 둘 중 하나 사용~    
    Console.WriteLine(reader[index]);    
    Console.WriteLine(reader["컬럼명"]);
}

// 5. 데이터베이스 닫기
reader.Close();
conn.Close();
Posted by Gungume
,