2009. 10. 20. 16:25
개인적으로, ruby는 배워보니까 정말 편리해서 RoR 외의 여러 부분에서 쓰고 있다. 심지어 간단한 CGI를 만들때도 ruby를 쓰기도 하는데 -_-;;

그러다가 ruby용 GTK 바인딩을 찾아서 꽤나 전에 신나게 썼었다. 단지 좀 아쉬웠던건 그 라이브러리 공식 홈페이지에서 제공하는 windows용 installer가 0.16 버전이라 상당히 불편했었다.

근데 시간도 꽤 지났고, 이 바닥에는 정말 할일 없는 사람이 널렸기 때문에 누군가 상위버전용 인스톨러를 만들지 않았을까, 하는 기대감에 혹시 있나 찾아보았다. 역시나, 누군가 해 두었다.

컴파일 하는 방법도 찾았기에 시간 나면 한번 컴파일을 따로 해봐야겠다.

여유가 나면 번역해서 컴파일 방법을 써 봐야겠다.

'프로그래밍 > Ruby' 카테고리의 다른 글

네이트온 자동 로그인  (0) 2009.12.04
공개 한글 폰트 다운로더  (0) 2009.11.16
Ruby-GNOME2 0.18 One-Click Installer for Windows  (0) 2009.10.20
rubyscript2exe 로 ruby-gnome2를 이용한 어플 패킹하기  (0) 2009.02.02
GMemRB 공개  (0) 2009.02.01
Ruby-GD2 in WIN32  (0) 2008.12.23
2009. 10. 5. 14:06

텍큐 글 복원

잡설 2009. 10. 5. 14:06
지메일 계정을 이상하게 만들어서 연결하는 바람에 나중에 돼서 정정하려고 했으나 아주 시궁창스럽게도 텍큐닷컴 블로그는 명의이전이 안된다는 것을 알았다.

그래서 블로그 전체를 백업한 다음에 - 티스토리에서 옮겨 올 때 그랬듯 - 재 개장을 같은 주소에서 했는데, 자세히 보니까 여기저기 마이그레이션이 덜 된 흔적이 널려 있었다.

오늘 확인하고는 수정하려고 백업파일을 받아서 일부 손 댄 다음에 복원을 했드랬다.

그런데 두둥... 통계 데이터가 전부 날아갔다 ㅋㅋ

지메일 연결만 안하면 명의이전 정말 간단하고 쉬운데... 왜 이걸 못하게 막은걸까 -_- 라기보단 구현을 아직 안한거겠지..

'잡설' 카테고리의 다른 글

혼자서 배우기  (0) 2010.08.22
돈까스 한뚝배기 하실래예?  (0) 2010.05.07
텍큐 글 복원  (0) 2009.10.05
대학원생과 연구와 교수님  (2) 2009.06.25
종교와 기득권층  (0) 2009.06.22
정의에 대해서  (2) 2009.06.19
2009. 10. 5. 13:25
JunkOn, DShower 프로젝트(?)를 추진 할 때, DirectShow 필터 생성을 추적할 필요가 있어서 제작해 보았던 툴이다.

디버거나 디버깅 스트링 뷰어 등을 연결해서 이 DLL을 인젝션시키면 대상 프로그램에서 생성되는 COM Object의 생성과 interface 요청을 추적하여 디버그스트링으로 COM Object의 사용을 추적할 수 있다.

핵심은 COM Object를 키로, 해당 Object가 소유한 QueryInterface를 값으로 쓰는 해시를 이용해 모든 QueryInterface를 감시하는 것이다. import table에 들어있을 리가 없기 때문에 후킹은 타겟 메소드의 처음 명령을 후킹하고자 하는 함수의 시작 주소로 점프하는 것으로 덮어쓰는 방법을 써서 후킹한다.





'크래킹, 크랙미' 카테고리의 다른 글

AD free NateOn  (0) 2010.05.18
COM Object 생성 추적하기, COMTracer  (0) 2009.10.05
DLL injection with CreateRemoteThread()  (0) 2009.08.01
CBsearch Crack  (15) 2009.06.20
abexcrackme2  (0) 2007.02.17
2009. 8. 1. 14:18
인터넷을 뒤지다가 같은 제목의 글이 맨 앞에 나오길래 패스했었는데, 읽어보니 내 쪽이 더 간단한거 같아서 글로 남길만한 가치가 있을 거 같아 다시 쓰기로 했다 -_-..

차례
  • 소개
  • 소스코드
  • 설명
  • 참고
소개

어떤 프로그램을 해킹하려 할 때는, 그 프로그램의 메모리에 접근하는 것이 필수적이다. 옛날 DOS와 같은 메모리 보호 기능이 없던 OS에서는 어렵지 않게 해당 프로그램의 메모리에 접근할 수 있었지만, 요즘과 같이 멀티태스킹과 메모리 보호가 기본인 상황에서는 그렇게 접근하는 것이 쉽지 않다. 그래서 자주 이용되는 방법이 디버거를 사용하는 방법이다.

하지만 이 디버거를 사용하는 경우에는 상당히 번거로운 것이 사실이다. 간단한 작업만 하면 되는데 그 커다란 디버거를 불러와야한다거나, 디버깅 API를 사용하려면 여러가지로 준비할 것이 많다거나, 해당 프로그램에서 디버거 디텍션 루틴을 넣어놨다면 또 복잡해지기도 해서 좀 더 간단한 방법을 사용할 수 있다면 쓰는 편이 낫다.

여기서 소개하려는 방법은 CreateRemoteThread()라는 API 함수를 통해 타겟 프로세스에 내가 만들어둔 DLL을 주입시키는 방법이다. DLL은 별도의 프로그램이지만, LoadLibrary 함수 등을 통해서 동적으로 링크되면 해당 프로세스의 주소 공간 내에 매핑되어 마치 처음부터 원래 프로그램과 같이 실행된 것 처럼 메모리 공간을 헤집을 수 있다는 특징이 있다. 매번 디버깅 API를 통해 메모리에 접근하는 것이 아니라, 이러한 부분을 DLL로 만들어서 주입함으로써 더 간단하게 타겟 프로세스를 주무를 수 있다.

