Writeup CTFR Salah Fokus

Khairu Aqsara Sudirman

Khairu Aqsara Sudirman

Mar 26, 2021 — 19 mins read
Sedikit Basic Encryption dengan function abal-abalan

Download : https://mega.nz/#!ks4BzA5b!ieG-RccWFiTuGVXd8B1qICt2YzYabetW0DUHYaiYSps

setelah di decompiler dengan ghidra, ternyata banyak banget fungsi yang di obfuscated, tetapi ada beberapa fungsi yang tidak di obfuscated, misalnya seperti fungsi main() dan fungsi encrypt()

gdb-peda$ pd main
Dump of assembler code for function main:
   0x0000000000001f27 <+0>:     endbr64 
   0x0000000000001f2b <+4>:     push   rbp
   0x0000000000001f2c <+5>:     mov    rbp,rsp
   0x0000000000001f2f <+8>:     lea    rdi,[rip+0x1595]        # 0x34cb
   0x0000000000001f36 <+15>:    call   0x1070 <puts@plt>
   0x0000000000001f3b <+20>:    lea    rdi,[rip+0x15a4]        # 0x34e6
   0x0000000000001f42 <+27>:    call   0x1189 <encrypt>
   0x0000000000001f47 <+32>:    mov    eax,0x0
   0x0000000000001f4c <+37>:    pop    rbp
   0x0000000000001f4d <+38>:    ret    
