-
rev-baic-7,8리버싱 엔지니어링/드림핵 2022. 4. 19. 21:21더보기
rev-baisc-7 : https://dreamhack.io/wargame/challenges/21/
rev-basic-7
Reversing Basic Challenge #7 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출
dreamhack.io
우선 새롭게 보이는 rol 명령어가 있다.
rol 명령어는 각 비트를 왼쪽으로 시프트하는데, 최상위비트가 최하위비트로 내려오며 회전하는 방식의 시프트이다. (ror은 오른쪽으로 회전)
즉, 왼쪽으로 회전한다고 생각하면 된다.
우선 회전 수는 cl인데, ecx의 값이 현재 인덱스에 and 7을 한 값이다.
그렇다면 값이 0~7 = 7, 8~15=15 .. 와 같이 되는데 이 값은 모두 8로 나누면 나머지가 7이다.
cl은 8비트이다, 즉, 모든 회전 수는 7이다.
그리고 회전하는 값은 현재 순서에 해당하는 내가 입력한 문자이다.
현재 코드를 역연산으로 해결하면,
#include <iostream> #include <cmath> using namespace std; void ROR(int& data, int c) { c %= 8; for (int i = 0; i < c; i++) { if (data % 2 == 0) { data /= 2; } else { data /= 2; data += pow(2, 7); } } } int main() { for (int i = 0; i < 31; i++) { int a; cin >> hex >> a; a ^= i; ROR(a, i & 7); cout << char(a); } return 0; }
① xor은 두 번하면 원래값으로 돌아옴, 따라서 xor 연산을 한번 해준다. (xor eax,[rsp+18h+var_18])
② rol의 반대인 ror을 통해 입력하는 값을 구한다.
52 DF B3 60 F1 8B 1C B5 57 D1 9F 38 4B 29 D9 26 7F C9 A3 E9 53 18 4F B8 6A CB 87 58 5B 39 1E 00
을 입력 하면 정답을 구할 수 있다.
정답:
더보기답 : DH{Roll_the_left!_Roll_the_right!}
rev-basic-8: https://dreamhack.io/wargame/challenges/22/
rev-basic-8
Reversing Basic Challenge #8 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출
dreamhack.io
imul 명령어는 정수 곱셈 명령어이다.
따라서, imul eax, 0FB는 eax*=0FB와 같다.
여기서는 FF와 and 연산을 하기때문에 역연산 보다는 rev-basic-4에서 했던 방법을 사용해 문제를 풀면 쉽게 풀린다.
rev-basic-4 참고 : https://wh514.tistory.com/43
#include <iostream> #include <cmath> using namespace std; int main() { int conv[256]; // 0h~ffh for (int i = 0; i < 128; i++) { // ascii 0~127 int eax = i * 0xFB; eax &= 0xFF; conv[eax] = i; } for (int i = 0; i < 21; i++) { int h; cin >> hex >> h; cout << char(conv[h]); } }
정답(+추가의 말):
더보기답 : DH{Did_y0u_brute_force?}
brute_force? 조합 가능한 문자열을 하나씩 대답해서 해독하는 방법
'리버싱 엔지니어링 > 드림핵' 카테고리의 다른 글
patch(+ IDA 주소 점프하도록 패치하기) (0) 2022.05.06 rev-baic-9 (0) 2022.05.03 rev-basic-5,6 (0) 2022.04.09 rev-basic-4 (0) 2022.04.05 rev-basic-3 (0) 2022.04.05