no image
CodeEngn Advance 06
문제확인우선 문제를 확인하면 이전에도 풀려고 했지만 결국 풀지 못했던 문제로 기억을 한다. 하지만 그 때에는 분명 리버싱을 처음 접했을때로 기억을 하기에 당시보다는 잘 풀 수 있겠지라는 자신감으로 리버싱을 시작하였다. 우선 UPX 패킹을 해제하고 리버싱을 계속 진행하면 된다. 풀이사실 이 문제는 정말 많이 삽질을 한것 같다. 출력되는 남은 군생활의 값을 증가시켜주는 부분을 찾았고 그 주위에서 CMP를 통한 비교문을 찾기 위하여 많은 노가다를 하였지만 결국 삽질도 여러번 하다가 문득 생각 난 것이 바로 치트엔진이였다. 사실 치트엔진을 통한 문제 풀이가 과연 리버싱에 도움이 되는 것인지는 모르겠지만 이참에 치트엔진 공부도 새롭게 같이 시작을 해보려한다. 우선 아래와 같이 치트엔진을 통하여 변화하는 값을 캐치..
2015.06.28
no image
CodeEngn Advance 05
문제확인이번 문제는 너무 설명 할 것도 없는 것같다. 풀이아래와 같이 vbaStrCmp를 찾으면 쉽게 시리얼을 찾을 수가 있다. Name에 따른 알고리즘 형성으로 인하여 키 값이 형성 되는 것이 아니라 그냥 시리얼 값을 찾는 것이기에 너무 간단히 끝나버렸다.
2015.06.28
no image
CodeEngn Advance 04
문제 확인 풀이 우선 위와 같이 lstrcmpA를 통하여 우리는 쉽게 해당 시리얼을 구할 수가 있지만 이렇게 문제풀이를 중심으로만 하면 실력향상에 차질이 있을 수도 있기에 직접 알고리즘을 분석하는 방법을 통하여 문제를 풀어보고자 한다. 위와 같이 알고리즘이 진행되는 부분을 표시해 놓았다. 위의 알고리즘을 커친 후 ESI의 값이 10진수로 시리얼의 가운데 값으로 자리잡고, EDI의 값은 16진수로 시리얼의 뒷자리 값으로 자리를 잡는다. 알고리즘에 대한 분석은 주석에 달아 놓은 것과 같고 직접해보는 것이 크게 도움이 될 것이다. 이제 알고리즘을 파악한 후 직접 키 값을 구하는 프로그램을 만들어보자. 위와 같이 나는 이렇게 Python을 통하여 키 값을 구하는 프로그램을 만들어 보았다. 이렇게 구한 값이 실제..
2015.06.28
no image
CodeEngn Advance 03
문제 확인우선 문제를 확인해보면 여지껏 많이 보았던 해당 Name에 따른 Serial을 찾는 문제이다. 우선 패킹의 여부를 확인을 하고 간단한 정보를 PEID를 통하여 확인을 하자. 풀이우선 위와 같이 lstrcmpA 함수를 통하여 문자열을 비교하는 부분을 쉽게 찾을 수가 있다. 이를 통하여 해당 name에 따른 시리얼을 쉽게 확인 할 수가 있다. 마찬가지로 CodeEngn일때의 시리얼 값도 쉽게 확인 할 수가 있다. p.s 알고리즘을 분석하려 했지만 너무나 복잡하게 되어있어서 포기를 해버렸다..
2015.06.28
no image
CodeEngn Advance 01
문제확인안녕하세요. 대학 기말고사가 끝나고 방학이 시작하자마자 1주일동안 공부를 하지 않아 자책을 하다가 이제서야 다시 공부를 시작합니다. 이번엔 CodeEngn Advance문제 풀이를 시작하도록 하겠습니다. 역시 이전과 같이 질문은 받지않아요 >< 저도 모르는데 혹여나 질문하지마세요..그냥 직접해보거나 구글이 진리입니다. 문제를 확인하며 Basic에서도 같은 문제를 확인할 수가 있다. UPX로 패킹이 되어 있기에 언패킹을 실시한 후에 풀이를 시작하면 된다. 풀이프로그램을 우선 실행 해보고 어떤 API가 사용되었을지를 유추하는 것도 하나의 중요한 실력이다. 그러므로 많은 분석을 해보아야 더 효율적인 분석이 가능해진다. 여기서 우리는 timeGetTime이 사용 된다는 것을 알고 있다. 따라서 timeG..
2015.06.27

