HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2024
0414
VBSHSP用のモジュール化13解決


VBS

リンク

2024/4/14(Sun) 14:33:46|NO.101524

下記サイトの「Pythonでのデコード(難読化解除)」を、HSP用のモジュールに
出来ないでしょうか。
よろしく願います。

URL:https://qiita.com/yoshi389111/items/7e4cfcf95ad986c56dcf



この記事に返信する


きせん

リンク

2024/4/14(Sun) 19:37:40|NO.101527

仕事の依頼ですか?



雪月夜

リンク

2024/4/15(Mon) 20:09:54|NO.101530

出来ないです。
理由は、HSPにはVBSのEncodeScriptFile()に相当する関数が実装されていないからです。
モジュール化するにはEncodeScriptFile()の内部処理を解析して、それをHSPに書き直す作業が必要です。



TOMATO

リンク

2024/4/16(Tue) 00:10:34|NO.101532

適当です


// Shift_JIS専用 #include "mod_regexp.as" // String/改行 // https://wiki.hsp.moe/String%EF%BC%8F%E6%94%B9%E8%A1%8C.html#o681c775 #module ;文字コード判定関数 ; Shift-JISの2バイト文字の1バイト目領域内かを判定します。 ; RV = IsByte( int p1 ) ; p1 : 判定する文字コード ; RV : 1=2byte文字の1文字目 (これ以外は 0) #defcfunc IsByte int p1 return ((p1>=129)&(p1<=159) )|( (p1>=224)&(p1<=252)) #global COMBINATIONS = "1231232332321323132311233213233211323231311231321323112331123132" sdim DECODE_TABLE, 64, 128 DECODE_TABLE('\t') = "Wn{" DECODE_TABLE(' ') = ".-2" DECODE_TABLE('!') = "Gu0" DECODE_TABLE('"') = "zR!" DECODE_TABLE('#') = "V`)" DECODE_TABLE('$') = "Bq[" DECODE_TABLE('%') = "j^8" DECODE_TABLE('&') = "/I3" DECODE_TABLE('\'') = "&\\=" DECODE_TABLE('(') = "IbX" DECODE_TABLE(')') = "A}:" DECODE_TABLE('*') = "4)5" DECODE_TABLE('+') = "26e" DECODE_TABLE(',') = "[ 9" DECODE_TABLE('-') = "v|\\" DECODE_TABLE('.') = "rzV" DECODE_TABLE('/') = strf("C%cfs",0x7f) DECODE_TABLE('0') = "8kf" DECODE_TABLE('1') = "9cN" DECODE_TABLE('2') = "p3E" DECODE_TABLE('3') = "E+k" DECODE_TABLE('4') = "hhb" DECODE_TABLE('5') = "qQY" DECODE_TABLE('6') = "Ofx" DECODE_TABLE('7') = "\tv^" DECODE_TABLE('8') = "b1}" DECODE_TABLE('9') = "DdJ" DECODE_TABLE(':') = "#Tm" DECODE_TABLE(';') = "uCq" DECODE_TABLE('=') = "~:`" DECODE_TABLE('?') = "^~S" DECODE_TABLE('A') = "wEB" DECODE_TABLE('B') = "J,'" DECODE_TABLE('C') = "a*H" DECODE_TABLE('D') = "]tr" DECODE_TABLE('E') = "\"'u" DECODE_TABLE('F') = "K71" DECODE_TABLE('G') = "oD7" DECODE_TABLE('H') = "NyM" DECODE_TABLE('I') = ";YR" DECODE_TABLE('J') = "L/\"" DECODE_TABLE('K') = "PoT" DECODE_TABLE('L') = "g&j" DECODE_TABLE('M') = "*rG" DECODE_TABLE('N') = "}jd" DECODE_TABLE('O') = "t9-" DECODE_TABLE('P') = "T{ " DECODE_TABLE('Q') = strf("+?%c",0x7f) DECODE_TABLE('R') = "-8." DECODE_TABLE('S') = ",wL" DECODE_TABLE('T') = "0g]" DECODE_TABLE('U') = "nS~" DECODE_TABLE('V') = "kGl" DECODE_TABLE('W') = "f4o" DECODE_TABLE('X') = "5xy" DECODE_TABLE('Y') = "%]t" DECODE_TABLE('Z') = "!0C" DECODE_TABLE('[') = "d#&" DECODE_TABLE('\\') = "MZv" DECODE_TABLE(']') = "R[%" DECODE_TABLE('^') = "cl$" DECODE_TABLE('_') = "?H+" DECODE_TABLE('`') = "{U(" DECODE_TABLE('a') = "xp#" DECODE_TABLE('b') = ")iA" DECODE_TABLE('c') = "(.4" DECODE_TABLE('d') = "sL\t" DECODE_TABLE('e') = "Y!*" DECODE_TABLE('f') = "3$D" DECODE_TABLE('g') = strf("%cN?",0x7f) DECODE_TABLE('h') = "mPw" DECODE_TABLE('i') = "U\t;" DECODE_TABLE('j') = "SVU" DECODE_TABLE('k') = "|si" DECODE_TABLE('l') = ":5a" DECODE_TABLE('m') = "_ac" DECODE_TABLE('n') = "eKP" DECODE_TABLE('o') = "FXg" DECODE_TABLE('p') = "X;Q" DECODE_TABLE('q') = "1WI" DECODE_TABLE('r') = "i\"O" DECODE_TABLE('s') = "lmF" DECODE_TABLE('t') = "ZMh" DECODE_TABLE('u') = "H%|" DECODE_TABLE('v') = "'(6" DECODE_TABLE('w') = "\\Fp" DECODE_TABLE('x') = "=Jn" DECODE_TABLE('y') = "$2z" DECODE_TABLE('z') = "yA/" DECODE_TABLE('{') = "7=_" DECODE_TABLE('|') = "`_K" DECODE_TABLE('}') = "QOZ" DECODE_TABLE('~') = " B," DECODE_TABLE(0x7f) = "6eW" dialog "vbe", 16 if stat == 0 : end notesel inBuf noteload refstr // VBEファイルかチェック matches m, inBuf, "#@~\\^......==(.*)......==\\^#~@\\s*" if (0 < stat){ inChain = m(0, 1) strrep inChain, "@&", "\n" strrep inChain, "@#", "\r" strrep inChain, "@*", ">" strrep inChain, "@!", "<" strrep inChain, "@$", "@" sdim outChain, strlen(inChain) * 2 // 適当 index = -1 repeat strlen(inChain) c = peek(inChain, cnt) if (c >= 0 && c <= 127){ index++ if (DECODE_TABLE(c) != ""){ encodedString = DECODE_TABLE(c) decodeIndex = peek(COMBINATIONS, index\64) - '1' poke outChain, cnt, peek(encodedString, decodeIndex) } else{ poke outChain, cnt, c } } else{ if IsByte(c) { wpoke outChain, cnt, wpeek(inChain, cnt) continue cnt+2 } else{ poke outChain, cnt, c } } loop mesbox outChain, 640, 480, 0 }



