폰트와 2바이트문에 관해서는 포럼게시판에 있는 AIR님 글을 참고해보면
[엔진] MED엔진 일어 이외의 폰트 허용과 반각문자 표시하기 1 Air
//한글 폰트확장
//CRT+F
CMP AL,80
아래분기문 NOP
아래 TEST EAX,EAX 아래 분기문 JMP
//CRT+B
83 C4 0C 85 C0
처음 검색된지점 아래분기문 JMP
OR
내려보다보면 "rb" 와 "_FONTSET.MED" 콜문 아래쪽 에보이는 JE 문 JMP 로정해주면된다.
+요부분이 폰트재생성 억제인듯한데 요놈은 아랄 바이너리패치 (b코드) 로 수정해주면
아랄이 덮치고 바이너리 수정하는게 막을수없어서 패치나 실행파일 수정을 해줘야한다.
//위 내용은 MedFontExtend.exe 로 가능하다.
3C 80 75 51 > ?? ?? 90 90
84 C0 75 16 > ?? ?? EB ??
83 C4 0C 85 C0 ?? > ?? ?? ?? ?? ?? EB
위와같이 검색해서 바이트수정을 해주는 유틸인데 보면 알겠지만 검색 바이트가 몇자 안되서 오작동 일어날 가능이 매우크다.
한번 올리디버거로 확인후 위 바이너리로 처음검색된 지점이 맞다면 코드게시글에 활용하면 될듯싶다.
//반각문자 출력하기
00428D1C /XOR ECX,ECX
00428D1E |MOV DWORD PTR SS:[EBP-54],ECX
00428D21 |LEA EAX,DWORD PTR SS:[EBP-4]
00428D24 |MOV EDX,DWORD PTR DS:[7DF964]
00428D2A |CALL monpa2.00746BAC
00428D2F |TEST AL,AL
00428D31 |JE SHORT monpa2.00428D70
00428D33 |MOV EDX,DWORD PTR DS:[7DF964]
00428D39 |INC DWORD PTR DS:[7DF964]
00428D3F |LEA EAX,DWORD PTR SS:[EBP-4]
00428D42 |CALL monpa2.00405D70
00428D47 |XOR EBX,EBX
00428D49 |MOV BL,BYTE PTR DS:[EAX]
00428D4B |SHL EBX,8
00428D4E |MOV EDX,DWORD PTR DS:[7DF964]
00428D54 |INC DWORD PTR DS:[7DF964]
00428D5A |LEA EAX,DWORD PTR SS:[EBP-4]
00428D5D |CALL monpa2.00405D70
00428D62 |XOR ECX,ECX
00428D64 |MOV CL,BYTE PTR DS:[EAX]
00428D66 |ADD EBX,ECX
00428D68 |MOV DWORD PTR SS:[EBP-44],EBX
00428D6B |JMP monpa2.00428E7C
00428D70 |MOV EDX,DWORD PTR DS:[7DF964]
00428D76 |INC DWORD PTR DS:[7DF964]
//
초록색 부분을 긁은다음 > 우클릭 > ExtraCopy > Copy
00428D1C /XOR ECX,ECX
00428D1E |MOV DWORD PTR SS:[EBP-54],ECX
00428D21 |LEA EAX,DWORD PTR SS:[EBP-4]
00428D24 |MOV EDX,DWORD PTR DS:[7DF964]
00428D2A |CALL monpa2.00746BAC
00428D2F |TEST AL,AL
00428D31 |JE SHORT monpa2.00428D70
00428D33 |MOV EDX,DWORD PTR DS:[7DF964]
00428D39 |INC DWORD PTR DS:[7DF964]
00428D3F |LEA EAX,DWORD PTR SS:[EBP-4]
00428D42 |CALL monpa2.00405D70
00428D47 |XOR EBX,EBX
00428D49 |MOV BL,BYTE PTR DS:[EAX]
00428D4B |SHL EBX,8
00428D4E |MOV EDX,DWORD PTR DS:[7DF964]
00428D54 |INC DWORD PTR DS:[7DF964]
00428D5A |LEA EAX,DWORD PTR SS:[EBP-4]
00428D5D |CALL monpa2.00405D70
00428D62 |XOR ECX,ECX
00428D64 |MOV CL,BYTE PTR DS:[EAX]
00428D66 |ADD EBX,ECX
00428D68 |MOV DWORD PTR SS:[EBP-44],EBX
00428D6B |JMP monpa2.00428E7C
00428D70 |MOV EDX,DWORD PTR DS:[7DF964]
00428D76 |INC DWORD PTR DS:[7DF964]
//
Past 한 밑부분에 명령추가 (스페이스바 누르면 입력창 뜬다)
CMP EBX,7F
JBE 428D68 // 파란색 부분 으로 JBE문 (점프위쪽 주소 즉 EBX 값을 MOV 명령으로 넣는곳)
//완성된 모습
00428D1C /XOR ECX,ECX
00428D1E |MOV DWORD PTR SS:[EBP-54],ECX
00428D21 |LEA EAX,DWORD PTR SS:[EBP-4]
00428D24 |MOV EDX,DWORD PTR DS:[7DF964]
00428D2A |INC DWORD PTR DS:[7DF964]
00428D30 LEA EAX,DWORD PTR SS:[EBP-4]
00428D33 |CALL monpa2.00405D70
00428D38 XOR EBX,EBX
00428D3A MOV BL,BYTE PTR DS:[EAX]
00428D3C CMP EBX,7F
00428D3F JBE SHORT monpa2.00428D68
00428D41 NOP
00428D42 |NOP
00428D43 NOP
00428D44 NOP
00428D45 NOP
00428D46 NOP
00428D47 |NOP
00428D48 NOP
00428D49 |NOP
00428D4A NOP
00428D4B |SHL EBX,8
00428D4E |MOV EDX,DWORD PTR DS:[7DF964]
00428D54 |INC DWORD PTR DS:[7DF964]
00428D5A |LEA EAX,DWORD PTR SS:[EBP-4]
00428D5D |CALL monpa2.00405D70
00428D62 |XOR ECX,ECX
00428D64 |MOV CL,BYTE PTR DS:[EAX]
00428D66 |ADD EBX,ECX
00428D68 |MOV DWORD PTR SS:[EBP-44],EBX
00428D6B |JMP monpa2.00428E7C
00428D70 |MOV EDX,DWORD PTR DS:[7DF964]
00428D76 |INC DWORD PTR DS:[7DF964]
//대사 후킹위치 만들기
대사위치는 수정없이 잡을수있는 지점이 몇군데 존재하긴하지만 특정 조건하에서 튕기는 일이있더군요.
위 게임에서 사용했던 함수 통채로 복사해서 사용하는 방법이 가장 무난했습니다.
바로 가는 좌표값은 구하기 힘들어서 약간 우회해서 찾아가보죠
//
CRT+B
55 8B EC 51 89 45 FC 8B 4D FC 83 E1 07 B8 01 00 00 00 D3 E0 8B 55 FC C1 FA 03
CRT+L 로넘겨서 마지막 혹은 3번째 // 콜문 받는지역이 한군데인곳
(CPU 창과 덤프창 사이에 Local call from ~~ 이렇게 나오니 거기 우클릭해서 Go to Call from 눌러주면된다.)
콜보낸 지역으로 가서 ( 나왔더니 함수 시작부분이 보인다면 거기서 한번더 첫번째 콜보낸지역으로 이동하자)
위쪽 콜문 들어가서 함수 복사해서 하단에 넣어주고 콜문 해당지역으로 변경
ex>
//파란색이 우리가 검색해서 나온지역
//초록새이 우리가 들어가서 함수 통채로 복사 하고 실행파일 끝에 붙여넣어서 콜문 변경할곳
0041AF0D MOV DWORD PTR FS:[0],EDX
0041AF14 JMP monpa2.0041F128
0041AF19 LEA EDX,DWORD PTR SS:[EBP-4]
0041AF1C MOV EAX,monpa2.007DF944
0041AF21 CALL monpa2.007465F0
0041AF26 MOV ECX,DWORD PTR SS:[EBP-134]
0041AF2C MOV EAX,DWORD PTR DS:[7DEC44]
0041AF31 MOV DWORD PTR DS:[ECX*4+7DEC34],EAX
0041AF38 MOV EDX,DWORD PTR DS:[7DEC44]
0041AF3E MOV DWORD PTR DS:[7CCD4C],EDX
0041AF44 MOV ECX,DWORD PTR DS:[7CC13C]
0041AF4A MOV DWORD PTR DS:[7DF960],ECX
0041AF50 CMP DWORD PTR DS:[7DF9E4],0
0041AF57 JL monpa2.0041AFFD
0041AF5D MOV EAX,DWORD PTR SS:[EBP-134]
0041AF63 MOV EDX,DWORD PTR DS:[EAX*4+7DEC68]
0041AF6A ADD EDX,DWORD PTR DS:[7DF9E4]
0041AF70 MOV DWORD PTR SS:[EBP-138],EDX
0041AF76 MOV EAX,DWORD PTR SS:[EBP-138]
0041AF7C CALL monpa2.0041F93C
0041AF81 TEST AL,AL
0041AF83 JE SHORT monpa2.0041AFBB
0041AF85 CMP DWORD PTR DS:[7CD13C],0
//
초록색 주소로 이동해서
함수시작부터 끝(retn)까지 긁은다음 > 우클릭 > ExtraCopy > Copy
실행파일 끄트머리에 > ExtraCopy > Past
초록색 CALL 문을 우리가 새롭게 통채로 복사한 함수 끄트머리 시작점으로 변경
ex>
0041AF21 CALL monpa2.00747948
0074793A JMP DWORD PTR DS:[<&OLEAUT32.#11>] ; OLEAUT32.VariantCopyInd
00747940 JMP DWORD PTR DS:[<&OLEAUT32.#8>] ; OLEAUT32.VariantInit
00747946 INT3
00747947 INT3
00747948 PUSH EBP
00747949 MOV EBP,ESP
0074794B PUSH EBX
0074794C PUSH ESI
0074794D MOV ESI,EAX
0074794F MOV EDX,DWORD PTR DS:[EDX]
00747951 CALL monpa2.0047F0F8
00747956 MOV EAX,ESI
00747958 POP ESI
00747959 POP EBX
0074795A POP EBP
0074795B RETN
0074795C DB 00
0074795D DB 00
0074795E DB 00
대사는// 74794F // EDX // ptrcheat // len -4
//기타지 후킹 지역
CRT+B
33 DB 8A 18
검색되는 순서에따라서 모두 함수시작 부분이 후킹주소가 된다.
1 // 필요없는지역
2 // 대사관련 후킹위치는 아님 위에언급된 반각문자 출력 수정지역
3 // 패스 2와 동일지역
4 // 패널창 // EAX // PTRCHEAT // LEN -4
5 // 이름 // EAX // PTRCHEAT // LEN -4
6 // 선택지 > 조금 내려와서 Arg있는 콜문아래 콜문 // [EBP-4] // PTRCHEAT // LEN -4
7 // 필요없는지역 백로그관련
8 // 패스 7과 동일지역
9 // 세이브&로드 등 시스템 메세지 // EAX // PTRCHEAT // LEN -4
여기까지
9번째 검색된곳 시작부분을 보면 상당히 많은지역에서 콜문을 받는다. = 콜문많이받는곳 검색됐으면 끝
______________________________________
// 포인터 바꿔치기 튕기는 건 아래 포럼글 참고
후킹 메모리 -8 지역에 아마도 명령에 사용하는 헥스값이 있는것같다.
이곳이 대부분 2로 셋팅되어있다가 사용전후에 가감하는것같다.
이곳을 우리가 후킹해서 내보낼때 0 이나 1이면 튕기더라는 그래서 아랄 단에서 수정해줬다.
1004E902 ADD EDX,964
1004E908 CMP DWORD PTR DS:[EDX-8],2
1004E90C JGE SHORT ATCode_M.1004E915
1004E90E MOV DWORD PTR DS:[EDX-8],2
1004E915 RETN
초록새 위쪽과 아래는 콜로 땡기면 원래있던 명령문과 돌아가는 거고 주요 수정문은
-8지역을 2와 비교해서 크거나 같으면 그냥 보내고 작으면 2를 넣어주는거다.
코드게시글에 올려놓은 dll을 사용해주자
//
ATCode_MED.dll << 요놈은 아랄설치된 폴더\알고리즘폴더에 넣자.
ex) D:\AralTrans02\Algorithm
ATCode.dll 을 MED 엔진에 대응하기 위해 약간 수정한겁니다.
//
+엑세스 관련 오류문은 후킹위치가 감시되고있을수있으니 위치 변경
+무효인 포인터 오류문은 후킹방법 변경이나 아랄수정으로 가능
//끝으로 UI 수정
CRT + S
ADD ECX,ECX
ADD ECX,-2
OR
CRT + B
03 C9 83 C1 FE
검색해서 이동하면
00428EAD |MOV ECX,DWORD PTR DS:[7CC3BC]
00428EB3 |ADD ECX,ECX
00428EB5 |ADD ECX,-2
분홍색지점 더블클릭하거나 덤프창에서 이동해보면
00 00 00 00 | 34 00 00 00 | 00 00 00 00 | E2 01 00 00 |
전체 X좌표 |
| 메세지창 X좌표 | 메세지창 Y좌표 |
BF 00 00 00 | 62 00 00 00 | DA 03 00 00 | 9C 00 00 00 |
메세지창 X여백 | 메세지창 Y여백 |
|
|
1E 00 00 00 | 03 00 00 00 | 1F 00 00 00 | 28 00 00 00 |
라인 최대문자수
|
| 자간 | 줄간격 |
C2 00 00 00 | 49 00 00 00 | 00 00 00 00 | 00 00 00 00 |
이름창 X좌표 | 이름창 Y좌표 |
|
|
라인번역이 많다보니 개행이 꼬이거나 해서 문장이 가출하는경우가 자주 발생해서 수정해주는게 좋다.
해당 메모리에 마우스로 찍어준 후 CRT+R (Find refernces)
메세지창 X여백
ADD 관련문 중 1 로 이동해서
대입값을 원하는 걸로 수정
라인 최대문자수
MOV ECX, 관련문중 2번째로 이동해서
대입값을 원하는 걸로 수정
자간
IMUL 관련문중 2번째로 이동해서
대입값을 원하는 걸로 수정
줄간격
IMUL 관련문중 2번째로 이동해서
IMUL EAX, 원하는값 대입
대부분 메세지창 X여백,라인최대문자,자간만 수정해주면 될듯싶다.(대부분 대사반각문자 출력을 위해 수정했던 함수에 위치한다.)
위에서 언급한 지역이아니라 해당 메모리에 값을 넣는지점중 로드액션을 취할때 사용하는 곳을 수정해주는게 가장 안정적인것같은데
이러면 로드액션을 꼭취해줘야 UI조정이 이뤄져서 다소 불편한점이 있더라...
잘찾아보면 메뉴창도 없애버릴수 있을것같은데 못찾겠군요.
중요 키워드
// 대사
CRT+B
55 8B EC 51 89 45 FC 8B 4D FC 83 E1 07 B8 01 00 00 00 D3 E0 8B 55 FC C1 FA 03
// 기타 후킹지역 및 수정지역
CRT+B
33 DB 8A 18
// UI 수정참고
CRT + B
// 샘플 + 아랄고딕의 활용등 참고하자
8 | 2013/03/29 | [ATCode] 몬스터 해저드 (モンスター・ハザード) [2] | 2013-06-26 | 2013-06-27 00:16 |
7 | 2012/08/31 | [ATCode] 몬스터파크2 (MONSTER PARK 2~神々を宿した乙女~) [1] | 2013-06-26 | 2013-06-27 00:17 |
6 | 2013/02/22 | [ATCode] 마법 소녀는 키스로 변신~ 상대가 자신 이외의 사람 이라니 ...... ~ (魔法少女はキスして変身(かわ)る ~相手が彼以外の人だなんて……~ ) [2] | 2013-06-26 | 2013-06-27 00:21 |
5 | 2012/03/29 | [ATCode] 개 (牝犬発情記~かげりゆく日常~ ) [2] | 2013-06-26 | 2013-06-27 00:21 |
4 | 2011/05/27 | [ATCode] 마법의 수호 공주 아루테미나 (魔法の守護姫アルテミナ) [1] | 2013-06-26 | 2013-06-27 20:09 |
3 | 2012/02/24 | [ATCode] 메리지 블루 「약혼자가 있는데 , 어째서 이런 남자에게……」(マリッジブルー「婚約者がいるのに、どうしてこんな男に……」) [1] | 2013-06-26 | 2013-06-27 00:25 |
2 | 2012/09/28 | [ATCode] 마법 전사 엑스트라 스테이지 ~ 10th Anniversary ~(魔法戦士エクストラステージ ~10th Anniversary~) [1] | 2013-06-27 | 2013-06-27 10:31 |
1 | 2012/07/27 | [ATCode] 츠보이 군의 스위치!(つぼい君のスイッチ! ) | 2013-06-27 | 2013-06-27 14:57 |
쉽게 정리할려고 작성했는데 쓰고보니 복잡하네요 -0-;;
본문 대사 후킹 지점에서
"대사는// 74794F // EDX // ptrcheat // len -4"
이란 부분이 있는데 이다음에 있는 콜문을 잡는겁니다. 링크된 몬스터 파크 코드를 봐도 그렇게 되어 있구요.
본문대로 잡았다가는 엑세스 오류가....혹 매드엔진 코드 찾는 분들 참고 하시라고 글 남겨봅니다.