본문 바로가기

모의해킹

(163)
키 생성기(키젠) 만들기 : 레나 챌린지(Level17) • 정적 분석 MASM32는 어셈블리어로 짜진 프로그램인 거 같다. • 분석 시작 임의의 값을 입력을 했을 때, 나오는 메시지이다. 메시지가 출력하는 상태에서 일시정지를 눌러준 다음 콜스택을 확인해 보면 MessageBox가 있는 걸 볼 수 있다. MessageBox에 위치에 가서 어디에서 호출이 되었는지 확인을 위해 Find references > Selected command에 들어간다. 모든 곳에 브레이크 포인트를 걸어주고 다시 실행을 해준다. 브레이크 포인트에 걸리는 걸 확인할 수 있다. 해당 위치에서 조금 올려보면 줄이 묶여있는 애가 keygen이라고 볼 수 있다. 키를 확인하는 루프이다. 브레이크 포인트를 걸고 다시 실행을 시키면 해당 위치에 브레이크가 걸린다. 레지스터를 보면 우리가 넣은 데..
윈도우 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로 수정을 해준다. 해당 문구가 출력이 되지 않고 프로그램이 동작한다.... 나는 이 문구를 출력해야 하는데,,, 첫 번째 브레이크 포인트 ..
파라미터로 라이센스 루틴 추적 : 레나 챌린지 (Level 11) 프로그램을 실행시키면 원하는 그림을 퍼즐로 만들어 게임을 하는 프로그램이다. 원래 있는 그림 말고 새로운 그림을 추가를 하려면 라이선스가 등록이 되어있야 추가를 할 수 있지만, 프로그램을 보면 라이선스를 등록할 수 있는 공간이 존재하지 않는다. • 분석 시작 올리디버거에 프로그램을 올린 다음 문자열 검색을 통해 "For registered users only" 문구를 검색해준다. 해당 분기점에서 브레이크 포인트를 걸어준다. ZFlag가 1이 키 때문에 JE가 점프가 되면서 "For registered users only"가 실행이 되기 때문에 JE를 JNZ로 수정을 한 다음 저장을 해준다. 정상적으로 새로운 이미지를 올릴 수 있다. 이런 방식으로도 가능하지만 계속 라이선스를 검색할 수 있기 때문에 루틴 ..
비주얼베이직(VB) GUI 디컴파일 분석 : 레나 챌린지 (Level 10) • 첫 번째 파일 분석 (Tut.ReverseMe1.exe) ReverseMe 프로그램을 실행시키면 올바른 레지스터 값을 넣어야 하는 문제이다. 디컴파일러 툴을 사용해 분석을 할것이다. Fom1에 들어가 Register me을 누르면 해당 ID값을 확인해 Code에서 일치하는 함수로 이동한다. Register me 주소는 402814, Nag 주소는 402C17이다. 올리디버그 툴을 사용해 두 개의 주소에 브레이크 포인트를 걸어준다. NAG 부분을 바로 리턴으로 수정을 해준다. Nag 버튼을 눌러도 반응을 하지 않는다. F8로 한 단계씩 실행시키다 보면 스택에 내가 입력한 1234랑 I'mlena151이랑 비교를 하는 거 같다. 해당 문자를 입력하면 레즈스터가 등록이 된다. • 두 번째 파일 분석 (CC..