본문 바로가기

쓰기

문자열 길이가 고정되어서

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

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



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


문자열 길이를 해당 컨텍스트가 가진 주소에 반영하는 구조로요.
분류 :
Talk
조회 수 :
15027
등록일 :
2010.01.19
03:14:30
엮인글 :
https://arallab.hided.net/31945/902/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 [필독] 테스트필터 사용시 주의사항 라파에 155439   2008-08-03 2008-12-16 00:03
429 Talk 웹 계정 아이디/비밀번호 secret Hide_D 1   2011-01-02 2011-01-02 16:21
비밀글입니다.  
428 Talk CustomDic의 동작 방식에 대해서 secret Hide_D 4   2012-02-14 2012-02-14 13:36
비밀글입니다.  
427 Talk 코드정리 목록 + 코드 secret sizukana 6   2009-01-17 2009-01-17 11:41
비밀글입니다.  
426 OtherFiles 아랄코드 정리 txt [2] secret 암흑난무 27   2008-11-18 2009-01-06 01:10
비밀글입니다.  
425 Archive [플러그인] atcode 비정상 문자 출력 픽스 file Wales 199   2014-02-16 2014-02-16 21:08
 
424 Talk ATCTNR에다가 Python만 갖다 붙여도...? [1] Hide_D 279   2016-01-11 2016-01-12 01:30
ATCTNR에 몇가지 버그는 좀 있지만 이거 좀 보완하고, 인젝터 세팅가능하게 한다음에 ATCTNR + ProtocolBuffer(+gRPC) + Python 3 정도로 해서 묶으면, 꽤 재미있는 물건이 나오지 않을까 생각해봅니다 ㅇㅇ 이쪽은 Standalone으로 해볼만할 것 같기도 하고...  
423 Talk VB.NET에서 ezTransXP.dll사용하는 방법은 없나요? [1] R2D2 359   2016-06-14 2018-06-20 14:44
vb.net에서 MFC dll을 써서 이지트랜스로 번역해서 결과물을 가져오고 싶습니다. 그런데 아무리찾아봐도 방법을 모르겠습니다. Imports System.Runtime.InteropServices  Private Declare Fu*nction Translate Lib "ezTransXP.dll" (ByRef cszJapanese As Stri...  
422 Archive [플러그인,소스] ATCode, KoFilter2 테스트 버전 140301 [3] file whoami 439   2014-03-01 2014-03-02 11:59
 
421 Archive [플러그인,소스] ATCode 테스트 버전 140227 file whoami 455   2014-02-27 2014-02-27 01:59
 
420 Archive [플러그인] ATCode 150531 file TwoComet 470   2015-05-31 2015-06-07 21:30
 
419 Talk atcode.dll이 출력 못하는 글자를 수집해 봅니다. [2] file Wales 489   2014-02-05 2014-02-07 20:13
 
418 Talk 엔드 아랄호환 문제를 모두 수정했습니다 [2] kiereh 493   2014-04-28 2014-04-30 01:25
http://www.eroha.net/%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8/%ec%97%94%eb%93%9c/ 오늘자 버전 (140428)으로 엔드와 아랄트랜스간의 호환 문제가 수정되었습니다. 멀티쓰레드로 번역문을 막 쏘면 문자열 포인터가 튀면서 잘못된 참조를 하던 문제, %가 들어갈...  
417 Archive [실행파일] AralTrans 130710 (7/28일자 부터 포함) file TwoComet 533   2013-07-10 2013-07-28 20:06
 
416 Archive [본체] AralTrans.exe ATCTNR.DLL 150622 [4] file TwoComet 534   2015-06-22 2015-07-25 00:12
 
415 Talk aralgood.com 도메인 부활... [7] whoami 566   2014-03-02 2014-03-17 22:48
혹시나 하고 매일 한번씩 체크하곤 하는데.. 오늘 보니 도메인이 부활했군요! 아랄님이 체크하시고 부활시키셨나? 어쨌든 그에 따라 자동업데이트도 부활하고 좋군요. 혹시 아랄님이나 Hide_D군님 보시면.. 제로보드 업데이트 하실 생각 없으신가요? 꽤 오래된...  
414 Archive [실행파일] AralTrans 130601 file TwoComet 577   2013-06-02 2013-06-02 12:04
 
413 Talk UTF-8이나 유니코드 원활한 필터처리를 위해 생각해봤는데 [5] Wales 620   2014-06-16 2014-07-29 16:39
Translate함수에 포함된 필터 전후처리를 따로 빼서 원문 전환전과 번역후에 필터 처리를 하도록 하는건데 문제는 필터들 전부 멀티바이트 중점으로 만들어지다 보니 필터 전부를 손봐야 하는 상황이 오는군요. 그래서 일단 보류중...  
412 Talk 스마트 방식과 윈7의 호환에 관한 잘못된 견해 [4] TwoComet 666   2013-07-06 2013-07-07 03:37
코드 게시글에 '스마트 방식이라 윈7에서 튕길지도 모른다'는 잘못된 인식을 불어넣는 것을 발견했기에 미리 사전에 이야기합니다. 해당사항의 정확한 원인은 아직까지 발견된 사례의 하나인 기가사나 타 브랜드에서 사용하는 넥서스 엔진에서만 해당하는 사항...  
411 Talk 정말 오래간만입니다. [5] Hide_D 694   2013-05-08 2013-07-04 04:45
중간에 폴라리스 폭파되었다는 소식 듣고 한번 들렀던 걸 제외하면 거의 1년 넘게 접속을 안하고 있었던 셈이네요 -0-;; 랩에 진행중인 과제도 있고해서 아직도 좀 바쁘긴 한데, 시간 나는데로 플러그인 관련으로 쌓인 일 좀 처리해 볼까 합니다. PS. 아직 관...  
410 Archive [플러그인,소스] KiriKiri 테스트 버전 [1] file 미소미소 707   2014-04-17 2015-02-23 21:38