【reversing.kr逆向之旅】Direct3D FPS的writeup
阿新 • • 發佈:2018-12-21
Direct3D FPS 看到這個名字就感覺會不會是個射擊遊戲 然後執行果然是
玩了一會兒 看到有個幾個小胖人 打不死 走過去就Game Over了
PEiD看到使用C++寫的
直接載入IDA
分析字串
很明顯與Game Clear!就是與失敗相對應的成功
雙擊
檢視交叉引用
然後F5得到
int sub_403400() { int i; // eax int v2; // ecx int v3; // edx i = sub_403440(); if ( i != -1 ) { v2 = 0x84 * i; v3 = dword_409190[0x84 * i]; if ( v3 > 0 ) { dword_409190[v2] = v3 - 2; } else { dword_409194[v2] = 0; flag[i] ^= byte_409184[v2 * 4]; } } return i; }
這裡再對flag[i] ^= byte_409184[v2 * 4];這句進行動態分析 可知就是i*4
寫指令碼
s = [0x43, 0x6B, 0x66, 0x6B, 0x62, 0x75, 0x6C, 0x69, 0x4C, 0x45, 0x5C, 0x45, 0x5F, 0x5A, 0x46, 0x1C, 0x07, 0x25, 0x25, 0x29, 0x70, 0x17, 0x34, 0x39, 0x01, 0x16, 0x49, 0x4C, 0x20, 0x15, 0x0B, 0x0F, 0xF7, 0xEB, 0xFA, 0xE8, 0xB0, 0xFD, 0xEB, 0xBC, 0xF4, 0xCC, 0xDA, 0x9F, 0xF5, 0xF0, 0xE8, 0xCE, 0xF0, 0xA9] flag = '' for i in range(len(s)): flag+=chr(s[i] ^ (i*4)) print flag #Congratulation~ Game Clear! Password is Thr3EDPr0m