Add Me!Close Menu Navigation

ニートは職業ではない、生き方である

Add Me!Open Categories Menu

Winnyをいじる・その1

Winnyの初期ノード

ネットで初期ノードリストが配布されている。これは

@9581aebb9b2f93d548fc274b2655e0a8b67118

のような形になっている。最初の@は不要なので読み飛ばす。その先の数値とアルファベットは16進数になっている。つまり、9581aebb9b2f93d548fc274b2655e0a8b67118は16進数で

0×95, 0×81, 0xae, 0xbb, 0x9b, 0x2f, 0×93, 0xd5, 0×48, 0xfc, 0×27, 0x4b, 0×26, 0×55, 0xe0, 0xa8, 0xb6, 0×71, 0×18

という16進数の列と読み替えればいい。

文字を16進数数値に

static unsigned char asciiToInt( char c )
{
	// 数値?
	if ( 0x30 <= c && c <= 0x39 )
		return c - '0';

	return c - 'a' + 10;
}

なお、unsigned charは1バイトの数値を扱うとき、charは1バイト文字を扱うときです。これを使って

初期ノードリストの16進数表記をデコードする

/* -------------------------------------------------------
	初期ノードリストの16進数表記をデコードする。
	この中でしか使わないため、char *で返す。
	戻り値はdelete []すること。
 -------------------------------------------------------*/

static unsigned char *decodeHexString( const char *s )
{
	int length = strlen( s ) / 2;
	unsigned char *result;

	if( length % 2 != 0 )
	{
		// 2の倍数じゃないときはおかしい
		return NULL;
	}

	result = new unsigned char[ length + 1 ];

	for( int i = 0; i < length; i++ )
	{
		char hi = *s++;
		char lo = *s++;
		result[ i ] = (asciiToInt(hi) << 4) | asciiToInt(lo);
	}
	result[ length ] = '';

	return result;
}

これをRC4暗号で復号すればよい。なお、RC4のキーはほとんど既知で

// デフォルト暗号化キー
const unsigned char RC4Key[] = { 0x6f, 0x70, 0x69, 0x65, 0x77, 0x66, 0x36, 0x61, 0x73, 0x63, 0x78, 0x6c, 0x76 };

がデフォルトになっている。

この暗号化キーの最初の1バイトを、Node情報の最初の1バイトと入れ替えてキーにする。

key[ 0 ] = decoded[ 0 ];

が該当部分。あとの部分は得られたキーで復号してやればよい。

デコード

/* -------------------------------------------------------
	Winnyの初期ノードリスト
		@9581aebb9b2f93d548fc274b2655e0a8b67118
	のような表記を
		61.201.38.38:25316
	にデコードする
 -------------------------------------------------------*/

void decode( const char *s )
{
	// 簡易チェック
	if( s[0] != '@' )
	{
		return;
	}

	// @を飛ばす
	s++;

	int size = strlen( s ) / 2;
	unsigned char *decoded = decodeHexString( s );
	unsigned char *key = new unsigned char[ sizeof( RC4Key ) ];

	// デコードできない
	if( decoded == NULL )
		return;

	// 最初の1バイトを暗号化キーに使う
	memcpy( key, RC4Key, sizeof( RC4Key ) );
	key[ 0 ] = decoded[ 0 ];	

	RC4 r( key, sizeof( RC4Key ) );
	r.decrypt( &decoded[ 1 ], size - 1 );

	puts( ( const char * )&decoded[1] );

	delete [] decoded;
}

RC4を復号する

RC4はストリーム暗号で、1バイトずつ処理していきますが、その都度関数の内部状態が変化します。そのためRC4クラスを作って処理します。

swap

変数を入れ替える処理を多用するのでswap()関数を作ってしまう。

template < typename T >
void swap( T &left, T &right )
{
	T temp;

	temp = left;
	left = right;
	right = temp;
}

RC4クラス

#ifndef	__RC4__
#define	__RC4__ 

class RC4
{
public:
	RC4( const unsigned char *key, int size );
	virtual ~RC4(){}

	void Initialize();
	void decrypt( unsigned char *in, int size );

private:
	int _x;
	int _y;
	unsigned char *_key;
	unsigned char _state[256];

};

#endif

コンストラクタ

RC4::RC4( const unsigned char *key, int size )
{
	_key = new unsigned char[ size ];
	memcpy( _key, key, size );

	Initialize();
}

暗号に使うキーとサイズ(C++は配列のサイズを別に覚えておかなくてはならない、不便だ)を渡して初期化してやる。

初期化

