2018/05/19(6)
-
ROOTME Macho keygen or not
코드 분석 int __cdecl main(int argc, const char **argv, const char **envp){ __int64 v3; // rsi int v4; // eax int i; // [rsp+44h] [rbp-6Ch] unsigned int key; // [rsp+4Ch] [rbp-64h] const char **v8; // [rsp+50h] [rbp-60h] int v9; // [rsp+58h] [rbp-58h] int v10; // [rsp+5Ch] [rbp-54h] char v11; // [rsp+60h] [rbp-50h] char shellcode[15]; // [rsp+80h] [rbp-30h] char v13; // [rsp+8Fh] [rbp-21h] char v14;..
2018.05.19 -
ROOTME ARM
void __fastcall __noreturn main_0(int a1, int argv){ size_t status; // [sp+8h] [bp-1Ch] char *s; // [sp+Ch] [bp-18h] int index; // [sp+14h] [bp-10h] int v5; // [sp+14h] [bp-10h] if ( a1 != 2 ) { puts("Please input password"); exit(1); } s = *(char **)(argv + 4); printf("Checking %s for password...\n", *(_DWORD *)(argv + 4)); status = strlen(s); // 6글자 if ( status != 6 ) { puts("Loser..."); exit(..
2018.05.19 -
ROOTME NO SOFTWARE BREAKPOINTS
풀이해당 바이너리는 sys_write와 sys_read로 이루어져있다.sys_read에서 51바이트를 입력받을 수 있지만, 코드를 분석해보면 25바이트만+"\0"만 사용하면 된다.sys_read에서 입력한 값은 flag로 사용된다. 하지만, flag를 추출할 수 있는 루틴은 보이지 않는다. flag를 입력한 뒤에 나오는 루틴을 살펴보면 while(1)을 통해 이러한 행위를 한다. while ( 1 ) { v3 = __ROR4__(v3, 1); // ror edx ,1 if ( (_BYTE)v3 != (flag[v4 - 1] ^ key_data[v4 - 1]) )// [0~24] break; if ( !--v4 ) // v4가 0이되면 sys_write 수행 { v5 = sys_write(1, &unk_8..
2018.05.19 -
ROOTME PYC-BYTECODE
Python중에 pyc로 되어 있어서 pyc decompiler를 이용하였다. 파이썬 역분석을 처음 해봐서 엄청 해맸다. 문제를 보면 KEY값이 하드코딩 되어있고, 사용자가 입력한 PASS를 통해 KEYOUT를 생성할 수 있다. 파이썬의 ord는 문자의 코드 값을 구하는 함수이다. 이를 chr로 변환하여 풀었다. 코드를 많이 변환하지 않고 결과가 SOLUCE와 같아야 하기 때문에 SOLUCE를 인자로 삼고 브루트포싱 했다.. 후 오래걸렸다. 문제:print('Welcome to the RootMe python crackme')PASS = raw_input('Enter the Flag: ')KEY = 'I know, you love decrypting Byte Code !'I = 5SOLUCE = [ 57..
2018.05.19 -
ROOTME ELF PTRACE
PTRACE 안티디버깅 우회 한 뒤 문자열 비교 하면 끝
2018.05.19 -
ROOTME FAKE INSTRUCTION
FAKE INSTRUCTION에 꽂혀야 하는데... blowfish에 꽂혀서 못풀었따. 문제 명을 잘 읽자. 그럼 끝...
2018.05.19