본문 바로가기

해킹/리버스 엔지니어링

코드엔진 basic RCE L14 ( 레지스터 확인 )

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

9월의  첫글입니다.  8월달엔  포스팅을  별로 안했는데  이제 초심으로  돌아가  열심히 해야겠습니다.


그럼 문제입니다.




B0F24994.exe


코드엔진일때 시리얼을 구하라고 하네요. 이름이 코드엔진일때이니 이 문제는 name에 따라 시리얼이 정해지는 알고리즘이 존재하나봅니다. 


그럼 PEID로 패킹이 되어있나 확인해보겠습니다.




UPX 패킹이 되어있네요. UPX 패킹은 다 할줄 아실거라 믿고 넘어가겠습니다.


우선 프로그램을 살펴보겠습니다.




이렇게 name과 serial을 대충 넣어보면 저런 메세지창을 나오게 하네요.


메세지창을 띄우는 함수는 MessageBoxA인데 사용하는 함수들 중 MessageBoxA를 찾아봅시다. 







찾았으면 더블클릭해 그 위치로 가봅시다.





오 잘 찾아온것같네요. 하지만 name에 따라 serial이 정해지는 프로그램이기 때문에 위의 어딘가의 알고리즘을 해석하거나 혹은 본래 serial과 우리가 적은 serial을 비교하는 구문의 레지스터를 확인해야 하는데 저는 2번째 방법을 사용했습니다. 


확인하려면 비교하는 구문에 BP를 걸면 됩니다. 비교하는 구문은 저 회색으로 칸이 된 부분입니다.



BP를 걸고 실행하면 프로그램이 시작되는데


EAX와 ESI를 비교한다니 name에 CodeEngn, serial에 11111을 넣어놓고 비교해봅시다.


레지스터들은 오른쪽 상단에 보여주니 그걸 확인해보면 알 수 있습니다.





여기있는 것들은 16진수이니 10진수로 바꿔야 합니다. EAX와 ESI 2개만 확인해보겠습니다.


2B67 -> 11111

129A1 -> 76193


자자자자 감이 오시나요? 11111은 우리가 입력했던 serial입니다. 그럼 76193은? 조금 짐작이 가시나요?  




혹 미숙한 점이나 오류, 잘못된 부분이 있다면 지적해주세요. 바로 고치겠습니다.