아~네모네... 음악이나 들어야지






니트로 플러스 건들지 말아야할걸 건든것같다.










//


Phantom -PHANTOM OF INFERNO- 体験版

2013/08/30



결론부터 말하자면 자폰입니다. 엔진 자체도 여타 니플하고 좀 틀린것같습니다.

소위 자폰이라고 말하는것중 대다수는 짝퉁이지만 요놈은 진품입니다. 윈도우 폰트관련함수 자체가 없더군요 앗싸리~

회피고 머고 폰트를만들어야 가능할듯싶네요.


그래도 후킹위치를 찾아보자면

(대충 찍어서 검색했더니 잡혔어 쿠쿸)



CRT+F


CMP AL,80


첫번째 잡히는거 콜스택타고 적절히 ... // 대사 

두번째 잡히는거 콜스택타고 적절히 ...//기타 



대사지점 좀더 빠르게 찾을려면


CRT+B


8B 16 33 FF 33 DB


걸린위치 // [esi] // ptrcheat // 대사






맵 서치하기 귀찮아서 1/2바이트 체크는 하겠지 하면서 검색했더니 얻어걸렸네용 

윈도우 함수를 사용안하기때문에 에이치코드 나오기전엔 놀수도없을테니

덤프나 에그헤드로 놀면됩니다. 넵



HOOK(0x0042A31F,TRANS([esi],CLIPJPN,NOP),RETNPOS(COPY))











// 니트로 플러스







니트로 플러스 현재 올린코드들은 강제널문 삽입 > 후킹(ptrcheat) > 강제널문 복구 및 원본 주소 후킹메모리에 -4지점에 복사 와 종료문 포인터 위치 후킹메모리 위치로 변경>명령제어문 포인터저장시 원문 주소로 저장


위와같은 과정을 거친다. 써놓고 보니 대개 복잡한것같은데 복잡하더라는 -0-;;



//기타


50 8D 4C 24 24 51 8B 4C 24 24

아래콜문 // [esp+0x24] // ecx // ptrcheat


검색안될시

53 55 56 57 8B F1 33 FF 3B F7

함수시작위치에서 콜로보낸지역으로 이동해서 해당 콜문. (위와 같은지역임)



+추가 후킹지역으로 위 후킹주소아래 콜문 esp+14

메인과 기타지역을 후킹했는데도 미번역문이 보인다면 이 기타함수쪽에서 추적하다보면 잡힐수도있다.


//메인


53 55 56 57 8B F8 33 F6 3B FE


콜로보낸 지역으로 이동해서 수정작업을 한다.

+혹은 이지역 함수시작지점에 esp+0x8 을 니트로엔진방식 + 분할번역으로 가능하긴하나 단문뒷문 짤림 , 명령제어문 씹혀서 연출 씹힘


검색안될시


33 F6 89 74 24 48 89 74 24 34


아래 예제에있는 초록색쪽으로 검색된다.



