Exeinfo PE
C# / .NET 언어로 프로그램이 개발되었다.
dnSpy 툴로 한번 분석해보자.
Analysis
이렇게 입력하는 창이 뜨고
Check 버튼을 눌렀을때 유효하지 않는 값으로 판단되면, Wrong 메시지가 뜬다.
private static void MetMetMet(string sss)
함수에서 유효한 값인지 판단하는 코드가 있다.
값을 “ABCDEFGH”로 넣고method.Invoke
에 브레이크포인트를 걸어 Check 버튼을 눌러보면,
bytes에 ABCDEFGH를 base64로 인코딩된 QUJDREVGR0g 값이 들어간다.
이제 스텝을 하나씩 밟아서 확인해보면,
MetM 함수를 통해 값을 확인하고 있었다.
MetM
using System; // Token: 0x02000002 RID: 2 public class RevKrT2 { // Token: 0x06000001 RID: 1 private static void MetM(byte[] A_0, byte[] A_1) { if (A_1.Length == 12) { A_0[0] = 2; if ((A_1[0] ^ 16) != 74) { A_0[0] = 1; } if ((A_1[3] ^ 51) != 70) { A_0[0] = 1; } if ((A_1[1] ^ 17) != 87) { A_0[0] = 1; } if ((A_1[2] ^ 33) != 77) { A_0[0] = 1; } if ((A_1[11] ^ 17) != 44) { A_0[0] = 1; } if ((A_1[8] ^ 144) != 241) { A_0[0] = 1; } if ((A_1[4] ^ 68) != 29) { A_0[0] = 1; } if ((A_1[5] ^ 102) != 49) { A_0[0] = 1; } if ((A_1[9] ^ 181) != 226) { A_0[0] = 1; } if ((A_1[7] ^ 160) != 238) { A_0[0] = 1; } if ((A_1[10] ^ 238) != 163) { A_0[0] = 1; } if ((A_1[6] ^ 51) != 117) { A_0[0] = 1; } } } }
MetM 함수 코드는 위와 같이 XOR 연산을 하면서 값을 확인하고 있다.
XOR 연산을 하고 ZFluYWFNaWM를 base64 디코딩하면,
dYnaaMic