マンガでよめる痔のこと・薬のこと

Windows用アプリの開発をする事になったプログラマーです。
不正使用防止のプロテクトとしてハードウェアプロテクターを
使用するように上司から指示がありました。
その中でPCとプロテクターを1対1で対応させるようにと言われました。

プロテクターには多少のメモリが有りますので
プロセッサーシリアルナンバーをプロテクターに記憶させ
使おうと思ったのですがPentium4以降のCPUにはその機能が有りません。
OSのプロダクトIDはボリュームライセンスで
購入している場合は複数のPCで同じIDになります。

そこでプロセッサーシリアルナンバーや
OSのプロダクトID以外にPC固有の情報で
使えそうな情報がないか
皆様のお知恵を拝借したく質問してみました。

宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

#1,#4です。



#1補足にて複数LANの議題を挙げておられたので・・・
1.ネットワーク機器に対する制御のみでMACアドレスの取得は一意に出来る。

2.複数ネットワーク機器の識別は必要であり実現できることですが複数LANというのがどう関係してくるのか私には判りませんでした。故の補足要求です。

3.他にも色々な選択肢がある。

と回答したつもりです。

伝わっていなかったようなので再度回答いたします。
    • good
    • 0
この回答へのお礼

何回も回答をありがとうございます。
MACアドレスを使うか、他の情報と合わせて
キーを作成する方向で検討しようと思います。
ありがとうございました。

お礼日時:2006/01/24 19:49

ハードウェアプロテクターが何者か判りません(そのような名称の物を見つけられませんでした)がPCと1体で繋ぐものなのですよね?何故LANが関係あるのでしょう?


そもそも機器どうしを特定して接続するのですから複数台を一度に設定するわけではないはずです。一台一台、ネットワーク機器を個別に指定してハードウェアプロテクタとやらに記憶させるだけですよね?

私共の顧客では300台弱ある専用端末をPC化した際にハード的なセキュリティはシリアルポート接続の機器とIDカード認識に切り替えました。
最近ではUSB端子や外部記憶の無いPCも売れているそうです。ポータビリティを極限まで廃止してセキュリティ向上する一つの案らしいです。
対策方法は多種多様お思われますが我々の業界、上司の一言のみで作業を振り回されていては顧客にとってよいシステムは納品出来ないと考える一SEです。

回答になってないかもしれませんが、pen4でシリアルIDが廃止された理由を良く考えてからし捨て無効性案を検討し直すとよいでしょう

この回答への補足

質問にも書きましたが、今回Windows上で走るソフトを開発します。
LANで使うソフトではありませんのでLANは一切関係有りません。
このソフトの不正使用防止のプロテクトとしてハードウェアプロテクター
(具体的にはUSBに指すプラグで、これが付いていないとソフトは起動出来なくなります)
を使用しますが
これだけでは他のPCにソフトをインストールしてプラグを移動すれば使用出来てしまいます。
ソフトの仕様上どうしても使用するPCを限定したかったので今回質問してみました。

補足日時:2006/01/18 19:45
    • good
    • 0

他に使えそうなのは、コンピュータのSID値かハードディスク(Cドライブ)のボリュームシリアル番号くらいしか思いつきません。


このあたりではどうでしょうか?
両方とも再インストールするかフォーマットしてしまえば、変わってしまいますが…。
    • good
    • 0
この回答へのお礼

再インストールするかフォーマットで変わってしまっては困るので・・・
他の方の回答を参考にもう少し調べてみます。
回答ありがとうございました。

お礼日時:2006/01/18 19:44

CPUの種類


メモリサイズ
OSのバージョン
PCの使用者名
などをキーとして
自分でオリジナルの
キー生成プログラムを
作成したらいかがですか?
    • good
    • 0
この回答へのお礼

なるほどWindowsXPのアクティベーションのように
複数の情報からキーを作りだすのですね。
もう少し自分で調査してみます。
回答ありがとうございました。

お礼日時:2006/01/18 19:39

LAN機器毎に管理する前提でMACアドレスはだめですか?



参考URL:http://e-words.jp/w/MACE382A2E38389E383ACE382B9. …

この回答への補足

