2013-10-08 51 views
4

我得到的是不再支持我正在尋找一種方法來改變它的變量值的腳本...腳本加密(loadstring/bytecode/類似的東西),例如:loadstring('\27\76\117\97\81\0\1\4\4\4\8\0\')是否可以更改Lua字節碼中的值?怎麼樣?任何想法?

我可以找到我想要改變(通過記事本後,我編譯腳本),但如果我嘗試更改值,該腳本將無法正常工作,如果我改變,並嘗試重新編譯還是它不會工作:"luac: Testing09.lua: unexpected end in precompiled chunk" ...

有什麼建議嗎?我不喜歡的東西與程序長去使用OllyDbg的但我不能盧阿使用腳本......我有點失去了這裏,做了一些谷歌搜索了好一陣子找不到辦法... 有任何想法嗎?

+0

的可能重複[反編譯的Lua字節碼最佳工具(S)?](http://stackoverflow.com/questions/743684/best -tools-for-decompiling-lua-bytecode) – hjpotter92

+0

不是真的,但是我在那篇文章中發現了一些可以幫助我的東西......但是我想要的是改變這個值的方法......只是一個字符串,被改變,我不知道如何... – user2857670

+1

我是否正確地理解你有一個lua腳本,並且裏面有一些加載'loadstring'的字節碼?你究竟想要改變什麼,我。即一個字符串常量爲另一個或別的東西? – mpeterv

回答

7

這是很容易在一個Lua字節碼改變的字符串。您只需在更改字符串後調整字符串的長度。長度在字符串之前。它可能需要四個或八個字節在字符串之前,這取決於您是否擁有32位或64位平臺。長度存儲在生成字節碼的機器的字節序中。請注意,字符串包含尾隨的'\ 0',並且這個長度會計算在內。

也許它更容易只是一些字節直接複製。寫這個文件

return "this is the new string you want" 

從它生成的字節碼與luac,看的luac.out的轉儲和找到字符串和它的長度。將這些字節複製到原始文件。

我不知道是否記事本處理二進制數據。如果沒有,你需要一個十六進制編輯器來做到這一點。

另一種解決方案是編寫一個Lua程序,將字節碼作爲字符串讀取,爲return "this is the new string you want"生成字節碼,使用字符串操作執行原始字節碼的更改並將其寫回文件。

你也可以試試我的字節碼檢查員庫lbci,它允許您更改常數的功能。您將加載字節碼(但不執行它),並在找到包含要更改的字符串的常量後使用setconstant

總之,有一些樂趣,在這裏有...

+0

好吧哈哈我想我現在可以這樣做...會盡快給我一個嘗試,因爲我回到家,ofc我會在這裏反饋...謝謝兄弟... – user2857670

+0

男人我發現如何改變!但現在因爲我被推遲了,我不能改變字符串的大小......我使用了一個十六進制編輯器(我可以改變它並且它可以工作!如果字符串的大小與原始大小相同!一個字長它不會工作= \需要是相同的大小...)任何想法?我再也不是一個電腦傢伙了= \並且對我的英語感到抱歉,從未在我的整個生活中有過單一的英語課程......希望你明白...... – user2857670

+0

@ user2857670,你試過我的第一個建議嗎?也許你可以發表一個你想要的新字符串和舊字符串的例子。 – lhf

相關問題