M de PINK / Mink EGO

콜문에서 콜문으로 무한 콜문에 즉각즉각 콜로왔으면 리턴으로 나와버려서 추적이 용이치 않더군요.
그래서 복사함수 들어가는 입구에서 잡아서 족치기로  했습니다.








8B 4E 04 89 06 8B 17 51 52 50

우선 위 바이너리값으로 서치해서 복사문 들어가는 함수를 찾으면
아래와 같은 함수를 찾을수있습니다.

_____________________________________________________________________

0040118F      CC            INT3
00401190  /$  8B47 04       MOV EAX,DWORD PTR DS:[EDI+4]
00401193  |.  50            PUSH EAX
00401194  |.  8946 04       MOV DWORD PTR DS:[ESI+4],EAX
00401197  |.  E8 98C50400   CALL 31C4AE4B.0044D734
//0040119C  |.  8B4E 04       MOV ECX,DWORD PTR DS:[ESI+4]
//0040119F  |.  8906          MOV DWORD PTR DS:[ESI],EAX

004011A1  |.  8B17          MOV EDX,DWORD PTR DS:[EDI]
004011A3  |.  51            PUSH ECX
004011A4  |.  52            PUSH EDX
004011A5  |.  50            PUSH EAX
004011A6  |.  E8 155C0500   CALL 31C4AE4B.00456DC0
004011AB  |.  83C4 10       ADD ESP,10
004011AE  |.  8BC6          MOV EAX,ESI
004011B0  \.  C3            RETN
004011B1      CC            INT3

_____________________________________________________________________

//된 지점을 실행파일 하단에 콜로 불러줍시다.

우리가 콜로불러와서 바로 쓸수있는 레지는 ecx,edx입니다.
보시면 원래 콜로 들어가기전에 ecx,edx는 mov값으로 변경되기때문에 걍 써도됩니다.


_____________________________________________________________________

00479BC2  /$  8B17          MOV EDX,DWORD PTR DS:[EDI]
나)00479BC4  |.  66:817A 08 81>CMP WORD PTR DS:[EDX+8],7581
00479BCA  |.  75 04         JNZ SHORT 31C4AE4B.00479BD0
가)00479BCC  |.  90            NOP
00479BCD  |.  90            NOP
00479BCE  |.  90            NOP
00479BCF  |.  90            NOP
00479BD0  |>  90            NOP
00479BD1  |.  90            NOP
00479BD2  |.  90            NOP
00479BD3  |.  90            NOP
00479BD4  |.  90            NOP
00479BD5  |.  90            NOP
00479BD6  |.  90            NOP
00479BD7  |.  90            NOP
00479BD8  |.  90            NOP
00479BD9  |.  90            NOP
00479BDA  |.  8B4E 04       MOV ECX,DWORD PTR DS:[ESI+4]
00479BDD  |.  8906          MOV DWORD PTR DS:[ESI],EAX
00479BDF  \.  C3            RETN

_____________________________________________________________________

8B 17 66 81 7A 08 81 75 75 04 90 90 90 90 90 90 90 90 90 90 90 90 90 90 8B 4E 04 89 06 C3




머 아주 간단한 검색문입니다.

edi에 포인터로 문자가 들어있으니 edx에 우선 보기좋게 옮겨심고
대사가 대충 이름+공백+「  < 요러한 꺽쇠가 들어있으니 저걸로 걸러내봅시다.
이름은 머 대략 3글자로 추정하고 공백이 추가되니 4번째 단어가 꺽쇠가 되겠죠
그러니 edx+8 이 꺽쇠 헥스값인 8157인지 검문을 해서 아니면 좀 점프를 시키고

가) 지점에 브포걸고 넘기다보면 대사가 걸려요.

이때 걸린게 이미 출력된 대사가 아니라면 ebp값을 메모장에 적어주세요.
결국은 저 ebp값을 구하려는 거거든요.

요런식으로해서 대사 ebp값을 구하고 선택지는 대략 대사 ebp값 +1 이 되더군요.

이름은 우선 대사에 브포걸고 잡히면 나) 지점에 브포걸어서 이름지나갈때 쓸만한
ebp값을 구하시면됩니다.

종료문확인 같은경우는 정말로라는 本当に라는 일본어 문자를자주쓰니 本에 해당하는
967b를 나)지점에서 검문을 걸면 되겠죠. edx+8 > edx로//  7581 > 7b96으로해서...
대사 찾듯이 ebp값을 구하시면됩니다.

그래서 결국...

_____________________________________________________________________