소스코드
hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
if(hProc == NULL)
{
    MessageBox(hWnd, TEXT("Failed to inject DLL!\nCannot open the process"), NULL, MB_ICONERROR);
    break;
}
pRemoteDll = VirtualAllocEx(hProc, NULL, sizeof(char) * MAX_PATH, MEM_COMMIT, PAGE_READWRITE);
if(!pRemoteDll)
{
    CloseHandle(hProc);
    MessageBox(hWnd, TEXT("Failed to inject DLL!\nCannot allocate memory in target process"), NULL, MB_ICONERROR);
    break;
}
if(!WriteProcessMemory(hProc, pRemoteDll, szDllName, sizeof(szDllName), NULL))
{
    VirtualFreeEx(hProc, pRemoteDll, 0, MEM_RELEASE);
    CloseHandle(hProc);
    MessageBox(hWnd, TEXT("Failed to inject DLL!\nCannot write memory in target process"), NULL, MB_ICONERROR);
    break;
}
hKernel32 = LoadLibrary(TEXT("KERNEL32.DLL"));
pfnLoadLibrary = (LPTHREAD_START_ROUTINE)GetProcAddress(hKernel32, TEXT("LoadLibraryA"));

hThread = CreateRemoteThread(hProc, NULL, 0, pfnLoadLibrary, pRemoteDll, 0, NULL);
if(!hThread)
{
    VirtualFreeEx(hProc, pRemoteDll, 0, MEM_RELEASE);
    CloseHandle(hProc);
    FreeLibrary(hKernel32);
    MessageBox(hWnd, TEXT("Failed to inject DLL!\nCannot create remote thread"), NULL, MB_ICONERROR);
    break;
}
WaitForSingleObject(hThread, INFINITE);

VirtualFreeEx(hProc, pRemoteDll, 0, MEM_RELEASE);
CloseHandle(hProc);
FreeLibrary(hKernel32);
if(GetExitCodeThread(hThread, &dwRet))
{
    TCHAR out[1024];
    _stprintf(out, TEXT("Injection finished.\nExit code: 0x%08lX"), dwRet);
    MessageBox(hWnd, out, TEXT("Finished"), MB_ICONINFORMATION);
}
설명

여기서 사용한 핵심 API는 다음과 같다.
HANDLE WINAPI CreateRemoteThread(
__in HANDLE hProcess,
__in LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in SIZE_T dwStackSize,
__in LPTHREAD_START_ROUTINE lpStartAddress,
__in LPVOID lpParameter,
__in DWORD dwCreationFlags,
__out LPDWORD lpThreadId
);
LPVOID WINAPI VirtualAllocEx(
__in HANDLE hProcess,
__in_opt LPVOID lpAddress,
__in SIZE_T dwSize,
__in DWORD flAllocationType,
__in DWORD flProtect
);
CreateRemoteThread()는, 원래는 “다른 프로세스에 스레드를 생성할 때” 사용하는 함수다. 맨 앞에서 지정해주는 hProcess로 대상 프로세스를 지정해 줄 수 있다. 그런데 여기서, 스레드의 시작 주소를 지정해주는 lpStartAddress를 살펴보면 재밌는 사실을 하나 발견할 수 있다.

LPTHREAD_START_ROUTINE의 정의는 다음과 비슷하다.
DWORD WINAPI ThreadProc(
__in LPVOID lpParameter
);
그리고 DLL를 불러오는 함수인 LoadLibrary의 정의는 다음과 같다.
HMODULE WINAPI LoadLibrary(
__in LPCTSTR lpFileName
);
보다시피, 타입만 약간 다르고 실질적인 함수 호출에 있어서는 두 함수가 서로 똑같다는 것을 알 수 있다. 만약 타겟 프로세스 내의 LoadLibrary() 주소를 알 수 있다면 CreateRemoteThread()에 스레드 시작 주소로 LoadLibrary()를 넘겨주어 어렵지 않게 DLL을 주입할 수 있다는 것이 된다. 그리고 또 하나의 희소식은, Windows는 빠른 동적 링크를 위해서 각 DLL마다 선호하는 Base Address가 기록되어 있으며 충돌하지 않는 한 Base Address는 항상 고정되어 있다는 것이다. 따라서, 제일 먼저 로드되기 마련인 KERNEL32.DLL의 base address는 어떤 프로세스가 됐든 특별한 일 없이는 전부 똑같다는 말이 된다!

그러면 VirtualAllocEx()는 왜 필요할까? 바로 LoadLibrary()의 패러미터를 넘기기 위해 필요하다. LoadLibrary()는 고맙게도 시작 주소가 모든 프로세스마다 동일하지만 패러미터로 넘겨줄 DLL의 이름은 타겟 프로세스 내에서 찾아야 한다. 당연히, 이쪽의 주소를 넘겨주게 되면 해당 프로세스 내에서는 쓰레기 값이 참조되거나, 심지어는 잘못된 메모리 접근이 발생할 수도 있다. 그래서, 패러미터로 넘겨줄 DLL의 path를 넘기기 위해 VirtualAllocEx()로 타겟 프로세스 내에 메모리를 할당하고, 반환된 그 주소를 CreateRemoteThread()의 lpParameter로 넘겨주게 되면 LoadLibrary()의 스레드가 동작하면서 DLL을 주입시켜주게 되는 것이다. 주입과 동시에 실행되어야 할 코드들은 DLL 내의 DllMain() 함수 내에 집어넣으면 수행되게 된다. 구체적인 것은 MSDN의 DllMain() 항목을 참조하는 것이 좋을 것이다.

주의할 점은, 이 방법이 100% 동작하지 않을 수 있다.

참고

  • 해킹, 파괴의 광학 (와이미디어, 김성우 저) - 복잡한 방법밖에 실려있지 않지만, 상당한 참고가 될 것이다.
