티스토리 뷰

Application/Debug

[해킹] Inside Of Tsearch

알 수 없는 사용자 2006. 6. 30. 01:59
이 글들을 읽을땐 C나 Asm에 대한 약간의 지식이나 API에 대한 사전 지식은 도움이 됩니다.

Inside Of Tsearch
티서치 살펴보기
Written by A #Dual_Root




서론

이번강좌에서는 Tsearch로 불리는 Memory Finder

툴에 대해서 알아보자. 왜 많은 Memory Finder

중에서도 하필이면 Tsearch 인가? 가장 강력하기

떄문이다. 특히 AutoHack이라 불리는 BPM 기능은

Memory Finder 툴에 정말 잘어울리는 기능이라고

생각된다. 그러면 차근 차근 티서치를 알아보자.







필요한 도구들

- T-search 1.6






대상 프로그램 링크

- ttester.exe






본문



대상 프로그램의 모습


1.How to Search Value?

우선 우리의 타겟 프로그램에 열고 엑세스 권한을

얻는것이 첫번쨰 일것이다. Tsearch키면 보이는

창의 주메뉴에 있는 OpenProcess를 클릭하여

우리의 대상 프로그램인 ttester.exe를 연다.


그러면 OpenProcess 버튼및의 돋보기 버튼이

활성화 된것을 볼수 있다. 돋보기 버튼을 클릭하여

보자. 첫번쨰 인자인 Search는 3가지로 나뉘는데

Exact Value(),Range(값범위),UnKnow Value(모든값)

위의 세가지이다. 두번쨰 인자는 Value로서 Search

인자에서 Exact Value를 선택했을떄의 Value는

검색할 값을 묻는것이다.Range를 선택했을떄는

Value1 과 Value2 로 늘어나는것을 볼수있다.

Value1 부터 Value2 까지의 값을 모두 검색하는

것이다. 예를들면 Value1에 10을 적었고 Value2에

12 를 적었다면 10,11,12 라는 값은 모두 검색

되어 보여지게 된다. UnKnow Value상태는 Search

부분이 비활성화 된다. 한마디로 값을 입력할필요

가 없다는 뜻이다. 세번쨰 인자인 Type은 바이트폭

을 나타내는것으로 6가지를 재공한다. 순서대로는

Byte[1],워드[2],이중워드[4],사중워드[8] 그리고

플로트,더블 등의 타입을 재공한다. 이를 잘조화

하여 검색하면 효과적인 검색이 가능하다.

예를 들어 Search 는 Exact Value,Value는 1

Type은 1Byte로 해놓고 Search를 했다고 하자.

그러면 많은 값들이 Search 됨을 볼수 있다.


이렇게 값이 많이 잡혀서야 우리가 원하는게 뭔지 알수없다.

그래서 있는 기능인 Next Search는 바로

현재 Search 되어 돋보기 밑의 리스트에 추가

되어 있는 주소들 사이에서만 검색을 하는 것이다.


밑에와 같은 많은 Search 방식들을 재공하고 있다.

Has Changed: 이전 검색값과 값이 변경되었나?

Has Not Changed: 이전과 같은가?(변화가 없는가)

Has Increased: 값이 이전보다 커졌는가?

Has Decreased: 값이 이전보다 작아졌는가?

Range: 범위로 재검색

그외의 것들은 확장기능으로 by는 얼마나 증가됬거나

감소 되었는가 하는 값을 적어줘야 하고 %가 붙은

것들은 증가된 %를 적어주면 되는 것이다.이런식으로

확실한 Search가 가능하게 되는 것이다.

2.How to Use AutoHack?

이번강좌의 핵심인 AutoHack에 대하여 알아보자.

우선 AutoHack 기능을 사용하기 위해선 우선

주메뉴의 Autohack - > Enable debugger 를 클릭하여 주어야 한다.

그다음 우리의 타겟 프로그램인 ttster.exe 를 보면

많은 게이지들이 움직이고 있고 밑에 세가지 버튼들

이 보일것이다. 그중에서 첫번쨰 버튼인 Pause 버튼

을 누른다. 그러면 움직이던 게이지들이 중지된다.


먼저 가장위에 있는 값인 Lives의 값을 Search 해보자.

본인 같은 경우는 Pause 했을떄의 값이 5였다.


그럼으로 New Search 에서 Search 는 Exact Value

Value는 5 Type은 1byte 로 해놓고 검색을 하여

보았다. 역시 아주 많은 값들이 검색되어 어떤게

우리가 원하는값인지 알수 없었다.


대상창으로 돌아가서 다시 Un Pause 버튼을 누른다.

Lives의 값이 바뀐다음 다시 Pause 를 누른다.


이제 다시 Tsearch 화면으로 돌아와서 Next Search

돋보기 버튼을 클릭한후 이전 New Search 에서

Value만 5대신 4를 검색한다. 본인같은 경우는

딱 한개의 값만이 남았음으로 값을 찾을수 있었다.

하지만 한번에 안될경우도 있는데 그럴경우는 계속

반복해주며 1~5 이내가 남을 떄까지 반복하여 준다.


이제 찾은 주소인 0x403017을 더블 클릭하여 준다.

그러면 그림 처럼 오른쪽 리스트로 옮겨짐을 볼수

있는데 그상태에서 마우스 오른쪽버튼으로 클릭하면

그림과 같은 팝업메뉴를 볼수있다. 그중에서

가장 밑에 있는 AutoHack을 클릭하여 준다.


그런다음 그림처럼 Tsearch의 주메뉴에서