004106C3  TEST EBP,EBP
004106C5  JNZ totono.004105C1
004106CB  JMP totono.004109CD
004106D0  MOV EDX,DWORD PTR SS:[ESP+14]
004106D4  MOV EAX,DWORD PTR SS:[ESP+18]
004106D8  MOV ECX,DWORD PTR SS:[ESP+28]
004106DC  PUSH EDX
004106DD  MOV EDX,DWORD PTR SS:[ESP+34]
004106E1  PUSH EAX
004106E2  PUSH ECX
004106E3  PUSH EDX
004106E4  LEA EAX,DWORD PTR SS:[ESP+50]
004106E8  PUSH EAX
004106E9  XOR ESI,ESI
004106EB  MOV DWORD PTR SS:[ESP+48],ESI
004106EF  MOV DWORD PTR SS:[ESP+34],ESI
004106F3  MOV EDX,DWORD PTR SS:[EBP+208]
004106F9  MOV EAX,DWORD PTR SS:[EBP+204]
004106FF  LEA ECX,DWORD PTR SS:[ESP+38]
00410703  PUSH ECX
00410704  PUSH EDX
00410705  PUSH EAX
00410706  CALL totono.0048E160
0041070B  MOV ECX,DWORD PTR SS:[ESP+60]
0041070F  MOV EDX,DWORD PTR SS:[ESP+44]
00410713  PUSH ESI
00410714  PUSH ESI
00410715  PUSH ECX
00410716  PUSH EDX
00410717  CALL totono.00491650
0041071C  ADD ESP,30
0041071F  MOV DWORD PTR SS:[ESP+20],EAX
00410723  CMP EAX,ESI
00410725  JE totono.004109CD
0041072B  MOV ECX,DWORD PTR SS:[ESP+14]
0041072F  MOV EDX,DWORD PTR SS:[ESP+18]
00410733  PUSH ECX
00410734  MOV ECX,DWORD PTR SS:[ESP+2C]
00410738  PUSH EDX
00410739  MOV EDX,DWORD PTR SS:[ESP+38]
0041073D  MOV ESI,DWORD PTR SS:[ESP+1294]
00410744  PUSH ECX
00410745  PUSH EDX
00410746  LEA ECX,DWORD PTR SS:[ESP+54]
0041074A  PUSH ECX
0041074B  MOV ECX,DWORD PTR SS:[EBP+208]
00410751  LEA EDX,DWORD PTR SS:[ESP+5C]
00410755  PUSH EDX
00410756  MOV EDX,DWORD PTR SS:[EBP+204]
0041075C  PUSH ECX
0041075D  MOV ECX,DWORD PTR DS:[EBX+20]
00410760  IMUL ECX,ECX,158
00410766  PUSH EDX
00410767  LEA EDX,DWORD PTR DS:[ECX+ESI+1130]
0041076E  PUSH EDX
0041076F  CALL totono.0048B8E0
00410774  ADD ESP,24
00410777  MOV DWORD PTR SS:[ESP+34],EAX
0041077B  TEST EAX,EAX


파란색이 우리가 검사해서 찾아온곳

초록색이 후킹전 강제널문 삽입을 위해 콜로 하단으로 보낼지점

분홍색이 후킹지점 및 콜로 내려서 작업할지점




004106E9  XOR ESI,ESI
004106EB  CALL totono_A.00507415
004106F0  NOP
004106F1  NOP
004106F2  NOP
004106F3  CALL totono_A.00507437
004106F8  NOP
004106F9  MOV EAX,DWORD PTR SS:[EBP+204]
004106FF  LEA ECX,DWORD PTR SS:[ESP+38]
00410703  PUSH ECX
00410704  PUSH EDX
00410705  PUSH EAX
00410706  CALL totono_A.0048E160
0041070B  MOV ECX,DWORD PTR SS:[ESP+60]

위와같이 파일 밑부분으로 콜로 보냈음




//

그리고 메인 바이너리검색시 걸린위치 하단에 보면

CMP DL,7B 위치가 보일텐데


0048BF68   |FSTP ST
0048BF6A   |MOV EAX,0A
0048BF6F   |JMP SHORT totono.0048BF7C
0048BF71   |FIMUL DWORD PTR SS:[EBP+20F8]
0048BF77   |CALL totono.004E6280
0048BF7C   |MOV DWORD PTR SS:[ESP+18],EAX
0048BF80   |MOV DWORD PTR SS:[ESP+10],EAX
0048BF84   |MOV DWORD PTR SS:[ESP+14],ESI
0048BF88   |MOV ECX,DWORD PTR SS:[EBP+2C]
0048BF8B   |MOV DWORD PTR SS:[EBP+ECX*4+6213C],1
0048BF96   |JMP totono.0048BC0B
0048BF9B   |CMP DL,7B
0048BF9E   |JNZ SHORT totono.0048C019
0048BFA0   |MOV EDX,DWORD PTR SS:[EBP+60]
0048BFA3   |MOV EAX,DWORD PTR SS:[EBP+2C]
0048BFA6   |INC EDX
0048BFA7   |MOV DWORD PTR SS:[EBP+EAX*4+6E13C],EDX
0048BFAE   |MOV EAX,DWORD PTR SS:[EBP+60]
0048BFB1   |CALL totono.00417690
0048BFB6   |MOV DWORD PTR SS:[EBP+60],EAX
0048BFB9   |TEST EAX,EAX
0048BFBB   |JE totono.0048C902
0048BFC1   |CMP BYTE PTR DS:[EAX],7D
0048BFC4   |JNZ SHORT totono.0048BFD2
0048BFC6   |PUSH EAX                                        
0048BFC7   |CALL totono.004E508A                           
0048BFCC   |ADD ESP,4
0048BFCF   |MOV DWORD PTR SS:[EBP+60],EAX



위에보이는 초록색 부분이 { } 둘러싸인 명령제어문 포인터 위치 저장하는곳이다.

명령제어문 포인터는 시작이나 로드시 먼저 등록이 되고 위 위치에서 저장된 포인터주소와 CMP 해서 같다면

출력되는 형태이다.


파란색 부분을 콜로 하단으로 보내서 작업을한다.



0048BF9B  |CMP DL,7B
0048BF9E  |JNZ SHORT totono_A.0048C019
0048BFA0  |CALL totono_A.0050747E
0048BFA5  |NOP
0048BFA6  |NOP
0048BFA7  |NOP
0048BFA8  |NOP
0048BFA9  |NOP
0048BFAA  |NOP
0048BFAB  |NOP
0048BFAC  |NOP
0048BFAD  |NOP
0048BFAE  |MOV EAX,DWORD PTR SS:[EBP+60]
0048BFB1  |CALL totono_A.00417690
0048BFB6  |MOV DWORD PTR SS:[EBP+60],EAX

위와같이 파일 밑부분으로 콜로 보냈음





/$ >MOV DWORD PTR SS:[ESP+4C],ESI
|. >MOV DWORD PTR SS:[ESP+38],ESI
|. >MOV EDX,DWORD PTR SS:[EBP+208]
|. >MOV BYTE PTR DS:[EDX+14],0
|. >MOV EAX,DWORD PTR SS:[EBP+204]
|. >MOV DWORD PTR DS:[EBP+218],EAX
\. >RETN


//후킹전

파란색이 강제 널문 삽입

초록색이 원문 주소 백업



   >INT3
   >INT3
/$ >MOV EAX,DWORD PTR SS:[EBP+204]
|. >MOV ECX,DWORD PTR SS:[EBP+218]
|. >MOV DWORD PTR DS:[EAX-4],ECX
|. >MOV DWORD PTR DS:[EBP+218],0
|> >/CMP BYTE PTR DS:[EAX],2F
|. >|JNZ SHORT totono_A.0050745C
|. >|CMP BYTE PTR DS:[EAX+1],50
|. >|JE SHORT totono_A.00507464
|> >|INC EAX
|. >|CMP BYTE PTR DS:[EAX],0
|.^>\JNZ SHORT totono_A.00507451
|. >JMP SHORT totono_A.0050746B
|> >DEC EAX
|. >MOV EDX,DWORD PTR SS:[EBP+208]
|> >MOV BYTE PTR DS:[EDX+14],0A
|. >MOV DWORD PTR SS:[EBP+208],EAX
|. >MOV EDX,DWORD PTR SS:[EBP+208]
\. >RETN



분홍색 백업했던 원문 주소를 후킹메모리 -4 지점에 넣고 백업용 메모리 널문으로 원상복구

파란색이 ptrcheat가 이루어진 메모리에서 /P 검색

초록색이 원문에 강제널문을 다시 정상복구 > 종료문 포인터 위치 후킹메모리 종료문 위치로 변경







   >INT3
   >INT3
/$ >MOV ECX,DWORD PTR SS:[EBP+5C]
|. >MOV EDX,DWORD PTR DS:[ECX-4]
|> >/CMP BYTE PTR DS:[EDX],7B
|. >|JNZ SHORT totono_A.0050749B
|. >|CMP BYTE PTR DS:[EDX-1],0A
|. >|JE SHORT totono_A.005074A1
|. >|CMP BYTE PTR DS:[EDX+1],0D
|. >|JE SHORT totono_A.005074A1
|. >|CMP BYTE PTR DS:[EDX+1],9
|. >|JE SHORT totono_A.005074A1
|> >|INC EDX
|. >|CMP BYTE PTR DS:[EDX],0
|.^>\JNZ SHORT totono_A.00507484
|> >INC EDX
|. >MOV EAX,DWORD PTR SS:[EBP+2C]
|. >MOV DWORD PTR SS:[EBP+EAX*4+6E13C],EDX
|> >/CMP BYTE PTR DS:[EDX],7D
|. >|JNZ SHORT totono_A.005074BD
|. >|CMP BYTE PTR DS:[EDX+1],0A
|. >|JE SHORT totono_A.005074C3
|. >|CMP BYTE PTR DS:[EDX-1],0A
|. >|JE SHORT totono_A.005074C3
|> >|INC EDX
|. >|CMP BYTE PTR DS:[EDX],0
|.^>\JNZ SHORT totono_A.005074AC
|> >MOV DWORD PTR DS:[ECX-4],EDX
|. >MOV EDX,DWORD PTR SS:[EBP+60]
|. >INC EDX
\. >RETN