void RC4::Initialize()
{
	unsigned int length;
	unsigned char state2[256];
	unsigned char *p = _key;

	length = 0;
	while( *p++ != 0 )
	{
		length++;
	}
	if( length == 0 )
		length = 1;

	_x = 0;
	_y = 0;

	for( int i = 0; i < sizeof( _state ); i++ )
	{
		_state[ i ] = i;
		state2[ i ] = _key[ i % length ];
	}

	int j = 0;
	for( int i = 0; i < sizeof( _state ); i++ )
	{
		j = ( j + _state[ i ] + state2[ i ] ) & 0xff;
		swap( _state[ i ], _state[ j ] );
	}
}

暗号化/復号化

void RC4::decrypt( unsigned char *in, int size )
{
	unsigned char x = _x;
	unsigned char y = _y;

	unsigned char sx, sy;
	long index = 0;

	while ( size-- != 0 )
	{
		x++;
		sx = _state[x];
		y = ( y + sx ) & 0xff;
		sy = _state[y];
		_state[y] = sx;
		_state[x] = sy;
		sx = (sx + sy) & 0xff;

		in[index++] ^= _state[sx];
	}
	_x = x;
	_y = y;
}

なぜ、週4時間働くだけでお金持ちになれるのか?

  • 著者/訳者:ティモシー フェリス
  • 出版社:青志社( 2007-09-21 )
  • 単行本:255 ページ
  • ISBN-10 : 490385311X
  • ISBN-13 : 9784903853116
  • 定価:¥ 1,470

「週4時間」だけ働く。

  • 著者/訳者:ティモシー・フェリス
  • 出版社:青志社( 2011-02-03 )
  • 単行本:640 ページ
  • ISBN-10 : 4905042097
  • ISBN-13 : 9784905042099
  • 定価:¥ 1,995

君が衛生兵で歩兵が俺で (スマッシュ文庫)

  • 著者/訳者:篠山 半太
  • 出版社:PHP研究所( 2012-06-16 )
  • 文庫:340 ページ
  • ISBN-10 : 4569678467
  • ISBN-13 : 9784569678467
  • 定価:¥ 720
Posted By onaneetX.Q

Leave a Reply




最近の投稿

最近のコメント

アーカイブ

カテゴリー

メタ情報

Twitter: honour_neat

