목록Reversing (7)
개발세발보안중
Wrong 문자열을 찾아 bp를 걸었다 *JNZ(Jump if Not Zero) DL과 BL을 비교하여 같지 않다면 점프를 하는 것이다 같지 않으면 004013CD로 점프한다. INC 연산자로 EDI와 EAX 각각 1씩 증가시킨다. Wrong으로 가지 않기 위해서 DL과 BL의 값이 같아져야한다!! 픽셀을 하나하나 비교하면서 모든 픽셀이 일치하면 문제가 해결되는 것. 정답!
비주얼 베이식 언어로 개발되었고, 따로 패킹이 되어있지 않다. MP3 플레이어가 1분으로 제한되어 있고 1분 이상 재생할 수 있도록 check-routine을 우회해야한다. 시작하자마자 dll파일로 들어가고, 들어가고 나면 프로그램이 실행된다. Search for all intermodular calls로 함수를 살펴보니 rtcMsgBox가 4번 호출 된 것을 알 수 있었고 모두 breakpoint를 걸어주었다. 4개의 함수 중 어떤 함수가 1분 제한 메시지를 띄우는 것인지 알아내기 위해 breakpoint를 건 것! 문제풀이를 위해 유튜브 오디오 보관함에서 오프라인 저장을 함 .. Open을 해서 경로를 찾으면 코드가 실행되어 분석이 불가해짐 :( 경로를 따로 복붙하여 재생하고 다시 1분 기다렸다. B..
정적 분석 (Static Analysis) : 외적인 관찰만을 통해 정보를 알아내는 것, 프로그램을 실행시키지 않고 분석하는 방법 장점) 1. 전체구조를 파악하기 쉬움 어떤 함수로 구성됐는가? 함수들은 서로 어떤 호출 관계를 갖는가? 어떤 API를 사용하는가? 어떤 문자열을 포함하는가? ~를 알 수 있다. 2. 분석 환경의 제약에서 자유롭다 3. 바이러스와 같은 악성 프로그램의 위협으로부터 안전하다 단점) 1. 난독화가 적용되면 분석이 어려워짐 2. 다양한 동적 요소를 고려하기 어려움 동적 분석 (Dynamic Analysis) : 실행을 통해 동작을 분석하는 것 장점) 1. 코드를 자세히 분석해보지 않고도 프로그램의 개략적인 동작을 파악할 수 있음 단점) 1. 분석 환경을 구축하기 어려울 수 있음 2...
디스어셈블: 어셈블의 역과정, 바이너리를 어셈블리어로 번역하는 과정 기계어(Binary Code) -> Assembly Code -> Source Code 디컴파일: 바이너리를 고급 언어로 번역하는 과정 > 컴파일 과정에서 코드 中 변수나 함수 이름은 전부 사라지므로, 일반적으로 바이너리 소스코드와 동일한 코드를 생성하지 못함. > 디스어셈블러를 사용하는 것보다 높은 효율
기계어 : 컴퓨터에게 명령을 내리기 위한 컴퓨터 언어, 0과 1로 이루어져 있음 어셈블리어: 사람이 이해하기 쉬운 컴퓨터 언어 어셈블러: 어셈블리어를 기계어로 번역해줌 ==============저급 언어=============================== 컴파일러: C, C++, Go, Rust 등 사람이 이해하기 더욱 쉬운 언어를 기계어로 번역해줌 C,C++,Gp.Rust=======고급언어======== 프로그램과 컴파일 프로그램은 연산 장치가 수행해야 하는 동작을 정의한 일종의 문서이다. 프로그램을 연산 장치에 전달하면, CPU는 적혀있는 명령들을 처리하여 프로그래머가 의도한 동작을 수행 Computer = programmable 연산 장치, 계산기 = non-programmable 연산 장치 ..