본문 바로가기

Reversing14

[HackCTF] Static 파일을 IDA로 열면 오류가 발생한다. syms2elf 플러그인을 다운로드 받아서 실행하면 symbol 오류가 사라지고 아래와 같이 디컴파일 가능하다. __int64 __fastcall sub_87C(char *a1, const char *a2) { char v3; // dl size_t v4; // rax char *v5; // [rsp+8h] [rbp-68h] char v6[32]; // [rsp+10h] [rbp-60h] BYREF char v7[24]; // [rsp+30h] [rbp-40h] BYREF int v8; // [rsp+48h] [rbp-28h] int v9; // [rsp+50h] [rbp-20h] int v10; // [rsp+54h] [rbp-1Ch] int v11; // [rs.. 2021. 10. 17.
[HackCTF] Keygen _BYTE *__fastcall encoding(const char *a1) { unsigned __int8 v2; // [rsp+1Fh] [rbp-11h] int i; // [rsp+20h] [rbp-10h] int v4; // [rsp+24h] [rbp-Ch] _BYTE *v5; // [rsp+28h] [rbp-8h] v5 = malloc(0x40uLL); v4 = strlen(a1); v2 = 72; for ( i = 0; i A,d 2021. 10. 9.
[HackCTF] Strncmp int __fastcall strcmp_(const char *input, const char *buf) { int v3; // [rsp+14h] [rbp-1Ch] int i; // [rsp+18h] [rbp-18h] int j; // [rsp+1Ch] [rbp-14h] v3 = 0; for ( i = 0; i 2021. 9. 12.
[HackCTF] Handray Dump of assembler code for function main: 0x0000000000400526 : push rbp 0x0000000000400527 : mov rbp,rsp 0x000000000040052a : sub rsp,0x10 0x000000000040052e : mov DWORD PTR [rbp-0x4],0x1 0x0000000000400535 : cmp DWORD PTR [rbp-0x4],0x0 0x0000000000400539 : jne 0x40058d 0x000000000040053b : mov DWORD PTR [rbp-0x8],0x0 0x0000000000400542 : jmp 0x400571 0x0000000000400544 : mov eax,DWORD PTR [rbp-.. 2021. 9. 11.
[HackCTF] Reversing Me #include #include int main() { int i; char *serial = "H`cjCUFzhdy^stcbers^D1_x0t_jn1w^r2vdrre^3o9hndes1o9>}"; char enter[54]; printf("키를 입력하시게 : "); scanf("%s", enter); if (strlen(enter) == strlen(serial)) { for (i = 0; i < strlen(serial) && (enter[i] ^ (i % 2)) == serial[i]; i++); if (i - 1 == strlen(enter)) printf("정답일세!\n"); } else printf("그건 아닐세...\n"); exit(0); } 문제 코드는 위와 같다. 플래그를 획득하기 위한 .. 2021. 9. 10.
[HackCTF] Welcome_REV int __cdecl check_password(char *a1) { void *v1; // esp int v2; // eax int v3; // eax int v4; // eax int v5; // eax int v6; // eax int v7; // eax int v8; // eax int v9; // eax int v10; // eax int v12; // [esp+0h] [ebp-48h] BYREF char *s; // [esp+Ch] [ebp-3Ch] int v14; // [esp+10h] [ebp-38h] int v15; // [esp+14h] [ebp-34h] int i; // [esp+18h] [ebp-30h] int v17; // [esp+1Ch] [ebp-2Ch] size_t n; //.. 2021. 9. 10.
[DIMI CTF] gorev 문제에서 주어진 파일을 cmd에서 실행하면 위와 같이 암호화된 문자열이 출력된다. IDA에 파일을 로드하고 Funtions window에서 main 함수를 찾으면 아래와 같이 디컴파일된 코드를 볼 수 있습니다. 저도 go 언어는 처음보지만 함수 형태를 보면 의미를 쉽게 유추할 수 있습니다. 아래 코드를 보면 v4는 플래그 길이를 나타내고 byte_4C5F5에서 데이터를 가져와서 20과 xor을 하면 플래그가 출력되지 않을까 유추할 수 있습니다. 아무래도 처음보는 언어이기 때문에 정확한 분석보다는 감으로 찾아야하는 부분이 있습니다. byte_4C5F5와 20을 xor 하면 cmd 에서 파일을 실행할때 출력되는 P]Y]oS{KS$KS[Ks{Ks$Ks[Kf'bqfg}zs5i가 되지 않을까 생각됩니다. 마침 길.. 2021. 8. 6.
[Dreamhack] rev-basic-6 문제에서 주어진 파일을 IDA Pro에 로드하면 아래와 같은 코드가 출력됩니다. int __cdecl main(int argc, const char **argv, const char **envp) { char v4[256]; // [rsp+20h] [rbp-118h] BYREF memset(v4, 0, sizeof(v4)); sub_1400011B0("Input : ", argv, envp); sub_140001210("%256s", v4); if ( (unsigned int)sub_140001000(v4) ) puts("Correct"); else puts("Wrong"); return 0; } 문제의 핵심은 if문에 sub_140001000(v4)에 있습니다. 해당 함수로 이동하면 아래와 같은 코드가.. 2021. 7. 17.
[Dreamhack] rev-basic-8 문제에서 주어진 파일을 IDA Pro 7.5 디컴파일러로 디컴파일한 결과 아래와 같은 코드가 출력된다. int __cdecl main(int argc, const char **argv, const char **envp) { char v4[256]; // [rsp+20h] [rbp-118h] BYREF memset(v4, 0, sizeof(v4)); sub_1400011B0("Input : ", argv, envp); sub_140001210("%256s", v4); if ( (unsigned int)sub_140001000(v4) ) puts("Correct"); else puts("Wrong"); return 0; } __int64 __fastcall sub_140001000(__int64 a1) { .. 2021. 4. 12.