외규장각 도서 환수 모금 캠페인

문자열 비교 - disassemble

Posted 2007. 6. 13. 16:30, Filed under: Study/Computer Science
// 문자열 비교하는 루틴
00401090                /$  8B4C24 04         MOV ECX,DWORD PTR SS:[ESP+4]
00401094                |.  53                PUSH EBX
00401095                |.  56                PUSH ESI
00401096                |.  8B7424 10         MOV ESI,DWORD PTR SS:[ESP+10]
0040109A                |.  33C0              XOR EAX,EAX
0040109C                |.  2BF1              SUB ESI,ECX                                ;  esi : 비교하려는 두 문자열 사이의 메모리상의 거리

0040109E                |>  8A11              /MOV DL,BYTE PTR DS:[ECX]                  ;  ecx : index
                                                 ---  종료 조건 ---
004010A0                |.  84D2              |TEST DL,DL
004010A2                |.  75 06             |JNZ SHORT Strcmp.004010AA      
004010A4                |.  803C0E 00         |CMP BYTE PTR DS:[ESI+ECX],0
004010A8                |.  74 17             |JE SHORT Strcmp.004010C1
                                      --------------------

004010AA                |>  8A1C0E            |MOV BL,BYTE PTR DS:[ESI+ECX]
004010AD                |.  3AD3              |CMP DL,BL                                 ;  문자 비교
004010AF                |.  7F 05             |JG SHORT Strcmp.004010B6
004010B1                |.  7C 0B             |JL SHORT Strcmp.004010BE
004010B3                |.  41                |INC ECX                                   ;  인덱스 증가
004010B4                |.^ EB E8             \JMP SHORT Strcmp.0040109E
004010B6                |>  5E                POP ESI
004010B7                |.  B8 01000000       MOV EAX,1
004010BC                |.  5B                POP EBX
004010BD                |.  C3                RETN
004010BE                |>  83C8 FF           OR EAX,FFFFFFFF
004010C1                |>  5E                POP ESI
004010C2                |.  5B                POP EBX
004010C3                \.  C3                RETN

ecx : 비교하려는 문자열 중에 하나의 시작 주소를 저장
esi :  비교하려는 두 문자열의 주소값의 차이

이렇게 해놓고 ecx를 증가시키면서 [ecx], [ecx+esi] 의 값을 비교.
아스키 문자열 비교를 위해 DL 레지스터를 사용하여 하위 8비트 값만 사용.

---

악성 코드에서 문자열 비교 루틴을 많이 사용하길래
공부 삼아 한번 해봤는데..;
이건 뭐 구현 언어나 방법에 따라 그 때 그 때 다르니까 크게 소용이 없을 수도 있겠다 ;

언제쯤 제대로 한번 해볼라나 ㅋ

Response : ,


Recent Posts

Recent Comments

Recent Trackbacks

Total hit (Today , Yesterday )

Admin Write Post