Re: [PS3 ] Mathieulh補刀 Lv2 Loader與App. Load …
→
01/02 14:09,
01/02 14:09
→
01/02 14:09,
01/02 14:09
推
01/02 14:25,
01/02 14:25
推
01/02 15:32,
01/02 15:32
推
01/02 15:47,
01/02 15:47
→
01/02 15:48,
01/02 15:48
推
01/02 15:49,
01/02 15:49
推
01/02 16:05,
01/02 16:05
看來某人才真的是沒在寫程式, C語言裡面處理可以釋放的變數或陣列都是宣告
指標(pointer) ,宣告後電腦會去主記憶體裡面找一塊符合大小的記憶體,然後
把起始位置寫回指標。
舉個例子:如果今天我需要一個可釋放的陣列 A,大小 8 bits ,那我宣告後程
式會去記憶體裡面找個空間來存指標,假設指標記憶位址是0x0000,然後再去找
段夠大的空間,假設從0x0100開始一直到0x0108,於是指向 A陣列的指標內容就
會是0x0100。
記憶體位址跟內容的關係是這樣:
位址:0x0000┌→0x0100 0x0101 ... 0x0107 0x0108
內容:0x0100┘ 0x00 0x00 ... 0x00 0x00
然後我把某個解密金鑰01 23 45 67 89 AB CD EF 寫入這個陣列,所以0x0100到
0x0108的內容就會是01 23 45 67 89 AB CD EF 00。
於是乎,記憶體位址跟內容會變成這樣:
位址:0x0000┌→0x0100 0x0101 ... 0x0107 0x0108
內容:0x0100┘ 0x01 0x23 ... 0xEF 0x00 ←假設0x00是終止字元
到這裡為止0x0000裡面儲存的值會是0x0100,然後金鑰存在 0x0100~0x0108。好
了,那我金鑰用完要釋放怎麼辦? C語言的作法是用delete,執行結果就是把
0x0000裡面的值0x0100刪掉,然後將0x0000標記成未佔用。根本不會去管0x0100
到0x0107這段裡面東西還在不在。
記憶體位址跟內容變成這樣:
位址:0x0000 0x0100 0x0101 ... 0x0107 0x0108
內容:null 0x01 0x23 ... 0xEF 0x00
所以只要把整個記憶體讀出來,然後搜尋0x0100 ~ 0x0108 ,就可以得知金鑰的
內容。於是有人就會想到說,那我釋放時再重新宣告一個陣列 B,大小能夠把剛
剛這段內容蓋掉不就好了?是沒錯,但一般程式設計師根本不會去管剛剛陣列 A
到底是存在記憶體的哪個位置,自然也不會特別要求程式去填那個位置,那如果
去蓋呢?
這叫做「此地無銀三百兩」,真的去填就等於告訴駭客「那邊有我不想給你們看
的東西,沒有我的允許,絕對絕對不可以去看喔!」,下次駭客就會讓程式當在
填垃圾資料前,然後去把那段位址的內容讀出。人天生就有收集資訊充實自己的
本能,不然某數字週刊怎麼可能賣得這麼好,有道理吧?
--
○ ____ _ _ _ _ ____ _ _ ____ _____ ____
。 ★(_ _)( \( )( \/ )( ___)( \( )(_ _)( _ )( _ \
o _)(_ ) ( \ / )__) ) ( )( )(_)( ) / ● ‧
(____)(_)\_) \/ (____)(_)\_) (__) (_____)(_)\_) ★
o
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.126.61.141
※ 編輯: cassine 來自: 59.126.61.141 (01/02 22:51)
→
01/02 23:01, , 1F
01/02 23:01, 1F
→
01/02 23:01, , 2F
01/02 23:01, 2F
推
01/02 23:13, , 3F
01/02 23:13, 3F
→
01/02 23:14, , 4F
01/02 23:14, 4F
→
01/02 23:14, , 5F
01/02 23:14, 5F
→
01/02 23:14, , 6F
01/02 23:14, 6F
→
01/02 23:15, , 7F
01/02 23:15, 7F
→
01/02 23:16, , 8F
01/02 23:16, 8F
→
01/02 23:16, , 9F
01/02 23:16, 9F
→
01/02 23:16, , 10F
01/02 23:16, 10F
→
01/02 23:17, , 11F
01/02 23:17, 11F
→
01/02 23:17, , 12F
01/02 23:17, 12F
→
01/02 23:19, , 13F
01/02 23:19, 13F
→
01/02 23:19, , 14F
01/02 23:19, 14F
→
01/02 23:22, , 15F
01/02 23:22, 15F
→
01/02 23:33, , 16F
01/02 23:33, 16F
→
01/02 23:44, , 17F
01/02 23:44, 17F
推
01/03 00:29, , 18F
01/03 00:29, 18F
→
01/03 00:31, , 19F
01/03 00:31, 19F
→
01/03 00:57, , 20F
01/03 00:57, 20F
→
01/03 10:08, , 21F
01/03 10:08, 21F
推
01/03 10:14, , 22F
01/03 10:14, 22F
推
01/03 13:46, , 23F
01/03 13:46, 23F
推
01/03 16:40, , 24F
01/03 16:40, 24F
推
01/03 19:09, , 25F
01/03 19:09, 25F
→
01/03 19:10, , 26F
01/03 19:10, 26F
推
01/03 21:14, , 27F
01/03 21:14, 27F
推
01/04 01:57, , 28F
01/04 01:57, 28F
推
01/07 08:38, , 29F
01/07 08:38, 29F
→
01/07 12:32, , 30F
01/07 12:32, 30F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 5 篇):