본문 바로가기

쓰기

문자열 길이가 고정되어서

포인터 바꿔치기를 통해서도 길이가 바뀌지 않는 것들이 있는데,

이놈들을 위해 길이를 반영하는 필터가 있으면 좋을것 같습니다.



인자로 반영할 메모리 주소
1. 모듈(메모리 주소) 기반
2. 레지스터 기반
으로 ATCode의 그것과 비슷하게 해서


문자열 길이를 해당 컨텍스트가 가진 주소에 반영하는 구조로요.
분류 :
Talk
조회 수 :
15027
등록일 :
2010.01.19
03:14:30
엮인글 :
https://arallab.hided.net/31945/29c/trackback
게시글 주소 :
https://arallab.hided.net/board_devtalk/31945

whoami

2010.01.20
18:13:08
이해가 잘 안 가는데요.
원문과 동일하게 길이를 맞춰주는 필터가 필요하다는 건가요?
그런 필터는 이미 있을텐데요.

어떻게 길이를 반영시킨다는 건지 잘 이해가 안가는군요..;

Hide_D

2010.01.21
00:17:16
메모리에서 문자열을 복사할 때 기존에 구해둔 길이를 사용하는 경우,
포인터 바꿔치기를 사용하더라도 이미 길이값이 고정되어서 문자열이 잘렸는데
이걸 해결 하기 위해 기존 값을 번역된 문자열의 길이로 바꿔치기하는 플러그인을 만들어보자는 거죠

상위 지점을 찾고 싶어도 안정성이 떨어져서 불가능한 게임들이 상당히 많거든요

0.2때는 지점이 여러군데가 한 필터라인을 따라가기 때문에 대응이 불가능했지만
0.3에서는 가능해 보여서요

아랄

2010.01.21
22:36:43
네 일단 말씀하신 내용은 가능은 해보이구요
이 내용과 지금 구조적으로 가장 비슷한게 폰트매퍼 플러그인인데
이 놈은 폰트관련함수 / 텍스트출력함수 들을 후킹하는 동시에
컨텍스트에 필터 오브젝트도 생성할 수 있습니다.
즉, 필터플러그인 이면서 후킹까지하는 꽤나 걸쳐진(?) 녀석이죠.

그런데 저도 이와 관련해서 생각해 본적이 있는데
바로 ATCode 플러그인에 스크립트를 지원하자는 것이었습니다.
지금은 라디오 버튼으로 1. 아무작업 안함 / 2. 메모리 덮어쓰기 / 3.포인터 바꾸기 등을 고르지만
스크립트 직접 작성 이란 고급 항목을 둬서 직접 동작을 프로그래밍 하는 것이죠
즉, 아래 두개는 같은 동작을 뜻하는 겁니다.

<기존 방식 사용>
0x405060 코드지점에서 [ESP+0x8] 인자 번역
번역 방식은 포인터 바꿔치기

<스크립트 직접 작성>
0x405060 코드지점에서 스크립트 직접 작성

void OnCode405060(REGISTER_ENTRY* pReg)
{
      // 여기에 코드를 작성해주세요
      char buf[1024];
      Translate(pReg->ESP + 0x8, buf);
      *(pReg->ESP + 0x8) = buf;
}

뭐 대충 이런식... 그런데 스크립트 엔진 손좀 봐야 겠네요.
ATCode 플러그인 뜯어보시면 발견하셨을 수 있겠지만 스크립트 엔진이 하나 들어있습니다.
여차하면 그걸 개조하려구요

whoami

2010.01.22
01:28:59
저도 테스트후기에서 실행파일 수정하시는 것을 보면서 비슷한 생각을 했는데요..
코드 후킹지점에서 경직된 행동을 하는 것이 아니라 스크립트 같은 유연한 방법을
사용하면 실행파일 수정이라는 복잡한 과정을 거치지 않더라도 되지 않을까 하는..

그래서 생각한 대안이 3가지 있습니다.. 만 각각이 장단점이 있군요.

