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 |