모의해킹 (163) 썸네일형 리스트형 라이센스 키 알고리즘 분석하기 : 레나 챌린지 (Level 2) 오늘의 목적은 Keyfile를 만드는 거이기 때문에 해당 파일을 삭제해 준다. Keyfile를 삭제를 하면 위 와 같은 메시지가 출력이 된다. OllyDbg로 해당 파일을 열고 확인을 하면, CreatFileA는 Keyfile.dat가 존재해야지 열린다. 해당 파일에 Notepad를 열어 abcd 입력 후, 파일 이름을 Keyfile.dat으로 수정을 해준다. 해당 버퍼에 abcd가 들어갔는지 확인을 한다. abcd가 잘 들어가 있다. 해당 데이터를 몇 바이트 읽었는지 확인을 한다. 실행을 시키다 보면 402173 주 속값의 데이터와 10 byte랑 비교를 하고 해당 값이 작으면 JL 부분에서 점프를 취한다. 즉, Keyfile.dat의 크기가 10byte 보다 크며 해당 부분은 무사히 통과할 수 있다... 라이센스 루틴 지나기 : 레나 챌린지(Level 1) 문제 정보 1. 새로운 license가 필요하다는 메시지가 출력이 된다. F8을 눌러 한 개씩 실행을 시키다 보면 lincense가 필요하다는 메시지가 보인다. 즉, 그 위 가상메모리 주소에서 CMP EAX , -1 (CreateFileA가 실패를 했다라는 의미)을 비교하고 맞으면 0040109A 주소로 점프를 하고, 값이 다르면 점프를 안 하고 메시지를 출력을 시킨다. JNZ -> JMP 로 변경을 해 해당 주소를 지나갈 때, 0040109A 주소로 점프를 할 수 있게 수정을 한다. F8로 계속 실행시키다보면 다른 곳에서 Keyfile is not vaild 메시지가 출력이 되면서 프로그램을 종료시킨다. JNZ에서 점프가 안되고 그 밑에 주소인 JMP가 실행이 되면서 Kefile is not vaild.. rev-basic-1 chall1.exe 프로그램을 실행시키면 chall0.exe와 같은 프로그램처럼 Input이 출력이 된다. "Correct"가 출력이 되기 위해서는 text eax, eax에서 비교를 한 결과로 인해 참과 거짓으로 나눠진다. Call chall1.7FF740E41000에서 호출을 하여 text에서 비교를 하는 거 같다. 호출되는 주소로 들어가 보니까 내가 입력한 aaaa 데이터를 하나 하나씩 비교를 해서 검사를 하는 거 같다. 해당 문자를 합치니까 Compar3_the_ch4ract3r 문자열이 된다. rev-basic-0 chall0.exe을 실행시키면 Input 이 출력이 되면서 임의의 숫자, 문자를 입력을 하니, 프로그램이 종료된다. 프로그램에서 원하느 문자를 입력해야지 프로그램이 종료가 안된다고 추측할 수 있다. 디버깅툴을 사용하여 프로그램을 열었을 때, Correct 랑 wrong 문구가 보인다. Coorect 문구가 적혀있는 위 주소를 보면 je chall0 7FF74D0D1166 메모리가 적혀있는 걸 볼 수 있다. 즉, text eax, eax에서 비교를 해서 참과 거짓을 구별하는 거 같다. 그렇기에 우리가 찾아야할 correct 출력 값은 chall chall0.7FF74F0D1166에서 호출이 된다는 걸 추측할 수 있다. "Compar3_the_str1ng" 문자열과 내가 입력했던 "aaaa" 문자열을 비교.. Run-Time Packer • Packer Packer의 사용목적은 PE 파일의 크기 감소를 통해 네트워크 전송에도 용이하고 보관하기도 좋다. 또한 파일 내부의 코드와 리소스 등을 감출 수 있어 압축된 데이터는 알아보기 힘든 형태의 Binary로 저장되어 내부 내용을 감춰준다. • Protector PE 프로텍터란 PE 파일을 리버싱으로 부터 보호하기 위한 유틸리티이다. -> 리버싱을 막기 위한 다양한 기법(Anti - Debugging, Anti-Emulating, Code obfuscating, Garbage Code 등)이 추가된다. -> 압축된 PE 팡일의 크기는 원본 PE보다 커지는 경향이 있으며 디버깅하기 어렵다. 사용목적으로는 크래킹 방지 & 코드 및 리소스 보호의 목적이다. -> 크래킹에 민감한 보안 프로그램들이 프.. PE Format • PE Format 정의 PE(Portalbe Executable)는 Winodws 운영체제에서 사용되는 실행파일 형식을 의미한다. Windows 운영체제의 가장 핵심적인 부분은 Process, Memory, DLL 등이다. PE의 종류 - 실행 파일 계열 : EXE, SCR - 라이브러리 계열 : DLL, OCX - 드라이버 계열 : SYS - 오브젝트 파일 계열 : OBJ • VA & RVA VA(Virtual Address)는 프로세스 가상 메모리의 절대주소를 말한다. RVA(Relative Virtual Address)는 어느 기준 위치(base address) 에서부터의 상대주소를 말한다. VA와 RVA 관계는 RVA + base address = VA • DOS Header 구조체에서 가장 .. Doom2(핵 만들기) 보호되어 있는 글입니다. 레지스터 (Register) • 레지스터란? - CPU 내부에 존재하는 다목적 저장 공간이다. - 소규모 데이터 기억장치이다.(산술/연산 가능) - 일반 메모리보다 빠른 속도를 가진다. - AX 레지스터 입출력과 대부분의 산술, 논리 연산에 사용되며, 함수의 반환값이 AX 레지스터에 저장된다. - BX 레지스터 메모리 주소를 저장하기 위한 용도로 사용된다. - CX 레지스터 반복 명령어 사용 시 반복 횟수로 사용되는 레지스터이다. - DX 레지스터 AX 레지스터와 같이 쓰이고 부호 확장 명령 등에 쓰이며 산술/논리 연산 보조 역할을 한다. - 포인터 레지스터 (메모리 스택 영역과 관련된 주소 값을 나타낸다) ESP(Stack Pointer) : 스택 영역의 최상단을 가리킨다. EBP(Base Pointer) : 스택 영역의 기준이 .. 이전 1 ··· 6 7 8 9 10 11 12 ··· 21 다음