# 코드 엔진 문제: advance 3

2021. 1. 29. 07:17보안/리버스엔지니어링

 

 

답은 문자열 근처에 브레이크 포인트를 걸고, 걸리는 곳 주변을 확인해보면 쉽게 찾을 수 있다.

 

 

 

 

 

어느 함수가 실행된 후 시리얼이 생성되는지 확인 후 해당 함수로 들어가 보니 특정 문자열을 이리저리 변환하고 있다.

 

문자열 길이만큼 다 변환한 후에 그 값을 더하고 특정 연산을 하는 것으로 추정된다.

 

 

 

61 - 입력값 abcd의 첫번째 숫자 아스키값

 

EBX 61 << 5 = C20 (3104)

C20 + 2328 = 2F48

ECX 62

2F48 + 62  = 2FAA

2FAA xor BC614E

= BC4EE4 (12340964)

ECX = BC612C (12345644)

EBX = 2FAA * D = 26BA2 xor 15587 = 33E25 (212517)

F807 + 1538

10D3F and 7A2B36FF = 1043F

EBX(33E25) xor 1043F

23A1A * F807 = EE3EC6B6

EE3EC6B6 - 1043F  = EE3DC277

EE3DC277 << 7 = 1EE13B80 (뒤에 8자리만 남는다)

1EE13B80 And 17F4B = 1EE2BACB

Movzx ECX , AX(뒤의 4자리)  = EAX의 뒤의 4자리를 ECX에 넣는다

ROR CX, 5  = ECX의 뒤의 4자리를 오른쪽으로 5 시프트 연산 (BACB >> 5)

1EE2BACB add 5DD6 = 1EE318A1

mov EBX, 11

mov ECX, EAX (EAX를 ECX에 넣고)

CDQ

IDIV EBX  =  EAX가 11로 나눠짐

XCHG EAX(01D11F91), ECX(1EE318A1) = 서로 값 교환

ADC EAX,2  = EAX값이 3 증가 (1EE318A4)

위의 과정을 계속 문자열 길이까지 계속 반복 후 특정 연산을 하는 것으로 추정됨

 

'보안 > 리버스엔지니어링' 카테고리의 다른 글

# 코드 엔진 문제: basic 5  (0) 2021.01.29
# 코드 엔진 문제 : Basic 1  (0) 2021.01.29
# 코드 엔진 문제 : Basic 8  (0) 2021.01.29
# 코드 엔진 문제 : Basic 15  (0) 2021.01.29