やっと動いた!
@@ -1,29 +1,6 @@ | ||
1 | 1 | #ifndef L2_L2_H |
2 | 2 | #define L2_L2_H |
3 | 3 | |
4 | -/* | |
5 | - a-z(0-25) + A-Z(26-51) + 0-9(52-61) + .(62) + /(63) + ?(64) = 65 | |
6 | - 1 2 3 4 5 6 | |
7 | - 01234567890123456789012345678901234567890123456789012345678901234 | |
8 | - abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./? | |
9 | -*/ | |
10 | - | |
11 | -#define LIST_FILE "l2.txt" | |
12 | -#define ERR_FILE "error.txt" | |
13 | -#define HIT_FILE "hit-l2.txt" | |
14 | - | |
15 | -#define MAX_TRIPS 8000 /* ハッシュ値ごとの最大トリップ数 */ | |
16 | -#define NKIND (0xfff+1) /* ハッシュ値の最大値 */ | |
17 | -#define L2INDEX( bin ) ((bin & 0xfff0000)>>16) /* ハッシュ値 */ | |
18 | - | |
19 | -struct bintrip { | |
20 | - uint64_t btrip; | |
21 | - uint64_t bmask; | |
22 | -}; | |
23 | - | |
24 | -extern struct bintrip trip[NKIND][MAX_TRIPS]; | |
25 | -extern unsigned int tripNum[NKIND]; | |
26 | - | |
27 | 4 | void readList( void ); |
28 | 5 | void initComm( void ); |
29 | 6 | void checkIt( uint64_t bin, unsigned char *key ); |
@@ -123,6 +123,11 @@ | ||
123 | 123 | return( 0 ); |
124 | 124 | } |
125 | 125 | |
126 | +#if 0 | |
127 | +key_set64( &key64, i, okey[i] = key[i], 0, 0x7F ); | |
128 | +key_set64( &key64, i, key[i], key[i] ^ okey[i], 0 ); | |
129 | +#endif | |
130 | + | |
126 | 131 | /* bitwise key をセット */ |
127 | 132 | static |
128 | 133 | void |
@@ -515,6 +520,8 @@ | ||
515 | 520 | ALU_BITS * kk + k, |
516 | 521 | key[0], key[1], key[2], key[3], key[4], |
517 | 522 | key[5], key[6], key[7], key[8], key[9] ); |
523 | +#endif /* DEBUG */ | |
524 | +#ifdef OLDDEBUG | |
518 | 525 | printf( "%03d : buf %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n", |
519 | 526 | ALU_BITS * kk + k, |
520 | 527 | buf[0], buf[1], buf[2], buf[3], buf[4], |
@@ -0,0 +1,85 @@ | ||
1 | +l2r - 帰ってきた超大量検索実験プログラム | |
2 | + | |
3 | +1. これは何? | |
4 | + | |
5 | + 2003/12 頃に ra8 の数打ちゃ当たる方式をさらに推し進めるべく、大量のターゲッ | |
6 | + トを入れられるトリッパーの実験を行っていました。その時のスレッドはここです。 | |
7 | + | |
8 | + 超大量検索実験 | |
9 | + http://kaze.s41.xrea.com/test/read.cgi/ra8/1072683806/ | |
10 | + | |
11 | + 七文字版l2の仕様を検討するためのスレ | |
12 | + http://kaze.s41.xrea.com/test/read.cgi/ra8/1073801212/ | |
13 | + | |
14 | + 超大量検索のために、ターゲットの文字数水増しや全小文字+全大文字+先頭のみ大 | |
15 | + 文字への自動展開などの機能を実装していました。 | |
16 | + | |
17 | + コンセプトは「とりあえずなんでもかんでもターゲットとして放り込んでしまえ」と | |
18 | + いうものでした。そのため、ターゲットとして無効なものは黙って無視、なにも指定し | |
19 | + なければ勝手に展開しまくりなどの仕様にしていました。 | |
20 | + | |
21 | + いくつかの実験を行った後、超大量検索実験スレの >>107 | |
22 | + >しばらく走らせてみたら | |
23 | + >ヒット数はパターン数に比例するという | |
24 | + >ごくあたりまえのつまらん結果になったわけだ | |
25 | + という結論に達し、飽きてしまいました。 | |
26 | + | |
27 | + そして、2007 年春。「プロジェクト・ナニ屋」に刺激を受けて、l2 を復活させるこ | |
28 | + とにしました。もちろんコア部分は、「まあ、待て屋。」から拝借するかたちで。また | |
29 | + もや「実験プログラム」になっているのは、「Unified Tripper」のための実験だから | |
30 | + です。l2r で実験を行い、それを「Unified Tripper」にフィードバックするのが主目 | |
31 | + 的です。 | |
32 | + | |
33 | +2. 使い方 | |
34 | + | |
35 | + ターゲットは、l2.txt ファイルに記述します。ターゲットとして無効なものが入っ | |
36 | + ていても、黙って無視します。 | |
37 | + | |
38 | + ターゲットは、少なくとも 6 文字以上必要です。6 文字未満のターゲットは、無視 | |
39 | + します。また、6 文字のターゲットについては、7 文字に水増しします。 | |
40 | + (例:123456 -> 123456. と 123456/) | |
41 | + | |
42 | + 正規表現などは、一切使用できません。 | |
43 | + | |
44 | + 展開後のターゲット数換算で、100万語ぐらいまで入るように設計しています。入り | |
45 | + きらなかった場合、以下のようなメッセージを出力して死にます。(和良 | |
46 | + tripv = <zyuusui>, tripCount = 1350866 | |
47 | + trip[11150] overflow. | |
48 | + | |
49 | + コメントも書くことができます。コメントには何が書いてあっても無視します。どこの | |
50 | + 依頼分なのかなどのメモを書くためなどに使えます。行の先頭を # にすれば、その行は | |
51 | + まるごとコメントになります。また、半角のスペースやタブ以降も、コメントとみなしま | |
52 | + す。 | |
53 | + | |
54 | + 何も指定しないと、位置指定なしで記述したまま+全小文字+先頭のみ大文字+全大文 | |
55 | + 字に展開します。例えば、NoTanPe と書いた場合、以下の展開になります。 | |
56 | + -> NoTanPe (位置指定なし) | |
57 | + -> notanpe (位置指定なし) | |
58 | + -> Notanpe (位置指定なし) | |
59 | + -> NOTANPE (位置指定なし) | |
60 | + | |
61 | + 先頭に以下の記号を付加することにより、位置指定や展開の制御も可能です。 | |
62 | + @ : 大小固定 | |
63 | + ^ : 先頭固定 | |
64 | + & : 大小先頭固定 | |
65 | + | |
66 | + 参考のため、サンプルの l2.txt ファイルを同梱しておきます。 | |
67 | + | |
68 | + l2.txt ファイルを作成したら、l2r.exe をダブルクリックして下さい。検索を開始し | |
69 | + ます。ヒットしたトリップは、hit-l2.txt ファイルに出力されます。 | |
70 | + | |
71 | +3. 鳥屋様万歳 | |
72 | + | |
73 | + l2r は、「まあ、待て屋。Rev. 121」をベースに開発しています。面白いおもちゃを | |
74 | + 与えてくれた鳥屋様に無限の感謝を。(和良 | |
75 | + | |
76 | +4. 自分でコンパイルしたい物好きへ | |
77 | + | |
78 | + 一応、Cygwin で動作確認した Makefile も付けておきます。足りないファイルは、 | |
79 | + 自分で「まあ、待て屋。Rev. 121」から持ってきて下さい。 | |
80 | + | |
81 | +5. 文句のあるヤツはいるか? | |
82 | + | |
83 | + 言いたいことがあれば、notanpe@users.sourceforge.jp に送ってこいや! | |
84 | + | |
85 | +以上 |
@@ -0,0 +1,16 @@ | ||
1 | +# 先頭に何も付加しないと、位置指定なしで自動展開 | |
2 | +NoTanPe # -> NoTanPe, notanpe, Notanpe, NOTANPE | |
3 | +Nonotan # -> notanpe, Notanpe, NOTANPE | |
4 | + | |
5 | +# 6 文字のターゲットは、7 文字に水増し | |
6 | +DevilX # -> DevilX., DevilX/, devilx., devilx/, Devilx., Devilx/, | |
7 | + # DEVIlX., DEVIlX/ | |
8 | + | |
9 | +# @ を付けると、位置指定なしで展開なし | |
10 | +@RKyaoob # RKyaoob 位置指定なし完全一致 | |
11 | + | |
12 | +# ^ を付けると、先頭指定で自動展開 | |
13 | +^No11111 # -> no11111, No11111, NO11111 | |
14 | + | |
15 | +# & を付けると、先頭指定で展開なし | |
16 | +&3SHRUNY # 3SHRUNY 先頭完全一致のみ |
@@ -0,0 +1,34 @@ | ||
1 | +CC = gcc | |
2 | +CFLAGS = -O3 -fomit-frame-pointer -Wall | |
3 | +DEFS = -DDEBUG=0 | |
4 | + | |
5 | +# SSE2 と MMX の選択 (どちらか片方だけを有効にする) | |
6 | +DEFS += -msse2 | |
7 | +#DEFS += -DUSE_MMX | |
8 | + | |
9 | +# 速度表示デバッグ | |
10 | +#DEFS += -DSPDEBUG | |
11 | + | |
12 | +# FreeBSD 6.1R だとこれが必要 | |
13 | +#DEFS += -DUSE_REGPARM | |
14 | + | |
15 | +# W32 | |
16 | +DEFS += -mno-cygwin -finput-charset=cp932 -fexec-charset=cp932 | |
17 | + | |
18 | +TARG = l2r.exe | |
19 | +OBJS = l2.o triplib.o mty.o crypt64.o cp932.o desconst.o dt4.o translate.o tr64_mmx.o | |
20 | + | |
21 | +all : $(TARG) | |
22 | + | |
23 | +.c.o : | |
24 | + $(CC) $(CFLAGS) $(DEFS) -c $< | |
25 | + | |
26 | +.S.o : | |
27 | + $(CC) $(CFLAGS) $(DEFS) -c $< | |
28 | + | |
29 | +$(TARG) : $(OBJS) | |
30 | + $(CC) $(CFLAGS) $(DEFS) -o $(TARG) $(OBJS) | |
31 | + strip $(TARG) | |
32 | + | |
33 | +clean : | |
34 | + rm -f $(OBJS) $(TARG) *.bak |
@@ -8,13 +8,38 @@ | ||
8 | 8 | #include <sys/time.h> |
9 | 9 | |
10 | 10 | #include "mtytypes.h" |
11 | +#include "translate.h" | |
11 | 12 | |
12 | 13 | #include "l2.h" |
13 | 14 | #include "triplib.h" |
14 | 15 | |
15 | -#define LOG_LINE_LEN 100 | |
16 | +#define MAX_TRIPS 7615 /* ハッシュ値ごとの最大トリップ数 */ | |
17 | +#define NKIND (0x3fff+1) /* ハッシュ値の最大値 */ | |
18 | +#define L2INDEX( bin ) ((bin & 0x3fff00000)>>20) /* ハッシュ値 */ | |
19 | +/* | |
20 | +NKIND * MAX_TRIPS <= 128M | |
21 | +fffff(20) * 118 = 123731850, 24: 37602 20: 45427 16: 6258 12: 5923 8: 4129 | |
22 | +0ffff(16) * 1903 = 124713105, 24:363592 20:406040 16:226101 12:216980 8: 27771 | |
23 | +07fff(15) * 3807 = 124743969, 24:634769 20:769452 16:430397 12:413364 8: 56438 | |
24 | +03fff(14) * 7615 = 124756545, 24:911322 20:------ 16:------ 12:542854 8:147056 | |
25 | +00fff(12) * 30460 = 124733700, 24:------ 20:------ 16:------ 12:750796 8:383992 | |
16 | 26 | |
27 | +0x3fff000000 | |
28 | +001111 111111 111100 000000 000000 000000 | |
29 | +4 - 6 文字目 | |
30 | +???456???? | |
31 | +1234567??? | |
32 | +???1234567 | |
33 | +最低 7 文字 | |
34 | +*/ | |
35 | + | |
36 | +struct bintrip { | |
37 | + uint64_t btrip; | |
38 | + uint64_t bmask; | |
39 | +}; | |
40 | + | |
17 | 41 | struct bintrip trip[NKIND][MAX_TRIPS]; |
42 | +unsigned int tripNum[NKIND]; | |
18 | 43 | |
19 | 44 | uint64_t bmask[10] = { |
20 | 45 | 0x000000000000003fULL, |
@@ -29,9 +54,13 @@ | ||
29 | 54 | 0x0fc0000000000000ULL |
30 | 55 | }; |
31 | 56 | |
32 | -unsigned int tripNum[NKIND]; | |
33 | 57 | unsigned int kind; |
34 | 58 | unsigned int kindTable[128]; |
59 | + | |
60 | +#define HIT_FILE "hit-l2.txt" | |
61 | +#define LIST_FILE "l2.txt" | |
62 | +#define ERR_FILE "error.txt" | |
63 | + | |
35 | 64 | FILE *hitFile; |
36 | 65 | FILE *logFile; |
37 | 66 | FILE *errFile; |
@@ -40,7 +69,7 @@ | ||
40 | 69 | |
41 | 70 | enum types { ALL, CAP, LEAD, CAPLEAD }; |
42 | 71 | |
43 | -static void hit( uint64_t bin, unsigned char *key ); | |
72 | +static void hit( uint64_t bin, unsigned char *key, uint64_t targ ); | |
44 | 73 | static void bin2trip( uint64_t bin, char *trip ); |
45 | 74 | static void trip2bin( uint64_t *bin, char *trip ); |
46 | 75 | static void signalHandler( int sig ); |
@@ -57,6 +86,21 @@ | ||
57 | 86 | static void hashCheck(); |
58 | 87 | #endif /* HASHCHECK */ |
59 | 88 | |
89 | + | |
90 | +/* | |
91 | + 1 2 3 4 5 6 | |
92 | + 01234567890123456789012345678901234567890123456789012345678901234 | |
93 | + ./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz? | |
94 | + . : 000000 | |
95 | + / : 000001 | |
96 | + 0 : 000010 | |
97 | + 9 : 001011 | |
98 | + A : 001100 | |
99 | + Z : 100101 | |
100 | + a : 100110 | |
101 | + z : 111111 | |
102 | + ? : 1000000 | |
103 | +*/ | |
60 | 104 | static unsigned const char bit2char[] = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; |
61 | 105 | |
62 | 106 | unsigned int tripCount; |
@@ -105,8 +149,12 @@ | ||
105 | 149 | */ |
106 | 150 | *bin = 0; |
107 | 151 | for ( i = strlen( trip ) - 1; i >= 0; i-- ) { |
108 | - for ( j = 0; bit2char[j] != '\0'; j++ ) { | |
109 | - if ( trip[i] == bit2char[j] ) break; | |
152 | + if ( trip[i] == '?' ) { | |
153 | + j = 0; | |
154 | + } else { | |
155 | + for ( j = 0; bit2char[j] != '\0'; j++ ) { | |
156 | + if ( trip[i] == bit2char[j] ) break; | |
157 | + } | |
110 | 158 | } |
111 | 159 | *bin <<= 6; |
112 | 160 | *bin |= j; |
@@ -144,18 +192,19 @@ | ||
144 | 192 | |
145 | 193 | static |
146 | 194 | void |
147 | -hit( bin, key ) | |
195 | +hit( bin, key, targ ) | |
148 | 196 | uint64_t bin; |
149 | 197 | unsigned char *key; |
198 | +uint64_t targ; | |
150 | 199 | { |
151 | - unsigned char res[30], tmpKey[30]; | |
200 | + unsigned char res[30], tres[30], tmpKey[30]; | |
152 | 201 | |
153 | 202 | bin2trip( bin, res ); |
203 | + bin2trip( targ, tres ); | |
154 | 204 | memcpy( tmpKey, key, 30 ); |
155 | 205 | translate( tmpKey, 0, 1 ); |
156 | 206 | |
157 | - putchar( '\n' ); | |
158 | - printf( "◆%s : #%s\n", res, tmpKey ); | |
207 | + printf( "◆%s : #%s (%s)\n", res, tmpKey, tres ); | |
159 | 208 | fprintf( hitFile, "◆%s : #%s\n", res, tmpKey ); |
160 | 209 | fflush( stdout ); |
161 | 210 | fflush( hitFile ); |
@@ -172,7 +221,7 @@ | ||
172 | 221 | unsigned int i; |
173 | 222 | char tripChars[] = "abcdefghijklmnopqrstuvwxyz" |
174 | 223 | "ABCDEFGHIJKLMNOPQRSTUVWXYZ" |
175 | - "0123456789./"; | |
224 | + "0123456789./?"; | |
176 | 225 | char specialChars[] = ".26AEIMQUYcgkosw"; |
177 | 226 | |
178 | 227 | if ( tripLen > 10 ) { |
@@ -371,11 +420,6 @@ | ||
371 | 420 | sprintf( lead2, "???%s%s", lead, delms ); |
372 | 421 | sprintf( upper2, "???%s%s", upper, delms ); |
373 | 422 | mkvarSub( org, lower2, lead2, upper2, vtype ); |
374 | - sprintf( org, "???%s%s", delms, tmpTrip ); | |
375 | - sprintf( lower2, "???%s%s", delms, lower ); | |
376 | - sprintf( lead2, "???%s%s", delms, lead ); | |
377 | - sprintf( upper2, "???%s%s", delms, upper ); | |
378 | - mkvarSub( org, lower2, lead2, upper2, vtype ); | |
379 | 423 | } |
380 | 424 | } |
381 | 425 | } |
@@ -489,10 +533,10 @@ | ||
489 | 533 | mkvarSub( org, lower2, lead2, upper2, vtype ); |
490 | 534 | } |
491 | 535 | break; |
492 | - #ifdef NOTDEF | |
493 | 536 | case 6: |
494 | 537 | mkvarSub2( tmpTrip, lower, lead, upper, vtype, 1 ); |
495 | 538 | break; |
539 | + #ifdef NOTDEF | |
496 | 540 | case 5: |
497 | 541 | mkvarSub2( tmpTrip, lower, lead, upper, vtype, 2 ); |
498 | 542 | break; |
@@ -604,20 +648,13 @@ | ||
604 | 648 | unsigned char *key; |
605 | 649 | { |
606 | 650 | int i; |
607 | - unsigned int kind; | |
651 | + unsigned long kind; | |
608 | 652 | |
609 | 653 | kind = L2INDEX( bin ); |
610 | 654 | for ( i = 0; i < tripNum[kind]; i++ ) { |
611 | 655 | if ( ((bin&trip[kind][i].bmask) == trip[kind][i].btrip) ) { |
612 | - hit( bin, key ); | |
656 | + hit( bin, key, trip[kind][i].btrip ); | |
613 | 657 | return; |
614 | 658 | } |
615 | 659 | } |
616 | - kind = 64; | |
617 | - for ( i = 0; i < tripNum[kind]; i++ ) { | |
618 | - if ( ((bin&trip[kind][i].bmask) == trip[kind][i].btrip) ) { | |
619 | - hit( bin, key ); | |
620 | - return; | |
621 | - } | |
622 | - } | |
623 | 660 | } |