1. 스크립트 방식
- 장점: (C/C++ 프로그래밍에 비해 간단한) 스크립트 언어만 이해하면 되므로 익히기가 비교적 쉽다.
- 단점: 스크립트 자체가 지원하는 기능이 부실할 경우 한계가 보일 수 있다. 추가기능을 넣으려면
  플러그인을 그때그때 고쳐야 하고 무작정 기능을 부풀리다 보면 오히려 사용하기 어렵게 될 가능성이 높다.

2. ATCode 의 플러그인 (게임 전용 DLL - 게임 내의 ATData 폴더에 위치) 으로 작동하는 방식
- 장점: C/C++ 언어를 그대로 사용하므로 스크립트 엔진이 필요없다. DLL 인터페이스만 제공하므로
  구현이 쉽다.
- 단점: "플러그인의 플러그인" 이라는 또 다른 플러그인 인터페이스를 정의해야 한다.. ATCode
  플러그인과 게임 전용 플러그인과의 소통이 어렵다.

3. ATCode 플러그인 소스를 고쳐서 "게임 전용 알고리즘 DLL" (알고리즘 폴더에 위치) 로 하나로 만드는 방식
- 장점: 결국 알고리즘 플러그인이므로 추가의 플러그인 인터페이스 문제는 없다. 물론 소통 문제도 없다.
- 단점: 게임 전용 알고리즘 DLL 이 난립하게 될 우려가 있다.
  "이 모든 플러그인을 전부 자동 업데이트에 넣어야 하나?" 라는 문제가 생긴다.
List of Articles
번호 제목 글쓴이 조회 수sort 추천 수 날짜 최근 수정일
공지 Talk [필독] 테스트필터 사용시 주의사항 라파에 155437   2008-08-03 2008-12-16 00:03
349 Talk 아랄트랜스 0.2 구글코드 svn 밴당했나요? whoami 2536   2014-02-15 2014-02-15 22:54
오랫만입니다... ^^ 새해 복 많이 받으세요.. 이미 늦었나. 아래 Wales 님이 코드수정을 몇 개 하신 것을 보고 오랫만에 svn 업데이트를 하려고 하니 에러가 뜨더군요. 그래서 구글코드 들어가 보니 프로젝트가 사라졌네요? 동일한 이름의 프로젝트를 만들려고...  
348 Archive [소스, 플러그인] ATCode 테스트 버전 120304 [1] file whoami 2675   2012-03-04 2012-03-05 05:43
 
347 Archive [플러그인] TransCAT 130316 (번역플러그인) [2] file TwoComet 2733   2013-03-16 2013-03-18 09:46
 
346 Talk 아랄트랜스 0.2 소스 bitbucket 으로 올려놨습니다. [7] whoami 2831   2014-02-18 2018-12-27 18:27
구글코드 SVN 에 무슨 일이 생겼는지 몰라서 일단 백업삼아 bitbucket 에 repositiry 하나 잡고 소스를 올렸습니다. 아무래도 옛날 SVN과 인터페이스가 비슷해서 (TortoiseHg) 편한 Mercurial 로 세팅했고.. 공개로 일단 해놓기는 했는데.. 어차피 개발진이 몇...  
345 Archive [소스, 플러그인] ATCode 120407 [9] file whoami 2856   2012-04-07 2012-05-08 15:56
 
344 Archive [플러그인] ATCode 130415 file TwoComet 2898   2013-04-15 2013-04-15 01:04
 
343 Archive [플러그인] ATCode 121014 (수정) - 파기 [6] file EroGame 3027   2012-10-14 2012-10-14 20:42
 
342 Archive [소스, 플러그인] ATCode 테스트 버전 120225 file whoami 3212   2012-02-25 2012-06-17 14:31
 
341 Archive [소스,플러그인] ATCode 테스트 버전 20120207 [16] file whoami 3274   2012-02-07 2012-03-01 04:26
 
