Constant(438)
-
rootme elf nanometis
보호되어 있는 글입니다.
2018.05.22 -
rootme elf-antidebug
// rootme// elf-antidebug solve// c0nstant // 풀이 // 바이너리를 키면 안티디버깅 int 3, int 80밖에 안보인다.// 텍스트로 바이너리를 보면 사용되고 있지 않은 함수 sub_80480E2가 있다.// sub_80480E2에서 특정 주소까지 xor을 시키게 되는데 여기서 opcode가 복원이 된다.// 복원 된 opcode를 덤프 떠서 새로운 elf를 만든 다음 루틴 분석을 진행한다. // 루틴은 byte씩 0xfc로 xor를 하게 된다. #include int main(int argc, char*argv[]){// 0xA5, 0xCF, 0x9D, 0xB4, 0xDD, 0x88, 0xB4, 0x95, 0xAF, 0x95, 0xAF, 0x88, 0xB4, 0xC..
2018.05.22 -
ROOTME PE-SEHVEH
자릿수 : 12 00B7149C . F3:AE repe scas byte ptr es:[edi] ; -> 0XF000B7149E . FC cld00B7149F . 80C1 F0 add cl,0xF000B714A2 . 81F9 FF000000 cmp ecx,0xFF 00B71D64 8180 B0000000 2>add dword ptr [eax+0xB0],0x48335621 얘를 어디서 써야할까 1번째 루틴 00B714B0 . BA 5930645A mov edx,0x5A64305900B714B5 . 31D0 xor eax,edx00B714B7 . 3D 2E552836 cmp eax,0x3628552E 0x5A643059 ^ 0x3628552ElLew 2번째 루틴(0x495f4265 ^ 0xff2cf8e5 )..
2018.05.21 -
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