꽤 예전에 배워서 구현한 파일인데, 그러다보니 참조했던 곳이 다 사라져버렸다 -_-;;
여튼, 나중에 소개할지도 모르는 DirectShow 기반의 간단한 스트리밍 서비스 뚫기 등에서도 API 후킹에 많이 써먹었던 매우 유용한 툴이라, 많은 사람들이 유용하게 쓸 수 있으리라 믿는다.

'크래킹, 크랙미' 카테고리의 다른 글

AD free NateOn  (0) 2010.05.18
COM Object 생성 추적하기, COMTracer  (0) 2009.10.05
DLL injection with CreateRemoteThread()  (0) 2009.08.01
CBsearch Crack  (15) 2009.06.20
abexcrackme2  (0) 2007.02.17
2009. 6. 26. 03:01
screen은 참 좋은 어플이긴 한데, 매번 켜주고 붙이고 하는 것이 상당히 귀찮은 것이 사실이다. 그리고 여러 부가기능들을 보면 항상 켜놓는 것도 그다지 나쁘지 않은 선택인거 같아서, 몇 가지 해법을 찾아보았다.

  1. screen-profile 쓰기
    사실 가장 무난한 방법인 것 같다. ubuntu에서 제공해주는 것인데, gentoo에서는 dpkg를 이용해서 포티지와 합쳐진 통합 관리로 설치 및 유지 보수가 가능하다.
    하지만 중요한 것은... 이거 쓰는 법을 내가 잘 몰라서 이 방법은 포기했다 -_-.. 그래도 꽤 유명한 방법인 것 같으므로 조금만 찾아보면 적절한 해답을 얻을 수 있을거라고 믿는다.
  2. 직접 쉘스크립트를 짜서 자동으로 붙게 만들기
    이 것이 내가 소개하고자 하는 방법이다.
    먼저, screen의 옵션에 대해 조금 알 필요가 있다.
    • -x : 현재 실행중인 screen에 attach하되, 이미 attach된 screen이라고 해도 동시에 보기 모드로 붙는다.
    • -R : attach가 가능하면 attach를 하고, attach가 불가능하면 새롭게 screen 세션을 만든다.
    이 두 옵션을 동시에 쓰면, screen이 수행되지 않은 상태면 새롭게 screen이 수행되고, 이미 수행중인 screen이 있다면 자동으로 attach된다.
    그리고, screen이 수행중일 때는 기본값으로 TERM 환경변수가 screen이 된다는 점을 이용하면 screen 내에서 쉘이 실행될 때 screen이 또 실행되는 것을 막을 수 있다.
먼저 홈 디렉토리에 있는 .bashrc 파일을 살펴본다. 그리고 맨 마지막에 다음과 같은 내용을 집어넣는다.
if [[ $TERM != "screen" ]]; then
  screen -x -R -q
  exit
fi

위의 명령은 꽤 단순하다. TERM 환경변수가 screen이 아니라면, 즉 screen 내부가 아니라면 screen을 attach시켜서 현재 실행중인 screen에 붙인다. 그리고 이 붙은 screen이 종료되면 자동으로 쉘도 꺼지도록 했다.

이렇게 하면, 언제나 어디서나 접속해도 하나의 터미널을 공유할 수 있고 작업 내용을 볼 수도 있다. 편리하다.

'유용한 어플 > screen' 카테고리의 다른 글

자동으로 screen 켜기  (0) 2009.06.26
screen 소개  (0) 2009.06.17
2009. 6. 25. 23:58
오늘 URP 격월보고서 일로 교수님과 면담을 했다.

혼자 한건 아니고, 조교형과 조원 한명이서 같이 했었다. 면담 자체는 딱히 별 일 없이 잘 돌아왔는데, 옷을 놔두고 온게 기억나서 돌아간 뒤가 문제였다.

아는 사람은 알겠지만, 이번 방학은 대학생대회, 비전트립, 교회수련회, 정기대회, 신구위원 교체 및 신위원 훈련 등을 빼고 나면 세주에서 네주 정도 빈다. 그니까, 긴 긴 10주간의 방학 중 절반 이상을 못 쓴다는 이야기.

학기중에 '예상치 못하게' 바쁜 덕분에 지금까지 내가 한 일은 거의 제로에 가까운 상황이고, (역할분담상 내가 안했으면 딴사람이 대신 못했을거기 때문에 기예도가 아예 제로는 아닌 것이 참 다행) 학기중엔 수업이나 과제 등을 고려하셔서 교수님이 별로 터치를 하지 않으신 것도 사실이다. 학기 초의 그 열의를 생각했을 때 이정도로 안했는데도 크게 별 말을 안하시는걸 보면 확실히 많이 봐주셨다.

그래서, 방학때 징하게 부려먹...는다기보단 일을 시키려고 하셨던 것 같은데, 내가 저렇게 일정이 뻥뻥 뚫린다고 이야기를 한거다.

엔간한 양이었으면 그냥 주의만 주고 앞으로 그러지 말라고 하고 보내셨을거 같은데 내 일정이 저따위다 보니 화가 나신거 같다. 조교형도 말하기를 “이정도였으면 처음에 할 때 할지 말지를 좀 더 고민했어야 했을거 같다”고 했으니, 뭐, 교수님이 받은 쇼크와 열불은 내가 뭐라 할 수 있는 입장이 아니지.

최선을 다 하겠다고 몇 번을 이야기했지만 “그게 되겠냐”고 하시는 교수님 앞에서 아무 말도 못 했다. 난 메신저, 전화, 문자 등으로도 어떻게든 할 수 있을거라고 생각했는데, 그 '어떻게든 한다'에 대해 절대적인 불신임을 보이시니 나야 할 말 없음.

“학과 공부나 플젝, 시험 등은 니가 안하면 너 혼자 책임 지고 끝나는 문제지만 이건 아닌거 알잖아?” 라고 하시는데, 당연 안다. “개인적인 종교 활동에까지 터치할 생각은 없지만 정부 과제라는게 그렇게 쉽게 되는 것도 아니고 일정에 차질을 줄 정도면 안되잖아?” 라고 하시는데.. 그래서 내가 “일정에 문제가 생기지 않게 책임 지고 해내겠다”고 말씀을 드렸지만 결국 신뢰가 안가시는 모양이다.