MACアドレスも考えたのですが
複数のLANが存在する場合は一意に決定できない。
無線LANの場合はMini-PCI等でモジュールの交換が
出来てしまうが問題ではないのか?
という懸念点があったので、こちらに質問してみました。
また複数のLANが存在する場合、アプリ側で有線/無線の
区別をする方法ってあるのでしょうか?

補足日時:2006/01/17 20:27
    • good
    • 0
この回答へのお礼

早速の回答をありがとうございます。
MACアドレスだと懸念点があったので
補足に書いた通り、こちらに質問してみました。

お礼日時:2006/01/17 20:33

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QPC固有の番号(シリアル番号等)を取得したい。

PHPを使用して、PC固有の番号(シリアル番号等)を取得したいのですが、どのように記述すればよいか分からないので教えて下さい。

○やりたいこと
現在作成中のSNSサイトで友達を紹介する仕組みを作りたいです。
紹介する人にも紹介を受ける人にもメリットがあります。
紹介する人が、紹介を受ける人のメールアドレスをサイト内で入力・送信をすると、サイトから紹介を受けるに招待メールが送られます。
紹介を受ける人は、招待メールのリンクを辿りサイトの登録へと進みます。
メールアドレスは、WEBメールでの登録も許可しているので、1台のPCでいくつもアドレスを作ることができて、自作自演が可能です。
そこで、PC固有の情報を取得して登録メールアドレスと組み合わせてアカウントチェックをすることで、1台で複数のアカウントが取得できると考えています。


参考になる文献でもよいので、どうか皆さんのお知恵を貸して下さい。
宜しくお願い致しますm(__)m



■環境
windows vista
xampp/apache 2.2.4
PHP Version 5.2.3

Aベストアンサー

PC固有の値を取得することはできないので、他のサービスがどうやって
この問題を解決しているか、いくつか例を挙げます。

1.
住民票の写し、免許証のコピーなどを提出させて、個人を特定しアカウントを発行する。
ネット証券会社など

2.
アカウント申請時に携帯電話番号を入力させ、本人確認の電話を運営側から自動音声で行う。
gmailなど

3.
携帯電話でのみアカウント作成を許可する。
いわゆるガラケーであれば、端末固有IDを取得する仕組みがあります。

4.
携帯電話会社のOpenIDで認証する。
PC上で完結しますが、一般ユーザへの認知度が高いとは言えませんね。


2.3.4.は厳密には複アカできてしまいますが、携帯契約数以上のアカウントは作れないので
ある程度の抑止力になると思います。

Qプロダクトキーが必要なソフトって、どうやって作るんですか?

こんにちは、VC++6.0を使ってます。
商用のソフトはよくプロダクトキーが必要だったりしますが、
これって、大量にソフトを生産する時、どんな方法を使って作成しているんでしょう?
いちいち少しだけコードを書き換えてビルドしなおすなんてことはしないですよねぇ?

Aベストアンサー

計算式をつくり、入力されたキーを数値に対応させるテーブルで数値にし、
計算結果がxの時に通すみたいなのだと思いますよ。

2本同じ商用ソフトを購入して、片方のキーだけで、両方インストールできますから(あまりよろしくない確かめ方だが、)

QiphlpapiのGetAdaptersInfoでNICのMacアドレスを取りたいのですが...

こんにちは、
質問No.4996に関連して、VC++でiphlpapiのGetAdaptersInfoを使って、NICのMACアドレスを取得しようと考えています。WIN XP、WIN2000では、目的のアドレスが取得できるのですが、WIN98、WIN MEではNIC以外にPPP AdapterやAOL Adapterといった、ダイアルアップ用のアドレスも同時に取れてしまい、大変困っています。取得したものを見れば検討は付くのですがプログラム的により分ける方法が分かりません。確実にNICのMACアドレスだけを取得する方法はないでしょうか?NetBiosやiphlpapiの他の関数も検討しましたが、ネットワークが構築されていないPCから取得できるのはGetAdaptersInfoだけのようですので、出来ればこの関数を使って解決したいと考えています。どうか、よろしくお願いします。

Aベストアンサー

