본문 바로가기
반응형

Study/Reversing24

[리버싱] AND, TEST, CMP, SUB 차이 AND 비트연산을 수행한다. Operand의 값들을 2진수로 바꾸어 비트연산을 통해 값이 참의 값만을 가지고 온다. SUB 마이너스 기능을 수행한다. SUB a1, a2 형식이면 a1의 값을 a2만큼 감소한 후 결과값을 a1에 저장. TEST 첫번째 Operand와 두번째 Operand를 AND 시킨다. 이 연산의 결과는 ZF에만 영향을 미치고 Operand에 영향을 미치지 않고 버려진다. 두 Operand가 모두 0인지 아닌지 판단 가능. CMP 첫번째 Operand와 두번째 Operand를 뺀다. 이 연산의 결과는 ZF에만 영향을 미치고 Operand에 영향을 미치지 않고 버려진다. 두 Operand가 같은지 판단 가능. 2017. 8. 24.
[리버싱] MOV, LEA 두 명령을 비교해보자!! (1) mov eax, dword ptr SS:[ebp-4] ebp레지스터에서 4를 뺀 값을 주소로 하는 스택 세그먼트에서 4바이트 만큼 참조한 값을 eax에 넣는다. lea eax, dword ptr SS:[ebp-4] ebp레지스터에서 4를 뺀 값을 주소로 하는 스택 세그먼트에서 4바이트 만큼 참조한 값의 주소를 eax에 넣는다. (2) mov eax, dword ptr DS:[eax] eax레지스터를 주소로 하는 데이터 세그먼트에서 참조한 4바이트의 값을 eax에 넣는다. lea eax, dword ptr SS:[esp-40] esp레지스터에서 40을 뺀 값을 eax에 넣는다. 2017. 8. 24.
[리버싱] CD.exe 문제풀기 문제를 풀어보자. 'HD를 CD-Rom으로 인식하게 하라'가 문제이다. 올리디버거로 분석해보자. 생긴건 이러하다. Code Window만 보면 주석을 보면 MessageBoxA, GetDriveTypeA와 같은 API가 있다. MessageBoxA는 메시지박스를 띄우는 API이고, GetDriveTypeA는 드라이브 타입이 어떤 타입인지 확인하는 API이다. 한줄씩 분석하다보면 ESI레지스터와 EAX레지스터의 값이 바뀌는 것을 볼 수 있다. EAX레지스터는 GetDriveTypeA가 실행되면 값이 3이 되는 것을 볼 수 있다. ESI는 증가하고 EAX는 값소하다가 401024를 보면 서로 비교를 한다. 비교 후, 같으면 JE 명령어로 인해 CD.0040103D로 가게되고 아니면 계속 진행 된다. 문제 해.. 2017. 8. 24.
[리버싱] API에 대해 알아보자 API(Application Programming Interface)란? 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. 리버싱 때 유용한 API 파일 생성하거나 열기(Open)32bit : CreateFileAwide : CreateFileW 파일 입출력(Read&Write)ReadFile : 읽기WriteFile : 쓰기 파일 접근(Access)SetFilePointer 시스템 디렉터리를 얻어오는 함수32bit : GetSystemDirectoryAwide : GetSystemDirectoryW .ini 파일과 관련된 함수32bit : GetPrivateProfileStringA, GetPrivateProfileIntA, .. 2017. 8. 24.
[리버싱] hello world 문자열 패치 hello world 문자열 패치 hello world가 출력되는 소스이다. 이 프로그램을 리버싱 하여 다른 문자가 출력되게 해보자!! 우선 printf나 hello world 문자열을 찾으면 된다. hello wolrd가 담겨있는 404000을 찾아보자 주소와 아스키코드가 보여지는 Dump Window에 가서 ctrl + G를 하여 404000 주소를 입력한다. 아스키 코드를 바꿔서 hello man을 만들어보자. 이렇게 바꿔주면~~ hello man으로 바뀐 것을 볼 수 있다. Dump window창에서 바꾼 문자열을 드래그 하고 Copy to executable file을 누르고 save file을 하면 패치가 된다. 끝 2017. 8. 24.
[리버싱] Break Point에 대해 알아보자 Break Point(브레이크 포인트)란? 프로그램을 실행하는 도중에 유저가 필요한 시점에서 프로그램을 일시정지 시키는 역할. 디버깅 기법 중 하나. 소프트웨어 브레이크 포인트 명령을 실행하는 CPU를 일시 중지, 한 바이트 명령어를 사용해 디버깅 대상 프로세스의 실행을 중지 보통 어플리케이션을 디버깅할 때 사용되는 브레이크 포인트, 일반적 코드 : 0xCC, INT 3 동작방법 1. 현재 주소의 opcode를 뽑아서 브레이크 포인터 테이블에 저장 2. opcode를 0xCC로 교체 3. 명령어 실행 4. 원래의 opcode로 돌려놓음 종류 - 일회성 브레이크 포인트 : 브레이크 포인트 리스트에 정보가 들어가고 브레이크가 수행되고 나면 리스트에서 정보가 제거된다. - 지속적 브레이크 포인트 : 리스트에 .. 2017. 8. 24.
반응형