본문 바로가기

쓰기

문자열 길이가 고정되어서

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

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



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


문자열 길이를 해당 컨텍스트가 가진 주소에 반영하는 구조로요.
분류 :
Talk
조회 수 :
15027
등록일 :
2010.01.19
03:14:30
엮인글 :
https://arallab.hided.net/31945/428/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
149 Talk 죄송해요 ㅠ_ㅠ SVN 위치 trunk -> trunk2 로 옮겨주세요. Hide_D 10477   2008-10-01 2009-01-06 01:24
제가 세팅을 잘못한 모양인지 trunk 그 상태로는 도저히 원상 복구가 안되네요 ㅠ_ㅠ 죄송합니다 위치를 trunk에서 trunk2로 바꿔주시면 감사하겠습니다  
148 Talk SVN 말이죠 ㅠ_ㅠ [3] file Hide_D 11128   2008-09-29 2009-01-06 01:24
 
147 Talk [질문] J2kEngine.dll 에관해 이것저것 [3] 호기심맨 16881   2008-09-29 2009-01-06 01:24
회원님들이 올려주신 소스와 답변덕에 더디지만 조금씩 EzTranceXp안에 UserDict.jk 파일 편집프로그램을 완성해 나가고 있습니다. 다시 한번 모든분들께 감사드리고요 (꾸벅) 염치없지만 다시 막힌부분에서 질문 또 올리게 되었습니다. 1. dll 파일에서 함수...  
146 Talk ...? [3] file 북극 12001   2008-09-28 2008-12-30 08:55
 
145 Archive [플러그인] OutRuby 테스트 버전 20080927 [2] file Hide_D 10236   2008-09-27 2008-10-12 03:58
 
144 Talk 으아아앍 SVN [1] Hide_D 10267   2008-09-27 2009-01-06 01:24
구조가 꼬였네요 orz 어쩌지[...]  
143 Archive [플러그인] DivideLine 테스트 버전 20080927 [1] file Hide_D 10926   2008-09-27 2009-01-06 01:24
 
142 Talk 픽스 라인 연기로 인한 임시 대책 Hide_D 10821   2008-09-26 2009-01-06 01:24
본래 목적인 FixLine이 완성이 늦춰지면서 약간 작전을 변경하도록 하겠습니다. FixLine을 완성시키는 것은 유지하고 FixLine을 3개로 쪼갭니다. OutRuby : FixLine의 TextOnly옵션 DivideLine : FixLine의 Base 기능(DCOnly 대체용) FixChar : FixLine의 Add...  
141 Archive [플러그인] DenyWord 테스트 버전 20080924 [1] file Hide_D 10891   2008-09-24 2009-01-06 01:24
 
140 Talk 일단, 옵션창 이렇게 생기면 되나요? file Hide_D 11569   2008-09-22 2009-01-06 01:25
 
139 Talk 조만간 멀티플러그인은 기본 기능으로 흡수시킬까 합니다. 아랄 11346   2008-09-21 2009-01-06 01:25
그리고 ExtTextOut문제를 빨리 해결.. 기리기리 최신 패턴에 대한 업데이트 SVN 저장소 정리하기 등등.. 할게 많군여 ;;  
138 Talk 히데님께 문의 해요! [2] file 라파에 11922   2008-09-21 2009-01-06 01:25
 
137 Archive [플러그인, 소스] DenyWord 테스트 버전 20080921 file Hide_D 13927   2008-09-21 2009-01-06 01:25
 
136 Archive [플러그인, 소스] DenyWord 테스트 버전 20080917 file Hide_D 9665   2008-09-17 2009-01-06 01:25
 
135 Talk 하루카 원문 [1] 나는누구인감? 10337   2008-09-16 2008-09-17 01:00
원문  
134 Archive [플러그인, 소스] CustomScript 테스트 버전 Archive(09.21 02:50갱신) [1] file Hide_D 17632   2008-09-15 2009-01-06 01:57
 
133 Archive [플러그인, 소스] OriginalText 테스트버전 [4] file Hide_D 13990   2008-09-12 2009-04-22 11:10
 
132 Archive [플러그인, 소스] FixLine 테스트 버전 Archive2(09.14 12:49갱신) [1] file Hide_D 16618   2008-09-12 2009-01-06 01:57
 
131 Talk DenyWord 변경한 내용입니다 Hide_D 9493   2008-09-11 2008-09-11 23:04
1. 일단 EXACT를 추가했습니다. 정보(옵션버튼), 플러그인초기화부분, DenyWord클래스의 초기화부분이 변경되었고 실제 처리부분에서는 먼저 처리를 해준 다음 if문 대신 루프의 n값을 0으로 고쳐 루프를 돌지 않도록 처리했습니다. 2. 1바이트인지 확인하는 ...  
130 Archive [플러그인, 소스] ATCode 테스트 버전 20080911 [3] file whoami 9210   2008-09-11 2009-01-06 01:01