호그와트

드림핵 you shall pass

영웅*^%&$ 2022. 1. 18. 09:54
728x90

문제 파일을 실행하기 위해서는 .NET Framework 버전 4 이상이 필요합니다.

문제의 조건에 이렇게 써있다

.net 디컴파일러 dotpeek을 이용하면

ilGenerator.MarkLabel(label2);

ilGenerator.Emit(OpCodes.Ldloc_0); // 문자배열

ilGenerator.Emit(OpCodes.Ldloc_3); // i

ilGenerator.Emit(OpCodes.Ldelema, typeof (char)); // &문자배열[i]

ilGenerator.Emit(OpCodes.Dup); // &문자배열[i]의 복제

ilGenerator.Emit(OpCodes.Ldind_U2); // 문자배열[i]

ilGenerator.Emit(OpCodes.Ldloc_0);

ilGenerator.Emit(OpCodes.Ldloc_3);

ilGenerator.Emit(OpCodes.Ldc_I4_1);

ilGenerator.Emit(OpCodes.Add);

대략 이와 비슷한 값이 나온다

그리고 분석한 것을 바탕으로

c언어로 구성하면

#include <stdio.h>

int dec[] = {

0x94, 0x1b, 0x0E, 0x1b,

0x22, 0x19, 0x0A, 0x1E,

0x30, 0x21, 0x17, 0x0F,

0x13, 0x2b, 0x2e, 0x1E,

0x17, 0x0F, 0x13, 0x2b,

0x21, 0x22, 0x3C, 0x36,

0x31, 0x2f, 0x2a, 0x2a,

0x33, 0x50, 0x3f, 0x89

};

int flag[32] ={0,}; // 1단계 디코딩

int end_flag[32]= {0,}; // 2단계 디코딩

/*

0x21 ~ 0x7E 입력할 수 있는 값

*/

int main(){

int i=0,j=2, f0=0x44, f1=0x48, f2=0x7B,f31=0x7D,temp =0, temp1=0, temp2=0;

temp1 = f0^f1;

temp2 = f1^f2;

flag[31] = f31;

flag[0] = temp1;

flag[1] = temp2;

for(i =29;i>=0;i--){

flag[j] = dec[i] - temp2;

temp2 = flag[j];

j++;

}

end_flag[0] = f0;

end_flag[1] = f1;

end_flag[31] = f31;

printf("%c%c",end_flag[0],end_flag[1]);

for(i = 1;i<31;i++) {

temp = end_flag[i];

for(j=0x20;j<0x7E;j++)

{

if((temp ^ j) == flag[i]){

end_flag[i+1] = j;

printf("%c",end_flag[i+1]);

break;

}

}

}

return 0;

}

이렇게 된다

728x90

'호그와트' 카테고리의 다른 글

드림핵 jff3_magic  (0) 2022.01.18
드림핵 tmitter  (0) 2022.01.18
드림핵 web-deserialize python  (0) 2022.01.18
드림핵 linux forest  (0) 2022.01.18
XSS와 CSRF의 차이점 (드림핵에서 누가 물어보길래)  (0) 2022.01.03