대사메모리 -4 지점에서 원문 주소를 가져온다음

파란색에서 { (7b) 검사

이때 7b가 일본어 문자 하위 바이트에 속하기 때문에 1/2바이트 체크를 하면서 7b 검사를 해야 좀더 완벽한 문이 될텐데

그냥 1바이트 검사 + 전후값 비교 하는 방법으로 검색문을 만들었음


분홍색지점에 원문을 주소를 넣어주면 이제 명령제어문 씹히진 않는다.


초록새이 } (7d) 검사

위와동일하다. 초록색 마지막 부분에 대사메모리 -4 지점에 7d 이후의 주소를 넣어준다.


기본골격을 위와같이 잡고 적절히 수정해주면 될듯싶기도하다.



바이너리값 ebp 기반 (ex. [ebp+204])


89 74 24 4C 89 74 24 38 8B 95 08 02 00 00 C6 42 14 00 8B 85 04 02 00 00 3E 89 85 18 02 00 00 C3
CC CC 8B 85 04 02 00 00 8B 8D 18 02 00 00 89 48 FC 3E C7 85 18 02 00 00 00 00 00 00 80 38 2F 75
06 80 78 01 50 74 08 40 80 38 00 75 EF EB 07 48 8B 95 08 02 00 00 C6 42 14 0A 89 85 08 02 00 00
8B 95 08 02 00 00 C3 CC CC 8B 4D 5C 8B 51 FC 80 3A 7B 75 12 80 7A FF 0A 74 12 80 7A 01 0D 74 0C
80 7A 01 09 74 06 42 80 3A 00 75 E3 42 8B 45 2C 89 94 85 3C E1 06 00 80 3A 7D 75 0C 80 7A 01 0A
74 0C 80 7A FF 0A 74 06 42 80 3A 00 75 E9 89 51 FC 8B 55 60 42 C3 CC CC



구버전 ebx기반 (ex. [ebx+104])

89 74 24 4C 89 74 24 38 36 8B 93 08 01 00 00 C6 42 14 00 36 8B 83 04 01 00 00 89 83 18 01 00 00
C3 CC CC 36 8B 83 04 01 00 00 36 8B 8B 18 01 00 00 89 48 FC C7 83 18 01 00 00 00 00 00 00 80 38
2F 75 06 80 78 01 50 74 08 40 80 38 00 75 EF EB 0C 48 36 8B 93 08 01 00 00 C6 42 14 0A 36 89 83
08 01 00 00 36 8B 93 08 01 00 00 C3 CC CC 8B 55 40 8B 42 FC 80 38 7B 75 12 80 78 FF 0A 74 12 80
78 01 0D 74 0C 80 78 01 09 74 06 40 80 38 00 75 E3 40 8B 4D 24 89 84 8D 18 E1 06 00 80 38 7D 75
0C 80 78 01 0A 74 0C 80 78 FF 0A 74 06 40 80 38 00 75 E9 89 42 FC 8B 03 40 C3 CC CC









//샘플 + b코드만 입력해서 디버거로 확인해보면 어디를 수정했는지 알수있다.


6 2013/06/28 [ATCode] [수정]너와 그녀와 그녀의 사랑. (君と彼女と彼女の恋。) 업데이트파일 [47]
5 2008/09/26 [ATCode] 스마가 (スマガ) 업데이트파일 [6]
4 2012/07/26 [ATCode] 길티 크라운 로스트 크리스마스 (ギルティクラウン ロストクリスマス) 업데이트파일 [1]
3 2012/03/23 [ATCode] [BL]Dramatical Murder (드라마티컬 머더) 업데이트파일
2 2013/04/26 [ATCode] [BL]DRAMAtical Murder re:connect (드라마티컬 머더 리:코넥트) 새 글파일