End of assembler dump.
gdb-peda$ 
gdb-peda$ pd encrypt
Dump of assembler code for function encrypt:
   0x0000000000001189 <+0>:     endbr64 
   0x000000000000118d <+4>:     push   rbp
   0x000000000000118e <+5>:     mov    rbp,rsp
   0x0000000000001191 <+8>:     push   rbx
   0x0000000000001192 <+9>:     sub    rsp,0x28
   0x0000000000001196 <+13>:    mov    QWORD PTR [rbp-0x28],rdi
   0x000000000000119a <+17>:    mov    DWORD PTR [rbp-0x14],0x0
   0x00000000000011a1 <+24>:    jmp    0x1312 <encrypt+393>
   0x00000000000011a6 <+29>:    mov    eax,DWORD PTR [rbp-0x14]
   0x00000000000011a9 <+32>:    movsxd rdx,eax
   0x00000000000011ac <+35>:    mov    rax,QWORD PTR [rbp-0x28]
   0x00000000000011b0 <+39>:    add    rax,rdx
   0x00000000000011b3 <+42>:    movzx  eax,BYTE PTR [rax]
   0x00000000000011b6 <+45>:    cmp    al,0x40
   0x00000000000011b8 <+47>:    jle    0x1210 <encrypt+135>
   0x00000000000011ba <+49>:    mov    eax,DWORD PTR [rbp-0x14]
   0x00000000000011bd <+52>:    movsxd rdx,eax
   0x00000000000011c0 <+55>:    mov    rax,QWORD PTR [rbp-0x28]
   0x00000000000011c4 <+59>:    add    rax,rdx
   0x00000000000011c7 <+62>:    movzx  eax,BYTE PTR [rax]
   0x00000000000011ca <+65>:    cmp    al,0x5a
   0x00000000000011cc <+67>:    jg     0x1210 <encrypt+135>
   0x00000000000011ce <+69>:    mov    eax,DWORD PTR [rbp-0x14]
   0x00000000000011d1 <+72>:    movsxd rdx,eax
   0x00000000000011d4 <+75>:    mov    rax,QWORD PTR [rbp-0x28]
   0x00000000000011d8 <+79>:    add    rax,rdx
   0x00000000000011db <+82>:    movzx  eax,BYTE PTR [rax]
   0x00000000000011de <+85>:    movsx  eax,al
   0x00000000000011e1 <+88>:    lea    ecx,[rax+0x1]
   0x00000000000011e4 <+91>:    mov    eax,DWORD PTR [rbp-0x14]
   0x00000000000011e7 <+94>:    cdq    
   0x00000000000011e8 <+95>:    shr    edx,0x1b
   0x00000000000011eb <+98>:    add    eax,edx
   0x00000000000011ed <+100>:   and    eax,0x1f
   0x00000000000011f0 <+103>:   sub    eax,edx
   0x00000000000011f2 <+105>:   sub    ecx,eax
   0x00000000000011f4 <+107>:   mov    eax,DWORD PTR [rbp-0x14]
   0x00000000000011f7 <+110>:   cdqe   
   0x00000000000011f9 <+112>:   lea    rdx,[rax*4+0x0]
   0x0000000000001201 <+120>:   lea    rax,[rip+0x4e38]        # 0x6040 <ec>
   0x0000000000001208 <+127>:   mov    DWORD PTR [rdx+rax*1],ecx
   0x000000000000120b <+130>:   jmp    0x130e <encrypt+389>
   0x0000000000001210 <+135>:   mov    eax,DWORD PTR [rbp-0x14]
   0x0000000000001213 <+138>:   movsxd rdx,eax
   0x0000000000001216 <+141>:   mov    rax,QWORD PTR [rbp-0x28]
   0x000000000000121a <+145>:   add    rax,rdx
   0x000000000000121d <+148>:   movzx  eax,BYTE PTR [rax]
   0x0000000000001220 <+151>:   cmp    al,0x60
   0x0000000000001222 <+153>:   jle    0x127a <encrypt+241>
   0x0000000000001224 <+155>:   mov    eax,DWORD PTR [rbp-0x14]
   0x0000000000001227 <+158>:   movsxd rdx,eax
   0x000000000000122a <+161>:   mov    rax,QWORD PTR [rbp-0x28]
   0x000000000000122e <+165>:   add    rax,rdx
   0x0000000000001231 <+168>:   movzx  eax,BYTE PTR [rax]
   0x0000000000001234 <+171>:   cmp    al,0x7a
   0x0000000000001236 <+173>:   jg     0x127a <encrypt+241>
   0x0000000000001238 <+175>:   mov    eax,DWORD PTR [rbp-0x14]
   0x000000000000123b <+178>:   movsxd rdx,eax
   0x000000000000123e <+181>:   mov    rax,QWORD PTR [rbp-0x28]
   0x0000000000001242 <+185>:   add    rax,rdx
   0x0000000000001245 <+188>:   movzx  eax,BYTE PTR [rax]
   0x0000000000001248 <+191>:   movsx  eax,al
   0x000000000000124b <+194>:   lea    ecx,[rax+0x1]
   0x000000000000124e <+197>:   mov    eax,DWORD PTR [rbp-0x14]
   0x0000000000001251 <+200>:   cdq    
   0x0000000000001252 <+201>:   shr    edx,0x1c
   0x0000000000001255 <+204>:   add    eax,edx
   0x0000000000001257 <+206>:   and    eax,0xf
   0x000000000000125a <+209>:   sub    eax,edx
   0x000000000000125c <+211>:   add    ecx,eax
   0x000000000000125e <+213>:   mov    eax,DWORD PTR [rbp-0x14]
   0x0000000000001261 <+216>:   cdqe   
   0x0000000000001263 <+218>:   lea    rdx,[rax*4+0x0]
   0x000000000000126b <+226>:   lea    rax,[rip+0x4dce]        # 0x6040 <ec>
   0x0000000000001272 <+233>:   mov    DWORD PTR [rdx+rax*1],ecx
   0x0000000000001275 <+236>:   jmp    0x130e <encrypt+389>
   0x000000000000127a <+241>:   mov    eax,DWORD PTR [rbp-0x14]
   0x000000000000127d <+244>:   movsxd rdx,eax
   0x0000000000001280 <+247>:   mov    rax,QWORD PTR [rbp-0x28]
   0x0000000000001284 <+251>:   add    rax,rdx
   0x0000000000001287 <+254>:   movzx  eax,BYTE PTR [rax]
   0x000000000000128a <+257>:   cmp    al,0x2f
   0x000000000000128c <+259>:   jle    0x12e1 <encrypt+344>
   0x000000000000128e <+261>:   mov    eax,DWORD PTR [rbp-0x14]
   0x0000000000001291 <+264>:   movsxd rdx,eax
   0x0000000000001294 <+267>:   mov    rax,QWORD PTR [rbp-0x28]
   0x0000000000001298 <+271>:   add    rax,rdx
   0x000000000000129b <+274>:   movzx  eax,BYTE PTR [rax]
   0x000000000000129e <+277>:   cmp    al,0x39
   0x00000000000012a0 <+279>:   jg     0x12e1 <encrypt+344>
   0x00000000000012a2 <+281>:   mov    eax,DWORD PTR [rbp-0x14]
   0x00000000000012a5 <+284>:   movsxd rdx,eax
   0x00000000000012a8 <+287>:   mov    rax,QWORD PTR [rbp-0x28]
   0x00000000000012ac <+291>:   add    rax,rdx
   0x00000000000012af <+294>:   movzx  eax,BYTE PTR [rax]
   0x00000000000012b2 <+297>:   movsx  eax,al
   0x00000000000012b5 <+300>:   lea    ecx,[rax+0x1]
   0x00000000000012b8 <+303>:   mov    eax,DWORD PTR [rbp-0x14]
   0x00000000000012bb <+306>:   cdq    
   0x00000000000012bc <+307>:   shr    edx,0x1d
   0x00000000000012bf <+310>:   add    eax,edx
   0x00000000000012c1 <+312>:   and    eax,0x7
   0x00000000000012c4 <+315>:   sub    eax,edx
   0x00000000000012c6 <+317>:   sub    ecx,eax
   0x00000000000012c8 <+319>:   mov    eax,DWORD PTR [rbp-0x14]
   0x00000000000012cb <+322>:   cdqe   
   0x00000000000012cd <+324>:   lea    rdx,[rax*4+0x0]
   0x00000000000012d5 <+332>:   lea    rax,[rip+0x4d64]        # 0x6040 <ec>
   0x00000000000012dc <+339>:   mov    DWORD PTR [rdx+rax*1],ecx
   0x00000000000012df <+342>:   jmp    0x130e <encrypt+389>
   0x00000000000012e1 <+344>:   mov    eax,DWORD PTR [rbp-0x14]
   0x00000000000012e4 <+347>:   movsxd rdx,eax
   0x00000000000012e7 <+350>:   mov    rax,QWORD PTR [rbp-0x28]
   0x00000000000012eb <+354>:   add    rax,rdx
   0x00000000000012ee <+357>:   movzx  eax,BYTE PTR [rax]
   0x00000000000012f1 <+360>:   movsx  eax,al
   0x00000000000012f4 <+363>:   lea    ecx,[rax-0xf]
   0x00000000000012f7 <+366>:   mov    eax,DWORD PTR [rbp-0x14]
   0x00000000000012fa <+369>:   cdqe   
   0x00000000000012fc <+371>:   lea    rdx,[rax*4+0x0]
   0x0000000000001304 <+379>:   lea    rax,[rip+0x4d35]        # 0x6040 <ec>
   0x000000000000130b <+386>:   mov    DWORD PTR [rdx+rax*1],ecx
   0x000000000000130e <+389>:   add    DWORD PTR [rbp-0x14],0x1
   0x0000000000001312 <+393>:   mov    eax,DWORD PTR [rbp-0x14]
   0x0000000000001315 <+396>:   movsxd rbx,eax
   0x0000000000001318 <+399>:   mov    rax,QWORD PTR [rbp-0x28]
   0x000000000000131c <+403>:   mov    rdi,rax
   0x000000000000131f <+406>:   call   0x1080 <strlen@plt>
   0x0000000000001324 <+411>:   cmp    rbx,rax
   0x0000000000001327 <+414>:   jb     0x11a6 <encrypt+29>
   0x000000000000132d <+420>:   nop
   0x000000000000132e <+421>:   nop
   0x000000000000132f <+422>:   add    rsp,0x28
   0x0000000000001333 <+426>:   pop    rbx
   0x0000000000001334 <+427>:   pop    rbp
   0x0000000000001335 <+428>:   ret    
