Reversing

[코드엔진] Advance 09

BIGFROG 2020. 3. 23. 17:45

C++로 만들었다.

 

name발견

빠르게 name값부터 찾아줌.

 

검증함수

이쪽에서 name,password를 검사한다.

 

 

이상한 부분이다.

입력값을 가져와서 NULL과 비교하게 만든다..

그냥 고의적으로 꼬아놓은 부분이라고 생각되어서, 그냥 이런건 피해주면 된다.

패치해서 없애주자.

하나 더 있었는데 못보고 넘어가서 다시 패치함.

아래에도 비슷하게 비교하는 구간이 있는데 그쪽은 NULL과 비교하는게 아니라서 패치할 필요는 없다.

 

이상한 NULL 비교 구간을 지나면, 내가 넣어준 값인 11111의 HEX값을 EAX로 넣어준다.

그 아래에 있는 SETE BL 은 아래에서 다룰 예정. 위의 NULL 비교처럼 이상한 부분임.

그리고 그 값을 특정 값(=패스워드)과 비교한다.

패스워드 찾았음.

성공시 분기되는 곳이 여기이다..

아무래도 값을 제대로 입력하면 TEST, CMP 등에서 걸리지 않는 구조여야 되는 것 같은데..

 

근데 아무래도 내 생각에는 TEST BL, BL 부분이 잘못된 것 같다.

값을 제대로 입력해도 BL = 0이 되는 상황,, BL값을 변경해주는 부분을 찾아봤다. => SETE BL

 

여기서, 내가 입력한 값(EAX)와 실제 패스워드 [ECX] 값을 비교하고 나서 플래그를 세워야 하는데,

TEST EAX, EAX를 통해 BL=1이 되려면 EAX 즉, 내가 입력한 패스워드가 null이 되어야 한다는 것이다.

 

위에서 name값 가지고 장난친 것처럼, 이것도 잘못된 부분이니 패치해주자.

문제의 점프 부분임. 이거 때문에 패스워드는 맞더라도 잘못된 문자열이 출력된다.

 

이렇게 해결 가능.

'Reversing' 카테고리의 다른 글

[코드엔진] Malware Analysis 02  (0) 2020.03.27
[코드엔진] Malware Analysis 01  (0) 2020.03.24
[코드엔진] Advance 08  (0) 2020.03.22
[코드엔진] Advance 06  (0) 2020.03.22
[Ap0x] unpackme.exe 인라인 패치  (0) 2020.03.22