문제확인


우선 문제를 확인하면 이전에도 풀려고 했지만 결국 풀지 못했던 문제로 기억을 한다. 하지만 그 때에는 분명 리버싱을 처음 접했을때로 기억을 하기에 당시보다는 잘 풀 수 있겠지라는 자신감으로 리버싱을 시작하였다. 

우선 UPX 패킹을 해제하고 리버싱을 계속 진행하면 된다.




풀이


사실 이 문제는 정말 많이 삽질을 한것 같다. 출력되는 남은 군생활의 값을 증가시켜주는 부분을 찾았고 그 주위에서 CMP를 통한 비교문을 찾기 위하여 많은 노가다를 하였지만 결국 삽질도 여러번 하다가 문득 생각 난 것이 바로 치트엔진이였다. 

사실 치트엔진을 통한 문제 풀이가 과연 리버싱에 도움이 되는 것인지는 모르겠지만 이참에 치트엔진 공부도 새롭게 같이 시작을 해보려한다. 우선 아래와 같이 치트엔진을 통하여 변화하는 값을 캐치한다.

위의 사진과 같이 치트엔진을 통하여 우선 해당 N번째의 값인 10을 입력해주고 그 다음은 Increased value를 통하여 두개의 값만 남았다. 여기서 첫번째 주소로 이동을 하여 확인을 해볼 것이다. 주소는 02583DB0로 이동을 한다. 그러면 위의 덤프창에서와 같이 0xA의 값이 존재하는 것을 확인 할 수가 있다.


위의 사진과 같이 해당 덤프에 BP를 건다. 위와 같이 ON ACCESS를 하는 것이 적당할 것이다. 그 후 BP를 통하여 계속 진행을 하다보면 아래와 같은 지점이 나타난다. 이 지점에서 우리가 현재 N번쨰인 B와 316을 비교를 한다. 이를 통해 우리는 남은 군 생활 수가 0x316 일수도 있다는 것을 확인 할 수가 있다. 이제 확인을 위하여 명령어를 바꾸어 보자.


0x316보다 클 경우에는 해당지점으로 점프를 한다. 그렇다면 우리는 확인을 위하여 JL을 JMP로 바꾸어 볼 것이다. 아래와 같이 바꾼 후에 진행을 할 경우 결국 RETN 8을 끝으로 프로세스가 종료 되는 것을 확인 할 수가 있다.

이러한 작업을 통하여 우리가 찾은 비교문이 올바른 지점이라는 것을 확인 할 수가 있었다. 이러한 방법을 통하여 문제를 풀 수가 있다. 치트엔진을 이용해서 더 쉽게 풀 수가 있었던 것 같다. 하지만 치트엔진보다 더 쉬운 방법이 있는데 바로 아래와 같은 디컴파일러를 이용하는 것이다. 디컴파일러를 이용하면 바로 1 TO 790(0x316)을 확인 할 수가 있다. 하지만 이는 실력 향상에는 안좋을 것 같다. 이러한 방법이 있다는 것만 잊지 말자.


'Reversing > CodeEngn' 카테고리의 다른 글

CodeEngn Advance 09  (0) 2015.07.12
CodeEngn Advance 08  (50) 2015.07.01
CodeEngn Advance 05  (0) 2015.06.28
CodeEngn Advance 04  (0) 2015.06.28
CodeEngn Advance 03  (0) 2015.06.28

문제확인


이번 문제는 너무 설명 할 것도 없는 것같다.




풀이


아래와 같이 vbaStrCmp를 찾으면 쉽게 시리얼을 찾을 수가 있다. Name에 따른 알고리즘 형성으로 인하여 키 값이 형성 되는 것이 아니라 그냥 시리얼 값을 찾는 것이기에 너무 간단히 끝나버렸다.



'Reversing > CodeEngn' 카테고리의 다른 글

CodeEngn Advance 08  (50) 2015.07.01
CodeEngn Advance 06  (0) 2015.06.28
CodeEngn Advance 04  (0) 2015.06.28
CodeEngn Advance 03  (0) 2015.06.28
CodeEngn Advance 01  (0) 2015.06.27

문제 확인





풀이



우선 위와 같이 lstrcmpA를 통하여 우리는 쉽게 해당 시리얼을 구할 수가 있지만 이렇게 문제풀이를 중심으로만 하면 실력향상에 차질이 있을 수도 있기에 직접 알고리즘을 분석하는 방법을 통하여 문제를 풀어보고자 한다. 


