본문 바로가기

쓰기

문자열 길이가 고정되어서

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

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



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


문자열 길이를 해당 컨텍스트가 가진 주소에 반영하는 구조로요.
분류 :
Talk
조회 수 :
15027
등록일 :
2010.01.19
03:14:30
엮인글 :
https://arallab.hided.net/31945/370/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
144 Talk Windows 7, UAC, 64bit Hide_D 9107   2011-04-24 2011-06-28 01:25
사실상 요새 구입하는 '최신형' 컴퓨터들이 갖는 세팅이 Windows 7 64bit에다가 UAC를 기본값으로 두고 사용하는 방식인데, 기존 아랄트랜스가 여기에 대응하지 못하는 부분이 많습니다. Windows 7 - 사실 이게 제일 속편합니다. 이거 자체로는 문제되는 부분...  
143 Talk ATCode 버전업에 대해 - 관리자님 봐주세요.. [1] whoami 9241   2008-07-26 2008-07-27 02:35
오랫동안의 (.. 그리 오랫동안은 아닌 것 같은 기분도 들지만) ATCode 테스트 버전의 테스트로 SOW 모드가 어느정도 안정이 되었다고 생각됩니다. 그래서 기존 ATCode 에 융합해서 버전업을 하고 싶은데 어떻게 했으면 좋겠습니까? 그냥 SVN 내에서 커밋만 하...  
142 Talk RLCmd, KoFilter 의 디버그 로그 기능에 대해.. whoami 9246   2008-07-26 2009-01-06 01:26
슬슬 RLCmd와 KoFilter 의 테스트버전 딱지를 떼어줘야겠는데요, 디버그 로그 기능을 뺄까 그냥 놔둘까 생각중입니다. 어떻게 하면 좋을까요? 1. 필요하므로 그냥 놔둔다. 2. 없애고 로그기능만 넣은 디버그용 로그 필터를 하나 새로 만든다.. (단 디버그용 로...  
141 Talk 필터 3개 커밋 완료했습니다. [2] Hide_D 9263   2008-08-11 2009-01-06 01:06
HK2FK KoFilter TextDump whoami님이 안하셨길래 대신; RLCMD는 해도 괜찮을 것 같긴 한데, 이건 안하나요?  
140 Talk 함수, 변수 작명법 잘 정리된곳 없나요; [1] Hide_D 9291   2008-08-03 2009-01-06 01:00
결국 소스로 올려야하니까 좀 정리는 해둬야겠다.. 싶어서 번역쪽은 그냥 0.2버전(캐시 초기화) + 약간의 강화로 변경  
139 Talk DenyWord 변경한 내용입니다 Hide_D 9493   2008-09-11 2008-09-11 23:04
1. 일단 EXACT를 추가했습니다. 정보(옵션버튼), 플러그인초기화부분, DenyWord클래스의 초기화부분이 변경되었고 실제 처리부분에서는 먼저 처리를 해준 다음 if문 대신 루프의 n값을 0으로 고쳐 루프를 돌지 않도록 처리했습니다. 2. 1바이트인지 확인하는 ...  
138 Talk VB용 커스텀스크립트 Hash 함수 [2] HaruKaze 9835   2009-01-05 2009-02-14 11:01
비주얼베이직에서 사용할 수 있는 커스텀스크립트 Hash 생성 함수입니다. 비주얼베이직에서는 이진 변환과 이진 연산을 할 수 없기 때문에 이진 변환과 연산을 할 수 있게 해주는 함수를 작성하여 만들었습니다. - 정수를 이진 문자열로 변환하는 함수 - 이진...  
137 Talk 현재까지 작업물 + 에러 OTL [2] file Hide_D 9891   2008-08-03 2008-08-03 21:08
 
136 Talk CustomSD 원문 단어 흘리기 결과. [2] whoami 9910   2008-08-10 2009-01-06 02:06
제가 다른분이 제작하신 플러그인 테스트를 하게 될줄은.. 어쨌든. 원문 - 誰だ⑤ 誰なんだよ⑤@n美奈⑤ そいつは誰なんだ⑤ 번역 - 누구다⑤ 누구이에요놡@n미나⑤ 그 녀석은 누구야 놡 단어 흘리기 (?) 가 되다 안되다 하는군요. 중간에 "놡" 은 된 것이고.. ⑤ ...  
135 Talk 관리자님께 '옵션코드 입력'에 관해서 요청~ Hide_D 9990   2009-01-03 2009-01-03 11:02
일반적으로 아랄트랜스에서 '옵션'을 긁어 온다면 두가지 방법으로 긁어올수 있습니다. /a:ATCode{HOOK(0x004016B0,TRANS([ESP+0x8],PTRCHEAT))} /f:DumpText{SET(10100)} /t:ezTransXP{} 이 형식과 HOOK(0x004016B0,TRANS([ESP+0x8],PTRCHEAT)) DumpText{SET(...  
134 Talk 다음 계획 [1] Hide_D 9995   2008-08-10 2009-01-06 01:33
1. 개행 문자 처리 사용자가 정한 문자열(hex나 문자열중 하나 선택해서 입력)으로 벽을 뚫지 않도록[...] 개행문자를 처리해주는 기능 번역률 향상도 기해 할 수 있을듯. 2. 사용자 대본 기능 관련 http://koreajapan.pe.kr/make.htm 이녀석 문법 귀찮네요[.....  
133 Talk 으아아앍 SVN [1] Hide_D 10267   2008-09-27 2009-01-06 01:24
구조가 꼬였네요 orz 어쩌지[...]  
132 Talk RLCmd, KoFilter 의 디버그 로그 기능에 대해 - 2 whoami 10308   2008-07-28 2009-01-06 01:26
현재 정식버전에 디버그 로그기능은 살아있습니다. 단, 일반 사용자가 건드릴 수 없도록 옵션창에는 빠져 있습니다. 사용하시려면.. 멀티플러그인의 옵션 직접입력 창에서 집어넣거나 바로가기 편집에서 직접 넣어주시기 바랍니다.  
131 Talk 하루카 원문 [1] 나는누구인감? 10337   2008-09-16 2008-09-17 01:00
원문  
130 Talk 죄송해요 ㅠ_ㅠ SVN 위치 trunk -> trunk2 로 옮겨주세요. Hide_D 10477   2008-10-01 2009-01-06 01:24
제가 세팅을 잘못한 모양인지 trunk 그 상태로는 도저히 원상 복구가 안되네요 ㅠ_ㅠ 죄송합니다 위치를 trunk에서 trunk2로 바꿔주시면 감사하겠습니다  
129 Talk AT 0.3 재설계 프로젝트 [1] 아랄 10551   2011-04-16 2011-04-17 09:52
1. 인젝터-서버 방식 2. IDE = vs2010 3. AT 0.3에서 시도하려 했던 중복 기능의 모듈화는 유효, 모듈 명명은 언제든 변할 수 있음 FontMapper, UITrans 4. 스크립트 엔진 = v8 5. 각 플러그인은 운용중인 파일을 반환하는 인터페이스를 가져야 함 6. Launcher...  
128 Talk 토모요 애프터...... [2] file whoami 10576   2008-08-26 2009-01-06 02:04
 
127 Talk 작전명. '누덕누덕' 작전 시작 Hide_D 10674   2011-02-18 2011-02-18 00:02
AralTrans 0.2에서 시작해서 눈꼽만큼씩 고쳐나갈 생각입니다. 주 타겟 OS : Windows 7 32bit 목표 일자 : 2012년 오기 전 PS : JSCustom 프로젝트는 연기되었습니다.  
126 Talk FixLine 예상 작동 방식 [1] file Hide_D 10715   2008-08-23 2009-01-06 02:04
 
125 Talk 귀차니즘 발동 Hide_D 10755   2008-07-18 2009-01-06 01:00
현재 프로그래밍을 공부하면서 플러그인을 만드는 관계로 진척속도가 좀 많이 느립니다 =ㅅ=;; 그냥 플러그인 0.1 내놓고, 나중에 마저 개발해야겠네요. 데굴데굴