# (가칭) AralBridge
# by 자본주의자 (Capitalist) (https://capita.tistory.com/)

[License]
[(https://img.shields.io/badge/License-BSD%202--Clause-orange.svg)]
(https://opensource.org/licenses/BSD-2-Clause)

Modified Minhook - The Minimalistic API Hooking Library for x64/x86 in AralHookDLL64.dll
Minhook 저작권에 따라 동봉된 LICENSE.txt에 관련 라이센스 첨부.
##################################################################################################
[End-user Auto 모드 사용법]
1. AralTrans02(이하 AralTrans)와 ezTrans 준비. (Eushully 게임의 경우 AralTrans3 "설치")
2. 첨부된 파일들(AralBridge32.exe 등)이 게임 실행 파일과 동일한 폴더에 있게 압축을 해제한다.
3. AralBridge32.exe를 실행하면 모든게 알아서 자동으로 적용된다.
(레지스트리에 정보가 없을 경우 AralTrans와 ezTrans의 경로를 지정하는 경고창이 뜰 수 있음.)
4. 일본어 로캘이 아닌 경우 AralBridge32.exe를 Locale Emulator로 실행하면 된다.

[※ 기타 사항]
1. AralTrans와 마찬가지로 후킹&인젝션 프로그램 특성 상 윈도우 디펜더나 안티 바이러스 프로그램이 차단, 삭제할 가능성이 있으므로 예외 처리가 필요할 수 있음.
2. Auto 모드에서 AralBridge32의 관리자 권한을 기준으로 관련 프로그램의 권한도 자동으로 통일하게 실행하므로 일반적인 경우 비관리자 권한으로 실행해도 문제 없음.
3. Win10 22H2 (19045+ 빌드) 또는 Win11 (22000+ 빌드)의 호환만 테스트 하였으므로 이전 버전의 윈도우에서의 정상 작동을 보장하지 않음. 다만 Win10 이상이면 큰 문제는 없을 것으로 생각됨.
(Windows 로고 키 + R을 누르고, 열기 상자에 winver을 입력한 다음 확인을 선택해서 뜨는 창의 OS 빌드로 확인 가능)
##################################################################################################
##################################################################################################
프로젝트 내역
##################################################################################################
##################################################################################################
2024/09/01 : "가칭 AralBridge (Beta v240901)" 배포.
Microsoft Visual C++ 재배포 가능 패키지 (2015~2022) x86, x64 설치 및 재설치 후 재부팅 안내 추가.

공통:				UnhandledExceptionFilter를 추가하여 사용자의 Microsoft Visual C++ 재배포 가능 패키지 (2015~2022) x86, x64의 설치 및 재설치 후 재부팅을 안내.

AralBridge32.exe :	시작 시 자기 자신을 제외한 창이 없는 AralBridge32.exe 프로세스를 종료할 지 묻는 메시지 박스 추가.
				기존의 창이 없는 AralTrans.exe 프로세스를 제거함을 묻는 메세지 박스에서 예를 눌렀을 때 창이 있던 프로세스도 종료하던 문제를 해결.
				기존의 창이 없는 AralTrans.exe 프로세스를 제거에 추가하여 후킹 실패 창, 게임 디렉토리가 지정되어있지 않습니다 창 만 있는 경우도 프로세스 제거하게 변경.
				일본어 로케일로 AralBridge32.exe를 실행하지 않을 시 경고창을 2초 동안 띄우게 함.
				일부 메세지 박스를 비동기화하여 적용 시간 단축.
#################################################
2024/08/24 : "가칭 AralBridge (Beta v240824)" 배포.
Eushully 게임 대응으로 AralTrans3 접근 기능 추가.

공통:				파일 버전 등을 추가.

AralBridge32.exe :	ini 파일에 AralTrans3 관련 섹션 추가 및 관련 코드 추가.
				Eushully 모드 일 때 AralTrans3의 경로가 레지스트리에 없을 경우 경고를 띄우고 폴더를 탐색기로 지정하여 해당 폴더를 레지스트리에 추가하는 기능을 추가.
				Eushully 모드 일 때 ATS 파일이 ini에 지정된 경로에 없을 경우 경고를 띄우고 파일을 탐색기로 지정하게 하는 기능을 추가.
				작업 폴더에 Update 폴더가 있다면 AralTrans와 AralTrans3 설치 폴더의 파일들과 비교하여 이동 or 덮어쓰기 후 Update 폴더의 원본 삭제.
				Eushully 모드 일 때 AralTrans3와 mshta.exe가 이미 실행되어 있으면 종료하게 함.
				Eushully 모드 일 때 AralTrans가 후킹이 완료되고 다이얼로그를 띄우면 AralTrans3을 기동하게 함.
				바이너리 패치에 띄어쓰기가 있으면 뒷 부분이 짤려서 적용되는 문제를 해결.
				ATData.zip을 삭제하는 코드가 작동하지 않던 문제를 수정.
				다른 프로세스들과는 다르게 AralTrans3은 mshta.exe를 호출하는 방식으로 추측되어 기존 방식으로는 AralBridge32와 동일한 권한으로 실행이 불가하여 Eushully 모드 일 때 AralTrans3만 직접적으로 레지스트리를 통해 AralBridge32와 동일한 권한으로 실행되게 사용자 전역 실행 권한을 수정.
#################################################
2024/08/15 : "가칭 AralBridge (Beta v240815)" 배포.
Auto 모드를 추가하고 권한 차이로 발생하는 문제를 해결.

공통:				공통 SECURITY_ATTRIBUTES를 설정하여 일반적인 상황 하에 각 프로그램 간에 관리자 권한 유무에 상관없이 IPC 교신이 정상적으로 작동하게 함.
				소스 파일을 정리하고 코드 구조 리팩토링.
				창 크기를 변경했을 때 배경이 검게되는 문제를 해결.
				AralBridge32.exe와 AralInjector64.exe는 각각 최대 1개의 프로세스만 실행 가능하게 제한.

AralBridge32.exe :	ini 파일을 이용하여 미리 작성한 설정을 불러들이는 기능 추가.
				ini 파일의 타겟 프로그램이 32bit인지 64bit 인지 구별하고 32bit이면 AralTrans 바로가기 대체 방식의 원터치 적용 모드로 사용하게 함.
				ini 파일에 Auto 모드 설정을 넣어서 true이고 타겟 프로그램이 64bit 이면 자동적으로 AralTrans, 타겟 프로세스, AralInjector64.exe를 실행하고 AralHookDLL64.dll 인젝션 성공 시 후킹 지점 정보를 IPC로 자동 전달.
				AralTrans와 ezTrans의 경로가 레지스트리에 없을 경우 경고를 띄우고 폴더를 지정하여 해당 폴더를 레지스트리에 추가하는 기능을 추가.
				Auto 모드일 때 타겟 프로그램이 ini 파일에 지정되어 있지 않으면 경로를 지정하는 창을 띄우게 하고 ini 파일에 저장.
				시작 시 윈도우가 없는 AralTrans 프로세스 종료를 수행 할 지 확인, AralInjector64.exe가 실행되어 있으면 강제 종료.
				로깅 함수를 별도의 스레드로 분리하고 큐를 이용해 뮤텍스로 인한 다른 스레드 대기를 최소화.
				번역 시 AralHookDLL64.dll과의 교신 응답 시간을 마이크로초 단위로 로그에 표시하게 변경.
				로그 내용을 수정하여 호출 스레드의 명칭을 표시.
				Auto 모드일때 대상 프로그램의 아이콘으로 AralBridge32.exe 바로가기 자동 생성.

AralInjector64.exe :	Auto 모드로 구동 될 경우 관련 정보를 실행 파라메터로 받아 GUI 상호작용 없이 자동으로 타겟 프로세스에 AralHookDLL64.dll를 인젝션.
				AralInjector64.exe 자신을 제외, 32bit 프로그램이 아니고, 서비스 프로세스가 아니고, 윈도우 디렉토리의 프로그램이 아니고, 현재 사용자와 동일한 SID 프로세스 만(=시스템 계정 프로세스 제외) 목록에 뜨게하여 유효한 프로세스 목록만 보이게 하고 시스템 프로세스에 접근하지 않게 안전 장치 설정.

AralHookDLL64.dll :	기동 시 자동으로 AralBridge32.exe와 IPC 교신하여 후킹 지점 정보을 받아옴.
				AralHookDLL64가 절대 주소 형식으로 후킹 지점을 생성 시 상대 주소 형식으로 변환 가능할 경우 모듈 목록에서 적절한 모듈을 체크하여 자동으로 변환.
				AralHookDLL64의 메인 후킹 코드에 후킹 지점 모듈이 메인 모듈이면 전용 식별자를 사용하여 타겟 실행 파일의 이름에 무관하게 호환성 확장.
				기본 창 크기를 적절한 크기로 수정.
#################################################
2024/07/26 : "가칭 AralBridge (Beta v240726)" 배포.
실용적으로 사용 가능한 최소 사양으로 완성.

AralBridge32.exe :	번역 허브 및 IPC 서버 프로그램.
				기본적인 로깅과 AralInjector64.exe 실행 버튼으로 구성.
				AralTrans용 후킹 지점 함수를 이용해 AralTrans를 AralBridge32.exe에 후킹하여 해당 함수에 들어오는 일본어 텍스트를 번역.
				AralBridge32.exe으로부터 일본어 원문을 IPC로 수신 받아 후킹되어 있는 AralTrans를 이용해 한국어 번역문을 다시 IPC로 AralBridge32.exe에 송신.

AralInjector64.exe :	64bit 프로세스에 AralHookDLL64.dll를 후킹하는 프로그램.
				32bit 프로세스로 64bit 프로세스에 직접적으로 인젝션이 불가능하여 AralInjector64.exe를 분리.
				프로세스 목록에서 선택한 프로그램에 AralHookDLL64.dll을 인젝션하고 관련 정보를 AralBridge32.exe에 송신하고 인젝션에 성공하면 자동 종료.
				GUI 인터페이스는 AralTrans와 TwoControl의 영향을 많이 받음.

AralHookDLL64.dll :	타겟 프로세스에 인젝션 되는 DLL.
				Minhook을 약간 개조하여 후킹 지점 관리에 사용.
				후킹 지점에 들어오는 일본어 원문을 IPC로 송신해 AralBridge32.exe에 전달.
				AralBridge32.exe으로부터 한국어 번역문을 IPC로 수신하고 후킹 지점의 일본어 텍스트 메모리를 한국어 번역문으로 교체.
				텍스트 코드를 입력 받아서 후킹 지점 및 설정 추가 가능.
				GUI 인터페이스는 AralTrans와 TwoControl의 영향을 많이 받음.
#################################################
2024/07/20 : "IPC를 이용한 AralTrans 64bit 호환 프로젝트" 시작.
#################################################
2024/07/19 : AralTrans 64bit 호환 계획 구상.
#################################################