결국 난 포기할 생각이 없고, 교수님은 내 능력을 믿지 못하시니 계속 평행선이더라. 결국은 그냥 바이바이 하고 일정을 조교형에게 보내기로 하고 끝을 맺었다.

이렇게 한번 면담을 해보니까, 대학원 생활이라는게 어떨지 대충 감이 오는거 같았다. 나는 '윗 사람이 나를 야단칠 때' 제일 스트레스를 많이 받고, 특히 '내 변명 or 대안이 전혀 먹혀들지 않을 때' 제일 상태가 안좋아진다. 이런 식으로 계속 닦이는게 대학원 생활이라면 난 거절하고싶다.

근데, 생각해보니 그나마 교수님이면 resonable 한 경우가 대다수겠지만 회사 가면 안그럴거 아냐...

아... 짜증난다. 무한히 학생이고싶다.

'잡설' 카테고리의 다른 글

돈까스 한뚝배기 하실래예?  (0) 2010.05.07
텍큐 글 복원  (0) 2009.10.05
대학원생과 연구와 교수님  (2) 2009.06.25
종교와 기득권층  (0) 2009.06.22
정의에 대해서  (2) 2009.06.19
정치 참여에 대한 단상  (4) 2009.06.19
  • 2012.08.01 03:21

    씁쓸한 기분은 알겠지만 저런 말을 안 듣고 싶다면 증명된 실력이나 뭔가 보여 줄 수 있을 만한 실적이 있어야죠. 그렇지
    않고서야 교수님이 어찌 학생을 믿겠습니까. 그 또한 사회를 배워나가는 과정입니다. 당신의 "영원히 학생이고 싶다"라는 말은 책임회피에 불과합니다.

    • Favicon of https://blog.gwangyi.kr BlogIcon gwangyi 2012.12.24 22:15 신고

      현실도피 맞아요 ㅎㅎ 벌써 3년전이네요. 저때 되게 지쳐있던 시기라... 그냥 여기저기 치여서 피곤에 쩔은 학생의 푸념이었다고 생각하시면 될거같습니다 ㅎ

2009. 6. 22. 16:56

종교와 기득권층

잡설 2009. 6. 22. 16:56
비록 내가 긴 세월 살지 못하고 22년하고 몇 개월 정도 살았을 뿐이지만, 이 짧은 세월동안 여러 종교들을 보고 그 타락상들을 봤을 때, 난 한 가지 결론을 내릴 수 있었다.

어떤 위대하고 숭고하고 아름다운 종교라 할지라도, 기득권층과 결탁하는 순간, 그 종교는 쓰레기가 된다.

옛날 중세시대때, 정치적인 목적으로 이용당했던 기독교,
제국시대에 식민지화에 앞장섰던 기독교,
중동에서 여성 억압에 앞장서는 이슬람,
카스트 제도를 만든 힌두교,
...

어떤 종교가 되었든, 그 종교에는 일반적으로 '교리'가 있고 '경전'이 있다. 이런거 없이 종교의 형태를 유지할 수 있다면 '대중적' 종교가 될 수 없으니 사회에 큰 영향을 주지 못할 것이다. 그리고 그런 '교리'와 '경전'을 '일반인보다 더 잘 아는' 사람들이 있을 것이고, 일반인들의 삶 중에 그런 교리와 경전을 위한 시간을 따로 내기 힘든 사람들을 위해 '대신 열심히 공부하고 생각해서 핵심을 전해주는' 역할을 앞에서 말한 사람들이 담당하게 될 것이다.

물론 처음에는 위에서 말한 대로 선하게 동작할 것이다. 하지만, 대부분의 '무지한 백성'은 그런 '교사'의 말을 절대적으로 신뢰하게 되고, 적은 거짓말을 섞었을 때 거부반응 없이 받아들이는걸 보게 된다면, 그 거짓말이 의도적이었든 비의도적이었든 간에 교리와 경전이 왜곡되기 시작한다.

이제, 이런 사람들이 '돈맛'을 알게 되면, 끝이다. 사람들은 아무 의심 없이 '시스템'을 유지하기 위해 왜곡된 '교리'와 '경전'을 받아들이고, 진리라고 생각하게 된다. 아주 쉽게 사람들을 세뇌, 조종할 수 있는 기반이 만들어지는거다.

종교는, 특히 기독교는, 절대 기득권의 종교가 되어서는 안된다.

majority가 되면 안된다는 것이 아니다, 내가 말하는 것은, 밑으로부터 시작해서 위로 올라가는 종교여야지, 밑이 떠났는데 위에서 히히덕대는 것은, 이미 타락하기 시작했다는 것과 다름없다.

'잡설' 카테고리의 다른 글

텍큐 글 복원  (0) 2009.10.05
대학원생과 연구와 교수님  (2) 2009.06.25
종교와 기득권층  (0) 2009.06.22
정의에 대해서  (2) 2009.06.19
정치 참여에 대한 단상  (4) 2009.06.19
감성적인 국민들  (0) 2009.05.28
종교
2009. 6. 20. 18:44



급한 일이 생겨서 클럽박스 파일을 찾아야 하는데, 메이저한 사이트는 어느 하나도 제대로 된 링크를 제공해 주지 않기에 -_-... 구글에서 찾다 보니 CBsearch란걸 발견했다.

프리웨어라고 당차게 주장하길래 다운받아 주었더니, 이상한 사이트에 내 개인정보를 팔아야 쓸 수 있도록 한 애드웨어였다 -_- 게다가 개인정보 팔아봐야 인증 안되는거 같기도 하고...

그래서 짜증도 나고, 어차피 파일 하나만 받고 말텐데 하는 생각에 한번 크랙해보았다.

