4

サポートされなくなったスクリプトを取得しました。変数の値を変更する方法を探しています...スクリプトは暗号化されています(loadstring/bytecode/そのようなもの)例:loadstring('\27\76\117\97\81\0\1\4\4\4\8\0\')

(スクリプトをコンパイルした後にメモ帳を使用して) 変更したいものを見つけることができますが、値を変更しようとすると、スクリプトが機能しません。変更して再コンパイルしようとすると、まだ機能しません。"luac: Testing09.lua: unexpected end in precompiled chunk" ...

何か案は?私はollydbgを使用して長い間プログラムでそのようなことをしましたが、 luaスクリプトでは使用できません...ここでちょっと迷って、かなり長い間グーグルをやっていて方法が見つかりませんでした...アイデア?

4

1 に答える 1

7

Lua バイトコードの文字列を変更するのは簡単です。交換後は紐の長さを調整するだけです。長さは文字列の前に来ます。プラットフォームが 32 ビットか 64 ビットかに応じて、おそらく文字列の直前に 4 バイトまたは 8 バイトかかります。長さは、バイトコードが生成されたマシンのエンディアンに格納されます。文字列には末尾の '\0' が含まれ、これが長さに含まれることに注意してください。

おそらく、いくつかのバイトを直接コピーする方が簡単です。このファイルを書きます

return "this is the new string you want" 

それからバイトコードを生成luacし、ダンプを見luac.outて、文字列とその長さを見つけます。それらのバイトを元のファイルにコピーします。

メモ帳がバイナリ データを処理するかどうかはわかりません。そうでない場合は、これを行うには 16 進エディタが必要です。

もう 1 つの解決策は、バイトコードを文字列として読み取り、return "this is the new string you want".

また、関数内の定数を変更できるバイトコード インスペクター ライブラリlbciを試すこともできます。バイトコードをロードし (実行はしません)、setconstant変更したい文字列を含む定数を見つけた後に使用します。

全体として、ここにはいくつかの楽しみがあります...

于 2013-10-08T11:46:05.850 に答える