본문 바로가기

SMALL

리버싱

(18)
CodeEngn basic 12번 문제 풀이 CodeEngn basic 12 Key를 구한 후 입력하게 되면 성공메시지를 볼 수 있다 이때 성공메시지 대신 Key값이 MessageBox에 출력 되도록 하려면 파일을 HexEdit로 오픈한 다음 0x???? ~ 0x???? 영역에 Key 값을 overwrite 하면 된다. 문제 : Key값과 + 주소영역을 찾으시오 Ex) 7777777???????? 간단하게 Key값을 찾으면 될 것 같다. 성공구문이 보인다. 저기로 가보겠다. 성공구문 윗부분에 분기점을 찾았다. EAX값과 7A2896BF를 비교하는 것을 볼 수 있다. 브레이크포인트를 걸고 실행하겠다. Key 값으로 123을 입력하겠다. 실행을 하니 EAX에 7B가 들어간 것을 볼 수 있다. 어셈블리어는 기본 16진수로 표현한다. 7B를 10진수로 하..
CodeEngn basic 11번 문제 풀이 CodeEngn basic 11번 OEP를 찾으시오. Ex) 00401000 / Stolenbyte 를 찾으시오. Ex) FF35CA204000E84D000000 정답인증은 OEP + Stolenbyte Ex ) 00401000FF35CA204000E84D000000 OEP와 StolenByte를 찾으라고 하였으니 패킹되어있을 것이다. Exeinfo PE 프로그램을 사용하여 보니 UPX로 패킹되어있는 것을 알 수 있다. hardware breakpoint를 걸고 실행 한다. 브레이크 포인트가 걸리고 StolenByte가 나왔다. JMP 0040100C로 가본다. 0040100C로 가보니 위에 StolenByte를 입력할 수 있는 공간이 있다. 즉 OEP는 0040100C가 아니고 00401000인 것을 ..
CodeEngn basic 10번 문제 풀이 CodeEngn basic 10번 문제 OEP를 구한 후 '등록성공' 으로 가는 분기점의 OPCODE를 구하시오. 정답인증은 OEP + OPCODE EX) 00400000EB03 OEP를 구하라고 한 것을 보니 패킹이 되어있을 거 같다. Exeinfo PE 프로그램을 사용하여 보니 Aspack으로 패킹되어있는 것을 알 수 있다. Aspack을 푸는 툴을 가지고 있지 않기 때문에 수동으로 unpacking을 해야겠다. Aspack은 UPX와 비슷하게 처음에 PUSHAD를 통해 레지스터의 값을 넣고 디코딩 한 후 POPAD를 한다. hardware breakpoint를 걸고 실행 하여 OEP를 찾았다. PUSH 00445834 하고 RETN을 하는 것을 보니 00445834이 OEP인 것을 알 수 있다. 이..
CodeEngn basic 9번 문제 풀이 CodeEngn basic 9번 문제 StolenByte를 구하시오 Ex)75156A0068352040 실행을 하여보니 keyfile을 찾아야하는 것 같지만 CodeEngn 문제가 단순히 StolenByte를 구하는 것이므로 keyfile은 찾지않겠다. StoleByte를 구하는 것이기 때문에 패킹이 되어있을 것 이다. Exeinfo PE 프로그램으로 보니 UPX로 패킹 되어있는 것을 알 수 있다. StolenByte를 구하는 것이기 때문에 수동으로 UPX를 언패킹하면서 StolenByte를 찾아야한다. 일단 PUSHAD를 실행 시키고 모든 레지스터 값이 stack에 저장되고 나중에 디코딩 후 프로그램이 정상적으로 실행되기 위해stack에 저장된 레지스터 값에 접근 할 때가 브레이크포인트를 걸어 OEP를..
CodeEngn basic 8번 문제 풀이 CodeEngn basic 8번 문제 OEP를 구하시오 Ex) 00400000 OEP를 구하라고 하였으니 패킹이 되어있을 가능성이 있다. 일단 실행해 보겠다. 평범한 계산기이다. 무엇으로 패킹되어있는지 보겠다. Exeinfo PE 프로그램으로 보니 UPX로 패킹되어 있는 것을 볼 수 있다. upx -d 프로그램명 명령어를 사용하여 upx로 패킹된 파일을 unpack해보았다. OEP를 보니 01012475인 것을 알 수 있다. 답 : 0102475
CodeEngn basic 7번 문제 풀이 CodeEngn basic 7번 문제 컴퓨터 C 드라이브의 이름이 CodeEngn 일경우 시리얼이 생성될때 CodeEngn은 'ß어떤것'으로 변경되는가 문제를 보니 컴퓨터 드라이브의 이름으로 시리얼을 생성하는 것 같다. 실행을 하여보니 시리얼을 맞추는 프로그램인 것 같다. 성공구문이 보인다. 성공구문으로 가서 올려다 보니 GetVolumeInformationA라는 함수가 있다. 함수이름을 보았을 때는 Volume에 대한 정보를 갖는 함수인 것 같다. 여기에 브레이크 포인트를 걸고 천천히 실행시켜보아야겠다. 실행을 하여 보니 나의 드라이브이름이 40225C에 들어간 것을 볼 수 있다. 계속 실행 해보겠다. lstrcatA라는 함수를 보니 StringToAdd와 ConcatString을 합쳐서 ConcatS..
CodeEngn basic 6번 문제 풀이 CodeEngn basic 6번 문제 Unpack을 한 후 Serial을 찾으시오. 정답인증은 OEP + Serial Ex) 0040000PASSWORD 실행을 하여 보니 Serial을 입력하는 프로그램인 것 같다. 우선 Unpack을 하겠다. Exeinfo PE 프로그램을 보니 UPX로 패킹되어있다. upx -d 프로그램명 을 입력하여 unpack을 하였다. unpack을 한 후 시작위치가 OEP 이므로 00401360인 것을 확인할 수 있다. 성공구문을 찾았다. 성공구문 위로 가보니 AD46DFS547이 Serial로 추정할 수 있다. 브레이크포인트를 걸고 실행하겠다. 실행을 하니 내가 입력한 Serial abcdef와 AD46DFS547을 stack에 넣는 것을 볼 수 있다. 내가 입력한 seria..
CodeEngn basic 5번 문제 풀이 CodeEngn basic 5번 문제 이 프로그램의 등록키는 무엇인가 이 프로그램의 등록키를 찾아야하는 문제인거같다. ExEinfo PE프로그램으로 보니 UPX로 패킹된것을 볼 수 있다. upx -d 프로그램명 명령어를 사용하여 upx 파일을 성공적으로 언패킹하였다. 올리디버거로 언패킹된 프로그램을 열고 성공구문과 실패구문을 찾았다. 성공구문 윗부분에 ASCII 코드로 Registerd User과 GFX-754-IER-954가 보인다. 아마 등록키로 추정된다. 브레이크포이트를 걸고 실행 시켜보았다. 첫번째 브레이크 포인트가 걸리고 EAX에 내가 입력한 abcdef가 EDX에 Registerd User이 들어가 있는 것을 볼 수 있다. 아마 call 로 함수를 호출해 EAX와 EDX를 비교하는 것으로 추정..

LIST