위와 같이 알고리즘이 진행되는 부분을 표시해 놓았다. 위의 알고리즘을 커친 후 ESI의 값이 10진수로 시리얼의 가운데 값으로 자리잡고, EDI의 값은 16진수로 시리얼의 뒷자리 값으로 자리를 잡는다. 알고리즘에 대한 분석은 주석에 달아 놓은 것과 같고 직접해보는 것이 크게 도움이 될 것이다. 이제 알고리즘을 파악한 후 직접 키 값을 구하는 프로그램을 만들어보자.


위와 같이 나는 이렇게 Python을 통하여 키 값을 구하는 프로그램을 만들어 보았다. 이렇게 구한 값이 실제 프로그램과 동일한 결과를 도출해내는지를 확인하기 위하여 아래와 같이 확인을 할 수가 있다.



'Reversing > CodeEngn' 카테고리의 다른 글

CodeEngn Advance 06  (0) 2015.06.28
CodeEngn Advance 05  (0) 2015.06.28
CodeEngn Advance 03  (0) 2015.06.28
CodeEngn Advance 01  (0) 2015.06.27
CodeEngn Basic 20  (0) 2015.06.04

문제 확인


우선 문제를 확인해보면 여지껏 많이 보았던 해당 Name에 따른 Serial을 찾는 문제이다. 우선 패킹의 여부를 확인을 하고 간단한 정보를 PEID를 통하여 확인을 하자.


풀이


우선 위와 같이 lstrcmpA 함수를 통하여 문자열을 비교하는 부분을 쉽게 찾을 수가 있다. 이를 통하여 해당 name에 따른 시리얼을 쉽게 확인 할 수가 있다.



마찬가지로 CodeEngn일때의 시리얼 값도 쉽게 확인 할 수가 있다.



p.s 알고리즘을 분석하려 했지만 너무나 복잡하게 되어있어서 포기를 해버렸다..

'Reversing > CodeEngn' 카테고리의 다른 글

CodeEngn Advance 05  (0) 2015.06.28
CodeEngn Advance 04  (0) 2015.06.28
CodeEngn Advance 01  (0) 2015.06.27
CodeEngn Basic 20  (0) 2015.06.04
CodeEngn Basci 19  (0) 2015.06.03

문제확인


안녕하세요. 대학 기말고사가 끝나고 방학이 시작하자마자 1주일동안 공부를 하지 않아 자책을 하다가 이제서야 다시 공부를 시작합니다. 이번엔 CodeEngn Advance문제 풀이를 시작하도록 하겠습니다. 역시 이전과 같이 질문은 받지않아요 >< 저도 모르는데 혹여나 질문하지마세요..그냥 직접해보거나 구글이 진리입니다.


문제를 확인하며 Basic에서도 같은 문제를 확인할 수가 있다. UPX로 패킹이 되어 있기에 언패킹을 실시한 후에 풀이를 시작하면 된다.



풀이


프로그램을 우선 실행 해보고 어떤 API가 사용되었을지를 유추하는 것도 하나의 중요한 실력이다. 그러므로 많은 분석을 해보아야 더 효율적인 분석이 가능해진다. 여기서 우리는 timeGetTime이 사용 된다는 것을 알고 있다. 따라서 timeGetTime을 따라가면 된다. 여기서 가장 수상한 CALL EDI가 우리에게 손짓하고 있다.


해당 지점으로 이동하면 아래와 같이 두번의 timeGetTime이 진행되는 것을 확인 할 수가 있다. 첫 호출을 통하여 EAX에 값을 반환받고 그 값을 ESI로 복사를 한 후에 두번째 호출을 통하여 그 반환값 EAX와 ESI를 비교 후에 점프문을 진행한다.


아래와 같이 해당 연산 값이 0x337B인지 확인을 한다. 이를 통하여 우리는 손 쉽게 값을 알 수가 있다. 




아래와 같이 Exe2Aut를 통하여 디컴파일을 한 후에 쉽게 확인을 할 수도 있다. 하지만 이러한 방법은 공부를 할 때는 사용하지 않는 것이 좋을 것 같다.




'Reversing > CodeEngn' 카테고리의 다른 글

CodeEngn Advance 04  (0) 2015.06.28
CodeEngn Advance 03  (0) 2015.06.28
CodeEngn Basic 20  (0) 2015.06.04
CodeEngn Basci 19  (0) 2015.06.03
CodeEngn Basic 18  (0) 2015.06.03