AssemBly 2020. 4. 10. 16:13

Assembly 명령어 소개!

mov,lea 는 데이터이동

 

add, sub, inc, dec 는 논리,연산

 

cmp, jmp 는 흐름제어

 

call, rat 은 프로시저

 

push, pop 는 스텍조작

 

mov = 데이터 이동할때 사용함

 

lea = 주소값을 옮길려고 할때 사용함

 

add = 레디스터나 메모리의 값을 더하기 할때

 

sub = 레지스터나 메모리의 값을 뺄셈할때

 

dec = 값을 1 감소 시킬때

inc = 값을 1 증가 시킬때

 

cmp = 레지스터와 레지스터의 값을 서로 비교할때

 

jmp = 특정한 곳으로 분기 시킬때

 

call = 프로시저를 호출하고싶을때

 

ret = 호출했던 바로 다음 지점으로 이동시킬때

push = 값을 스택에 저장하고싶을때

 

pop = 값을 스텍에 삭제하고 싶을때

'AssemBly' 카테고리의 다른 글

[AssemBly] 메모리 기초강의  (0) 2020.04.10
[AssemBly] 기본적인 명령어 모음  (0) 2020.04.10
posted by 핵커 커뮤니티
:
Cheat Engine 2020. 4. 10. 16:09

준비물

1. 치트엔진 6.8src https://m.blog.naver.com/hack_kr/221891620241

2. 라자루스 http://www.lazarus.freepascal.org/index.php?page=downloads

3. asr http://gusqls9901.tnaru.com/files/mc/board/0/220/actualsr_lbr_1_rbr_.zip

4. windows driver kit http://software.naver.com/software/summary.nhn?softwareId=MFS_104443

5. 아크로 에디터 http://www.acrosoft.pe.kr/board/63446

 

주의사항

driver kit 설치시 전부 체크후 설치할 것!

 

1. 6.8src를 c드라이브에 압축해제후 DBKKernel 풀더안의 ce.bet을 오른쪽 클릭후 아크로에디터로 열기

 

2.copy .\obj%BUILD_ALT_DIR%\i386\지정하고픈 엔진의 이름 5글자.sys "..\Cheat Engine\bin\지정하고픈 엔진의 이름 5글자.sys" goto successend: x86success:

  copy .\obj%BUILD_ALT_DIR%\amd64\지정하고픈 엔진의 이름 5글자.sys "..\Cheat Engine\bin\지정하고픈 엔진의 이름 5글자.sys" goto successend

 

굵게 처리된 부분을 수정해야하며 영어와 숫자로만 엔진의 이름을 정해야함. 수정후 꼭 좌상당의 저장을 누를것.

 

ex) obj%BUILD_ALT_DIR%\i386\star1.sys"

 

3. 저장을 완료한 후 다시 DbkKernel 풀더의 sources.ce를 열어 targetname에 앞서 ce.bet에 수정했던 엔진의 이름을 입력후 저장

 

ex) targetname=star1

 

4. windows driver kit에 Checked Build Environment을 열게되면 명령프롬포트창이 열림. (32비트용 x86, 64비트용 x64) 

   프롬포트창에 cd c:\CheatEngine64src\DBKKernel 을 입력해준다. (이는 자신이 소스파일을 설치한 경로를 설정해 주어야하며 앞의 예제는 c드라이브에 압축을 풀었을시 기본경로임.)

   입력후 다시 ce를 입력. 

   "1개의 파일이 복사되었습니다." 라는 말이 나와야 정상적으로 성공. 만약 실패시 처음부터 다시 시도할것.

 

5. cheatengine64src풀더안의 bin풀더를 열게되면 새롭게 복사한 sys파일이 생성되어 있어야함. 

 

ex) ...\bin\star1.sys

 

6. 다시 src풀더로 돌아가 cheatengine.lpi를 실행. 뭔가 복잡한 창이 뜨지만 우리와는 별 관계없음. 

   상단 툴바에 project->project inspector 실행.

   검색창에 main을 검색후 mainunit2.pas를 더블클릭

 

7. resoursestring부분의 ceneme='엔진의 이름' 부분을 입맛에 맞게 변경후 컴파일 진행 (단축키 F8)

 

ex) ceneme='핵커엔진' 

 

8. 다시 DBKKernnel풀더로 돌아가  IOPLDispatcher.c 파일을 아크로에디터로 열기

   많은 단어들이 나오는데 우리가 수정해야할 부분을 검색(ctrl+f)하여 찾아줌

   우리가 수정해야하는 부분은 ReadProcessMemory, WriteProcessMemory, GetMemoryRegionData 임.

   검색하게되면 ntStatus=ReadProcessMemory( (DWORD)pinp->processid-0x0000,null, (PVOID)pinp 블라블라 나올텐데

   빨간부분을 수정해야함. 자신이 원하는 우회값을 숫자로 입력 단, IOPLDispatcher.c를 수정할땐 반드시 -를 붙여야함.

 

ex) processid-0x5480

   

    3개(ReadProcessMemory, WriteProcessMemory, GetMemoryRegionData)를 검색하여 모두 같은값으로 수정해야함. 

 

9. 다시 6번과 같이 치트엔진을 열어주고 마찬가지로 상단 툴바의 project->project inspector를 실행. 검색창에 dbk를 검색하고 dbk32\DBK32functions.pas를 더블클릭후

   검색기능으로 input.ProcessID:=handlelist[i].processid 를 검색후 input.ProcessID:=handlelist[i].processid+0x0000의 빨간부분에 8번에서 설정한 우회값을 재입력

   단, 8번에서는 반드시 '-'를 붙여야 했지만 여기서는 반드시 '+'를 붙여야함.

 

ex)input.ProcessID:=handlelist[i].processid+0x5480

