2017-02-25 12 views
0

我想在C中的shell中設置環境變量,但由於包含要存儲在其中的環境變量hax \x00 s中的數據的緩衝區。所以我正在尋找解決方案,並且所有這些解決方案都以使用setenvputenv函數結束。問題是他們都停在第一個零,它認爲它是字符串的結尾。例如:在C中設置環境變量爲零

putenv("SomeVariable=\xAB\xAB\xAB\x00\xAB\xAB\xAB"); 

不會將最後三個\ xAB存儲到SomeVariable。所以我想這個解決方案將使用一個函數,我可以給出字符串的初始地址和它的長度,這樣的函數是否存在?或者也許沿着C代碼運行一些asm來完成這項工作?提前致謝。

+0

你想要變量的值是多少?它在env或echo $ SomeVariable的輸出中的外觀如何? –

+0

我想把一個shellcode放進去,它裏面有一些'\ x00' – Fabiotk

+1

環境變量是C字符串。空字節終止該值。你不能改變這一點。沒有辦法在環境變量中嵌入空字節;它總是標誌着結局。 –

回答

2

簡短回答:
你不能!使用不同的格式。

長答案:
你不能!字節= 0是一個空終止符:一個字符串的結尾。 爲了解決這個問題,你可以編寫它編碼,所以編寫"\\x00"而不是"\x00",然後編寫你自己的轉換例程,以便將它們隨後更改爲字節。

話雖如此,只要您不希望字符串函數在空終止符後繼續,您可以使用任何格式!