Archive»

« 2010/02 »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28            

크리에이티브 커먼즈 라이선스
Creative Commons License
오늘 파일을 보다가 그냥 이런 놈도 있구나 싶어서 몇 자 적는다.

워낙에 이런 애들은 보안 프로그램을 우회하는 여러가지 방법을 이용하겠지만,
이런 것도 있구나 싶었다.

아래는 오늘 본 사례이다.



다른 곳에서 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

이렇게 하면, Code 에뮬레이션을 하는 경우 Exception이 발생할 수 있다고 한다.

이상!!
저작자 표시 비영리 변경 금지