'Security/리버싱' 카테고리의 글 목록 :: YPrefer's Develop&Security

코드패치 하는 방법은 여러가지가 있는데, IDA를 통해서 하는 방법을 알아보자.

IDA Option을 아래와 같이 설정해 준다.

중요한 부분이 Number of opcode bytes 인데 이것을 6byte로 해주면 OPCODE에 해당하는 HEX값을 확인할 수 있다.

 

 

위와 같이 옵션값을 설정해주면 아래처럼 HEX값을 확인 할수있는데,

오른쪽 버튼의 Syncronized With를 HEXVIEW와 연동해 주고, HexVIEW를 들어가면 자동으로 해당 HEX값의 위치를 찾아준다.

여기서 F2를 누르면 HEX값을 수정할 수 있고, 다시 F2는 누르면 수정한 값이 적용된다.

 

적용된 화면이다.

0F 85 (JNZ) 를 0F 84(JZ)로 코드패치 하여 바뀐 것을 볼 수 있다.

적용된 값은 Ctrl + W를 눌러 다른이름으로 저장을 하면, 변경이 적용된 바이너리가 새로 저장된다.

 

다른 방법으로는 OP CODE를 HEX값을 알아내어 WINHEX나 010EDITOR와 같은 hexviewer를 통해 열어 직접 수정해주는 방법도 있다.

 

 

 

리버싱 자체는 불법이 아니지만 리버싱을 이용해서 타인을 기술과 소스등을

무단으로 도용하는 방법은 불법입니다.

악의적인 목적으로 사용하시면 안되며, 공부 목적으로 사용하시기 바랍니다.

 

링크 : http://www.sweetscape.com/010editor/

010editor라는 hexeditor가 있는데, 이 editor는 처음에 30일 동안은 trial로 사용할수 있도록 배포가 되어있다.

 

이 30일 제한을 우회하는 것을 해보도록 하자. 필자의 010 Editor는 v6.0.3버전이다.

010 editor를 다운받아 실행하면, 처음엔 물론 30일이 지나지 않았으니 정상적으로 실행이 된다.

여기에서 Tools > Register을 누르면 아래와 같이 등록 창이 뜨는데

이곳에서 이름과 Password를 입력해주어야 정식판으로 등록이 되게 되는 구조이다.



License 체크를 우회하기 위해서는

체크 로직을 찾아 분기문을 우회 해야 하는데 License를 잘못 입력 하였을때 나오는 스트링 값을 기준으로 체크로직을 찾아 보도록 하겠다.

 

아래를 보면 YPrefer 라는 문자열을 입력하였고,

잘못된 이름또는 패스워드 라면서 튕겨내는 것을 확인할 수 있다.

이를 통해 추측할 수 있는 것은, 어떠한 체크 로직을 통해서 나오는 출력

"Invalid name or password~~~~~~~" 라는 것을 알 수 있다.


위에서 알아낸 스트링 값을 어떤 코드블럭에서 참조하고 있는 지 알아내기 위해  IDA Pro라는 상용툴을 사용하기로 한다.

IDA PRo는 View ->SubView->Strings를 체크해주면 해당 바이너리 파일에서 사용하고 잇는 스트링 값을 모아서 보여주는 기능이 있어,

이를 통해 IDA Pro 를 통해 위에서 알아낸 스트링 값을 검색하여 본다.

 

 

검색된 스트링을 더블클릭으로 따라 들어가면, 아래와 같이 데이터 영역에 있는 것을 볼수 있고.

X버튼을 눌러 참보하고 있는 곳을 찾아볼수 있어, 다행히도 1개 밖에 없어 바로 체크로직의 위치를 찾을 수 있다.

 

 

아래와 같이 text영역에 스트링을 참조하고 있는 곳을 찾을 수 있다.

 

오른쪽 버튼을 눌러 Graph View 를 선택 하면 프로그램 흐름을 아래와 같이 그래프 형태로 볼수 있어 좀더 분석하기가 용이하다.


 

해당 스트링을 사용하는 분기로 오게 되는 화살표를 더블클릭하면 위 코트 블럭으로 따라갈수 있다.

그 부분에서 분기하여 Invalid name or password~~~ 를 출력하는 코드 블럭으로 가게 되는데,

JNZ는 zero flag의 값이 0이 아니면 분기 하는 어셈블리 코드인데 이를 JZ(0이라면 분기)

하는 코드로 패치 해주면 된다.

 

jnz를 jz로 코드패치

 

코드패치의 자세한 방법은

아래 링크를 확인하면 된다.

2016/11/28 - [Security/리버싱] - [바이너리 진단] 바이너리 코드패치 하는 방법.

 

코드패치를 통해 프로그램 흐름을 제어할수 있게 되었다면,

코드 분석으로 아래의 코드블럭을 목적지로 잡고 분기문을 보고 JNZ를 JZ로 코드 패치를 해주면서 따라간다.



그렇게 패치를 해주면!


 

 아래와 같은 문구가 뜨면서 인증이 된다.

근데 이 방법은 30일 지나서 password를 묻는 문구가 뜨면 저런식으로 아무 문자나 넣어도 accept 되는 방식으로 코드패치가 이루어져서,

매번 패스워드를 묻는 창이 뜨긴 하지만, 정상적 이용이 가능하다.

 

'Security > 리버싱' 카테고리의 다른 글

[바이너리 진단] 바이너리 코드패치 하는 방법.  (0) 2016.11.28

+ Recent posts