문제가 주어졌다.. 아이콘이 귀엽다 문제에서 알려준 것처럼 실행해봤더니 잘 실행됐다. 비밀번호를 알아내야 하는 것 같다. 다운 받은 두개의 파일을 아이다로 까서 분석했다. 의심가는 부분을 찾긴 했는데 대회 기간 내에 다 풀지 못했다 쩝 더 공부 해야지 -- 대회가 종료되고 다른 외국 분의 풀이를 참고해서 풀어보았다. Memory Leak을 찾아주는 툴인 valgrind 를 사용해서 익스코드를 작성한다. import subprocess flag = "uiuctf{" # flag 형식 baseline = 0 for j in range(64): if flag[-1] == "}": # 마지막 문자가 '}'인 경우 루프 종료 print(flag) break l = len(flag) for i in range(0x..
버튼만 누르다가 마우스를 휙휙 움직였더니 이렇게 선이 그려졌다. 근데 프로그램 크기가 늘어나지 않는 것을 보아 크기와 관련이 있을 것 같다는 생각이 들었다. 우롱.. 평소처럼 가장 먼저 문자열을 확인했다. correct 부분이 없는 것을 보아 버튼을 눌러서 플래그가 나오는 것은 아닌 것 같다. 내부 함수들을 확인해보자! 메인 함수에서 호출되는 하위 함수들을 살펴보았더니 비트맵 이미지를 발견할 수 있었다. 버튼을 누르면 준비된 비트맵 이미지가 뜨는건가? 싶다. 왼쪽 분기문에서 비트맵 이미지를 만들고, 오른쪽 분기문에서 해당 비트맵에 대한 정보를 담고 있는 것 같다. 두번 째 분기에서 비트맵 헤더와 리소스를 가져오는 것이 눈에 띈다. 비트맵 이미지가 깨져서 실행되지 않는것인가? 두번째 분기문을 거치고 다른 ..
패커 (packer) : PE 파일을 실행 가능한 형태로 파일을 압축시켜주는 프로그램으로 압축과 동시에 보호(anti-debugging, encryption 등) 기능을 포함하고 있으면 프로텍터 (protector)라고 부르고 단순히 파일의 사이즈만 줄여준다면 그냥 패커(UPX, Aspack)라고 부른다. 프로텍터는 리버싱으로부터 보호하기 위한 것으로 압축 해제 기능뿐만 아니라 안티 리버싱 기법이 적용된 것을 말하며 기법으로는 안티 디버깅 (anti-debugging), 가상 머신 탐지 (anti-vm), 코드 난독화 (code obfuscating), 다형성 코드(polymorphic code), 더미 코드 (garbage code), 디버거 탐지 (debugger detection) 등의 기법이 있다..
DLL 동적 링크 라이브러리 다른 프로그램에서 사용할 수 있는 함수, 클래스, 변수 등의 코드와 데이터를 포함하는 라이브러리 파일이다. -> 다른 프로그램에서 이용할 수 있는 함수들을 모아둔 파일 DLL 파일은 실행 파일에서 독립적으로 로드되고 메모리에 상주하며, 프로그램에서 필요할 때마다 호출된다. 이렇게 하면 여러 프로그램에서 동일한 코드를 공유하여 메모리를 절약하고 코드 유지 보수를 편리하게 할 수 있다. Win32 API 가 대표적인 Library 이며, 그 중에서도 kernel32.dll 파일이 가장 대표적인 Library 파일이라고 할 수 있다. 장점 프로그램 개발을 단순화 및 실행 파일 크기 감소 -> 메모리 절약 모듈식 아키텍처 활용 -> 모듈식 프로그램을 효율적으로 개발 가능 손쉬운 배포..