AutoHack ->AutoHack Window 를 클릭하여 주면

다음과 같은 창이 뜬다. 우리는 이창을 보며 걸려

들길 기다리면 되는것이다.


ttester.exe 를 다시 띄우고 Pause 버튼을 눌러보자.


그림 처럼 0x403017에 엑세스 하는 부분들이

낚였음을 볼수있다. 낚인것들을 살펴보자 첫번쨰

0x401217은 Lives를 1씩 감소 시키는것이고 두번쨰

0x40121F는 Lives가 0 이 되었을떄 이를 다시 10으로

만들어 주는 것이다.


이제 이를 수정시키는 방법을 알아보자.

첫번째 쉬운 방법으로 주소옆에 있는

□ 체크 박스를 클릭하여 체크하여 주면 NOP THIS LINE이

걸리게되어 작동하지 않게 된다. 실제로 그런지 한번

확인해 보기 바란다.

두번쨰 방법은 원하는 주소를 클릭하고 하단부에 있는

Disassembler 버튼을 클릭하면 그 부분이 Disassemble

되어 보여지는데 그상태에서 마우스 오른쪽 버튼으로

클릭하고 Assemble 버튼을 클릭하여 준다.


그러면 뜨는 다음 과같은 창에서 dec 의 반대 어셈블리

명령어인 Inc 로 바꾸고 Assemble 버튼을 클릭한다.

(어셈블리어 에 관한 것은 기초 강좌를 참조하라)

이제 ttester.exe 의 창을 띄우면 Lives의 값이 거꾸로

올라가고 있는것을 볼수 있을것이다.


Lives의 값 말고도 Moneys와Timer도 이와 같은 방법으로 할수

있다. 하지만 밑의 프로그레스바는 그렇지 않다.

정확히 지금 값이 뭐인지 우린 알수 없다. 이럴떄

사용하는 방법을 알아보자.


위의 그림과 같이 프로그레스바(Health)가 최대치

일때 Pause 버튼을 눌러 일시중지 시킨다.

그런후 티서치의 New Search 에서 Search는

Unknow Value에 맞추고 Type은 1Byte 에 맞추고

Ok를 누른다. 많은 값들이 잡혀 보일것이다.


ttester.exe 의 창으로 돌아가 Un Pause 버튼을

눌러 일시중지를 풀어주고 어느정도 감소할떄

까지 기다렸다가 어느 정도 감소되면 다시

Pause 버튼을 눌러 일시중지 시키어 준다.


그런후 티서치 창에서 위의 그림과 같이

Search Next(두번쨰 돋보기)를 클릭하고

Search 는 Has Decreased(감소한것)

Type은 1Byte로 해놓고 Ok를 눌러 검색한다.

그런다음 다시 ttester.exe의 UnPause버튼을

눌러 일시중지를 풀어주고 어느정도 감소하면

다시 Pause 버튼을 눌른후 Has Decreased를

검색하는 방법으로 반복하다보면 ...........


위의 그림과 같이 0x40303A가 프로그레스바의

값임을 알수 있다. 그냥 벨류를 Freeze시켜도


되지만 우리는 Easy Write를 이용하여 보자.


더블 클릭하여 오른쪽 테이블로 옮기고



아까처럼 마우스 오른쪽 버튼을 클릭하면

나오는 메뉴중 가장 아래에 있는 AutoHack 버튼을


클릭 해준후 AutoHack Window를 통해서 0x40303A


에 어떤 메모리 엑세스 동작이 일어나는지 지켜보자.




저는 위와 같은 결과를 얻을수 있었습니다. 첫번쨰

0x4012E7은 감을 한개씩 감소시키는 것이고


두번쨰 0x4012EF 에서는 프로그레스바의 값이0이


되었을떄 이를 다시 최대치 값인 0x64로 만들어주는


기능을 하는 명령어 임을 볼수있다. 우리는 프로그레스


바를 감소 시키는 부분인 0x4012E7 부분을 수정하여


2씩 증가 시키도록 해보자.




위의 그림과 같이 흰 종이 모양 버튼을 클릭하면

EASYWRITE INTERPRETER 라는 창이 뜨게된다.


이창을 이용할떄 가장 중요한것은 어느 빈부분


으로 점프하여 사용할것인가 하는것인데 빈칸을


검색하여 주는 이툴(tcct)을 이용하여 빈칸을 검색


토록 하자.[만약 프로그램에 빈칸이 없다면


내 페이지의 섹션추가법(빈공간생성)을 참조토록 하라]


어째든 지금부터 감소하는 대신 2씩 증가 시키게


해볼것이다. 방법은 두가지이다. 첫번쨰 방법은


DEC(감소)의 반대 어셈어인 INC(증가)를 두번해


주는 방법이며 두번쨰는 ADD(더하기) 명령어를


이용하는 것이다.



위의 그림과 같이 나는 작성하였다. 작성후


Check 버튼을 클릭하여 구문의 오류를 체크한후


Ok 버튼을 눌러준다. [Tmk 버튼을 통하여 Hex


코드를 알수있다] 저는 위의 예제그림에서


어셈블리어 add를 이용하였지만


inc를 두번 사용 하여줘도 된다.


Ok 버튼을 눌러주고 구문의 오류가 없다면




위의 그림과 같이 오른쪽에 체크 박스가 생기는데

체크 박스를 클릭하여 체크 상태로 만들어 주면


적용 상태 즉 적용 완료 되어 우리가 코드 한대로


프로그레스바가 두칸씩 증가함을 볼수 있다.



출처: http://dualpage.muz.ro/