End of assembler dump.

Kalo di terjemahin dalam Bahasa C dengan tools Ghidra hasilnya

undefined8 main(undefined8 param_1,int param_2)
{
  puts("Im not looking to anywhere");
  encrypt("Im not looking to anywhere\n",param_2);
  return 0;
}

void encrypt(char *__block,int __edflag)
{
  size_t sVar1;
  uint uVar2;
  int local_1c;
  
  local_1c = 0;
  while( true ) {
    sVar1 = strlen(__block);
    if (sVar1 <= (ulong)(long)local_1c) break;
    uVar2 = local_1c >> 0x1f;
    if ((__block[local_1c] < 'A') || ('Z' < __block[local_1c])) {
      if ((__block[local_1c] < 'a') || ('z' < __block[local_1c])) {
        if ((__block[local_1c] < '0') || ('9' < __block[local_1c])) {
          *(int *)(ec + (long)local_1c * 4) = __block[local_1c] + -0xf;
        }
        else {
          *(uint *)(ec + (long)local_1c * 4) =
               (__block[local_1c] + 1) - ((local_1c + (uVar2 >> 0x1d) & 7) - (uVar2 >> 0x1d));
        }
      }
      else {
        *(uint *)(ec + (long)local_1c * 4) =
             __block[local_1c] + 1 + ((local_1c + (uVar2 >> 0x1c) & 0xf) - (uVar2 >> 0x1c));
      }
    }
    else {
      *(uint *)(ec + (long)local_1c * 4) =
           (__block[local_1c] + 1) - ((local_1c + (uVar2 >> 0x1b) & 0x1f) - (uVar2 >> 0x1b));
    }
    local_1c = local_1c + 1;
  }
  return;
}

