목록Computer App Penetesting/Reversing (19)
외로운 Nova의 작업실
- 문제인식 먼저 실행해보겠습니다. 1234를 넣고 check 버튼을 눌러보겠습니다. 뭐.. 아무일도 안일어나 나는 것 같습니다. about 버튼을 눌러보겠습니다. 알맞는 키를 찾으라고 나오네요 키를 찾는 문제입니다. - 문제풀이 설계 strcmp 함수 call하는 부분이나 메시지를 내보내는 함수부분에 bp를 걸고 알맞는 키를 알아보겠습니다. - 리버싱 먼저 콜 함수들을 보겠습니다. messageBoxA로 축하한다는 메시지를 내보내는 부분이 있습니다. 이 부분으로 덤프해보겠습니다. 먼저 위에 첫번째 분기문 부분에 bp를 걸고 살펴보겠습니다. CPU Disasm Address Hex dump Command Comments 00401052 |. 6A 00 PUSH 0 ; /IsSigned = FALSE 00..
- 문제인식 먼저 실행해보겠습니다. 3번째 remove me! 라고 되어있고 nagnag라고 있습니다. 이부분 메시지를 지우면 되는것 같습니다. - 크랙 설계 메시지를 만드는 함수를 call하는 부분을 찾아서 검증하고 없애줍니다. - 리버싱 근데 코드가 너무 간단합니다. - 크랙 nagnag 출력부분을 다 nop으로 만들어버립니다.
- 문제 인식 먼저 실행시켜보겠습니다. 아무래도 키젠프로그램들이니 1234로 키값을 넣어보겠습니다. 그랬더니 이렇게 뜹니다. 이렇게 안뜨고 정상실행하는게 목표인 것 같습니다. - 크랙 설계 먼저 문자열을 비교하는 함수가 무조건 있을 것입니다. strcmp, cmp 등등이 있을겁니다. 이를 어셈블리에서는 call 명령어로 함수를 불러낼 것입니다. 따라서 call 명령어를 검색해서 문자열을 비교하는 부분에 bp를 걸고 어떻게 비교하는지 알아내거나 비교후 점프문을 크랙해보도록 하겠습니다. - 리버싱 search for - all intermodular calls를 눌러 모든 call 하는 함수들을 검색합니다. 그럼 딱봐도 strcmp 함수가 보입니다. 여기에 bp를 걸고 F9로 run 해줍니다. 이후 1234..
보호되어 있는 글입니다.
이번 장에서는 크랙미 10을 크랙해보겠습니다. - 문제 파악 한번 실행해보겠습니다. 시리얼을 입력하고 check 버튼을 눌러서 확인하는 것같다는 생각이듭니다. 1234를 넣고 check버튼을 눌러보겠습니다. wrong으로 틀리다고 나옵니다. 이번 문제도 시리얼 넘버를 맞추는 문제인것 같다는 생각이듭니다. - 리버싱 먼저 올리디버거로 리버싱해보겠습니다. F9를 눌러서 프로그램의 시리얼값을 받을때 pause 되어야되지만 실제 F9를 누르면 프로그램이 종료가됩니다. 이는 첫번째 실행되는 코드부분에서 디버깅되었는지 확인하는 코드때문입니다. CPU Disasm Address Hex dump Command Comments 00401000 /$ E8 37020000 CALL ; [KERNEL32.IsDebuggerP..
이번 문서에는 c++를 어셈블리어로 변환했을때 어떻게되는지 정리해보겠습니다. - 클래스 정적 할당 #include #include #include class Employee { public : int number; wchar_t name[128]; long pay; void ShowData(); void Test(); }; void Employee::ShowData() { printf("number: %d\n", number); printf("name : %s\n", name); printf("pay : %d\n", pay); Test(); return; } void Employee :: Test() { printf("Test function\n"); return; } int main() { Employ..
리버싱 엔지니어링 바이블에서 나온 함수호출 규약을 간단히 정리해보려고합니다. - 함수 호출 규약 __cdecl : 호출자가 스택을 정리합니다. __stdcall : 피호출자가 스택을 정리합니다. __fastcall : 인자가 2개라면 ecx와 edx를 사용합니다. __thiscall : c++에서 자주사용하는 함수로 ecx에 this 포인터가 담깁니다.
리버싱 입문에서 다루지 않은 crackme 시리즈를 리버싱 및 크랙해보려합니다. - 문제인식 password를 입력하라고합니다. 윗부분에 오직 숫자라고 합니다. 1234를 입력해보겠습니다. wrong으로 나옵니다. 아무래도 이번문제는 password를 알아내는 문제인 것 같습니다. - 리버싱 이 프로그램은 아마 우리가 입력한 패스워드를 cmp 한후 값에따라 jmp할 것입니다. 따라서 문자열 wrong을 찾고 jmp문 부분을 추적해서 패스워드를 비교하는 cmp문을 찾아보도록 하겠습니다. search for -referenced string을 통해 wrong을 찾았습니다. 한번 들어가보겠습니다. 실제가서 jmp문을 추적해보면 0040155c 주소에서 dmp문을 실행해서 wrong으로 가게됩니다.그위에 004..
책이제 리버싱 입문 책 공부를 종료하려고합니다. 마지막으로 지뢰찾기 맵핵에대한 내용이 있지만 가상머신을 사용했을때 많이 느려서 실습이 어려울 것 같아 안하려고합니다. 노트북 사양도 좋지않아서.. 특히 지뢰찾기는 32비트 설치파일도 구하기 힘들다보니 실습이 어려워 안하겠습니다. 단, 마지막장에 있는 공부해야할 고급 기술들은 정리해볼까합니다. - 공부해야할 고급 기술 1. 64비트 아키텍처 및 64비트 응용프로그램 리버싱 2. IDA Pro : 전문적인 리버서는 ollydbg보다 IDA pro를 많이 사용합니다. 3. 언패킹 기술 : 반복적인 기술과 경험이 쌓이면 기술이 발전합니다. - 리버싱 활용분야 1. 악성코드 분석 2. 버그 헌팅 3. 해킹 4. 해킹 방어대회 다음에는 방독면 책을 공부해보도록 하겠습..
shellcode란 기계어로 만들어진 크기가 작은 코드로 운영체제의 명령 쉘을 이용한 코드입니다. 코드 인젝션 기술은 PE파일의 빈 공간에 셸코드를 입력해서 실행하게 만드는 해킹기술로 코드 케이브 기술을 활용해서 만들 수 있습니다. 저는 여기서 코드 인젝션이 코드케이블기술과 같다고 생각하여 코드 인젝션 공격이 있고, 어떤 코드를 심느냐에따라 달라진다고 생각합니다. 코드 인젝션 개념은 아래와 같습니다. - 셸코드 예제 셸코드 예제는 아래 페이지에 들어가면 사용자(BroK3n)을 강제로 추가하는 기능을 가진 쉘코드가 있습니다. 아래 첨부하겠습니다. https://www.exploit-db.com/exploits/33836 Windows - Add Administrator User (BroK3n/BroK3n)..