루아 로드 하는중 튕김 : 메모리 region 문제
루아 로드 하고 무한로딩 : 루아 로딩 제대로 안됨 보통 사이즈 문제 (데이터는 잘썼는데 원본 루아보다 크기 커서 잘린 경우)
일단 기본적으로 게임 코드는 게임 dll 내부에서만 돌아가야함
데이터도 마찬가지 인간님이 올린 dumper도 함수 후킹후
단순히 chunk(버퍼)만 파일로 저장하는거임 내부 데이터 건드리는게 없음
인젝션은 그렇지 않음 함수 후킹후 원하는 데이터를 삽입 해야하는데
위에서 말했다시피 메모리 영역에 신경쓰고 진행해야함
백이면 백 ifstream으로 수정한 루아 파일 char 배열에 불러오고 나서
밑에 origin_luafunc에 매개변수로 사이즈랑 같이 바로 줬을텐데
이러면 수정한 루아 파일 데이터가 저장된 char 배열이 니가 인젝트한 dll의 메모리 영역에
생성되기때문에 안 불러와짐. 같은 프로세스내여도 안되는게 있음 이건 설명 생략함
그럼 어떻게 해야하냐 후킹한 함수에서 받은 매개변수(chunk) 자체를 수정하면된다.
memcpy(chunk, buffer, size);
복붙하고 아래 origin_luafunc에 덤프 할때처럼 매개변수 그대로 주면된다.
이정도면 할 새끼들은 다 할거라고 생각되고
재밌는거 알려주자면 지금 알사람은 알거같은데
커닝파퀘 버그 있어서 루아 수정해서 같이 쓰면 기타템 복사가능
댓글3
너무많이 풀었는뎁쇼 ㄷㄷ;
선생님 AP가 없어서 1:1 채팅을 못보내네요.
질문 하나만 괜찮으실까요.
말씀해주신대로
memcpy 함수 이용해서 ifstream으로 읽은 string.data()를 chunk에 넣어줬습니다.
(memcpy(chunk, fileContent.data(), fileContent.size())
original_luafunc로 호출해줄때, 0xC0000005-NULL 주소에 접근한다고 크래시가 발생하네요.
괜찮으시다면 관련해서 힌트나 자문좀 부탁드립니다.
감사합니다.
버퍼가 원본 chunk와 데이터타입 같은지, fileContent.size()가 원본 chunk 길이와 같은지 확인 부터
수정안한 파일 인젝트부터 해보셈