오늘 파일을 보다가 그냥 이런 놈도 있구나 싶어서 몇 자 적는다.
워낙에 이런 애들은 보안 프로그램을 우회하는 여러가지 방법을 이용하겠지만,
이런 것도 있구나 싶었다.
아래는 오늘 본 사례이다.
다른 곳에서 0x1001E4AB로 JMP가 되었는데, 오자마자 PUSH 5F
바로 밑, 0x1001E4B0로 다시 JMP, 여기서는 XOR 5F
결국, Stack의 맨 위에는 NULL 값이 들어가 있게된다.
장난해?;;;
파라메터로 NULL이 들어가 있는 상태로 PathFindNextComponentA 를 호출한다.
LPTSTR PathFindNextComponent(
LPCTSTR pszPath
);
파라메터가 하나만 있는 API이다.
이런 녀석들이 이런 방식으로 이용하는 API들은
지금까지 대부분 파라메터가 하나만 있다.
웬지 모르게, 코드 자동 생성기가 있을 것으로 보인다.
뉘집 자식인지 몰라도 똑똑한 듯 ;; > _< b
이렇게 하면, Code 에뮬레이션을 하는 경우 Exception이 발생할 수 있다고 한다.
이상!!
워낙에 이런 애들은 보안 프로그램을 우회하는 여러가지 방법을 이용하겠지만,
이런 것도 있구나 싶었다.
아래는 오늘 본 사례이다.
다른 곳에서 0x1001E4AB로 JMP가 되었는데, 오자마자 PUSH 5F
바로 밑, 0x1001E4B0로 다시 JMP, 여기서는 XOR 5F
결국, Stack의 맨 위에는 NULL 값이 들어가 있게된다.
장난해?;;;
파라메터로 NULL이 들어가 있는 상태로 PathFindNextComponentA 를 호출한다.
LPTSTR PathFindNextComponent(
LPCTSTR pszPath
);
파라메터가 하나만 있는 API이다.
이런 녀석들이 이런 방식으로 이용하는 API들은
지금까지 대부분 파라메터가 하나만 있다.
웬지 모르게, 코드 자동 생성기가 있을 것으로 보인다.
뉘집 자식인지 몰라도 똑똑한 듯 ;; > _< b
MOV EDI, DWORD PTR DS:[0100201A0h]
JMP @1601_1001E544 ;<= Jump/Call Address Not Resolved ; 1601.1001E544
@1601_1001E4AB:
PUSH 05Fh
JMP @1601_1001E4B0 ; 1601.1001E4B0
PUSH EAX
@1601_1001E4B0:
XOR DWORD PTR SS:[ESP], 05Fh
CALL NEAR DWORD PTR DS:[01002001Ch] ; SHLWAPI.PathFindNextComponentA
결국 PathFindNextComponent(NULL); 한 결과
RETN
JMP @1601_1001E544 ;<= Jump/Call Address Not Resolved ; 1601.1001E544
@1601_1001E4AB:
PUSH 05Fh
JMP @1601_1001E4B0 ; 1601.1001E4B0
PUSH EAX
@1601_1001E4B0:
XOR DWORD PTR SS:[ESP], 05Fh
CALL NEAR DWORD PTR DS:[01002001Ch] ; SHLWAPI.PathFindNextComponentA
결국 PathFindNextComponent(NULL); 한 결과
RETN
이렇게 하면, Code 에뮬레이션을 하는 경우 Exception이 발생할 수 있다고 한다.
이상!!
'[보안] 리버싱 > [지식] 리버싱' 카테고리의 다른 글
| [노트] 진단 우회 방법 - 더미 API 호출 (0) | 2010/01/19 |
|---|---|
| LEA operation (0) | 2009/10/11 |
| [노트] .COD 와 release 결과물의 차이 (0) | 2009/09/17 |
| [자문 自問] POP 대신에 ADD ESP, XX 를 이용하는 이유 ? (0) | 2009/09/16 |
| [노트] ProbeForRead (0) | 2009/08/31 |
| [노트] Reverse Engineering 하면서 생각나는 질문 들... (2) | 2009/08/13 |
