본문 바로가기

분류 전체보기

(312)
최소한의 기능 앱 만들기 보호되어 있는 글입니다.
플라스크 환경 구축 1. python 설치 https://www.python.org/ Welcome to Python.org The official home of the Python Programming Language www.python.org 2. 가상 환경 만들기 가상 환경 활성 : source venv/bin/activate 가상 환경 비활성 : deactivate 3. 플라스크 설치 4. Visual Studio Code 설치 https://code.visualstudio.com/ Visual Studio Code - Code Editing. Redefined Visual Studio Code is a code editor redefined and optimized for building and debugging ..
투포인터, 슬라이딩 윈도우 알고리즘 ∙ 투포인터 알고르짐 문제의 유형 1. 포인터 2개가 같은 방향으로 진행하는것 /* N개의 수로 된 수열 A[1], A[2], …, A[N] 이 있다. 이 수열의 i번째 수부터 j번째 수까지의 합 A[i] + A[i+1] + … + A[j-1] + A[j]가 M이 되는 경우의 수를 구하는 프로그램을작성하시오. */ #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N, M; cin >> N >> M; vector numbers (N,0); for (int i = 0; i > numbers[i]; } int start = ..
윈도우 ID 추적과 레디스트리 쿼리 분석 : 레나 챌린지(Level16) - 첫 번째 문제 URLegal.exe 파일을 실행시키고 종료시킬 때 나오는 창이다. 우리가 풀어여할 문제는 저 창이 안 나오게 하는 것이다. (레나 챌린지 15처럼 인라인 패치를 통해서 할 수 도있음) Resource Hacker 툴을 사용하여 리소스 분석을 해보자. Dialog 폴더에 들어가 보면 여러 개의 중 103:1033 이 우리가 원하는 창이 이미지로 보이게 되고, 어떻게 동작이 되는지도 확인을 할 수 있다. 이 창을 띄우기 위해서는 이 아이디를 호출을 해준다. (103번) -> 103은 Hex로 67이다 Ctrl + s을 눌러 명령 어을 찾는다.(push 67은 10진수로 103이다) *ctrl + l 누르면 다음 거를 찾을 수 있음 F8로 하나씩 시작하 보면 CALL이 실행되는 쪽에서 메시..
인라인 패치를 할 때 고려해야 하는 것들 : 레나 챌린지(Level 15) 오늘 문제는 nag를 없애는 문제이다. 프로그램 실행 시작 전, 종료할 때 nag가 출력이 된다. nag가 실행이 될 때, 일시정지를 눌러준다. Call Stack에 가서 하나씩 분석해 보자. eax로 가져온다. inc eax -> eax를 1을 올려준다. mov [446 FF0], eax -> [446FF0] 주소에다가 eax를 저장한다. cmp eax, 2 pop eax -> 다 쓰고 나서 다시 복구를 해줘야 한다. je 42037b -> eax가 2면 windows가 실행이 된다. jmp 004204 BA -> windows가 실행이 안된다 nag가 실행 안된다 새로 작성한 주소로 jmp 437 D65를 해준다. 그다음 나머지는 Nop으로 채워주고 파일을 저장하면 정상적으로 첫 번째 nag와 세 번..
올리디버거를 사용한 인라인 패치 : 레나 챌린지 (Level 14) • 인라인 패치 : 실행이 자연스럽게 이어지도록 만드는 것 기간이 만료되어 프로그램을 실행시킬 수 없다.. 오늘은 인라인패치로 라이센스를 우회할 예정이다. 레지스터를 임의의 값을 입력을 하면 등록 실패 메시지가 출력이 된다.. Call Stack에서 메시지 박스를 호출하는 위치를 확인한다. 메시지 박스를 호출하는 곳으로 가서 브레이크포인트를 걸어준 다음 실행을 시켜보자. 실행시키다 보면 레지스터 길이, 빈 공간에 따라 다른 메시지가 나오지만, 호출되는 곳은 똑같다.. 즉, 함수로 감싸져서 계속 재사용된다는 사실을 알 수가 있다. 메시지 박스 출력호출하는 앞부분에 브레이크 포인트를 걸어서 분석을 해보자. esp 따라가서 이 함수 자체가 어디선가 계속 호출된다는걸 아니까 find references를 통해서..
안티디버깅 Exception과 중요한 API 정보 확인 : 레나 챌린지(Level13) 이번 문제도 레지스터를 등록하는 문제이다. • 정적 분석 visual C++ 6.0에서 컴파일된 프로그램이다. • 분석 시작 현재 프로그램은 안티디버깅 옵션이 걸려있어 올리디버그에서 실행을 시키면 Exception에 걸려서 실행이 안된다. 그렇기 때문에 올리디버그 옵션에서 예외처리를 설정해줘야 한다. 레지스터 등록 실패 메시지가 실행된 상태에서 메인 스레드의 Call Stack,에 가면 호출되어진 것이 스택에 쌓인 걸 볼 수 있다. 스택을 확인해 보자. 해당 위치에서 MessageBoxA를 호출했다는 걸 확인 브레이크 포인트를 걸어 레지스터 실패 메시지가 출력이 되게 다시 실행한다. 그다음 스택을 보면 004174B1으로 반환을 한다. 004174B1으로 이동을 하면 004174 AC에서 MessageB..
난독화의 시작 (델파이 프로그램) : 레나 챌린지 (Level 12) PEiD Tool로 프로그램을 보면 델파이 프로그램이라는 걸 알 수 있다. • 분석 시작 문자열 검색을 통해 레지스터 등록 성공 및 실패 메시지를 찾는다. 이 문구가 제일 키 라이선스를 점검한느 곳 근처에 있을 문구이다. 박스 친 세 군데는 절대로 실행이 밑으로 보내지 않고 있다. 분석을 하다 보면 세 군대는 아무 의미 없는 것이다. 리버싱 방해를 하기 위해 넣음,,,,, 임의의 값으로 레지스터를 등록을 하려고 하면 위 사진과 같이 에러 문구가 출력이 된다. 해당 문구가 나오는 위치를 문자열 검색을 통해 찾은 후, 분기점에 브레이크 포인트를 걸어준다. JNZ에서 JE로 수정을 해준다. 해당 문구가 출력이 되지 않고 프로그램이 동작한다.... 나는 이 문구를 출력해야 하는데,,, 첫 번째 브레이크 포인트 ..