kalo dilihat-lihat, fungsi main() hanya memanggil fungsi encrypt(), dalam file binary saya juga tidak menemukan fungsi-fungsi yang berkaitan dengan decryptnya nya kalo di sederhankan fungsi encryptnya kedalam versi python

def encrypt(flag):
    panjang_flag = len(flag)
    i = 0
    enc_flag = []
    
    while(panjang_flag > i):
        shift_var = i >> 0x1f
        ord_flag = ord(flag[i])
        if ord_flag < ord('A') or ord('Z') < ord_flag:
            if ord_flag < ord('a') or ord('z') < ord_flag:
                if ord_flag < ord('0') or ord('9') < ord_flag:
                    cc = ord_flag - 0xf
                    enc_flag.append(cc)
                else:
                    cc = (ord_flag + 1) - ((i + (shift_var >> 0x1d) & 7) - (shift_var >> 0x1d))
                    enc_flag.append(cc)
            else:
                cc = ord_flag + 1 + ((i + (shift_var >> 0x1c) & 0xf) - (shift_var >> 0x1c))
                enc_flag.append(cc)
        else:
            cc = (ord_flag + 1) - ((i + (shift_var >> 0x1b) & 0x1f) - (shift_var >> 0x1b))
            enc_flag.append(cc)
        i+=1
    return enc_flag

setelah di cari-cari kemungkinan flag sebenarnya ada di fungsi undefined8 gqIBObWeQSulobiTtXtNJbboY(undefined8 param_1,int param_2) karena pada fungsi ini ada beberapa inisialisasi karakter dalam bentuk hexadecimal yang tidak ditemukan di fungsi yang lainnya.

