** 제대로 된 풀이방법이 아님. 나중에 다시 업데이트 할 예정. 메뉴얼 패킹되어 있는 프로그램이며, OEP 를 찾는 문제임. (Object Entry Point)흔히 이러한 메뉴얼 패킹이 되어 있는 프로그램의 경우, 복호화 루틴에서 마지막 부분에 JMP Instruction 으로 프로그램의 OEP로 프로그램의흐름이 이동하도록 되어있는 경우가 많다. 필자의 경우에는, 복호화 루틴이 끝나고 0x0040A1FB 에서 jmp loc_401150 Instruction 이 실행된 이후, 복호화 작업이 끝난 이후 변경된 Instruction 들을 볼 수 있는데,일반적인 함수 프롤로그 코드들을 이용해, 프로그램의 OEP 임을 추측해 볼 수 있었다. 다만, 해당 코드가 실행되지는 못하고 "Insturction coul..
** 분석 중 문제 함수가 지역 변수 접근에 EBP 를 사용하지 않았음. (ESP 를 대신 사용함.)Immunity Debugger 에서 LOCAL.n Prefix 를 사용하지 못함. IDA 를 이용해 스택 주소를 확인함.- ESP >> sub_401080 Call 명령어 실행 후 ret addr의 위치를 기준으로 함. 1. 프로그램 실행 시 문자열을 입력할 수 있는 창이 뜸.아무거나 입력하고 "확인"을 누르면, "Incorrect Password" 오류 메세지박스를 출력함. 2. 메세지박스가 뜨는 코드의 주소를 확인한다.IDA > String Windows 에서 해당 문자열을 확인.Xref 을 통해 문자열을 참조하는 코드를 찾는다. {0x0040113C}# WinMain 에서 DialogProc 콜백 ..
세그먼트 레지스터 ! Windows / Linux 에서 각각 사용 용도가 다른 것 같음. 나중에 다시 자세히 정리.! 세그먼트 레지스터는 과거 286 ~ 80386 시스템에서 사용되었으며, 현재는 거의 사용되지 않음.! In Real mode(??) -> Boundary(기준값) + Offset(세그먼트 레지스터 - 메모리 주소 시작과의 차이)로 액세스함. 세그먼트란?세그먼트란, 프로그램에 정의된 특정 영역으로, 코드, 데이터, 그리고 스택으로 알려져 있는 것을 포함한다.한 세그먼트는 패러그래프 경계(paragraph boundary), 즉 16(hex 기준)으로 나누어지는 위치에서 시작한다.세그먼트는 메모리의 거의 어느 곳이나 위치할 수 있고, 실제 모드에서 최대64kb(in x86)의 크기를 가질 수..