근데 이거 업데이트도 제대로 안됐는지 검색된 결과에 이미 사라진 박스도 많고 공식 사이트를 들어가봐도 제대로 관리되고 있는거 같지 않아서 일종의 VB 어플리케이션 크래킹 예제 정도의 가치가 있을 것 같다.

준비물
이 글에서는 OllyDbg v1.10, HxD를 이용했다.

어떻게 하나?

먼저, CBsearch를 실행시켜서 프로그램 인증->사이트 가입을 통한 인증을 선택해본다.
당연하지만, 인증하기를 누르면 반항한다. 그러면 이 메시지 박스가 호출되는 위치를 찾아내보자.

OllyDbg를 attach 기능을 통해 ClubboxSearch.exe(CBsearch)에 붙인다. 붙인 직후에는 브레이크포인트에 가 있기 때문에, 오른쪽 버튼을 눌러 컨택스트 메뉴를 띄운 후 View → Module 'ClubboxS' 를 선택해서 ClubboxSearch 본 프로그램으로 이동하자. 이동한 후에는 마찬가지로 컨택스트 메뉴를 띄우고 Search For → Intermodular calls를 선택해 ClubboxSearch.exe 프로그램 외의 함수를 호출하는 것들의 목록을 구해보자.
비베에서 MsgBox 함수를 호출할 때는 rtcMsgBox를 호출하니까, 키보드로 rtcMsgBox를 쳐서 이걸 찾는다. 찾았으면 Enter를 쳐서 호출하는 코드를 찾아 rtcMsgBox의 주소를 알아내자. rtcMsgBox의 주소를 알려면 호출하는 함수에서 다시 한번 Enter를 치면 호출되는 함수의 주소로 이동된다.

그 뒤에는 F2를 눌러 rtcMsgBox의 시작부분에 브레이크포인트를 걸고 F9를 눌러 프로그램을 계속 수행시킨다.

그리고 나서 다시 인증하기를 눌러보면, 아까 브레이크포인트를 건 곳에 딱 멈추는 것을 볼 수 있다.

이제, 이게 호출된 위치를 정확히 알아야 하니까 Ctrl+F9를 눌러 Execute till return, 즉 함수가 끝날 때까지 수행을 시킨다. 그러면 이 함수의 수행 결과는 뜬 메시지박스를 닫아야 뜨니까 생겨난 인증실패 창을 없애면 리턴 명령 위에 포인터가 위치해 있는 것을 볼 수 있다.

이제, 한 스텝만 F8로 수행시켜주자. 그러면 이 메시지박스를 호출한 위치를 알 수 있다.

근데 이 근처를 살펴보면, 적절한 코드가 잘 보이질 않는다. 하지만 이 함수가 인증절차를 수행하는 함수라는건 어렴풋이 짐작이 가능하니까, 일단 마찬가지로 Ctrl+F9를 또 눌러보자.

이상하게 이번엔 F8을 눌러도 바로 호출한 곳으로 이동하지 않지만, 당황하지 말고 F8을 몇 번 더 눌러주면 호출한 곳으로 이동한다.

흠... 비주얼 베이직 런타임이다. 그래도 여기서 호출한건 확실히 맞으니까, 호출하는 명령인 CALL EAX에다가 브레이크포인트를 걸어주자.

이제 다시 F9를 눌러준 뒤에, 인증하기 버튼을 다시 눌러보자. 그러면 방금 건 곳에 다시 멈추는 것을 볼 수 있다. 이때는 F8이 아닌 F7을 눌러서 함수 호출 안으로 들어갈 필요가 있다. 그리고 나서 한 칸씩 F8로 수행하면서 조건 점프를 찾아본다. (JNZ나 JE 같은 것들)

하다보면 이런 부분을 찾을 수 있다. 흠... 서울대 학생 or 졸업생 이시구나.

빙고, 조건 점프를 찾았다. 이렇게 하는 중에 가끔 exception이 발생해서 사람 짜증나게 하는데, 처음엔 Shift+F9를 눌러 넘어가주고 그 뒤에 다시 시도할 때는, 보통 함수 수행시 exception이 나기 때문에, CALL 다음에 브레이크포인트를 건 다음 F9로 넘어가는 시도를 하는게 괜찮다.

여기서 EAX를 보면 -1이다. 0이 아니면 점프하는데, 우리는 아직 인증을 받지 않았기 때문에 저거대로 따라가면 아마도 인증실패가 뜰거다. 그럼 저걸 어찌할까 하니, nop명령으로 바꿔 넘어가지 않도록 해보자. 바꾸려면 Space를 친 다음 nop이라고 치면 된다. 다시 올 때를 대비해 브레이크포인트를 걸고 F9로 계속 수행시켜보자.


ㅋ... 성공이다.

이제 검색해보자.
잘 된다ㅋ

자 이제, 이걸 영구히 저렇게 되게끔 만들어보자.

먼저 ClubboxSearch.exe의 시작 주소를 보면, 일반적인 win32 어플과 마찬가지로 00400000인 것을 쉽게 확인할 수 있다. 아까 nop으로 바꿨던 주소가 00577FAE 였으니까, 시작 주소를 뺀 00177FAE가 실제 파일에서의 offset이다.

실행중인 OllyDbg를 끄기 전에, 근처의 명령들의 기계어 코드를 어디에 메모해놓고 끈다. 왜냐하면, 저 주소가 진짜 nop으로 바꿔야할 명령의 주소인지 확인하기 위해서이다. 끄는 이유는 끄지 않으면 편집이 안된다.

85C0             TEST EAX,EAX
90 NOP ;여섯번
C745 FC 05000000 MOVE DWORD PTR SS:[EBP-4], 5

HxD를 열어 ClubboxSearch.exe를 열어보자. 그리고 Ctrl+G(이동)명령을 이용해서 00177FAE로 이동해보자.

위에 메모한 것과 같이 적혀 있는 곳을 발견했다. 아직 수정되기 전이라 JNZ가 그대로 있는 것을 볼 수 있다. 저 6 byte를 90으로 때우자.

그러면 이제 끝이다. CBsearch 지못미.

'크래킹, 크랙미' 카테고리의 다른 글

AD free NateOn  (0) 2010.05.18
COM Object 생성 추적하기, COMTracer  (0) 2009.10.05
DLL injection with CreateRemoteThread()  (0) 2009.08.01
CBsearch Crack  (15) 2009.06.20
abexcrackme2  (0) 2007.02.17
  • 지나가다 2009.07.14 10:41

    이 프로그램 크랙 좀 만들어 주시면 안될까요..
    하드 지워질때마다 인증해야하니 문제네요..

    • Favicon of http://blog.gwangyi.kr BlogIcon gwangyi 2009.07.26 23:07

      제가 적어둔게 전부입니다;; 저거 따라 하시면 크랙 바로 만들어집니다.

  • 없는국번 2009.08.16 13:17

    이거 아직도 되나요? / 어태치 하니까 어태치가 안되는데 안티디버깅 된거 아닌가요? / 좀 갈켜 주세요

    • Favicon of http://blog.gwangyi.kr BlogIcon gwangyi 2009.08.17 15:35

      어태치가 어떻게 안되는지 말씀해주셔야 알 거 같네요;; 적어도 제가 저 글을 쓰는 시점까지는 아무 문제가 없었거든요ㅎ 그리고 비베로 만든거 같던데 웬만큼 하지 않고는 비베로 안티디버거 달기는 좀;; 복잡하죠;

  • 2009.08.23 00:32

    점프하는 곳을 찾긴 찾았는데 님이 가르쳐준 모듈 부분이 아니고 Kernel32 모듈 부분에서 찾네요.. 이 곳이 맞긴 한 것 같은데.. 그럼 안티디버깅 된건가요?

    • Favicon of http://blog.gwangyi.kr BlogIcon gwangyi 2009.08.23 23:37

      아 -_-;; 좀 스킬이 필요한 부분이 있군요.

      스샷을 확대해서 보시면 왼쪽에 주소가 있습니다. 그 주소로 가셔서 직접 수정하시면 됩니다.

      이 프로그램 절대 안티디버거 안달려 있을 겁니다 -_-

      그리고 kernel32쪽은 절대 아니니까 거긴 건드실 필요 없어요ㅎ 설명된 것은 대부분 비슷한 짓을 또 할 때 참고하라는 뜻으로 달아둔거니까요.

  • 2009.08.26 03:58

    네.. 동일한 번지로 가서 수정하니 되네요.. 단, 인증하기를 한번 더 눌러줘야 하는군요.. 저는 수정만 하면 인증하기 안 눌러도 되는줄 알았어요. 0F 85 5B 05 를 찾아도 되네요.. 두 개가 검색되는 것으로 봐서 두 개의 메시지 박스가 있네요(사이트가입과 이벤트 참여 겠죠?)

    그런데 왜 저는 F7로 쫓아가다보면 005로 시작하는 ClubBoxS 모듈의 번지는 안 보이고 7로 시작하는 kernel32와 MSVBVM60 모듈의 번지만 보일까요? 그리고 저는 attach 한 후부터 인증창 버튼을 누르기 위해 어플리케이션이 활성화되지 않아요.. F9를 눌러도. 클럽박스 검색창이 앞으로 안오네요. 정말 궁금해요... 제가 뭘 건너띈 것인지? 알려주실 수 없나요? 재밌는데..

    • Favicon of http://blog.gwangyi.kr BlogIcon gwangyi 2009.08.28 15:11

      혹시 어태치 하신 뒤에 바로 F7 누르기 시작하셨나요? 어태치하면 브레이크포인트를 걸어서 자동으로 거기서 한번 멈추기 때문에 다시 실행을 시켜주셔야합니다; 단축키가 Ctrl+F9였나 했던거 같네요.

  • ㄷㄷㄷ ㅠ 2009.11.18 09:36

    혹시 '클럽서치' 라는 프로그램도 크랙하는 방법좀 알려주실 수 있나요????

    • Favicon of http://blog.gwangyi.kr BlogIcon gwangyi 2009.11.18 23:06

      해 봤으면 알려드리겠지만...;;

      일단 저는 그게 뭐하는 프로그램인지도 모르겠군요;

  • ㄷㄷㄷ ㅠ 2009.11.20 19:42

    클럽서치도 클럽박스 검색 프로그램인데요,
    지금 CBSearch 프로그램 자체에 뭐가 이상이 생겼는지 폴더밖에 검색이 안되서요.... 파일모아라는 프로그램도 크랙을 해서 써봤지만, 서버 업데이트가 안됬는지 이미 존재하지 않는 박스에서 많이 찾더라고요;;;;
    클럽서치도 이제 담당하는 사람이 없어졌는데 이건 아마도 괜찮을거라고 생각해서....... 그런데 이건 어떻게 해야할지모르겠더군요///

  • 행인 2010.04.19 17:53

    뭐 지금도 답변해주실지는 모르겠지만 해주시면 감사하겠습니다.

    F9를 눌러서 찾고 멈추지 않고 게속 Runing 상태가 되는데 왜그런건가요?

    ---------------------------------------------------------
    그리고 나서 다시 인증하기를 눌러보면, 아까 브레이크포인트를 건 곳에 딱 멈추는 것을 볼 수 있다.
    ---------------------------------------------------------
    볼수가 없군요 -ㅅ-;;
    그 다음에 Excute till return 이 활성화 되지 않아요..
    화면 그대로 했는데 말입죠..


    답변 부탁드릴게요

    • Favicon of http://blog.gwangyi.kr BlogIcon gwangyi 2010.04.19 22:34

      F9는 찾는 명령이 아니고 계속해서 수행시키는 명령입니다. 그 전에 rtcMsgBox에 F2로 브레이크포인트를 걸어 주셔야 합니다. 브레이크포인트를 안걸었거나, 틀린데 걸었으면 이런 일이 발생할 수 있죠 -_-;;

  • 왕초보 2010.05.01 03:13

    왕초보입니다. 완전기초도 안되있는...ㅠ

    이런쪽에 관심이 있어서 그런데요 이쪽 공부할려면 어떤걸

    공부해야되나요??

    • Favicon of http://blog.gwangyi.kr BlogIcon gwangyi 2010.05.03 13:11

      먼저 C언어와 WIN32 API에 대해서 어느 정도 파시고 어셈블리어를 배우면 조금 할 수 있게 됩니다.

      근데 제일 중요한건 끈기에요. 일주일 정도는 같은 문제 붙잡고 될때까지 매달릴 수 있어야 실력이 늡니다. 그 뒤에 따라오는게 어셈블리, 컴파일러의 특짐, C언어, API 이런거구요.

2009. 6. 19. 01:25

정의에 대해서

잡설 2009. 6. 19. 01:25
정의. (Definition 말고 Justice)

나는 개인적으로 기독교인이기 때문에, 상대주의보다는 절대주의를 추구하며 모든 정의는 신으로부터 온다고 생각한다.

그리고 그 정의는 성경에 쓰여 있다고 믿고 있고.

전 세계적으로 보면 '보수적 기독교'는 거의 빠짐 없이 '보수적 정치'와 연관되어 있다. 내가 보기엔, 기회의 평등, 시장경제, 자유주의 등을 옹호하는 사람들이 주류로 보인다. 실제 우리나라도 보면, 한기총이나 뉴라이트 등은 한나라당과 정치적 색채가 비슷하며, 빨갱이를 싫어하고, 분배보다는 선택과 집중을 좋아하는 것으로 보인다.

국내 모 교단에서는 이런 표현도 쓴다.
“돈을 많이 번 것은 하나님께서 축복하신 것이고, 돈에 쪼들리는 것은 하나님께서 축복하지 않으셨기 때문이다”
대충 들은거라 확실하지는 않다. 하지만 대략 저런 식으로 이야기하는 교단도 분명 있으며, 이런 재물론에 따르면 부자가 가난한 자를 돕게 하는 것은 신의 뜻을 거스르는 행위나 다름 없다고까지 할 수 있다.

하지만 왜 난, 성경을 읽으면 읽을수록 '분배'의 메시지가 눈에 더 들어오는건지 모르겠다.

부자에 대한, 거의 욕이나 다름 없는 저주는 성경에 자주 나온다. 아, 물론 모든 부자를 지칭하는 것은 아니고 가난한 사람들을 못 본체 하고 억압하는 부자들에 대한 이야기다.
  1. 부자들이여, 잘 들으십시오. 여러분에게 고난이 닥칠 것이니 소리 높여 슬프게 우십시오.
  2. 여러분의 재물은 썩었고, 여러분의 옷은 좀먹었습니다.
  3. 여러분의 금과 은은 녹이 슬었으며, 그 녹이 여러분의 잘못에 대한 증거가 되고 있습니다. 그것이 불같이 여러분의 몸을 갉아먹을 것입니다. 여러분은 세상 마지막 때에 재물을 쌓고 있습니다.
  4. 일꾼들이 들에서 일하나 그들에게 품삯을 주지 않으니, 추수한 곡식 앞에서 그들이 울부짖고 있습니다. 이제 만군의 주님께서 그들의 우는 소리를 들으셨습니다.
  5. 이 땅에서 여러분은 사치스런 생활과 쾌락을 즐겼으며, 마치 도살장에 끌려가기 전의 짐승처럼 자기 배만 채웠습니다.
  6. 죄 없는 사람을 정죄하고 오히려 그를 죽였습니다. 그는 여러분에게 대항하지 않는 자였습니다.  (야고보서 5:1-6, 쉬운성경)
율법도 찾아보면, 밭의 모든 곡식을 추수하지 말고 귀퉁이의 일부를 그대로 남겨두라는 말이 분명 있다. 고아나 과부, 그리고 배고픈 여행객들이 지나가다가 먹을 수 있도록. 분명, 재산권의 행사에 대해 자유를 보장하는 자유주의나 보수적인 경제관과는 좀 다르다.

신약 시대의 교회를 보면 더한다.

믿는 사람들의 무리가 다 한마음과 한 정신으로, 자기 것을 자기 것이라고 말하는 사람이 한 사람도 없이, 자기가 가지고 있는 모든 것을 서로 나누어 썼습니다.(사도행전 4:32, 쉬운성경)

이건 완전 빨갱이다. 공산주의나 다름 없다. 유물론적 가치관이 빠졌을 뿐, 결과적인 모습만 봤을 때는 완전 공산주의가 아닌가.

나는 생각하기를, 올바른 사회는 '분배'가 올바로 이루어지는 사회라고 생각한다. 물론, 인간은 뼛속까지 악하기 때문에 완전한 분배가 이루어지게 되면 어떤 motivation도 없이 축 처져버려 아무것도 안되는 사회가 되어버릴 거라는 것은 뻔하기에-이런 완벽한 분배가 이루어지는 사회는 세상 끝날이 와야 이루어질거다-완전한 분배를 주장하지는 않는다. 하지만, 적어도 '약자'도 '사람'답게 살 수 있는 사회는 되어야 하지 않을까.

2500년 전, 이스라엘과 유다 왕국이 무너질 때 그 멸망을 예언하던 선지자들은, 어찌 보면 이시대의 시민운동가와도 같지 않았을까. 당시의 도덕인 '율법'을 외치면서, '약한 자를 돌아보라' 고 외치고 다녔던 그들의 그 메시지는 지금도 똑같이 적용되는 것 같다.

그런 의미에서, 장로라고 주장하는 이명박 대통령께서는 왜 기독교적 분배 정치를 하지 않으실까 하는 조금의 분노를 동반하는 질문이 머릿속에 떠오른다.

'잡설' 카테고리의 다른 글

대학원생과 연구와 교수님  (2) 2009.06.25
종교와 기득권층  (0) 2009.06.22
정의에 대해서  (2) 2009.06.19
정치 참여에 대한 단상  (4) 2009.06.19
감성적인 국민들  (0) 2009.05.28
공돌이는 대단해! 배너  (0) 2007.10.25
  • Favicon of http://intothereign.tistory.com BlogIcon 人鬪 2009.06.22 17:35

    여기서 기독교 교리의 변질되지 않은 선한 면을 배워서 지금은 편향적인 나의 시선을 바로 잡아야겠다.