VBS

リンク

2024/4/16(Tue) 15:54:44|NO.101536

TOMATO様
簡単なVBEファイルで確認しました、問題なく変換出来ました。
ありがとうございました。



VBS

リンク

2024/4/18(Thu) 09:18:55|NO.101556

すいません、解決にチェックしましたが以下のような状況になります。

状況:
・文字列が1行の場合は、問題なく変換される。
・文字列の途中で改行が入り複数行になる場合は、次の行からは文字化けになる。
(英数のみで、日本語は正しく変換されている。)

以上よろしく願います。



TOMATO

リンク

2024/4/18(Thu) 09:37:29|NO.101557

以下の行を

strrep inChain, "@&", "\n" strrep inChain, "@#", "\r"

に変えてみてください。
HSPの改行コード周りの取り扱いが、他のプログラミング言語と違うことを忘れてました。

strrep inChain, "@&", strf("%c",0x0A) // LF strrep inChain, "@#", strf("%c",0x0D) // CR



VBS

リンク

2024/4/18(Thu) 12:51:42|NO.101558

TOMATO様
複数行の変換、問題なく出来ました。
ありがとうございました。



VBS

リンク

2024/4/24(Wed) 09:43:14|NO.101620

すみません、以下のようなよく分からない状況になります。
(一部の英小文字「s」が「f」に変換されます。タイプミスではないですよ)
よろしく願います。

状況:

'// henkan_teft ^NG MsgBox ("1234567890abcdefghijklmnopqrftuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") ^OK ^NG MsgBox ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrftuvwxyz1234567890") ^OK ^NG MsgBox ("ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutfrqponmlkjihgfedcba0987654321") ^OK ^NG MsgBox ("0987654321zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA") ^OK ^OK MsgBox ("abcdefghijklmnopqrstuvwxyz0987654321ZYXWVUTSRQPONMLKJIHGFEDCBA") ^OK ^OK



TOMATO

リンク

2024/4/24(Wed) 12:59:52|NO.101621

元のPythonコードを使って実行しても、[s]が[f]になってしまいますね…。
おそらく変換テーブルが間違っているのかと思いますが、
詳しく追跡調査する時間がなく…。

とりあえず

DECODE_TABLE('6') = "Ofx"


DECODE_TABLE('6') = "Osx"
に修正すれば回避できますが、他の文字で問題が起きるかもしれません。



VBS

リンク

2024/4/24(Wed) 15:00:31|NO.101623

TOMATO様
ありがとうございます。

確認しましたが、下記のようになります。
・「s」が「f」には、まだあります。
・今度は、「s」が「f」にの所が、「f」が「s」にが追加となりました。



TOMATO

リンク

2024/4/25(Thu) 08:31:30|NO.101627

>元のPythonコードを使って実行しても、[s]が[f]になってしまいますね…。
すいません、気のせいでした。No.101621の修正内容は一度忘れてください。

DECODE_TABLE('6') = "Ofx"
に戻してください。

正しくは以下の修正で直ると思います。


DECODE_TABLE('/') = strf("C%cfs",0x7f)


DECODE_TABLE('/') = strf("C%cs",0x7f)



VBS

リンク

2024/4/25(Thu) 08:49:31|NO.101628

分かりました。

ここを

DECODE_TABLE('/') = strf("C%cfs",0x7f)
このように

DECODE_TABLE('/') = strf("C%cs",0x7f)
変更すれば、OKになりました。
(「f」がひとつ多かったようです)


ところで、一つ疑問点が

DECODE_TABLE(0x7f) = "6eW" ↑ここが
Pythonのコードでは、「'\x7f': '6eW'」となっていますが
これでよいのでしょうか



VBS

リンク

2024/4/26(Fri) 09:58:54|NO.101630

色々試してみました。

結果:
・「0x7f」は、アスキーコード「127」(10進数)になる。(特殊文字の「抹消」)
・「'\x7f'」は、アスキーコード「120」(10進数)になる。(英小文字の「x」と同じ)

HSPは、エスケープシーケンスの扱い方が、他のプログラム言語と違うようですね?


TOMATO様、お忙しい中ありがとうございました。
お礼申し上げます。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.101524への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

ONION software Copyright 1997-2023(c) All rights reserved.