Reversing/crackme 13

DreamHack - rev-basic-3 풀이

파일은 exe 실행 파일 형식이며 Input로 key를 받고 분기하여 성공 및 실패 문자열을 출력해주는 문제인거 같다. 우선 IDA 로 열어 String을 추출해서 해당 함수로 이동해본다. Input으로 입력받은뒤 sub_140001000 함수를 콜 한후 나온 반환값으로 성공 및 실패로 분기하는 코드가 보인다. 해당 함수를 디컴파일러 기능으로 c언어로 변환하면 이렇게 되고 sub_140001000 함수 매개변수에 v4(입력값)이 담기는 코드가 보인다. sub_140001000 함수로 들어가보면 여기서 연산을 한 결과가 성공 및 실패로 가는 분기를 결정하는거 같다. byte_140003000 를 비교하는걸 봐서 해당 주소로 이동해보니 이런 data 가 나온다. i 값이 for문을 돌면서 연산 후에 나온값을..

Reversing/crackme 2022.09.29

CodeEngn Basic RCE 12 문제 풀이

디버거 : x64dbg 분석환경 : Window 10 해당 프로그램을 실행해봤더니 패스워드를 입력하고 체크후 일치하다면 성공 메세지를 받는 프로그램 같습니다. pe툴로 열어보니 패킹은 안되있는것 같네요. 해당 프로그램을 디버거로 붙여서 텍스트 문자열을 뽑아줬습니다. 성공문으로 추측되는 문자열이 있는 것 같습니다. 해당 주소로 가보면 바로 위에 eax값이 7A2896BF 인지 확인후 성공 메세지가 출력되는지 분기가 갈리는 코드가 있습니다. eax에 어떤 데이터가 들어가는지 BreakPoint(중단점)을 걸고 확인하면 패스워드 키 1234로 입력해보았습니다. 4D2로 16진수로 내가 입력한 패스워드가 eax에 담기는걸 확인했습니다. 즉 내가 입력한 키와 성공 키 열을 비교한다는 것을 알 수 있고 해당 프로그..

Reversing/crackme 2022.05.10

CodeEngn Basic RCE 11 문제 풀이

디버거 : x64dbg 분석환경 : Window 10 Basic 09와 동일한 문제입니다. Stolenbyte 개념을 확실히 잡아가기위해 한번 더 출제된 문제같습니다. 해당 프로그램을 실행해봤더니 keyfile이 있는지 없는지 체크후 성공 실패로 갈리는 프로그램 같습니다. 해당 프로그램은 UPX(2.03)로 패킹되어 있는 것을 확인했습니다. OEP 주소로 이동하기위해 ESP 주소에 중단점을 걸어줬습니다. OEP 주소로 이동하기 전 StolenByte가 보입니다. OEP 주소로 이동후 StolenByte를 복원 해줬습니다. 후에 00401000 주소로 OEP를 재설정후 덤프를 해줬습니다. 그럼 결과적으로 OEP는 00401000가 되고 StolenByte 는 6A 00 68 00 20 40 00 68 12..

Reversing/crackme 2022.05.08

CodeEngn Basic RCE 10 문제 풀이

디버거 : x64dbg 분석환경 : Window 10 OEP주소를 구하고 등록성공으로 가는 옵코드를 구하는 문제입니다. 해당 프로그램은 ASPACK(2.0)로 패킹이 되어있습니다. EP 주소로 이동후 ESP 주소에 하드웨어 중단점을 걸어줍니다. OEP로 이동하는 주소를 찾았습니다. 계속 트레이스 해줍시다. OEP 주소로 이동하는데 성공했습니다. 이제 덤프를 해서 언패킹 작업을 해줍니다. 프로그램을 실행해보니 Name 과 Serial 입력이 불가능하고 Not registerd 라는 캡션이 출력됩니다. 성공구문으로 가기위해 문자열을 뒤져 성공 구문을 찾아보도록 합시다. 텍스트값을 뽑아내어 성공구문으로 추측되는 문자열이 있는 것 같습니다. 해당 주소로 이동해봅시다. 해당 주소로 이동해봤더니 성공문으로 갈지 안..

Reversing/crackme 2022.05.08

CodeEngn Basic RCE 09 문제 풀이

디버거 : x64dbg 분석환경 : Window 10 StolenByte를 구하는 문제입니다. 여기서 StolenByte 란 패커가 훔친 바이트를 의미 합니다. 프로그램의 일부 바이트를 다른영역에서 실행되게 하여 덤프를 쉽게 하지 못하도록 언패킹을 방해하는 기술 입니다. pe툴로 열어본 결과 UPX(2.03)으로 패킹 된 프로그램이란 걸 확인했습니다. 해당 프로그램의 EP 주소로 이동했습니다. 동일하게 ESP 주소에 중단점을 걸어 원본 코드로 이동하는 주소를 찾도록 하겠습니다. OEP로 가기전에 어떤 문자열을 PUSH로 주고 있는 것을 확인 할 수 있었습니다. 아마 이번 문제 핵심과 관련있어보이네요. OEP 주소로 이동했습니다. 근데 위로 스크롤 올려보니 12바이트 만큼 NOP 명령어로 되어있고 함수 시..

Reversing/crackme 2022.05.08

CodeEngn Basic RCE 08 문제 풀이

디버거 : x64dbg 분석환경 : Window 10 Original Entry Point 를 구하는 문제이다. UPX(2.01) 버전으로 패킹 되어 있습니다. 해당 프로그램의 EP 주소로 이동했습니다. 실행 압축을 풀기위해서 pushad 명령어로 내 레지스터 데이터들을 모두 스택에 넣는 것 같습니다. 원본코드 주소(OEP) 주소로 이동하기 위해 ESP 주소에 하드웨어 중단점을 설정하였습니다. pushad 명령어로 스택에 넣어둔 데이터를 다시 꺼내오기 위해 popad 명령어로 이전에 걸었던 ESP 주소에 중단점이 적중됬습니다. 후에 JMP로 어딘가로 주소로 이동하는 코드가 보입니다. 점프 해보니 OEP 주소를 찾은것 같습니다.

Reversing/crackme 2022.05.08

CodeEngn Basic RCE 07 문제 풀이

해당 프로그램에서 메세지박스를 띄우는 주소로 이동해봅시다. 우선 내가 입력한 시리얼인 CodeEngn 문자열이 담기는 주소가 보입니다. 대충 보았을때 매개변수로 들어가는 걸 보아하니 또 문자열을 비교후 분기하는 내용 같습니다. 우선 lstrcmpiA 함수가 무슨 함수인지 구글에 검색해보았습니다. 두 문자열을 비교하는 함수이며 반환값은 문자열 크기를 비교하여 작으면 음수를 반환하고 크면 양수를 같으면 0을 반환하네요. 후에 반환값이 0인지 체크후 0이면 성공 문으로 가는 코드를 확인 할 수 있습니다. 그럼 해당 프로그램의 시리얼은 07.exe+2000 주소에 담긴 문자열이 시리얼이 되겠네요. 하지만 문제는 내 C 드라이브가 CodeEngn일떄 시리얼을 획득 하는 것입니다. 확인을 위해 C드라이브 명을 Co..

Reversing/crackme 2022.05.08

CodeEngn Basic RCE 06 문제 풀이

디버거 : CheatEngine 분석환경 : Window 10 프로그램을 실행해봤더니 이번에도 시리얼을 획득하는 프로그램이다. 우선 pe툴로 열어 패킹여부를 확인해보자 UPX(3.03)으로 패킹되어 있고 EP는 004298F0 이라고 출력해주고 있다. EP 주소부분으로 이동해봤지만 기존 함수 프롤로그 코드(스택 프레임)가 보이지않고 웬 PUSHAD 로 시작하는 코드가 있다. 실행압축 패킹은 이렇게 처음 시작될때 PUSHAD 명령어로 기존 레지스터 데이터를 모두 스택에 넣었다 압축을 풀고 다시 POPAD 명령어로 넣었던 데이터를 스택에서 꺼내와서 원본 코드(OEP)로 이동한다. 언패킹을 하는 방법은 여러가지가 있지만 수동적으로 하는 대표적인 방법으론 PUSHAD를 하고 스택에 있는 데이터에 Access B..

Reversing/crackme 2022.05.07

CodeEngn Basic RCE 05 문제 풀이

디버거 : CheatEngine 분석환경 : Window 10 해당 프로그램을 확인해본 결과 UPX(1.01)로 패킹이 되어 있고 Delphi로 개발된걸 확인. 어차피 실행된 프로그램을 치트엔진으로 분석할거기 때문에 따로 언패킹 할 필요가 없어서 upx 언패킹하는 과정은 생략.. x64dbg로 붙이고 트레이스하며 분석하려면 언패킹 과정이 필요하다. 이유는 실행압축 이기 때문에 프로그램을 실행하기 전엔 압축되어 코드 섹션의 압축과 암호화 많은 양의 데이터가 끼워 들어가기 떄문에 EP를 정상적으로 확인 할수없고 코드가 뒤죽박죽으로 보인다. 하지만 후에 프로그램이 실행되는 마지막 과정에 압축이 풀리면서 코드를 정상적으로 확인 할수있다. 이런 특징 떄문에 자신의 프로그램을 보호 하기 위한 용도로 사용되었지만....

Reversing/crackme 2022.05.07

CodeEngn Basic RCE 04 문제 풀이

디버거 : CheatEngine , x64dbg 분석환경 : Window 10 해당 프로그램은 디버깅을 탐지하는 안티 디버깅 코드가 있다. 안티 디버깅이란 디버깅을 방지하고 분석하는것을 방해하기 위한 기술이라 볼 수 있다. 해당 프로그램을 그냥 실행해보면 정상이라는 문자가 출력되지만 해당 프로그램을 디버거로 붙여보면 디버깅 당함 이라는 문구가 출력된다. 어딘가 코드에서 디버깅을 감지하는 안티 디버깅 코드가 있을거로 추정된다. 문자열을 추적하여 해당 주소를 우선 찾아준다. KERNELBASE.IsDebuggerPresent() 라는 함수가 보인다. 해당 함수를 구글에서 검색해보면 역시나 디버깅 동작을 감지하는 함수이고 반환값은 디버깅중일시 0이 아니라고 나와있다. breakpoint(중단점)을 걸어 반환 ..

Reversing/crackme 2022.05.07