gdb-peda$ pd gqIBObWeQSulobiTtXtNJbboY
Dump of assembler code for function gqIBObWeQSulobiTtXtNJbboY:
   0x00000000000016cc <+0>:     endbr64 
   0x00000000000016d0 <+4>:     push   rbp
   0x00000000000016d1 <+5>:     mov    rbp,rsp
   0x00000000000016d4 <+8>:     sub    rsp,0xe0
   0x00000000000016db <+15>:    mov    rax,QWORD PTR fs:0x28
   0x00000000000016e4 <+24>:    mov    QWORD PTR [rbp-0x8],rax
   0x00000000000016e8 <+28>:    xor    eax,eax
   0x00000000000016ea <+30>:    mov    DWORD PTR [rbp-0xe0],0x44
   0x00000000000016f4 <+40>:    mov    DWORD PTR [rbp-0xdc],0x54
   0x00000000000016fe <+50>:    mov    DWORD PTR [rbp-0xd8],0x45
   0x0000000000001708 <+60>:    mov    DWORD PTR [rbp-0xd4],0x50
   0x0000000000001712 <+70>:    mov    DWORD PTR [rbp-0xd0],0x6c
   0x000000000000171c <+80>:    mov    DWORD PTR [rbp-0xcc],0x79
   0x0000000000001726 <+90>:    mov    DWORD PTR [rbp-0xc8],0x7b
   0x0000000000001730 <+100>:   mov    DWORD PTR [rbp-0xc4],0x2a
   0x000000000000173a <+110>:   mov    DWORD PTR [rbp-0xc0],0x79
   0x0000000000001744 <+120>:   mov    DWORD PTR [rbp-0xbc],0x50
   0x000000000000174e <+130>:   mov    DWORD PTR [rbp-0xb8],0x77
   0x0000000000001758 <+140>:   mov    DWORD PTR [rbp-0xb4],0x2e
   0x0000000000001762 <+150>:   mov    DWORD PTR [rbp-0xb0],0x2d
   0x000000000000176c <+160>:   mov    DWORD PTR [rbp-0xac],0x79
   0x0000000000001776 <+170>:   mov    DWORD PTR [rbp-0xa8],0x2c
   0x0000000000001780 <+180>:   mov    DWORD PTR [rbp-0xa4],0x7e
   0x000000000000178a <+190>:   mov    DWORD PTR [rbp-0xa0],0x3a
   0x0000000000001794 <+200>:   mov    DWORD PTR [rbp-0x9c],0x50
   0x000000000000179e <+210>:   mov    DWORD PTR [rbp-0x98],0x33
   0x00000000000017a8 <+220>:   mov    DWORD PTR [rbp-0x94],0x78
   0x00000000000017b2 <+230>:   mov    DWORD PTR [rbp-0x90],0x50
   0x00000000000017bc <+240>:   mov    DWORD PTR [rbp-0x8c],0x76
   0x00000000000017c6 <+250>:   mov    DWORD PTR [rbp-0x88],0x30
   0x00000000000017d0 <+260>:   mov    DWORD PTR [rbp-0x84],0x2d
   0x00000000000017da <+270>:   mov    DWORD PTR [rbp-0x80],0x7e
   0x00000000000017e1 <+277>:   mov    DWORD PTR [rbp-0x7c],0x6e
   0x00000000000017e8 <+284>:   mov    DWORD PTR [rbp-0x78],0x2f
   0x00000000000017ef <+291>:   mov    DWORD PTR [rbp-0x74],0x6f
   0x00000000000017f6 <+298>:   mov    DWORD PTR [rbp-0x70],0x2d
   0x00000000000017fd <+305>:   mov    DWORD PTR [rbp-0x6c],0x72
   0x0000000000001804 <+312>:   mov    DWORD PTR [rbp-0x68],0x2e
   0x000000000000180b <+319>:   mov    DWORD PTR [rbp-0x64],0x50
   0x0000000000001812 <+326>:   mov    DWORD PTR [rbp-0x60],0x6f
   0x0000000000001819 <+333>:   mov    DWORD PTR [rbp-0x5c],0x30
   0x0000000000001820 <+340>:   mov    DWORD PTR [rbp-0x58],0x7a
   0x0000000000001827 <+347>:   mov    DWORD PTR [rbp-0x54],0x50
   0x000000000000182e <+354>:   mov    DWORD PTR [rbp-0x50],0x6b
   0x0000000000001835 <+361>:   mov    DWORD PTR [rbp-0x4c],0x2c
   0x000000000000183c <+368>:   mov    DWORD PTR [rbp-0x48],0x6a
   0x0000000000001843 <+375>:   mov    DWORD PTR [rbp-0x44],0x7d
   0x000000000000184a <+382>:   mov    DWORD PTR [rbp-0x40],0x36
   0x0000000000001851 <+389>:   mov    DWORD PTR [rbp-0x3c],0x50
   0x0000000000001858 <+396>:   mov    DWORD PTR [rbp-0x38],0x33
   0x000000000000185f <+403>:   mov    DWORD PTR [rbp-0x34],0x80
   0x0000000000001866 <+410>:   mov    DWORD PTR [rbp-0x30],0x50
   0x000000000000186d <+417>:   mov    DWORD PTR [rbp-0x2c],0x30
   0x0000000000001874 <+424>:   mov    DWORD PTR [rbp-0x28],0x30
   0x000000000000187b <+431>:   mov    DWORD PTR [rbp-0x24],0x2f
   0x0000000000001882 <+438>:   mov    DWORD PTR [rbp-0x20],0x34
   0x0000000000001889 <+445>:   mov    DWORD PTR [rbp-0x1c],0x6f
   0x0000000000001890 <+452>:   mov    DWORD PTR [rbp-0x18],0x65
   0x0000000000001897 <+459>:   mov    DWORD PTR [rbp-0x14],0x70
   0x000000000000189e <+466>:   mov    DWORD PTR [rbp-0x10],0x7e
   0x00000000000018a5 <+473>:   mov    DWORD PTR [rbp-0xc],0x6e
   0x00000000000018ac <+480>:   lea    rdi,[rip+0xec5]        # 0x2778
   0x00000000000018b3 <+487>:   call   0x1189 <encrypt>
   0x00000000000018b8 <+492>:   mov    eax,0x0
   0x00000000000018bd <+497>:   mov    rdx,QWORD PTR [rbp-0x8]
   0x00000000000018c1 <+501>:   xor    rdx,QWORD PTR fs:0x28
   0x00000000000018ca <+510>:   je     0x18d1 <gqIBObWeQSulobiTtXtNJbboY+517>
   0x00000000000018cc <+512>:   call   0x1090 <__stack_chk_fail@plt>
   0x00000000000018d1 <+517>:   leave  
   0x00000000000018d2 <+518>:   ret    
