2014-03-26 135 views
1

我正在檢查一段我在網上找到的Python代碼(http://www.exploit-db.com/exploits/18305/),並且我試圖理解一個看似簡單的for循環。Python for循環查詢

說實話我不懂Python,但是我有其他編程語言的經驗。

def _generatePayload(self, collisionchars, payloadlength): 
    result = "" 

    for item in collisionchars: 
     result = result.replace(str(item), collisionchars[item]) 

    return result; 

我已修改代碼略微以除去無關的問題的部分,但我都保留了相同的方法定義在原始源中找到。據我瞭解,它是用另一個具有相同值的字符串替換一個字符串(在一個字符數組/字符串內)?

感謝一幫傢伙!

+1

這可能是,你試過它看看它做了什麼? –

+0

不,不幸的是我沒有在這臺機器上安裝Python的豪華,我無法安裝。如果我可以,我會自己嘗試:) – user39239

+0

爲什麼我們需要傳遞變量有效載荷長度,因爲我們不使用它在這個函數中?您能否發佈所有相關的代碼,因爲在我看來,這個事實很奇怪。謝謝 – Christos

回答

1

collisionchars似乎是一個字典(注意索引)。

代碼的作用是遍歷所有密鑰collisionchars,並用該密鑰的值替換result中該密鑰的每個出現次數。

所以,如果collisionchars = {'a': 'X', 'o': '_'}result = 'FooBar',代碼將改變resultF__BXr(各aX並且每個o_替換)。

+0

謝謝!如果碰撞實際上是一本字典,那麼整個事情都是有道理的,但我無法從鏈接的源代碼中輕易得知。然而,有一個名爲哈希的變量似乎被聲明爲一個字典,所以這是有道理的。此外,感謝答案的徹底性。我會再等一會,然後將其標記爲答案。 – user39239

+0

如果你通過鏈接的腳本工作,你會在函數'_computeCollisionChars'中找到'dict'的創建:'hashes = {}'。它被填充到該函數中,返回,並最終傳遞給'_generatePayload'。 – sloth

+0

我確實檢查了代碼,但我認爲之後我忘記了字典的跟蹤,並假定它是一個字符串/字符數組。這很有道理,現在我再看一遍。謝謝你的時間 :) – user39239