ida pro 예제

정적 검사를 통해 암호를 추출할 수 있었습니다. 우리는 명령 줄에서 crackMe를 실행하고 “ericroolz”를 입력하여 테스트 할 수 있습니다 우리는 “올바른 암호”메시지를 받아야합니다. 이것이 이 예제를 무효화하는 한 가지 방법입니다. 그러나 암호를 보거나 난독 화되거나 암호화되었거나 수천 줄의 코드에 묻혀 있다고 가정해 보십시오. 모든 손실되지 않습니다, 우리는이 중요한 결정 지점에 단계로 IDA의 디버거를 사용할 수 있습니다 : 배열은 서로 다른 색상이며, 단색 또는 파선 될 수 있습니다. 실선은 무조건 점프를 나타내고 파선은 조건부 점프를 나타냅니다. 이 예제에서는 해당 주소에 있는 명령어가 무조건 명령 jmp를 사용하기 때문에 빨간색 선이 단색입니다. __ImageBase를 클릭하면 여러 단어입니다. IDA는 프로그램 헤더를 우리의 경우 잘못된 배열로 표현했습니다. 배열 (단축키 U)을 정의하지 않고 포인터 (단축 키 Esc)로 돌아가포인터를 다시 따릅니다. 이번에는 함수를 포함해야하는 주소 0x400130에서 끝날 것입니다. 0x400169의 명령어가 0x400130을 간접적으로 호출하기 때문에 우리는 확신합니다.

현재 주소에 함수가 있어야 한다는 것을 IDA에 알리기 위해 P(프로시저 또는 함수 만들기)를 누릅니다. 이 기능은 이제 화면에 있는 동안, 우리는 그것의 절반만! 그 프로그램을 작성한 사람이 그것을 난독화하고 함수를 여러 조각으로 분리하기를 원했던 것 같습니다. IDA는 이제 이러한 조각된 함수를 처리하는 방법을 알고 화면에 다른 기능 부분에 대한 정보를 표시합니다. 한 페이지에 전체 함수를 두는 것이 좋을 것입니다. 우리를 도울 수있는 특별한 명령이 있습니다 : IDA에서 함수의 흐름 차트를 생성하는 명령은 단축키 F12입니다. 이 명령은 함수의 모든 조각이 화면에 있기 때문에 우리와 같은 조각된 함수에 특히 흥미롭습니다: 주요 함수의 흐름 차트를 표시하는 것이 흥미로워질 수 있습니다(매우 긴 함수, 스크롤 유지!): 흐름을 한눈에 볼 수 있습니다. 차트는 “ret”명령 (0x4001FA)에서 함수에서 하나의 출구가 있음을 보여줍니다. 우리는 거기에 중단점을 넣어 프로그램을 실행할 수 있습니다. 이제 컴퓨터에서 신뢰할 수 없는 코드를 실행하는 것이 좋지 않다는 것을 반복해 보겠습니다. 예를 들어 IDA가 제공하는 원격 디버깅 시설을 사용하는 것과 같은 테스트를 위해 별도의 “샌드박스” 기계를 사용하는 것이 훨씬 좋습니다. 따라서 IDA는 디버거에서 새 파일이 시작될 때 경고를 표시합니다. 중단점은 프로그램 헤더에 있고 프로그램 헤더는 시스템에서 보호되는 쓰기이므로 일반 소프트웨어 중단점을 사용할 수 없습니다.

먼저 F2를 눌러 중단점을 만든 다음 마우스 오른쪽 단추를 클릭하고 “중단점 편집”을 선택하여 “실행” 이벤트의 하드웨어 중단점으로 변경합니다. 중단점에 도달하면 프로그램이 `MEW` 세그먼트로 압축 해제됩니다. 우리는 거기에 점프하고 모든 것을 코드로 변환합니다 (이 작업을 수행하는 가장 빠른 방법은 중단점에서 F7을 누르는 것입니다). 이제 우리는 아주 좋은 목록을 가지고 있지만 한 가지 주요 문제가 있습니다 : 디버깅 세션을 중지하자마자 목록이 사라집니다. 그 이유는 물론 목록에 메모리 콘텐츠가 표시되고 프로세스가 중지될 때 메모리가 더 이상 존재하지 않게 되기 때문입니다.