
Ý tưởng#
Dựa vào hint Heaven Gate mình có tra được trên mạng tìm được đoạn này:
Thực hành#
Theo ý tưởng phân tích, bên trong hàm main là hàm kiểm tra các đặc tính của flag:





Cách làm#
Ta tiến hành dump số byte tại vùng nhớ này ra để patch lại vào một file x64 xem ý nghĩa code là gì <Đại ca nào đó rất đẹp zai chỉ dạy 😋😋😋> Ta nắm lại vị trí bắt đầu của lpAddress và số lượng byte để dumo nguyên cả vùng nhớ đó ra
Mình tiến hành code một file hello world bằng c sau đó dịch ra x64 bằng g++ Sau đó patch đoạn byte đã dump ra vào entry point của chương trình để thực thi chỗ shellcode này.
Python Script patch bytes#
import ida_bytes
newbytes = b"\x6A\x03\x58\xC1\xE0\x04\x04\x03\x50\x68\x34\x00\xCC\x00\xCB\xFE\xE2\x7B\x21\x9C\xEA\x4F\x05\xE0\xEA\x4F\x8D\x18\x5E\xE5\x5D\x18\x68\xE9\x03\x1E\x3C\x63\x89\xBE\xE2\x7D\x89\xC6\xEA\x7B\x51\x10\x5E\x69\x89\xA0\xB8\x08\x00\x00\x00\x83\xE8\x25\x85\xC0\x75\x51\x49\xB8\x59\xFC\x9F\x00\x00\x00\x00\x00\x49\xB9\x0F\x00\xCC\x00\x00\x00\x00\x00\x31\xF6\x48\x8D\x56\x3C\x48\x8D\x4E\x41\x4C\x8D\x96\xD3\x00\x00\x00\x4C\x8D\x9E\xF7\x00\x00\x00\x48\x83\xFE\x25\x73\x1F\x41\x8A\x04\x31\xD0\xC8\x41\x32\x04\x30\x30\xD0\x84\xC0\x87\xCA\x44\x87\xD1\x45\x87\xDA\x75\x07\x48\x8D\x74\x30\x01\xEB\xDB\x48\xBA\x34\xFC\x9F\x00\x00\x00\x00\x00\x48\x89\x02\x6A\x23\x68\xA7\x00\xCC\x00\x48\xCB\xC3"
size = len(newbytes)
start_address = 0x0000000000001050
for i in range(0,size):
ida_bytes.patch_byte(start_address,newbytes[i])
start_address += 1
Và đây là thành quả

Code giải mã#
def rotate_bits_right(number, positions, bitsize=32):
mask = (1 << bitsize) - 1
return ((number & mask) >> positions) | ((number & mask) << (bitsize - positions)) & mask
r9 = b"\xFE\xE2\x7B\x21\x9C\xEA\x4F\x05\xE0\xEA\x4F\x8D\x18\x5E\xE5\x5D\x18\x68\xE9\x03\x1E\x3C\x63\x89\xBE\xE2\x7D\x89\xC6\xEA\x7B\x51\x10\x5E\x69\x89\xA0"
r8 = ""
rdx = 0x3c
rcx = 0x41
r10 = 0xd3
r11 = 0xf7
flag = b""
tmp = 0
for i in range(0,37):
tmp = rotate_bits_right(r9[i],1,8)
tmp ^= rdx
r8 += chr(tmp)
rcx, rdx = rdx, rcx
r10, rcx = rcx, r10
r11, r10 = r10, r11
print(r8)
Flag: MSEC{C0ngr4tuL4t10n!Y0u’v3_b3c0m3_4n_4ng3l}#
🤑🤑🤑
–Ckagngoc–