RSS Tumblr

  • bbsmaster: 安藤遥 2012年4月27日
    bbsmaster: 安藤遥 […]
  • NVR500 PPTP設定 2012年4月8日
    PPTPでVPNを張ってDNSの通知をする。とりあえず ip route default gateway pp 1 pp select 1 pp always-on on pp enable 1 pp select anonymous pp bind tunnel1-tunnel2 pp auth username ID pass pp auth username ID2 PASS2 ppp ipcp ipaddress on ppp ipcp msext on pp enable anonymous tunnel select 1 tunnel encapsulation pptp pptp tunnel disconnect time off tunnel enable 1 tunnel select 2 […]
  • " 285 : 216  : 2011/02/17(木) 22:55:06 ID:tvQNovvz [7/7回発言] ..." 2012年4月6日
    “ 285 : 216  : 2011/02/17(木) 22:55:06 ID:tvQNovvz [7/7回発言] 相談に乗ってくれた方々本当にありがとうございます。 結論から言いますとリモートデスクトップで接続成功しました。 全部自分がアホなだけでした。 同じような人がいないとは思いますが経緯を報告します。 自分の環境はWin7x64だった為、Boncaslinkの64bit版を入れていたのが 原因でした。 最初TVTestの64bit版で再設定を行って設定したところ、Bancasproxyが 赤色に変わり使用中のアプリのリストにTVTestが表示されました。 もしやと思い、32bit版で全てのアプリ(TVTest、関係とBonCaslink)を統一 して、設定したところ正常に作動しました。 テストとして他 […]
  • 大学生に勉強させる?大学の時間とは何か 2012年3月20日
    大学生に勉強させる?大学の時間とは何か: 「勉強をしない」学生に勉強をさせるべく、国が重い腰を上げたのだという。繰り返すが、けっこうなことだ。ならば、国には、「シュウカツ」という名目のもとに大学生の時間を大幅に奪う企業に対して根本的な対策も取ってもらいたい。 人々は故意に目をそむけている。いわゆる有力大学の学生よりも、そうでない大学の学生のほうが、「三流大学」の学生のほうが、「シュウカツ」においてより多くの時間を取られ、より多くのエネルギーを費やしながら、より多く落とされ続け、より多く踏みつけられ続けているという事実に。 日本の問題の何割かは《醜活》に起因あるいは関係しているとすら思う。《醜活》があるから採用の混乱が起こるし、それゆえ企業の活力が落ちるし、その結果納税額は下がるわ、企業の業績が悪いから不景気にな […]
  • ウホッ!良い情報!! 2012年3月20日
    ウホッ!良い情報!!: 米・英・加についてですが、(これは個人的なバイアスがかかりますが 汗)その3カ国のなかでもしbeyond_NEETさんの目的がその国への移民・永住ということでしたら、一番達成しやすいのは加であると思います。 移民法が整備されており、公立(もしくは政府公認)の大学・専門学校で2年以上の課程を修了した留学生は、就職先が決まっていようと無かろうと最長で3年の就労ビザを取得でき、カナダ国内で自由に働けます。(公務員や役所仕事はさすがにカナダ永住者か国籍保持者を優先するとは思いますが) その後、カナダ政府が指定する職種内容で最低一年間就労すると永住権申請の資格が与えられます。 他にも有益な情報多数。 […]
  • 雇用推計:若者ミスマッチ鮮明 「即戦力」重視、構造的に 2012年3月20日
    雇用推計:若者ミスマッチ鮮明 「即戦力」重視、構造的に: 若者が即戦力なわけないじゃん。若者で即戦力になり得るとすれば、若さを活用するしかない。美人を雇用して営業させるとか(枕営業)、そこまでいかないにせよどぶ板営業に耐えられるようなノリのいいリア充でも雇うしかない。若さは魅力だから、くたびれたおっさんよりもかわいい子から買いたいと考える可能性がある。 一流企業の営業は比較的楽である。なぜならほっといても商品やサービスは売れるからだ。だから、二流以下の会社に入ると営業力で会社を維持しているようなところが結構ある。インターンした某ソフト会社も外に出て率直に意見を求めたら、社員が言うほどその会社の製品は優れていないことがわかった。つまり、あの会社の業績は技術力ではなく営業力で成り立っていた。 ほとんどの会社は製品や […]
  • 羽田→台北松山→台北桃園→ニューヨークのOPEN航空券。 2012年3月19日
    羽田→台北松山→台北桃園→ニューヨークのOPEN航空券。 […]
  • " 多分こういう食事がセブの一般の人の食事なんだと思う。味はまあまあ美味しい。食堂自体は不衛生ってわけではないけれど、建物はボロくてそんなに綺麗じゃないし、椅子や机も安っぽいプラスチック製でガタガタする。..." 2012年3月19日
    “ 多分こういう食事がセブの一般の人の食事なんだと思う。味はまあまあ美味しい。食堂自体は不衛生ってわけではないけれど、建物はボロくてそんなに綺麗じゃないし、椅子や机も安っぽいプラスチック製でガタガタする。でもそういうアジアの安食堂の雰囲気が僕は好きなので落ち着く。  対比して思うのは日本のことだ。日本でお金のあんまりない人が食べる安食堂といえば、松屋とか吉野家とかの牛丼屋チェーンが一般的になっていて、280円ぐらいの安い値段でそこそこの味のものが腹いっぱい食べられるのだけど、あの店舗の小綺麗さはなんなんだろう。貧乏人向けなのにピカピカでシステマチックにできている。よく考えてみると、日本では小汚いけれどその代わりに安く食べられる店というのがあんまりない(全くなくはないけどチェーン店の牛丼のほうが安い)。” - 確 […]
  • "突然ですが、問題です。 自己紹介の言葉として、適切なのはどちらでしょう? ○○大学経済学部に在籍(ア:させていただいております/イ:しております)。 上記の問題は、数日前の読売新聞の朝刊に掲載され..." 2012年3月19日
    “突然ですが、問題です。 自己紹介の言葉として、適切なのはどちらでしょう? ○○大学経済学部に在籍(ア:させていただいております/イ:しております)。 上記の問題は、数日前の読売新聞の朝刊に掲載されていた、就職活動をしている学生向けの「日本語教室」という記事より(日本語検定委員会協力)抜粋しました。敬語として正しいのは、ア、イのどちらでしょうか? 正解は以下から。 正解は「イ:しております」。この記事によると、「させていただく」という言葉を使うためには、以下の3点を満たしている必要があるそうです。 自分のことであること 相手の許可を得て行われていること それに対して感謝するという事実や気持ちがあること” - 敬語は誰に対して使っているかを意識すればOKでそう難しいものではない。「○○大学経済学部に在籍させていた […]
  • 世界の生活費 2012年3月19日
    元記事は比較的「だそうです」が多くてあまり役には立たない印象。 とりあえず海外の生活費について。台湾は家賃数千元からある。食費は一食60元〜100元くらい。1台湾元=2.6円くらいだった。贅沢をすれば青天井だけど。台湾の新卒者の給料が月給で2万元〜6万元くらいだから月2万元あれば生きていけるのだろう。自分の感覚だと2万元はちょっときつい。家賃6000元くらいの部屋で食費が1万元くらいで少し余裕がある程度か。携帯代とか交通費も必要なのでカツカツである。台湾の安い部屋は台所がついていないところが多く自炊は難しい。 中国は一食10元前後で拉面とか牛肉烩饭がある。ちょっと洒落たところだと30元くらいか。南京のアパートだと家賃数百元くらい。たしか上海の平均賃金が台北を超えたそうだ。たぶん今だと平均賃金が日本円で7万円くら […]

Facebook