Platform SDK をあさって (+ ipconfig.exe のバイナリダンプも漁って…) GetIfTable() というのが使えそうなので試してみました。
引数 MIB_IFTABLE 型の中のMIB_IFROW 型のメンバ
  dwType = MIB_IF_TYPE_ETHERNET(6)
  dwMtu = 1500 (byte)
  dwSpeed = 10,000,000 (10Mbps), or 100,000,000 (100Mbps), ...
なのが Ether だ、と断定できないでしょうか。

※MAC アドレスは
  dwPhysAddrLen = MAC address length
  bPhysAddr[] = MAC address
 に入ってきます。

モデム環境がないので、上記の方法で断言できるかはテスト出来ていません。
それと、WinXP で確認したのみです。


なにか参考になれば…

Q利用者側のMACアドレスを取得したい

いま PHP を使ってウェブサイトを構築しており、
認証として利用者のMACアドレスを取得したいと思っています。
LAN 内であれば
http://www.phpclasses.org/browse/file/7704.html
等を利用して取得できるようですが、
当たり前ですが LAN の外の方との通信では取得ができません。

JavaScript を使ってクライアント側の MACアドレスを取得してしまう
という方法があると聞いたことがあるのですが、
検索しても見つけ出すことができませんでした。

ご存じの方、お教え頂けますでしょうか?
よろしくお願い致します。

Aベストアンサー

複数PCのユーザーや、PCの買い替え、LANカードの変更など
MACアドレスが変わる機会は多々あります。

現実的には、ウェブアクセスで
MACアドレスでの認証は、可用性が低いと言えます。


逆に、ソーシャルアタックに対して
MACアドレス認証は弱い。
親のPCと自分のPCのLANカードを入れ換えるくらい
中学生でも簡単にやってのけるでしょう。

Q「computer id」を調べる方法教えてください。

できれば専用ツールを利用してではなく、コマンドプロンプトで調べる方法があれば教えてください。
なければ専用ツールでも構いませんが

Aベストアンサー

>ソフトのライセンスを取得するためにの入力項目内に「computer id」という項目があり、それが一体何者かを知りたいためです。

そのソフトの独自の用語ですね。
そのソフトベンダーに聞くしかないです。

Q一意なID

コンピュータ内でなるべく不変で一意な値を組み合わせて、ネットワーク上でほぼ確実に一意な識別子を作りたいと思います。

ユーザー名やコンピュータ名だけでは一意性に欠けるので、ユーザーIDとOSシリアルナンバー、MACアドレスなども足したいのですが、それらは何を参照すればいいのでしょうか?
レジストリのパスや関数名などあれば教えてください。

ユーザーIDはHKEY_USERS\S-?-?-??-???・・・に入っていますが、たまにここに複数あって、どれが自分のIDなのかわかりません。
MACアドレスもNICが複数刺さっている場合のプライマリの検出方法など。

ほかにもここに挙げたもの以外に、何かできるだけ一意で不変なものがあったら、教えてください。
IPなど頻繁に変わる可能性があるものはだめです。

開発環境
XP Pro SP1 + VB.NET

言語はVB.NETですが、これに依存しない手段でもかまわないのでVBのカテゴリには入れてません

実行環境
2000またはXP

Aベストアンサー

『ほぼ確実』がどの程度【確実】を求めているのかが問題となります。

エミュレータ(VirtualPCやVMWareなど)環境ではMacアドレスをユーザが設定することが当然のように行われます。
「Macアドレスは世界中で一意」というのは建前です。

「グローバルネットワーク上に存在するすべてのコンピュータのコンピュータ/ユーザごとに【確実に】一意なIDの自動割り当て、自動認証、同一IDの自動再割り当てする技術」は現在存在しません。

この技術の発明を待っているシステムがたくさんあり、それができれば特許で大もうけできるくらいの発明になります。

現在の技術ではサーバーで生成した一意なIDをユーザごとに保存させるくらいしか【確実な】方法はありません。

質問が「ネットワーク上」となっており、「ネットワークセグメント上」でないため、グローバルネットワークを想定しています。
ネットワークセグメント内でよいのであれば、Macアドレスが使えますがMacアドレスは普遍ではありません。

QDWORDの実際の型は何でしょうか

VC++.NETの環境です。
DOWRD dw1 = 1;
int i = 2; と定義し
ここで
if ( i > dw1 ){
何かの処理;
}
とコーディングすると
warning C4018: '>' : signed と unsigned の数値を比較しようとしました。
のワーニングがでます。
これは、DWORDがint型でなくunsigned int型のようにも見えます。
ある本によれば(VC++.V.NET逆引き大全500の極意)
DWORD はint型であると記述されています。
もし、int型ならこのワーニングはでないはずなのですが、
なぜでるのでしょうか。又、DWORDの実際の型は何なのでしょうか。ご存じのかたおりましたら、教えていただけませんでしょうか。

Aベストアンサー

型定義が知りたいのならば、宣言ファイルを見れば疑問を挟む余地もありません。
DWORD型はwindef.hで
"typedef unsigned long DWORD;"
と宣言されています。

Visual Studioを使っているのならば、知りたい型の上にマウスポインタを置いて右クリック、ポップアップメニューの「定義へ移動」または「宣言へ移動」で簡単に知ることが出来ます。

QLNK2019: 未解決の外部シンボルのエラーが出る

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自キャラのデータ
Point2D g_jikipos = {40, 400};//自キャラの座標

//画像ハンドル
int g_jikiimage[11];

//色々なファイルの読み込み
int LoadFiles(){
//画像ファイル読み込み
if(LoadDivGraph("media\\player01.bmp",
11,11,1,64,64,g_jikiimage) == -1) return -1;

return 1;
}


 mymain.h
//他から呼び出させるMyMainの関数
void MyMain();
int LoadFiles();


 myhelper.h(サンプルなので打ちミスはない)
#include "DxLib.h"
#include <limits.h>
#include <math.h>

//構造体宣言
//座標またはベクトルを記録する構造体
struct Vector{
float x,y;
};
typedef Vector Point2D;
//線を記録する構造体
struct Line2D{
Point2D startpos, endpos;
float katamuki;//傾きをラジアン値で記録
Vector speed;//移動している場合は速度をセット
};
//球体を記録する構造体
struct Ball2D{
Point2D position;
float hankei;//半径
};
//四角形を記録する構造体
struct Rect2D{
Point2D lefttop;
Point2D rightbottom;
float width;
float height;
};


//ライブラリ関数
Point2D PosInView(Point2D in);
int XInView(float inx);
int YInView(float iny);
void ScrollToLeft(float jikiposx);
void ScrollToRight(float jikiposx);
void ScrollToUp(float jikiposy);
void ScrollToDown(float jikiposy);
void DrawLineInView(float x1, float y1, float x2, float y2, int Color, int Thickness);
void DrawCircleInView(float x, float y, float r, int Color, int FillFlag);
void DrawAnimation(float x, float y, double ExtRate, double Angle,int TurnFlag,
int *imgarray, int allframe, float fps);
//ベクトル関数
Vector CreateVector(Vector in, float veclen);
Vector AddVector(Vector v1, Vector v2);
Vector SubVector(Vector v1, Vector v2);
Vector AddVectorInFrameTime(Vector pos, Vector speed);
Vector AddVectorInFrameTime2(Vector pos, Vector speed, Vector accel);
Vector Normalize(Vector in);
Vector RotateVector(Vector in, float radian);
float VectorLengthSquare(Vector in);
float DotProduct(Vector v1, Vector v2);
float CrossProduct(Vector v1, Vector v2);
void SetLine2DKatamuki(Line2D *in);
void DrawLine2D(Line2D in, int Color, int Thickness);
void DrawBall2D(Ball2D in, int Color, int Fill);
//当たり判定関数
bool HitTestLineAndBall(Line2D linein, Ball2D ballin);
bool IsPointAtLineFace(Line2D linein, Point2D ptin);
bool HitTestLineAndLine(Line2D line1, Line2D line2);
bool HitTestBallAndBall(Ball2D a, Ball2D b);
bool HitTestPointAndBox(Rect2D rect, Point2D pt);
//タイマー関数
void SetSimpleTimer(int idx, int time);
int GetPassedTime(int idx);


