히공

코드엔진 - basic 14 본문

reverse engineering/CodeEngn

코드엔진 - basic 14

heegong 2020. 9. 25. 21:04
728x90

 14번을 풀어보겠습니다.

 

 

 

 

 

 

 

실행 화면      (앞으로 첫번째 입력을 name 두번째 입력을 비번이라고 하겠습니다.)

 

 

 

 

 

 

pushad발견

 

 

 

 

 

 

 

 

 

 

oep로 가는 점프문

 

 

 

 

 

 

 

 

 

oep

 

 

 

 

 

 

 

틀렸을때 나오는 You Have 어쩌구 저쩌구로 가봅시다.

 

 

 

 

 

 

 

 

여기서 좀만 더 위로 올라가봅시다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

분기점에 bp를 걸고 실행한 후 name에는CodeEngn을 입력하고 비번에는 123을 입력해봅시다.

 

그리고

eax, esi값을 확인해봅시다.

 

 

 

 

 

 

esi : 76193(10진수)

 

 

 

 

 

eax : 123

 

제가 비번으로 입력한 값 입니다.

 

 

그러면 비번으로 76193을 입력해야 한다고 생각이 듭니다.

 

 

 

 

 

 

정답입니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

++

한번 비번을 만드는 루틴을 확인해보겠습니다.

 

입력한 상태에서 분석하면 편합니다.

 

xor로 esi를 0으로 만들고 시작합니다.

eax를 1로 만들고 시작합니다.

 

 

 

name길이만큼 for문을 돌립니다.

 

변수 i의 역할을 eax가 하고있습니다.

 

 

for문이 1부터 시작합니다. 

 

그리고 403038은 CodeEngn인것으로 보아 제가 입력한 name값 입니다.

 

 

 

1. mov dl, byte ptr ds:[eax+403037]는 dl = name[i] 라고 볼 수 있습니다.

2. edx를 0xff와 and연산 합니다. (edx = edx & 0xff)

3. ebx에 edx값을 넣고 ebx *= edx를 합니다.  편하게 생각하면 ebx = edx*edx 입니다.

4. esi += ebx

5. ebx = edx

6. ebx = ebx >> 1

7. esi += ebx

8. esi -= edx

 

 

 

for문이 끝난 뒤 esi값만 확인하면 됩니다.

 

 

출력값 : 76193

 

 

 

 

 

 

답 : 76193

'reverse engineering > CodeEngn' 카테고리의 다른 글

코드엔진 - basic 16  (0) 2020.10.05
코드엔진 - basic 15  (0) 2020.10.04
코드엔진 - basic 13  (0) 2020.09.25
코드엔진 - basic 12  (1) 2020.09.22
코드엔진 - basic 11  (0) 2020.09.22
Comments