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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0423
Nanashi自分のPCでしか動作しないアプリを作りたい。16解決


Nanashi

リンク

2017/4/23(Sun) 22:32:39|NO.79260

自分のPC以外では動作しないソフトを作りたいんです。
何を取得すればできますか、よろしくお願いします。



この記事に返信する


スペース

リンク

2017/4/23(Sun) 22:45:58|NO.79261

配布しなければいいのでは。



名無し

リンク

2017/4/23(Sun) 22:52:12|NO.79262

・配布しない
・自分のパソコンのどこかにデータを入れて置き、ソフト起動時にそのデータを読み込む
どちらかですね。
普通に考えるなら配布しないという別の返信者さんの言っている通りにするのがいいと思いますが、
どうしても配布したいって感じなら、あらかじめ自分のパソコンのどこかのフォルダに
適当なデータを入れて、ソフト起動時に読み込み、ファイルが存在したなら起動するようにすれば
解決すると思います。



Yuuki

リンク

2017/4/23(Sun) 22:59:56|NO.79263

パスワードですかねぇ



tds12

リンク

2017/4/23(Sun) 23:03:41|NO.79264

MACアドレスどうでしょう。



スペース

リンク

2017/4/23(Sun) 23:21:14|NO.79266

パスワード、MACアドレス、ファイル(ハッシュ値を比較する?)、
exeにそういう機能を追加した場合、OllyDbgで処理を追っていけば突破されそうですね。
どうしても配布したいならパス付きzipでexeそのものを暗号化する、とかでしょうか。



Velgail

リンク

2017/4/24(Mon) 15:57:11|NO.79274

ベースとなるアイデアはこれでどうでしょう?
参考:http://hsp.tv/play/pforum.php?mode=pastwch&num=24026

#include "hspinet.as" #module #defcfunc machine_number str salt2 newcom ole,"WbemScripting.SWbemLocator" comres service ole->"ConnectServer" comres rows service->"ExecQuery" "Select * From Win32_NetworkAdapterConfiguration" count=rows("Count") comres row macs="" repeat count service->"Get" "Win32_NetworkAdapter.DeviceId=\""+(cnt+1)+"\"" vname=row(".NetConnectionId") if vname("vartype")=8{ name=vname("value") des=row("Description") vaddress=row(".MACAddress") if vaddress("vartype")=8:address=vaddress("value") macs+=address } loop varmd5@ md5,macs,strlen(macs) salt=dir_desktop//変更可能 count=int("$"+strmid(md5,0,2))+256//変更可能 repeat count macs=md5+salt+salt2 varmd5@ md5,macs,strlen(macs) loop return md5 #global mes machine_number("arch") mes machine_number("arch") mes machine_number("linux") mes machine_number("linux")
モジュール内をC/C++のDLLとすればより安全です。
ループ回数に関わる部分、salt周りをガチガチにすると安定すると思います。



Velgail

リンク

2017/4/24(Mon) 16:04:40|NO.79275

(注:ここで言うガチガチとは、独自に調整を加えるという意味です。また、DLL化を推奨します)



Velgail

リンク

2017/4/24(Mon) 20:20:30|NO.79279

……あ、DLL化してもあんまり宜しくないのか。
逆アセンブルされて云々の耐性を作るのは本当に難しいなぁ。



MillkeySoftw

リンク

2017/4/25(Tue) 00:22:12|NO.79283

そもそも解析環境が整った人に解析されたら、すべてのコードが無意味と化す。

実行ファイルを 2種作って、一つは実行ファイル復号化用、もう一つは本当の実行ファイルにすればいいんじゃないかなー。
作ったら、実行ファイル復号化用に本当の実行ファイルを PC の MAC アドレスなどで暗号化してパックする。

[完成ファイルの動作フローは下記の通り]
1.ユーザーが A.exe を実行。
2.A.exe がPC のMAC アドレスなどで、パックされている B.exe を復号化
3.A.exe が B.exe を実行。この際に、復号化が失敗している場合、無意味のファイルにしかならないのでそもそも実行できない。
(正常に復号化されていれば実行できる)

まぁ、元々のキーが知られてしまったら無意味になりますけどね。



Velgail

リンク

2017/4/25(Tue) 03:42:44|NO.79284

それは違うところで考えたことが有りますけど、axファイルが脆弱すぎなんですよね。

onitamaさんに依頼してみようかしら。
指定した暗号化キーを元に暗号化したaxファイルを暗号化した(仮称axcファイル)を実行する機能
(まあ、要するにexeにパックするaxファイルのように暗号化したaxファイルを提供&実行可能にする機能)
これなら、MillkeySoftwareさんの案をHSP的に安全に実行できるのですが。

//exeファイルとなると意外とクラックされそうなのが難点。HSPで作ったら最初の200KB弱が既知って
//暗号化を専門とする人から見ると、HSPの提供している簡便な暗号化系だと突破できちゃう。



にゃんちゃん

リンク

2017/4/25(Tue) 09:56:15|NO.79286

公開鍵と秘密鍵のペアを作成
公開鍵で、とあるファイルを暗号化しておく
exeの中にそれをパックする
実行時、それをアンパックする
秘密鍵を入力させる
入力されたキーで、アンパックしたファイルを複合化する
ちゃんと複合化できたかどうかを調べ…るプロセスを逆コンパイルされるから無理か、難しい



Velgail

リンク

2017/4/26(Wed) 04:53:49|NO.79305

未達成・方法だけ

注:この方法はC++が満足にできてリファレンスが読める程度の能力が必要です。

・ CryptoAPIを利用し、パソコンに入っている証明書を利用する。
・ 証明書は自分で作成したもの。つまり秘密鍵と公開鍵を知っているもの。

処理手順(作成側)
0. 証明書を作成しておく。
1. 実行させたくない実行ファイルを作った証明書の秘密鍵で暗号化する。
2. exeにパックする等しておく。

処理手順(実行側)
1. 暗号化された実行ファイルを暗号化した証明書の公開鍵で復号する。
2. 適当な位置に置いて実行する。
3. 終了時バッチファイル等を利用して自己削除を行う。

こんな形ならほぼほぼ達成できます
注意:ソースコード漏れたら意味がありませんので…… そもそもこの議題に意味があるのかと盛大に突っ込みます。



 

リンク

2017/4/30(Sun) 16:48:09|NO.79403




スペース

リンク

2017/4/30(Sun) 22:50:33|NO.79431

いやどう見ても同じ人では。



nanasi

リンク

2017/5/1(Mon) 00:53:46|NO.79432

解決



Nanashi

リンク

2017/5/2(Tue) 23:28:01|NO.79489

皆さんが回答してくれた通り、ファイルの確認、MACアドレス、パスワード、ボリュームシリアル値で環境を判別してみようと思います。

>NO.79432
成りすましして楽しいか?
勝手に解決チェック押されてるし人の嫌がるようなことはしないでくれ。



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