*프로세스 아이디 제일 쉬운 우회방법입니다. 실제사용은 매우 불가능합니다! 참고바랍니다.

 

posted by 핵커 커뮤니티
:
Cheat Engine 2020. 4. 10. 16:08

다중 포인터 추척하는 두번째 방법입니다.

튜토리얼에 써져있는 값을 스캔합니다.

포인터 스캔 옵션을 지정해주는 창이 뜹니다!

기본적으로 설정됐으니 OK만 클릭해주시면 됩니다.

경로는 삭제하기 편한 바탕화면으로 이동하고 파일이름 또한 변경하고 난후 저장합니다.

모든 포인터를 찾아냈습니다. (어마어마하죠)

튜토리얼에서 Change pointer 클릭하게 된다면 포인터의 주소가 모두 봐뀌게 됩니다.

그리고나서 봐뀐값을 다시 스캔합니다.

Pointer scanner 클릭후 Rescan memory - Removes pointers not pointing to the right address을 클릭해주세요.

새로 스캔한값의 주소를 적어주시고 ok 버튼 클릭합시다. 그리고나면 또 저장하는창이 뜨면 확인하고 덮어쓰겠습니까? 라는 문구 나오면 예 라고 클릭하시면됩니다.

딱 하나만 나왔네요 더블클릭하여 치트테이블로 보내시면 됩니다.

벨류 [5000] 으로 변경한후 ok 누릅시다.

넥스트 버튼이 활성화 됐네요! 확실하게 첫번째방법보다는 간단하다고 생각합니다

수고하셨습니다. 당신은 치트엔진의 튜토리얼을 완료하셨고 튜토리얼 위주로 공부하시고 다른 스캔방법이 더 있나 연구or확인 해보시길 바랍니다.

여기까지 잘 따라오셨다면 고생하셨습니다.

앞으로도 치트엔진에 대해서 궁금한거나 오류나거나 그 외 여러사항들이 있다면

부담없이 댓글로 적어주시면 답변해드리겠습니다.

비밋댓글로도 받고있으니 부담없이 주세요!

posted by 핵커 커뮤니티
:
카테고리 없음 2020. 4. 10. 16:05

다중 포인터 추적해보자

튜토리얼에 나온 값을 스캔합시다.

치트테이블의 값을 오론쪽 클릭 Findout what accesses this address 클릭합시다.

그러면 새창이 뜹니다. 값에 변화가 있을때 누가 이 주소에 접근했는지 추적해주는 창입니다.

 

튜토리얼에서 Change value를 클릭해줍니다.

 

Change value를 클릭할때마다 값이 변하죠?

 

그러면 값을 쓰기/읽기 위해 접근하는 것들을 모두 감지해 목록에 표시해줍니다.

 

참고로 진행중에 Change pointer를 클릭해버리면 포인터위치가 다 변해버립니다.

 

실수로라도 클릭하지 않도록 주의하세요.

2개가 나왔네요 여기서는 하나는 쓰기 하나는 읽기입니다.

mov eax,[esi+18]이 읽기입니다.

이유 > Findout what writes this address로 볼때 mov[esi+18,eax가 나와서 입니다.

그러니 mov eax,[esi+18]을 더블클릭합니다.

TIP - Findout what accesses this address = 쓰기 + 읽기 탐지

Findout what writes this addresswrites = 쓰기만 탐지

포인터의 상세한 정보가 나타납니다.

하지만 저희가 봐야할곳은 [OOOOOO]입니다.

esi > 001FFA78 이네요~ 그리고 오프셋은 18이네요!

값이 나왔네요

여기서는 메모장을 활용하세요.

첫번째

주소

[0027FBF0]

오프셋

[18]

방금 치트테이블에 등록한것을 오른클릭 - Find out what accesses this address 클릭합시다

튜토리얼에서 Change value 클릭하세요

mov eax,[esi]더블클릭하고 esi와 offset을 적어둔후 닫아주시면됩니다.

esi > 0027FBF0 / 오프셋은 0이네요

값 > 0027FBF0 를 스캔 > 주소 02FCE01C 를얻었습니다.

이거 또한메모합시다.

첫번째

주소

[0027FBF0]

오프셋

[18]

두번째

주소

02FCE01C

오프셋

0

방금 등록한 값을 오론쪽으로 클릭합시다.

튜토리얼에서 Change value를 클릭합시다

esi > [02FCE008] 오프셋 > [14] 이네요

띠~용 값이 두개나 나왔네요 당황하지말고 둘다 해보시면 됩니다!

튜토리얼에서Change value를 클릭했을때 하나는 아무것도 안뜨고 다른하나는 하던대로 뜹니다.

찾았다! 이 가짜놈 버립시다.

여기에서 또 메모 하셔야합니다 ^^

순서

1

주소

[0027FBF0]

오프셋

[18]

순서

2

주소

02FCE01C

오프셋

0

순서

3

주소

0029DFCC

오프셋

14

esi > 0029DFC0 오프셋은 0C

오우 드디어 찾았습니다. 원하고 원하던 초록색 값...

순서

1

주소

[0027FBF0]

오프셋

[18]

순서

2

주소

[02FCE01C]

오프셋

[0]

순서

3

주소

[0029DFCC]

오프셋

[14]

순서

4

주소

[0057C3A0]

오프셋

[0C]

어드레스 메모리뷰어 클릭합시다.

포인터 클릭한후 코드값/오프셋 메모한거 적으시면 됩니다!

처음에 있던값이랑 현재에 있던값이랑 동일하다면 성공한거입니다.

벨류 [5000] 으로 변경한후 OK 클릭!

짜짠~ 넥스트버튼이 활성화가 됐네요!

posted by 핵커 커뮤니티
: