2026/04 5

[리버싱/프로젝트] 지뢰 찾기 게임 분석 1

리버싱 프로젝트로, 지뢰 찾기 게임을 분석하고, 가능하다면 새로운 기능을 넣어 패치까지 해 보기로 했다.인터넷에서 위와 같은 실행 파일을 다운로드받아 사용했다. IDA에서 해당 파일을 디컴파일했더니 이런 의사 코드가 나왔다.전체 코드가 101줄밖에 안 돼서 '역시 간단한 게임이라서 코드도 진짜 간단하구나' 생각했는데, 자세히 보니까 함수 이름이 start()였다. 이건 그냥 게임을 시작하는 함수고, 진짜 게임은 sub_10021F0() 함수에 있다고 한다.95번째 줄에 있는 함수다. 그 전까지는 실행 파일 시작을 위해서 세팅하는 코드고, 95번째 라인에서 '진짜 게임' 함수를 불러서 리턴값을 반환받고 게임을 끝내는 것이다. 함수 이름이 sub_10021F0()면 계속 찾기 힘들 것 같아서, 왼쪽 func..

카테고리 없음 2026.04.09

[워게임/웹 해킹] webhacking.kr old-17, old-10

https://webhacking.kr/challenge/js-4/ Challenge 17 webhacking.kr 처음 문제에 들어가니까 까만 화면에 입력을 할 수 있는 칸만 떴다. 수상하게 배경이 검정색이라서 개발자 도구 '요소'에 들어가서 html 코드에서 배경 색깔을 흰색으로 바꿔 보았다. 그런데 새로운 게 아무것도 나타나지 않았다. 일단 저 unlock값을 계산해야 할 것 같아서, 파이썬을 켜서 계산했다.그랬더니 소숫점이 섞인 값이 나왔다. 그런데 갑자기 '/' 이 기호가 파이썬에서만 일반적인 나눗셈(정수/정수=소수)이고, 보통 C 언어에서는 정수/정수=정수 값으로 나오지 않나? 라는 생각이 들었다. 그래서 C 코드로도 계산을 해 보았다. C 코드에서 나온 결과인 7809497이랑 파이썬 코드에..

카테고리 없음 2026.04.08

[실전형사이버훈련장/리버싱] 학습 내용 정리 2

13. CPU의 레지스터와 주요 명령어 - IA32 주요 레지스터 세트프로세서 레지스터(레지스터): CPU 내에 존재하는 작은 크기의 저장 공간.CPU 내부에 있으므로 HDD나 SSD와 같은 주기억장치에 비해 빠른 접근 가능.프로그램이 실행될 때 필요한 다양한 정보들(메모리 주소, 데이터 등)을 저장.*Intel 32-bit 아키텍처에서 사용되는 주요 레지스터 세트(E=Extended, 16-bit 아키텍처에서 32-bit로 넘어오면서 붙은 것)범용 레지스터 (General-purpose register): 산술/논리 연산에 사용되는 피연산자 정보, 주소 계산을 위한 피연산자 정보, 메모리 포인터 정보 등 저장.EAX: 윈도우 함수의 호출 결과값 or 산술/논리 연산 수행 결과값 저장.ECX: 카운터 레..

카테고리 없음 2026.04.02

[실전형사이버훈련장/리버싱] 학습 내용 정리 1

01. 윈도우 실행 파일의 생성 및 실행 과정폰노이만 아키텍처 - 실행 파일은 평소에는 스토리지에 존재, 실행 시 메모리에 로드(매핑), CPU에 의해 코드 실행소스 코드 파일(a.cpp, HLL)--compile--> 오브젝트 파일(a.obj, 기계어) --linking--> 실행 파일(ab.exe) 순서대로 생성실행 파일 실행시키면, ntdll.dll 모듈에 정의되어 있는 로더 함수들이 실행 파일 콘텐츠들을 메모리에 매핑시킴운영 체제는 메모리 '페이지' 단위로 프로텍션(실행, 쓰기, 읽기 권한) 부여실행 파일이 메모리에 매핑된 후, 필요한 dll을 추가로 메모리상에 매핑한 후 API 주소값 조사 -> 필요한 함수 호출 가능이후 실행 파일은 메모리상의 DLL 파일 내에 정의 된 API 호출, 반환값 참..

카테고리 없음 2026.04.02

[워게임/리버싱] Happy New Year! 풀이

https://dreamhack.io/wargame/challenges/2650 로그인 | Dreamhack최대 52만원 지원금 받고 진짜 해커로 레벨업 하세요!dreamhack.io1단계 리버싱 문제를 풀었다.IDA에서 연 뒤에 F5를 눌러서 디컴파일 했더니 이런 코드가 나왔다.scanf로 59글자짜리 문자열 s를 입력받은 후에, 제일 처음 if문이 s의 길이가 59가 맞는지 확인하는 것이다.따라서 s는 59글자여야 한다.그 다음 strcpy로 dest에 s를 복사한다.다음 반복문이 나오고 나서 dest랑 "Please~problem" 문자열이랑 비교하는 조건문이 나온다. dest[i] ^= *( (_BYTE *)v5 +i ); 따라서 dest[0]부터 dest[58]에 대하여 특정 연산을 한 결과가 ..

카테고리 없음 2026.04.01