End of assembler dump.

kalo di coba jalanin dan ngasi breakpoint di beberapa bagian

gdb-peda$ b *main
Breakpoint 1 at 0x1f27
gdb-peda$ b *gqIBObWeQSulobiTtXtNJbboY+480
Breakpoint 2 at 0x18ac
gdb-peda$ r
gdb-peda$ jump *gqIBObWeQSulobiTtXtNJbboY

dan memerphatikan stack pada fungsi gqIBObWeQSulobiTtXtNJbboY()

0000| 0x7fffffffdee0 --> 0x5400000044 ('D')
0008| 0x7fffffffdee8 --> 0x5000000045 ('E')
0016| 0x7fffffffdef0 --> 0x790000006c ('l')
0024| 0x7fffffffdef8 --> 0x2a0000007b ('{')
0032| 0x7fffffffdf00 --> 0x5000000079 ('y')
0040| 0x7fffffffdf08 --> 0x2e00000077 ('w')
0048| 0x7fffffffdf10 --> 0x790000002d ('-')
0056| 0x7fffffffdf18 --> 0x7e0000002c (',')

jadi bisa dipastikan flag yang asli ada dalam fungsi ini dalam bentuk ter-enkrip, jika kita keluarkan semua stringnya, karena panjang ruang untuk realflag ini sub  rsp,0xe0 = 212 dalam decimal, jadi coba aja keluarin semua value dalam memory dari rentang 0x7fffffffdee0 s/d 0x7fffffffdee0 + 0xe0