00479BC2  /$  81FD B7000000 CMP EBP,0B7
00479BC8  |.  74 2D         JE SHORT 31C4AE4B.00479BF7
00479BCA  |.  81FD 86010000 CMP EBP,186
00479BD0  |.  74 25         JE SHORT 31C4AE4B.00479BF7
00479BD2  |.  3E:837C24 48 >CMP DWORD PTR DS:[ESP+48],4
00479BD8  |.  74 3A         JE SHORT 31C4AE4B.00479C14
00479BDA  |.  81FD 0B030000 CMP EBP,30B
00479BE0  |.  74 38         JE SHORT 31C4AE4B.00479C1A
00479BE2  |.  81FD B6000000 CMP EBP,0B6
00479BE8  |.  75 2A         JNZ SHORT 31C4AE4B.00479C14
00479BEA  |.  8B0F          MOV ECX,DWORD PTR DS:[EDI]
00479BEC  |.  8039 81       CMP BYTE PTR DS:[ECX],81
00479BEF  |.  77 06         JA SHORT 31C4AE4B.00479BF7
00479BF1  |.  8079 01 90    CMP BYTE PTR DS:[ECX+1],90
00479BF5  |.  77 1D         JA SHORT 31C4AE4B.00479C14
00479BF7  |>  90            NOP
00479BF8  |.  90            NOP
00479BF9  |.  90            NOP
00479BFA  |.  90            NOP
00479BFB  |.  90            NOP
00479BFC  |.  90            NOP
00479BFD  |.  90            NOP
00479BFE  |.  90            NOP
00479BFF  |.  90            NOP
00479C00  |>  B9 00000000   MOV ECX,0
00479C05  |.  8B17          MOV EDX,DWORD PTR DS:[EDI]
00479C07  |>  41            /INC ECX
00479C08  |.  42            |INC EDX
00479C09  |.  803A 00       |CMP BYTE PTR DS:[EDX],0
00479C0C  |.^ 75 F9         \JNZ SHORT 31C4AE4B.00479C07
00479C0E  |.  41            INC ECX
00479C0F  |.  894F 04       MOV DWORD PTR DS:[EDI+4],ECX
00479C12  |.  90            NOP
00479C13  |.  90            NOP
00479C14  |>  8B4E 04       MOV ECX,DWORD PTR DS:[ESI+4]
00479C17  |.  8906          MOV DWORD PTR DS:[ESI],EAX
00479C19  |.  C3            RETN
00479C1A  |>  3E:817C24 44 >CMP DWORD PTR DS:[ESP+44],103D2
00479C23  |.^ 75 EF         JNZ SHORT 31C4AE4B.00479C14
00479C25  |.  8B0F          MOV ECX,DWORD PTR DS:[EDI]
00479C27  |.  66:8139 8148  CMP WORD PTR DS:[ECX],4881
00479C2C  |.^ 74 E6         JE SHORT 31C4AE4B.00479C14
00479C2E  |.  90            NOP
00479C2F  |.  90            NOP
00479C30  |.  90            NOP
00479C31  |.  90            NOP
00479C32  |.  90            NOP
00479C33  |.  90            NOP
00479C34  |.  90            NOP
00479C35  |.  90            NOP
00479C36  |.  90            NOP
00479C37  |.  90            NOP
00479C38  |.  90            NOP
00479C39  |.  90            NOP
00479C3A  \.^ EB C4         JMP SHORT 31C4AE4B.00479C00

_____________________________________________________________________

대략 설명하자면
cmp로 ebp값을 비교해서 원하는것만 아랄로 보내주고 나머지는 걍 통과
nop문이 아랄 끼어들 공간입니다.

1번 cmp 가 선택지 ebp가 0b7이면 nop문으로
2번 cmp 가 종료확인문 위와같고
3번 cmp 가 대사중복방지용 esp 스탯을 주시해보니 두번째 오는 녀석은 [ESP+48]값이 항상 4더군요 4면 nop문 통과
4번 cmp 가 이름 좀 튕기는게 이름때문인줄알고 따로 뺐는데 그냥 거기서 ? 이름앞에 물음표있으면 nop문 통과하게끔
5번 cmp 가 대사
요놈같은 경우 문두에 819d 819c 819b 8198 81AC 8194 요러한 헥스값을가지는 문자(별,동그라미 등 기호)가 붙어서 시스템제어 명령을 수해하는것 같더군요. cg나 음악등 그래서 문두 문자가 8190부터 81FF 문까지는 nop문 통과하게끔 해봤음

nop문은 아랄 스페이스!!


그리고 아래 inc 문은 길이값이 길이+널문자 여서 길이보정이 안되기때문에 자체 보정

콜문으로 지워진 원래 명령어

리턴~

아래는 4번 이름관련 중복및 ? 표 검문검색



아래링크된 b코드 긁어서 입맛에 맞게 수정하시면 될겁니다.


시스터 스킴 2 HD , しすたー・すきーむ2 HD

오빠는 절대 말할 수없는 소중한 것. , お兄ちゃんにはぜったい言えないたいせつなこと。