레나 듀토리얼 - 4
with 보안 프로젝트
이번 레나의 시련은 체험판을 크랙을 진행하는 것입니다.
이렇게 인스톨을 그냥 진행을 해봅니다.
유저이름을 적어달라고 하는데 그냥 아무거나 적어 줍니다
전화번호부를 관리하는 프로그램인데
레나 4번은 이 프로그램을 크랙을 하는 겁니다.
이렇게 프로그램을 설치 했습니다.
이것은 2000년대에 나온 프로그램입니다.
다운로드를 진행한 파일의 위치를 열어줍니다.
ㅁㄴㅇㅁㄴ체험판 크
이 파일위치로 왔습니다.
C:\Program Files (x86)\PixtopianBook
C:\Program Files\PixtopianBook
(xp 에서는)
이파일을 올리디버거로 열어봅니다.
열은 뒤에 이곳의
options -> Exceptions 옵션에서 전부 체크가 해제되있는지 확인합니다.
확인을 하고
F9로 전부 진행을 해보면
POP ESI 에서 이제 그만 멈추게되는데
그래서 메모리 상태를 보니까 40만 번지에 올라가게됩니다.
예상과는다르게 쌩뚱맞게 40만번지에 올라와있는것입니다.
이게 실제로 안티디버깅 기법으로 만든것입니다.
다시 F9를 눌러봐도 FFFFFFFF 로 가게 되고있습니다.
무시를하면 실행자체가 되지않는데
이럴때는 Shift+ f9를 눌러주면 이것을 넘어갈 수 있습니다.
계속이게 반복이되면서
잘못된 루틴으로 빠지게되는데
잘못된걸로 빠지니까 Process terminated 가 됬습니다.
이것을 안티 디버깅 기법이라고 합니다.
결국 실행을 못하기때문에 이것을 우회를 해야하는데
올리디버에서 바로우회할수있도록
만약에 anti dll에서 kernel32 dll이나
exception이 발생하게된다면 이것을 무시해라
이것은 일부러 넣은거니까 다무시하게 넣어놓는것입니다.
ignore저쪽은 구역이라는 뜻인데 0000000~ FFFFFFFF 까지 에러가 나게되면 무시하겠다.
라는 의미라 생각하면 됩니다.
예외를 발생하면 무시하겠다.
이 예외가 발생하게되면 프로그램이 혼자 동작하게되면 알아서 처리를 한다.
EXCEPTION 을 혼자서 처리하게되는데 우리가 만약에 디버거에 붙게되면
디버거에 신호를 줍니다. 중간에 멈추고
이런것들을 방지하게 체크박스를 하면 이런게 걸리지가않습니다.
F9 를 하면 실행이 잘됩니다.
F9 를 누르면 아까와는 다르게 잘 실행이 됬습니다.
프로그램을 잘보면 군대군대 unregistered version이 있습니다.
그래서 우리는 마치 상용버전처럼 모양만 그럴싸하게바꿔줍니다.
그래서 메모리상태에 가서 이 문자들을 검색한 다음에 편집을 해줍시다.
ctrl+ b를 눌러서
unregistered를 검색을 해줍니다.
그러면 문자가 뜨게됩니다.
unregistered 를 확인할 수 있다.
여기에 메모리 상태를 보면
Pixtopiad의
resource 부분 입니다
resource 부분이 무엇을 하는 것이냐면
어떤 프로그램에 필요한 자원들을 여기다 넣어 넣습니다.
문자열 같은 것도 하나의 자원인데
게임은 그래픽이나 아이템등 갖가지 정보를 리소스에 저장을 하는 것이구요
이런 unregistered 문구들도
리소스 영역에 다들어있습니다.
일단은 다시 검색을 해서
진행을 합니다.
이렇게 검색을 완료하면 이렇게 덤프 창이 뜨게되는데
아까는 다른것이 검생이됬고
문자열 끝을 의미하는 00 으로 끝나면 문자의 끝이라고 인식을하는데
유니코드라서 아스키는 1바이트가 문자열 하나인데 유니코드는 문자열 2개가 하나로 나타나서 조금 양식이 다르다
그래서 null byte도 0이 4개가 들어가게된다 0하나에 2개 0하나의 2개 이기때문
그래서 문자를 보여주는데
우리는 보고싶은
004E4ACA 부분을 찾아 갑니다.
Hex dump에서
아까봣던 것은 메모리 덤프창
그래서 pixtopia 부분이 존재하게됩니다.
그래서 ctrl + e를 눌러서 편집을 해봅시다.
50을 누르고
우리가 필요한 부분은 뒤에 UNREGISTERED VERSION 을 없애는 게 중요하니까
이것을 전부 뒤에 부분을 NULL로 바꿔주기 위해서 00을 넣어봅시다.
이렇게 UNREGISTERD VERSION을 없애버렸습니다. 00 을 쭉넣으면된다.
그리고 마우스 오른쪽을 넣고
copy to executable file 을 합니다.
그리고 save file을 합니다.
파일을 저장하고
보면
원래는 이렇게 unregistered version이 있었지만
이렇게 잘 변경이 됬습니다.
이제 다음번은
이 변경된 파일을 올리디버거에 열어주고
이번에는 This is an unregistered version of PixtopianBook. 이란 단어를 없애봅시다.
메모리 상태에 들어가서
ctrl+ b를 누르고 문자열을 찾아봅시다.
이번에는 아스키 코드로 진행을 합니다.
Case sensitive는 대소문자 구분입니다.
이렇게 덤프 창에 this is an~~ 부분이 잘나오므로 이것을 또 바꿔줍니다.
an unregistered version of PixtopianBook 을
a registered version of PixtopianBook by tak
으로 바꿔줍니다.
이렇게 변경이됫고
뒷부분은 null으로 00 을 넣어줍니다.
ctrl + e를 해서 00을 계속 넣어준다,
그러면 이렇게 이쁘게 만들게됬습니다.
그리고 확인을 해보니까 또 이렇게
This is a registered version of PixtopianBook 이 잘 적용이 됬습니다.
여기서 hexdump 에도 이렇게 변경이된게 잘 적용이 됬습니다.
그래서 블럭 처리를 하고 저장을 해야한다
copy to excutable -> save file
블럭처리를 안하고 저장을 하면 잘못될수도있다
저장을 잘하니 위에 제목과 밑에 설명이 잘 저장이 됬습니다.
about에서 나오는 버젼만 이제 변경을 진행하면됩니다.
올리디버거에서 메모리상태로 들어가고
unregistered version을
아스키코드에 넣으니까 없어서
unicode로 해보니까 찾았습니다.
unregistered version v1.07이 나오게됩니다.
그래서 hexdump 창에서 찾아서 이제 바꿔줍시다.
이렇게 registered verison v1.07 로 바꿔 줍니다.
뒷부분은 00 으로 바꿔준다.
copty to executable file -> save file을한다.
빨간부분 블록 처리 안하면 안됩니다
훌륭하게 잘 크랙이 됬습니다.
기능자체는
체험판의 기능이다 겉모습만 정식버전인것처럼 되있는것이다
그래서 확인해보면 add group 을 해도 2번째까지는 잘되도 3번째부터는 오류가 납니다.
이번에는 내부적으로 바꿔봅시다. 즉 기능 제한 풀기
이 경고문이 떳을떄 프로그램을 잠깐 멈춰주고 올리디버거에서
k부분을 눌러 콜스택을 보게되면
콜된 흔적들을 볼수있다
이함수들을 누가호출했고
어떻게호출했고 어떻게 흘러갈지를 여기서 알수가있다
스택에대한 공부가 필요하다
리턴주소가 저장이되는데
프로그램이 실행된 상태에서
브레이크 포인트를 걸어놓게된뒤에
이걸 실행하시면 맨위에 CPU - main thread, module ntdll 즉 시스템dl인 ntdll입니다
이거는 이프로그램으로 올때까지 실행해라 라는 옵션을 실행하려고합니다 alt+f9
나머지dll 들이있는데
메모리에보면 이런 여러가지 dll들이있는데
다양하게있는데 이것들은 시스템에서 불러와주는거고
사용자가 불러오고 사용자가 사용하는것은
바로 이 부분 인것입니다.
우리가 올린 우리가 사용중ㅇ인 프로그램은 Pixtopia 하나인 것이다
즉 나머지들은 시스템에서 불러온 애들이고 우리가 사용중인 우리가 올린 프로그램은 저거하나가 되는 것입니다.
alt + f9 를 결국 하게되면
유저 코드까지 실행이 되게됩니다.
ok 를 눌러주게되면 경고창 이뜬다( 경고창 자체는 시스템꺼다 참고로)
그러면 다시 돌아오게된다.
이렇게 돌아오게되는데
조금만 올려보면 여기서 message box가 나오고 있다
여기 코드를 통해서 오고있는데
누군가 이함수들을 호출해서 이게 실행이되는 것이기때문에 이거보다 다른걸 따라가야할거같다.
즉 이걸 누가실행하는지 볼라면
원래는 이게 우리가 봤던 콜스텍이고
그리고 그다음거인 이것을 봅니다.
바로 여기서 아까봤던 메세지박스를 출력하는것을 여기서 불러오고 있는것입니다.
004562ED 라는 것을 CALL한다
이 함수가 호출이 될떄 몇가지 인자들이
PUSH 를 통해 넘어오고 있습니다.
여기서 리미티드의 문자를 출력함
즉아까 3 번쨰 add group을 할떄 제한됬다고 메세지창에나오는 ascii 코드가 여기서 만든것
JL 이 존재하는데 여기를 점프를 하지못하고 여기를 들어와서하는거
CMP EAX, 3 이있는데 이거보다 작다면 PUSH 로간다면
같거나 크는 경우에는 밑에 루틴을 제한되는 루틴을 걷는다
이 CMP EAX, 3 에서 3이뭐냐면 바로 그룹추가에 3개 제한하는 그거라 생각하면됩니다.
위에루틴을 거쳐 만약 만족하지못하면 3개이상을 출력하지 못하는 것
그래서 JL 을 스페이스 바를 눌러서 JMP로 바꿔줍니다.
그러면 항상점프해서 밑에 아스키 코드가 실행이 되지않습니다.
JL은 특정조건에만 점프를 하게되니까.
Copy to executable -> all modifications
하고
save file 을 하면됩니다.
그리고 프로그램을 열어보면
이제 그룹을
마음대로 정할 수 있다!!!!
마지막으로
A new group is created 를 계속 볼수있게끔 수정을 해준다.
다시 올리디버거로 킨다음에
메모리상에서 ctrl+ b 로
This is a registered를 찾습니다.
ctrl + r 을 누르면 reference 즉 참조를 볼수가있습니다.
즉 이 문자열을 어디서 참조하고 있는지를 찾아볼 수가 있습니다.
0040C237을 더블클릭을하면
이부분이 나옵니다 여기를 보면
이 JMZ 점프낫 제로 구간이 문제가 있는 것입니다.
일치하지않으면 점프하는 곳
점프를 하지 않기때문에 아스키코드 this is a registerd verison of Pixton~~ 이게 나오는 것입니다.
우리가 아무리 수정해도 상용프로그램에서는 저 문구가 나오지 않기 때문이다.
점프를 왜안하는지 봤더니
cmp EBP,907
907 과 EBP 를 비교하고잇는데
왜점프를 안하는지 봤더니
위로 올라가봤다 906 과 비교했을때는 KILLTimer 를 하기도하고
SetTimer 를 하기도하고
여기서 점프를 하게끔만 만들게 하면
이문장들이 안뜨게할수있는 것입니다.
무조건 점프로 만듭니다.
A new group is created
이 메세지가 이제 유지가 되는 것을 알 수있습니다.
체험판에서만 하는 기능들을 체험판에서 제공되는 기능들을 일부 활성화 시킬수 있는 것들을
한번 해봤습니다.
마지막으로 selection을 하고 save file을 합니다.
그러면 기능에 제한을 받지않고 체험판을 크랙하는데 성공하였습니다.
'리버싱' 카테고리의 다른 글
upx 수동언패킹 (0) | 2021.03.28 |
---|---|
레나 듀토리얼 - 3 (0) | 2021.03.26 |
레나 듀토리얼 - 2 (0) | 2021.03.25 |
레나 듀토리얼 - 1 (0) | 2021.03.24 |