목록Training/Codeengn (13)
Never Stop Running
* 리버싱 공부를 위한 문제풀이로정답을 찾는 것과는 조금 다를 수 있습니다. [CodeEngn] BASIC 15 문제 풀이 환경Windows 10 / Intel / x32dbg / HxD 문제 URLhttps://www.codeengn.com/challenges/basic/15 BASIC 15번 문제.문제는 Name이 CodeEngn일 때 Serial값을 구하는 것이다. 실행시키면 이러한 창이 뜬다. 여기에 'CodeEngn'을 넣고 맞는 Serial값을 넣으면 된다. [다음을 찾기] - [현재 모듈] - [문자열 참조]를 이용하여 'CRACKED'라는 문자열이 움직이는 곳을 찾았다. 분기문에 Break Point를 걸었다. 그리고 그 앞에 함수 호출하기 전에 Break Point를 걸었다. 임의의 값을..
* 리버싱 공부를 위한 문제풀이로 정답을 찾는 것과는 조금 다를 수 있습니다. [CodeEngn] BASIC 14 문제 풀이 환경Windows 10 / Intel / x32dbg / UPX 문제 URLhttps://www.codeengn.com/challenges/basic/14 BASIC 14번 문제. 문제는 Name이 CodeEngn일 때 나오는 Serial값을 구하는 것이다. 일단 프로그램을 실행시키면 두 개의 입력값을 받는데, 위에 'CodeEngn'을 입력하고 밑에 Serial을 입력하면 될 것이다. 메모리 맵을 보니 UPX로 패킹되어있다. BASIC 5번에서 풀었던 것처럼 UPX툴을 사용하여 언패킹하고 프로그램 분석을 진행한다. [다음을 찾기] - [현재 모듈] - [문자열 참조]를 하고 'G..
* 리버싱 공부를 위한 문제풀이로정답을 찾는 것과는 조금 다를 수 있습니다. [CodeEngn] BASIC 13 문제 풀이 환경Windows 7 / 32bit / Detect It Easy / ILSpy 문제 URLhttps://www.codeengn.com/challenges/basic/13 BASIC 13번 문제.문제는 프로그램 내의 정답을 찾는 것이다. 프로그램은 password를 입력받고 판별한다. 프로그램을 탐지해보니 C#으로 만들어졌다고 했다. .NET 디컴파일러인 'ILSpy'라는 툴을 다운받아 프로그램을 열었다.main을 보니 이러한 형태로 되어있었고, 내부의 암호화 된 Text를 프로그램 실행 시 복호화한 후 그 복호화 된 plainText와 입력받은 값을 비교하는 형태였다. 'ILSpy..
* 리버싱 공부를 위한 문제풀이로정답을 찾는 것과는 조금 다를 수 있습니다. [CodeEngn] BASIC 12 문제 풀이 환경Windows 10 / Intel / x32dbg / HxD 문제 URLhttps://www.codeengn.com/challenges/basic/12 BASIC 12번 문제.문제는 Key값과 메세지 창이 뜰 때 Key값이 보이도록 값을 overwrite하는 위치의 주소를 알아내는 것이다. [다음을 찾기] - [현재 모듈] - [문자열 참조]를 이용하여 성공시 나타나는 문자열을 확인했다. 값을 받아오는 GetDlgItemInt 함수와 성공문자열이 나오기 전의 CMP에 Break Point를 걸었다.실행을 위해 임의의 값을 넣었다. Key = 123456. GetDlgItemInt..
* 리버싱 공부를 위한 문제풀이로정답을 찾는 것과는 조금 다를 수 있습니다. [CodeEngn] BASIC 10 문제 풀이 환경Windows 10 / Intel / x32dbg / UPX 문제 URLhttps://www.codeengn.com/challenges/basic/10 BASIC 10번 문제.문제는 OEP를 구하는 것과, '성공'으로 가는 분기점의 OPCODE를 구하는 것이다.OEP를 구하는 방법은 BASIC 6번에서 자세히 설명했다. PUSHAD를 지나고 스택에 Break Point를 걸었다. JMP문 대신 PUSH로 주소값을 넣고 RET를 했다. 이렇게 가도 OEP는 맞다. 들어가서 보이는 첫번째 주소가 OEP이다. 그 상태에서 [다음을 찾기] - [현재 모듈] - [문자열 참조]를 하면 등..
* 리버싱 공부를 위한 문제풀이로정답을 찾는 것과는 조금 다를 수 있습니다. [CodeEngn] BASIC 08 문제 풀이 환경Windows 10 / Intel / x32dbg 문제 URLhttps://www.codeengn.com/challenges/basic/08 BASIC 8번 문제.문제는 OEP를 구하는 것이다.OEP를 구하는 방법은 BASIC 6번에서 자세히 설명했다. UPX로 패킹된 것을 확인했다. PUSHAD를 지나 스택 맨 위에 Break Point를 걸었다. JMP 문 위에서 멈추었다. JMP문을 따라가 보니 원본 코드를 찾을 수 있었다. 즉, 이 주소가 OEP이다.
* 리버싱 공부를 위한 문제풀이로정답을 찾는 것과는 조금 다를 수 있습니다. [CodeEngn] BASIC 07 문제 풀이 환경Windows 10 / Intel / x32dbg / HanConv 문제 URLhttps://www.codeengn.com/challenges/basic/07 BASIC 7번 문제.문제는 C드라이브 이름이 CodeEngn일 경우 시리얼 생성 시 이 이름이 어떤 것으로 변경되는지 알아내는 것이다.이것으로 보아 C드라이브 이름을 가져오고 그 값을 변경하여 시리얼을 생성하는 것을 알 수 있다. [다음을 찾기] - [현재 모듈] - [문자열 참조]를 보면 성공시 뜰법한 문자열을 볼 수 있다. 더블클릭하여 이 문자열을 스택에 PUSH 해주는 곳으로 이동한다. 위에 보이는 문자열 비교 함수..
* 리버싱 공부를 위한 문제풀이로정답을 찾는 것과는 조금 다를 수 있습니다. [CodeEngn] BASIC 06 문제 풀이 환경Windows 10 / Intel / x32dbg / UPX 문제 URLhttps://www.codeengn.com/challenges/basic/06 BASIC 6번 문제.문제는 OEP와 Serial을 찾는 것이다.OEP란 Original Entry Point를 말한다. 패킹된 파일을 실행할 때 자동적으로 시스템 내부에서 언패킹을 한다. 언패킹이 끝나면 복구한 원본코드를 동작시켜야 하는데 이 원본코드의 Entry Point를 OEP라고 한다. UPX OEP 찾는 방법 UPX 패커는 PUSHAD/POPAD 명령어를 사용한다. 보통 POPAD 명령어 밑에 점프문이 있고, 이 점프문..
* 리버싱 공부를 위한 문제풀이로정답을 찾는 것과는 조금 다를 수 있습니다. [CodeEngn] BASIC 05 문제 풀이 환경Windows 10 / Intel / x32dbg / UPX 문제 URLhttps://www.codeengn.com/challenges/basic/05 BASIC 5번 문제.문제는 프로그램의 등록키를 찾는 것이다. 프로그램을 실행시키면 다음과 같은 창들이 나타난다. 메모리 맵을 보니 UPX로 패킹된 것을 확인할 수 있다. UPX를 이용하여 언패킹한다. 언패킹 한 프로그램을 열어보니 정상적으로 언패킹 되었다는 것을 알 수 있다. 코드 부분에서 오른쪽 마우스 클릭을 하여 [다음을 찾기] - [현재 모듈] - [문자열 참조]를 누르면 그 코드부분에 사용된 문자열들이 나온다.문자열을 찾..
* 리버싱 공부를 위한 문제풀이로정답을 찾는 것과는 조금 다를 수 있습니다. [CodeEngn] BASIC 04 문제 풀이 환경Windows 10 / Intel / x32dbg / HanConv 문제 URLhttps://www.codeengn.com/challenges/basic/04 BASIC 4번 문제.문제는 디버거를 탐지하는 함수명을 찾는 것이다. 일단 실행시키면 정상이라는 문구가 계속 나온다. 일단 저 문구가 나오는 곳을 찾아본다. 저 문자가 while문으로 계속 나타나기 때문에 어떤 함수에 딱 멈추게 된다. 그러므로 F9를 눌러서 멈추면 그 때부터 문자열이 계속 나온다. 디버깅중이기 때문에 '디버깅 당함'이라는 문구가 계속 나타난다. 그래서 이쪽에 Break Point를 걸었다. 다시 시작하여 ..