//グローバル変数
extern float g_frametime;
extern Rect2D g_framerect;//画面領域(当たり判定)
extern Point2D g_current_field_pos;//現在の左上座標
extern Rect2D g_stagesize;//ステージサイズ

//定数宣言
const float ZEROVALUE = 1e-10f;
const float PIE = 3.1415926f;
const int SCROLL_LIMIT = 200;
----------------------------------------------------------------
 エラー内容
1>myhelper.obj : error LNK2019: 未解決の外部シンボル "void __cdecl MyMain(void)" (?MyMain@@YAXXZ) が関数 _WinMain@16 で参照されました
1>C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\my\Debug\my.exe : fatal error LNK1120: 外部参照 1 が未解決です
1>my - エラー 2、警告 0
ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ
----------------------------------------------------------------
画像を貼り付けときます
(見えにくい場合→http://www.dotup.org/uploda/www.dotup.org154142.jpg.html)
初心者なのでわかりやすくお願いします

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自...続きを読む

Aベストアンサー

ファイル構成から推測するに
mymain.cpp というファイルに
void MyMain(void) {
// ここに処理を書く
}
という関数が必要なようです。

QソフトのPC1台の意義

PCが故障しPC内のM/Bを交換しました。
CPUやメモリは同じものを使用しています。
なのですが、OS以外のソフト(FAXソフト)をインストールし認証しようとすると電話して許可を取れと
表示。電話した所、M/Bを変えると違うPC扱いとの事。
CPUは同じでもM/BでPCが変わったとの認識。
最終的に新たに購入という形になりました。
ま、これは仕方ないと思うのですが、質問は

 他のソフトでも同じなのか、どこか統一の見解とかがあるのかが知りたい。
また、CPUではなく、M/Bが違うという事が何でソフトがわかるのか。M/Bに認識されるどこかに
データがあるという事なのでしょうか?交換したのは同じM/Bなので、M/Bの固体シリアル番号があるしか考えられないが?
要は、ソフトが他のPCと認識する交換とはなんなのか。
個人的にはCPUだと思っていましたが違うみたいですね。
どなたか詳しい方。
教えてください。
ソフトのカテではなく ハードであればカテを変えます。

Aベストアンサー

よくあるのは「ネットワークカードのMACアドレス」ですね。質問の例も、これではないかと思います。
MACアドレスはネットワークカードの個体ごと(ネットワーク搭載のマザーボードならマザーボードの個体ごと)に違ううえ、今時ネットワークが載っていないPCなどほとんど無いので、これを使っているものは多いです。

この場合、ネットワークがマザーボードのオンボードでなく、拡張カードになっていれば、それを移すことで同一PCとして扱わせることもできます。

カテゴリはこのままでいいと思いますよ。「ソフトウェアが識別する条件」の話ですから。

QCSVファイルの中で、「 , 」カンマを使いたい

「 , 」で区切られたCSVファイルの中で、「 , 」カンマを使いたいのですが、可能でしょうか?

具体的には「これは1,500円でした。」というように、CSVファイルに収められた文章内で出てくる半角の数字(お金)の区切りに使いたいのです。
全角では代用したくないのですが、CSVファイルでデータを受け渡しする際に、困っています。

例えば、特殊文字などで対応可能でしょうか?

Aベストアンサー

受け渡しに使うと言うことは相手方のアプリケーションのことも考えなければいけないのですが・・・とりあえず対応が簡単そうな方法を。

1.各セルを""で囲む。(もちろんデータにダブルクォートがある場合はカンマと同様に困ります。
2.カンマで区切らずにタブで区切る。(比較的使われない文字ですが、やはりデータ中にタブがあるとカンマと同様です)

難しいけれど完璧に対応するためには、データ中の区切り文字は特殊な文字列に変更し、受け取り側のアプリケーションではその特殊な文字列をデータ中の区切り文字として扱うという方法が使われます。
例えば、データ中のカンマは\,にするとか。

データ作成側、受け取り側でそれぞれどこまで対応できるのか分かるともっと簡単かつ具体的な方法を回答できるかも知れません。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング