전체 글 (205)
아마게돈(Armageddon)의 데이터 파일은 헤더 파일인 Armageddon.HED와 본체 파일인 Armageddon.MFP로 나뉘어 있습니다. HED 파일의 구조를 위 사진을 통해 설명하자면, 맨 앞의 C20F 0000은 압축된 파일의 개수를 나타내며 그 뒤부터는 0x48byte마다 파일의 헤더를 나타냅니다. 이러한 파일의 헤더에서는 맨 앞의 0x04byte는 파일의 오프셋을 나타내고 맨 뒤의 0x04byte는 파일의 사이즈를 나타냅니다. 원래 초기 버전의 아마게돈은 파일이 전부 노출되어 있었지만, 업데이트하면서 HED와 MFP 파일로 아카이브 방식으로 따로 저장해둔 것으로 보입니다.
멀티플레이는 패킷과 패킷과의 통신입니다. 이게 무슨 말이냐면, 실제 상대방 컴퓨터에서 행해지는 모든 행동이 내 컴퓨터로 들어오는 것이 아니라는 말이죠. 그 행동 중에 일부만 캡쳐하여 패킷으로 보내게 하는 것이 멀티플레이 프로그래밍의 역할입니다. 위 사진은 영화 '새벽의 저주' 의 한 장면입니다. 좀비가 지상을 점령하고, 살아남은 옥상에서의 생존자가 맞은편 옥상의 생존자와 체스를 하는 장면인데요. 상대방은 퀸을 B2 구역으로 옮기라고 지시하고 있습니다. 실제 멀티플레이도 이런 하나의 '메시지' 에 의해 이루어집니다. 상대방 체스판을 볼 수는 없지만, 상대방의 메시지는 들을 수가 있는 것이죠. 위 사진에서 Q와 B2는 변수의 전달이라고 볼 수 있습니다만, -> 는 '이동'하라는 명령을 의미합니다. 명령은 패..
자료형에는 일반적인 자료형과 unsigned 자료형이 있습니다. 둘의 차이점은 무엇일까요? 이것은 자료형의 범위에 대해 살펴보면 알 수가 있습니다. short 00000000 00000000 short 는 16비트, 즉 2바이트를 차지합니다. 그렇다면 2^16을 하여 65536의 범위를 가져야 합니다. 그런데 실제로는 -32768~32767 까지의 숫자밖에는 가지지 못합니다. 왜냐하면 일반적인 자료형에는 '음수' 라는 것이 포함되어 있기 때문이죠. (-32768~0~32767) 그렇다면, 어떻게 해야 양수만으로 된 65536 의 범위를 가질 수 있을까요? unsigned short 00000000 00000000 그리하여 만들어진 것이 unsigned 자료형입니다. 'unsigned + 자료형'을 사용한..
구분 컴파일러 인터프리터 번역 단위 전체 행(줄) 목적 프로그램 생성함 생성하지 않음 실행 속도 빠름 느림 번역 속도 느림 빠름 관련 언어 FORTRAN, COBOL, C, ALGOL 등 BASIC, LISP, APL, SNOBOL 등 컴파일러는 문장단위로 목적프로그램으로 번역한 뒤, 링킹 작업을 통해 기계어 프로그램을 만든다. 기계어이기 때문에 속도는 빠른 편이다. 인터프리터는 라인단위로 번역하는 프로그램을 만든다. 프로그램을 실행하면서 직접 번역하므로 속도는 빠르지 않은 편이지만, 링킹 작업을 거치지 않아도 되고 프로그램에 대한 변화에 반응이 빠르다. 어찌 보면 언터프리터는 매력이 없어 보이지만, 프로그램을 기계어로 만들지 않고 한 라인 한 라인을 번역하면서 코드를 실행시킵니다. 이 작업은 번역 도중..
코딩 스타일 코딩 스타일(Coding Style)이란 코드를 작성하는 방식에 대한 개인적인 기호라는 뜻이다. C/C++는 프리 포맷을 지원하며 코드의 형식에 대한 문법적인 제약이 없으므로 마음대로 작성할 수 있다. 개발자는 개성을 가진 인간이기 때문에 누가 작성하는가에 따라 코드의 모양이 조금씩은 달라질 것이다. 코드의 모양이야 어떻든 간에 컴파일러가 코드를 해석하기에 애매하지만 않으면 컴파일하는 데는 아무런 문제가 없다. 그러나 똑같은 내용의 소스라도 사람이 읽기 쉽고 구문 파악이 용이해야 이후 코드를 수정하기 편리하고 효율적으로 유지, 보수할 수 있다. 뿐만 아니라 소스의 구조가 잘 보이면 실수할 가능성이 낮고 골치 아픈 버그의 위험을 조금이라도 줄일 수 있다. 컴파일러는 기계이므로 스타일을 무시하지..
다음과 같은 프로그램을 짰다고 했을 때, 제작자는 이 프로그램을 수정하지 못할 것으로 생각할 것입니다. 그러나 우리는 리버싱을 통해 간단히 저 10 이라는 숫자를 변경할 수 있습니다. 일단 이렇게 컴파일된 이름없음1.exe 를 틀어봅시다. 그리고 막 스크롤을 돌리다 보면 printf. 이렇게 익숙한 함수의 이름이 보일 것입니다. 그리고 아까 C++ 로 제작한 소스의 내용이 보입니다. (system 함수 등) 주소를 찾았습니다. 여기서 잠깐. 리버싱에서 사용되는 언어인 mov, call 등을 어셈블리어라고 부르는데, 여기서는 함수호출방식이 역순입니다. 즉. printf("int number : %d\n", var_int); 이런 식으로 소스를 짰을 때에, var_int "int number : %d\n" ..
이 리버싱 강좌에서는 올리디버거 v1.10 버전을 사용합니다. 올리디버거 다운로드: http://o.playgm.co.kr/153
아트록스의 PAK 파일구조를 그림으로 제시하자면 대충 위 그림과 같습니다. 'Joy Max File Manager!'는 아트록스 파일인지 아닌지를 판별하는 역할을 하며 크기는 0x203으로 추측됩니다. Directory header 부분은(0x204~0x7D1FF) 특정 오프셋을 통하여 그다음 파일헤더 가 어느 위치에 속하는지를 구할 수 있게 도와줍니다. File header에는 파일과 헤더가 공존합니다. 파일의 헤더가 선 제시된 후 파일이 나오고 다음에 또 파일의 헤더와 파일이 제시됩니다. 이처럼 PAK는 마치 디스크의 파일 시스템처럼 체계적인 구조를 지니고 있습니다. 판별자 부분 중간에 나타나는 00E8 0300은 무엇을 하는 역할인지 아직 확실히 연구되지 않았습니다. 파일의 크기도 아니고 PAK의 ..
임진록 2+: 조선의 반격(Seven Years War 2: Chosun's Counterattack)의 노시디 크랙입니다. (v1.100 버전만 적용 가능합니다.) 임진록 폴더에 넣어주시면 됩니다. 제작자는 http://o.playgm.co.kr/ 입니다.
게임메이커로 간편하게 멀티게임이나 온라인게임을 제작할 수 있게 하는 스크립트입니다. 이 스크립트에는 문제점이 많이 있는데, 이것을 만들 당시에는 이 스크립트에 어떤 문제점이 있는지 전혀 모르고 있었습니다. 한마디로, 이 스크립트는 39DLL 을 잘 몰랐던 저의 무지에 의해 만들어진 스크립트라고 할 수가 있습니다. 문제점이 뭐냐면, 패킷을 많이 보내버리면 패킷이 깨져서 게임상으로 들어옵니다. 그것을 방지하는 코드를 짰어야 했는데, v4.0.7 버전까지 가고도 이 내용을 전혀 모르고 있었습니다. 그러면 이것을 수정해야 하는데, 이 작품 뒤로는 FN Simple Scripts 를 제작했기 때문에 39DLL 간편 스크립트에 대한 지원이 끊겼습니다. 비록 이런 문제점이 있을지라도, 저의 역사적인 스크립트인 만큼 ..