0x02 Reverse Engineer/0x03. Etc(70)
-
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 -
KISA Diary 문제풀이 및 상세분석
팀원인 zer0day에게 바이너리를 우연히 받았다. 감사따리다~~ (grin) 오늘 받았으니 오늘 안에 끝내고 싶어서 집에서 분석을 하고, 잠시 밥을 먹으러 외출했다가 카페와서 마무리 하였다. (저번 키사문제도 맥주 한잔 하고 풀었는데.. 얘도 맥주 마시고 분석했다..맥주는 좋다.) 우선, 바이너리를 통해 반성을 해본 것이 있다. 1. 아직까지 WIN32API 분석 속도가 느린 점이다.지금 까지 한 3개 정도의 프로그램을 분석해보았는데, 이 녀석은 핵심 심볼도 일부 지워져 있고,(MessageBox 얘만 살아있으면 되게 빨리 감을 잡았을 텐데..) 코드가 TEXT섹션과 CODE섹션에 병합되어 있는 형태여서 다소 생소하였다. 그리고 break point와 trace를 동시에 보는 눈이 부족했다. 2. 바이..
2018.05.18