오래 못 할 짓 하지 않기
[ 워게임 ] 36. Reversing 22 : Reversing Basic Challenge #8 본문
[ 워게임 ] 36. Reversing 22 : Reversing Basic Challenge #8
쫑알bot 2025. 2. 8. 11:11
앞부분은 항상 다 똑같길래 여기로 바로 옴
a1+i 는 반복문에 있을 땐 a[i] 로 취급하면 된다.
그럼 ( -5 * a1[i] = 비교할 문자열 ) 로 가면 되나
이제는 그렇게 풀 수가 없는 것 같다.
어셈블리어 레벨로 내려가서 보자.


인자로 받은 eax를 이래저래 계산하고 밑에서 두 번째에 cmp로 비교까지 하는 걸 보면
eax는 a1인 걸 알 수 있다.
그럼 그걸 어떻게 하는지 보자.

imul eax , 0FBh 를 보자
imul 명령어는 eax = eax * 0xFB 라고 생각하면 된다.
and eax , 0FFh 를 보면
2진수로 나열했을 때, 비트 두 개 모두 1인 경우만 1로 취급한다.
그럼 주로 어떨 때 쓰냐?
8비트로 제한할 때 쓴다.
and 472913409128357012938 , 0FFh
= and 472913409128357012938 , 11111111
1111 1111 = 0000000...11111111이므로
472913409128357012938의 아래 8비트만 해당된다.
eax = a[i]라고 생각했을 때
imul eax , 0FBh
and eax , 0FFh
를 통한 결과가 byte_140003000[i]의 값과 같아야 한다.
0xFB와 곱하고, 0xFF와 and 연산을 거친 것이 byte_140003000[] 과 같은 걸 찾으려면
이건 brute force로 가는 게 맞을 것 같다.

to_decryp[] = byte_140003000[]

출발!!!

?????

조건문 다시 괄호 제대로 맞추니까 됐다.

회고
지금까지 디컴파일한 파일에서만 식을 보고 만들면 됐는데
이제는 어셈블리어에서 봐야할 것 같다.
디컴파일한 곳에서 보이지 않는 게 좀 있는 것 같음.
다음 단계로 조금 더 성장해야하는 경계선인 것 같다.
'보안_모의해킹 > CTF (Capture The Flag)' 카테고리의 다른 글
[ 워게임 ] 38. Forensics 518 : Basic_Forensics_1 (0) | 2025.02.13 |
---|---|
[ 워게임 ] 37. Pwnable 34 : oneshot (20% 못 풀었음) (0) | 2025.02.09 |
[ 워게임 ] 35. Pwnable 5 : basic_exploitation_003 (0) | 2025.02.06 |
[ 워게임 ] 34. Pwnable 11 : out_of_bound (멋진 문제.) 지금껏 가장 배울 게 많은 문제인 것 같다. (0) | 2025.02.06 |
[ 워게임 ] 33. Reversing 20 : Reversing Basic Challenge #6 (0) | 2025.02.05 |