程序分析
- 程序後綴是
.com
,但不管直接拉入ExeinfoPe
查殼
- 發現原來是64位的ELF文件,沒殼
- 拉入IDA分析,進入main函數,看到如下關鍵信息
- 經分析發現if語句應該為永真,即一定會進入( 可動態調試看看 )
- 在進入最後一個if之前,調用了
sub_55C1E23CB2D8
這個函數,雙擊進入查看
- 發現當
sub_55C1E23CABA0
返回0時,程序就直接退出
- 所以為
sub_55C1E23CABA0
必須返回1
- 注:
xor_key4
、key
等等的變量是我分析後重新命名而得來的
- 進入
sub_55C1E23CABA0
查看,結合函數傳入的參數,可以得知 1 2 3
| input[0] = xor_key4 ^ 0xFFFFFFFF9A1391B5 input[1] = xor_key4 ^ 0xFFFFFFFF9A1391A3
|
動調獲取數據
- 現在只要動調獲取
xor_key1
、xor_key2
、xor_key3
、xor_key4
、key5
的值即可求得flag
- 簡單說一下方法:執行到
xor_key4
的下一句,將鼠標移到xor_key4
的上方,看到的0xFFFFFFFF9A1391C2
就是xor_key4
的值。其他也如此類推
腳本
( 我是手動一個一個拷貝上去,不知有無更快的方法= = )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| input = [0 for i in range(56)] xor_key1 = 0x427D8616 xor_key2 = 0xFFFFFFFFC7F2682D xor_key3 = 0x5CBFB3D5 xor_key4 = 0xFFFFFFFF9A1391C2 key5 = 0xC2
input[0] = xor_key4 ^ 0xFFFFFFFF9A1391B5 input[1] = xor_key4 ^ 0xFFFFFFFF9A1391A3 input[2] = xor_key4 ^ 0xFFFFFFFF9A1391B6 input[3] = xor_key4 ^ 0xFFFFFFFF9A1391A7 input[4] = xor_key4 ^ 0xFFFFFFFF9A1391B4 input[5] = xor_key4 ^ 0xFFFFFFFF9A1391B0 input[6] = xor_key4 ^ 0xFFFFFFFF9A1391B9 input[7] = xor_key4 ^ 0xFFFFFFFF9A1391A7 input[8] = xor_key4 ^ 0xFFFFFFFF9A1391B1 input[9] = xor_key4 ^ 0xFFFFFFFF9A1391B0 input[10] = xor_key4 ^ 0xFFFFFFFF9A1391A7 input[11] = xor_key4 ^ 0xFFFFFFFF9A1391B4 input[12] = xor_key4 ^ 0xFFFFFFFF9A1391A7 input[13] = xor_key4 ^ 0xFFFFFFFF9A1391B0 input[14] = xor_key4 ^ 0xFFFFFFFF9A13919D input[15] = xor_key4 ^ 0xFFFFFFFF9A1391B0 input[16] = xor_key4 ^ 0xFFFFFFFF9A1391A7 input[17] = xor_key4 ^ 0xFFFFFFFF9A1391B4 input[18] = xor_key4 ^ 0xFFFFFFFF9A1391A7 input[19] = xor_key4 ^ 0xFFFFFFFF9A1391B0 input[20] = xor_key3 ^ 0x5CBFB3A6 input[21] = xor_key3 ^ 0x5CBFB3B0 input[22] = xor_key3 ^ 0x5CBFB3B1 input[23] = xor_key3 ^ 0x5CBFB38A input[24] = xor_key3 ^ 0x5CBFB3AC input[25] = xor_key3 ^ 0x5CBFB3BA input[26] = xor_key3 ^ 0x5CBFB3A0 input[27] = xor_key3 ^ 0x5CBFB3A1 input[28] = xor_key3 ^ 0x5CBFB3A0 input[29] = xor_key3 ^ 0x5CBFB3B7 input[30] = xor_key3 ^ 0x5CBFB3B0 input[31] = xor_key3 ^ 0x5CBFB3FB input[32] = xor_key3 ^ 0x5CBFB3B6 input[33] = xor_key3 ^ 0x5CBFB3BA input[34] = xor_key3 ^ 0x5CBFB3B8 input[35] = xor_key2 ^ 0xFFFFFFFFC7F26802 input[36] = xor_key2 ^ 0xFFFFFFFFC7F2685A input[37] = xor_key2 ^ 0xFFFFFFFFC7F2684C input[38] = xor_key2 ^ 0xFFFFFFFFC7F26859 input[39] = xor_key2 ^ 0xFFFFFFFFC7F2684E input[40] = xor_key2 ^ 0xFFFFFFFFC7F26845 input[41] = xor_key2 ^ 0xFFFFFFFFC7F26812 input[42] = xor_key2 ^ 0xFFFFFFFFC7F2685B input[43] = xor_key2 ^ 0xFFFFFFFFC7F26810 input[44] = xor_key2 ^ 0xFFFFFFFFC7F26864 input[45] = xor_key2 ^ 0xFFFFFFFFC7F26815 input[46] = xor_key2 ^ 0xFFFFFFFFC7F26844 input[47] = xor_key2 ^ 0xFFFFFFFFC7F26847 input[48] = xor_key2 ^ 0xFFFFFFFFC7F2684F input[49] = xor_key2 ^ 0xFFFFFFFFC7F26819 input[50] = key5 ^ 0x98 input[51] = key5 ^ 0xA7 input[52] = xor_key1 ^ 0x427D8673 input[53] = xor_key1 ^ 0x427D8623 input[54] = xor_key1 ^ 0x427D8653 input[55] = xor_key1 ^ 0x427D866B
flag = "" for c in input: flag+=chr(c)
print(flag)
|