2009. 6. 19. 01:00
정치

하면 왜 다들

무슨 똥이라도 만진 것처럼 피하려드는지 모르겠다.

사실 내가 좀 극단적으로 흥분해서 뭐라고 하니까 괜히 마음이 불편해지는 걸 수도 있다,

근데 그러면 그렇게 이야기를 해 줘야하는데 꼭 “난 정치가 싫더라” 라는 식으로 이야기하니까 문제라는거다.

민주주의 사회에 사는 사람으로써 정치에 무관심한건, 정치의 권리를 포기하는건 단지 '마음대로 행할 수 있는 자유'에서 끝나는 것이 아니다.

철 인 통치체제라던가 독재 국가가 아닌 이상에는, 민주 국가라면 '어떤 사람이 원하는 정책'이 실제로 실행되기 위해선 다른 사람들과의 연합을 통해 '어떤 집단이 원하는 정책'으로 만들고, 이 정책을 원하는 집단이 그 집단에 속한 개개인을 통해 '다수의 득표'로 정책을 실현시키도록 되어 있다.

그러면, 내가 내 마음대로 '생각하기 싫어서', '관심이 없어서' 내가 내 투표권을 포기하게 되면 어떻게 될까. 바로 '내가 속한 집단'이 자신에게 유리한 정책을 시행하도록 강제할 수 있는 '힘'인 '득표수'를 줄여버린다. 다시 말해서, '내가 속한 집단' 전체에게 '이익이 되는 정책'을 시행하지 않고 '불이익이 될 수 있는 정책'이 적용되도록 하는데 일조를 하게 된다는거다.

물론, '내가 속한 집단'에게 득이 되는 정책을 강제시킴으로 인해 다른 집단에게 피해를 입히게 될 수도 있다. 하지만, 다른 모든 집단은 자신의 이익을 위해 최선을 다하고 있는데 내가 속한 집단 단 하나만 최선을 다 하지 않는다면 그건 뭔가 잘못된게 아닐까.

그리고, 다른 모든 집단이 '자신의 이익'을 추구하는게 항상 공익에 방해되지 않는 것은 아니다. 일부 소수가 자신의 집권기반을 강화시키고 배를 불리려는 정책을 적용시키려고 할 때, 이 때는 대다수의 국민이 반대해야한다.

그런데 '난 정치 잘 몰라', '난 정치 하면 신물이 올라와' 하는 식으로 투표를 피한다고 쳐 보자. 아마, 이런 사람 대부분은 저기서 말하는 기득권층이 아닐거다. 그러면, 저런 공익을, 정의를 이루지 못하게 하는 정책이 통과되는데 한 몫 하게 되는거다. 과연 이게, 개인 취향에 맡겨둘 수 있는 문제일까.

특히나, 잘난 대학에 다닌다고 하고 있는 젊은이들은 그렇게 정치로부터 도망쳐서는 안된다. 나름 '머리'도 좋은 사람들이다. 그리고, 아직 사회의 톱니바퀴에 들어가지 않은 사람이기에, 더 많은 생각과 더 많은 행동을 할 수 있는 상황에 놓여 있다. 머리가 좀 똑똑하니까, 좀 더 잘 다른 사람들을 설득할 수 있다. 그리고, 개개인은 거의, 어떠한 권력도 쥐고 있지 못하지만, 이 '민주주의'라는 멋진 시스템은 어떤 사람이라도 이 나라를 뒤엎을 수 있는, 하지만 혼자서는 못하는, 그러나 힘을 합치면 가능한, 그런 자그마한 힘을 부여했다. 우리는, 그 80년대를 지나왔다. 학생들이, 자신들이 목도한 불의를 보고 항거하여, 무소불위의 권력을 휘두르던 무려 '정부'를 뒤집어 엎은거다.

요즘 항상 드는 생각이 이거다. 정치에 관심을 왜 가지지 않을까. 지난 10년간은 딱히 정치에 관심 꺼도 살만했지만, 지금은 가질 시기가 아닌가? 이렇게 격렬하게 국민들의 권리를 박살내고 있는 상대에 대해서, 저항할 수 있는 유일한 합법적인 방법을 '난 상관없어' 하며 버리는 것은...

'잡설' 카테고리의 다른 글

종교와 기득권층  (0) 2009.06.22
정의에 대해서  (2) 2009.06.19
정치 참여에 대한 단상  (4) 2009.06.19
감성적인 국민들  (0) 2009.05.28
공돌이는 대단해! 배너  (0) 2007.10.25
여전히 지속성이 없다.  (0) 2007.10.13
  • Favicon of http://intothereign.tistory.com BlogIcon 人鬪 2009.06.22 17:40

    자기 주변의 불의를 용인하는 것은 자기파괴와 다름없다.
    그러나 어떤 사람들은 제 밥그릇조차 챙길 줄 모른다.

    • Favicon of http://blog.gwangyi.kr BlogIcon gwangyi 2009.06.23 00:18

      제 밥그릇도 못챙기게 만든 사회도 싫다 -_-...

  • 지난 10년이 2012.08.01 03:25

    뭐가 좋았다는 겁니까 도대체......

    • Favicon of https://blog.gwangyi.kr BlogIcon gwangyi 2012.12.24 22:13 신고

      이제야 봤네요 ㅎㅎ 아마 학생이었기 때문에 더 별 문제를 못느꼈던거 같습니다. 어느 시대나 살기 팍팍한건 사실이고, 언제나 행복은 상대적인거죠.
      개인적으로는, 이명박 대통령 기간동안 이공계에 대한 대우가 지속적으로 나빠졌고, 그 피해를 조금이나마 입은 입장에서는 그나마 민주당 10년 집권기가 제겐 더 좋은 시대였던 것 같습니다.