340 Archive [소스, 플러그인] ATCode 테스트 버전 120301 [17] file whoami 3360   2012-03-01 2012-06-17 14:29
 
339 Talk 이지트랜스 플러그인 Ehnd 제작자입니다. [6] kiereh 3433   2014-02-27 2014-03-01 17:59
에그헤드의 필터 기능을 타 써드파티 프로그램에서도 사용할 수 있게 하자는 발상으로 이지트랜스 플러그인인 Ehnd를 제작하게 되었습니다. 플러그인이라고 하는 이유는 Proxy DLL 기법을 이용해 구현하였고 (Ehnd의 DLL 이름은 J2KEngine.dll, 기존 이지트랜...  
338 Archive [소스, 플러그인] ATCode 120310 [14] file whoami 3592   2012-03-10 2012-04-01 01:56
 
337 Talk SMSTR 의 부가옵션에 대한 토론.. [4] whoami 3800   2012-02-14 2012-07-12 19:27
ATCode 테스트버전 120207 의 댓글이 너무 복잡하게 꼬여서 이쪽으로 뺍니다. 현재 120207 에서 SMSTR 은 기본적으로 피시님 버전의 OVERWRITE(IGNORE,BUFCHANGE) 모드로만 돌아가도록 만들어져 있습니다. 그런데 피시님께서 부가기능이 필요하시다고 하셨는데...  
336 Talk AralTrans 20120214 버전 변경점 [6] whoami 4193   2012-02-14 2012-06-17 14:29
아랄트랜스 20120214 버전에서의 변경점 1. ATCTNR.dll 버그 수정 - 모듈 정보에서 이미지 파일 크기가 부정확할 경우 Access Violation 에러가 나는 문제 해결. Rewrite (Key) 에서 작동 확인. 다른 게임은 미확인이나 피시님의 ATCTNR 패치가 거의 동일하기 ...  
335 Talk FrigateBird님의 ATCode 20111003버전에 대하여.. [9] whoami 4957   2011-11-02 2011-12-10 16:16
일단 FrigateBird(잘 알려진 피시로 호칭)님의 ATCode 20111003 (줄여서 1003버전) 을 한번 훑어보았는데요, 1003 버전의 주된 변경점은 Siglus 엔진에 대한 지원이 주를 이루고 있습니다. 물론 기존 ATCode 의 버그를 잡은 것도 있지만 마이너하니 넘어갑니다...  
334 Talk XP3Dumper! [1] Hide_D 4996   2011-12-12 2011-12-24 02:57
기리기리랑 합치면 좀 재밌는게 나올 것 같아서 뜯어보고 있습니다. 결과물은 아마 내년(ㅋㅋㅋ)에 나올것 같네요  
333 Archive [소스, 플러그인] ATCode 120401 [1] file whoami 5061   2012-04-01 2012-04-01 08:44
 
332 Archive [실행파일] AralTrans 테스트 버전 20111027 [4] file whoami 5178   2011-10-27 2011-11-01 21:40
 
331 Talk AralTrans, ATCTNR 111112 버전 SVN에 추가. [1] whoami 5260   2011-11-12 2012-06-17 14:29
ATCTNR 의 SVN 소스가 후킹모드 2로 되어있었는데.. 아마 예전에 지나가다정착한이A 님이 발안해서 테스트하던 후킹모드 2 판의 소스가 올라가있었던 듯 합니다. 뭐.. 실제 머리싸매고 고민하다 보니 의외로 돌려놓기가 어렵지 않아서 후킹모드 1로 돌려놓고 ...  
330 Archive ATCode 손보기 20111003 [3] FrigateBird 5924   2011-10-03 2011-12-12 18:46
http://polaris.aralgood.com/index.php?document_srl=1779329 예시 코드 *기능 HEX-16 (VIEW) 원문 XX XX XX XX XX XX XX XX XX XX XX XX <-원문도 박힘 (포인터 4 BYTE, 또는 메모리 효율상 한 라인으로 해결될때는 14~15BYTE 로 사용하여 원문이 메모리에 ...