gdb-peda$ x/212s $rsp
0x7fffffffdee0: "D"
0x7fffffffdee2: ""
0x7fffffffdee3: ""
0x7fffffffdee4: "T"
0x7fffffffdee6: ""
0x7fffffffdee7: ""
0x7fffffffdee8: "E"
0x7fffffffdeea: ""
0x7fffffffdeeb: ""
0x7fffffffdeec: "P"
0x7fffffffdeee: ""
0x7fffffffdeef: ""
0x7fffffffdef0: "l"
....
....
0x7fffffffdfb3: ""
0x7fffffffdfb4: "n"

atau sama dengan

DTEPly{*yPw.-y,~:P3xPv0-~n/o-r.Po0zPk,j}6P300/4oep~n

karena realflag kemungkinan sudah ketemu, dan tidak ditemukan juga fungsi untuk decrypt, jadinya di brute aja, berhubung karena fungsi encrypt() sudah ada.

import sys
import time
c = [0x44,0x54,0x45,0x50,0x6c,0x79,0x7b,0x2a,0x79,0x50,0x77,0x2e,0x2d,0x79,0x2c,0x7e,0x3a,0x50,0x33,0x78,0x50,0x76,0x30,0x2d,0x7e,0x6e,0x2f,0x6f,0x2d,0x72,0x2e,0x50,0x6f,0x30,0x7a,0x50,0x6b,0x2c,0x6a,0x7d,0x36,0x50,0x33,0x80,0x50,0x30,0x30,0x2f,0x34,0x6f,0x65,0x70,0x7e,0x6e]
enc_flag = ''.join([chr(x) for x in c])
def enc(flag):
    panjang_flag = len(flag)
    i = 0
    enc_flag = []
    
    while(panjang_flag > i):
        shift_var = i >> 0x1f
        ord_flag = ord(flag[i])
        if ord_flag < ord('A') or ord('Z') < ord_flag:
            if ord_flag < ord('a') or ord('z') < ord_flag:
                if ord_flag < ord('0') or ord('9') < ord_flag:
                    cc = ord_flag - 0xf
                    enc_flag.append(cc)
                else:
                    cc = (ord_flag + 1) - ((i + (shift_var >> 0x1d) & 7) - (shift_var >> 0x1d))
                    enc_flag.append(cc)
            else:
                cc = ord_flag + 1 + ((i + (shift_var >> 0x1c) & 0xf) - (shift_var >> 0x1c))
                enc_flag.append(cc)
        else:
            cc = (ord_flag + 1) - ((i + (shift_var >> 0x1b) & 0x1f) - (shift_var >> 0x1b))
            enc_flag.append(cc)
        i+=1
    return enc_flag
printable = 'abcdefgijklmnopqrstuvwxyz0123456789{}_?!'
p = 'CTFR{'
for z in range(55):
    for a in printable:
        e = enc(p + a)
        pp = ''.join([chr(x) for x in e])
        if pp == enc_flag[:len(p) + 1]:
            p+=a
            sys.stdout.write('\r' + p)
            break

dan hasilnya

CTFR{st0p_l00k1n9_4t_p53ud0c0d3_n0w_f0cu5_4t_4553mbly}
writeup ctf Reverse
Read More

Writeup CTFR 1000 Jam

Diberikan sebuah link ke website dengan alamat https://web.ctf.rasyidmf.com/chal21/, pada website tersebut jika diperhatikan source nya, terdapat barisan kode javascript Promise, sesuai deskripsi challengenya, kita diharuskan membaypass setTimeout() agar fungsinya bisa dijalankan tanpa harus menunggu x milidetik.

Read More

Writeup CTFR Input Berhadiah

Diberikan sebuah service dengan alamat 103.157.96.13 pada port 7790, dimana setiap kita menginputkan sesuatu response dari server dalam bentuk ter-enkripsi. disini kita harus mencari tau maksud dari respon tersebut. Untuk dapat menyelesaikan challenge ini, dibutuhkkan beberapa informasi dasar, seperti bentuk respons nya, panjang respon dan jenis enkripsi yang digunakan.