PC리버싱/dreamhack리버싱풀이

rev-basic-7 풀이

Lamed_Dhhd 2020. 8. 11. 19:41
반응형

https://dreamhack.io/wargame/challenges/21


rev basic 7 decrypt.zip
0.06MB





DIE가 3버전으로 업데이트되었습니다
문자열참조



분기조건전 BP
코드분석법에대해서
알고리즘을 구지보고 해독을안해도되는경우가있다
1111111111111111111111을 입력한후
변화를 보는것이다



대충저기까지하고
안되는것같아서 코드를해석한다



암호문 가는팁
c언어밑 기타언어용 암호해석알고리즘할떄 팁



주석들



입력가능한 범위는 33~126(10진수)



파일마개조로 알아내본다 실패했다



rol을 구현해야한다



디버거로 명령바꾸어요 그게 제일편해요



암덩어리 ROL해결 그리고 안되는걸 느끼면됩니다
안됩습니다 포기하세요 저게더어려워요


인라인 어셈블리어를 배우세요
그리고 어셈을 수정하세요

#include <stdio.h>
#include <string.h>
#include <Windows.h>

void main()
{
byte  a[] = {
0x52, 0xDF, 0xB3, 0x60, 0xF1, 0x8B, 0x1C, 0xB5, 0x57, 0xD1, 0x9F, 0x38, 0x4B, 0x29, 0xD9, 0x26,
0x7F, 0xC9, 0xA3, 0xE9, 0x53, 0x18, 0x4F, 0xB8, 0x6A, 0xCB, 0x87, 0x58, 0x5B, 0x39, 0x1E};
 unsigned char c = 0;
byte d = 0;
byte e = 0;
byte f = 0;
 unsigned char g[100];
 for (int b = 0; b != 31; b++) //31번반복
 {
	 for (c = 33; a[b] != f; c++)//33부터 키보드입력가능한 ascii값 그냥 무작위대입으로 찻을생각
	 {
		 if (e == 8) // and 7
		 {
			 e = 0;
		 }
		 d = 0;
		 __asm
		 {
			 movzx       eax, byte ptr[c]
			 movzx       ecx, byte ptr[e]
			 rol       al, cl
			 mov         byte ptr[d], al
		 }
		 f = d; // 값 byte화  문제발생 3번쨰부터 고장 이유 shl(x) rol(o)
		 f = f ^ e; // xor화
		 g[b] = c; // 값이동
		 if (a[b] == f)
		 {
			 e++;
			 break;
		 }
	 }
 }
 printf("%s", &g);
 system("pause");
}

Roll_the(8번째) 까지되고 나머지는오류다 왜오류일까? 코드에서 조금오류를수정하면된다

#include <stdio.h>
#include <string.h>
#include <Windows.h>

void main()
{
byte  a[] = {
0x52, 0xDF, 0xB3, 0x60, 0xF1, 0x8B, 0x1C, 0xB5, 0x57, 0xD1, 0x9F, 0x38, 0x4B, 0x29, 0xD9, 0x26,
0x7F, 0xC9, 0xA3, 0xE9, 0x53, 0x18, 0x4F, 0xB8, 0x6A, 0xCB, 0x87, 0x58, 0x5B, 0x39, 0x1E};
 unsigned char c = 0;
byte d = 0;
byte e = 0;
byte f = 0;
 unsigned char g[100];
 for (int b = 0; b != 31; b++) //31번반복
 {
	 for (c = 33; a[b] != f; c++)//33부터 키보드입력가능한 ascii값 그냥 무작위대입으로 찻을생각
	 {
		 if (e == 8) // and 7
		 {
			 e = 0;
		 }
		 d = 0;
		 __asm
		 {
			 movzx       eax, byte ptr[c]
			 movzx       ecx, byte ptr[e]
			 rol       al, cl
			 mov         byte ptr[d], al
		 }
		 f = d; // 값 byte화  문제발생 3번쨰부터 고장 이유 shl(x) rol(o)
		 f = f ^ b; // xor화
		 g[b] = c; // 값이동
		 if (a[b] == f)
		 {
			 e++;
			 break;
		 }
	 }
 }
 printf("%s", &g);
 system("pause");
}




반응형

'PC리버싱 > dreamhack리버싱풀이' 카테고리의 다른 글

patch 풀이(럭키맨)  (0) 2020.08.24
rev-basic-8 풀이  (1) 2020.08.12
rev-basic-6 풀이  (0) 2020.05.29
rev-basic-5 풀이  (0) 2020.05.29
워게임 전체적인 과정  (0) 2020.05.29