找回密码
 点一下
楼主: KickedByOthers

[Flash游戏]看看谁的名字更厉害!

  [复制链接]
发表于 2007-1-2 14:05:40 | 显示全部楼层

终于将人物属性计算部分给破译了!

终于将人物属性计算部分给破译了!

先记住这两个辅助函数的作用:
  1.     // 从位串a中提取若干位
  2.     function gbt(a, b) {
  3.         if (a.length < b) { // 在计算人物属性时不会超过128位的
  4.             if (users[0].hash < users[1].hash) {
  5.                 to_ary = to_ary.concat(md5.md5array(users[0].uname + users[1].uname));
  6.                 to_ary = to_ary.concat(md5.md5array(users[1].uname + users[0].uname));
  7.                 to_ary = to_ary.concat(md5.md5array(users[0].uname + users[1].hash));
  8.                 to_ary = to_ary.concat(md5.md5array(users[1].hash + users[0].uname));
  9.             } else {
  10.                 to_ary = to_ary.concat(md5.md5array(users[1].uname + users[0].uname));
  11.                 to_ary = to_ary.concat(md5.md5array(users[0].uname + users[1].uname));
  12.                 to_ary = to_ary.concat(md5.md5array(users[1].uname + users[0].hash));
  13.                 to_ary = to_ary.concat(md5.md5array(users[0].hash + users[1].uname));
  14.              }
  15.             a = to_ary;
  16.         }
  17.         var sum = 0;
  18.         var f = 1;
  19.         var I = 0;
  20.         while (I < b) {
  21.             sum = _sum + (a.shift() * f);
  22.             f = f * 2;
  23.             I++;
  24.         }
  25.         return sum;
  26.     }
  27.     // 从位串a中提取若干位(比例方式)
  28.     function gbr(a, b) {
  29.         return (gbt(a, b) / (Math.pow(2, b) - 1));
  30.     }
复制代码

人物属性计算:
  1.     function inituser() {
  2.         /* 基本属性 */
  3.         var Idx = 0;
  4.         while (Idx < 2) {
  5.             users[Idx].uname = users[Idx].uname_txt.text;
  6.             users[Idx].un = ("<FONT COLOR=\\'#000099\\'>[" + users[Idx].uname) + "]</FONT>";
  7.             users[Idx].hash = md5.hash(users[Idx].uname);
  8.             users[Idx].hash_ary = md5.md5array(users[Idx].uname);
  9.             var fixspd = 0; // 最大值: 0.1 + 0.1*0.9 + 0.1*0.9^2 ... = 0.999998609915477
  10.             var f = 0.1;
  11.             var I = 0;
  12.             while (I < 128) {
  13.                 fixspd = fixspd + (f * users[Idx].hash_ary[I]);
  14.                 f = f * 0.9;
  15.                 I++;
  16.             }
  17.             gbt(users[Idx].hash_ary, 55); // 0+55 = 55
  18.             users[Idx].zg = new Array (2);
  19.             users[Idx].zp = new Array (7);
  20.             I = 0;
  21.             while (I < 8) {
  22.                 users[Idx].zp[I] = 0;
  23.                 I++;
  24.             }
  25.             users[Idx].zg[0] = gbt(users[Idx].hash_ary, 3); // 55+3 = 58
  26.             users[Idx].zg[1] = gbt(users[Idx].hash_ary, 3); // 58+3 = 61
  27.             users[Idx].zp[users[Idx].zg[0]] = gbt(users[Idx].hash_ary, 4) + 1; // 61+4 = 65
  28.             var newzg1 = gbt(users[Idx].hash_ary, 4) + 1; // 65+4 = 69
  29.             if (users[Idx].zg[0] == users[Idx].zg[1]) {
  30.                 if (users[Idx].zp[users[Idx].zg[1]] < newzg1) {
  31.                     users[Idx].zp[users[Idx].zg[1]] = newzg1;
  32.                 }
  33.             } else {
  34.                 users[Idx].zp[users[Idx].zg[1]] = newzg1;
  35.              }
  36.             users[Idx].mhp = 145 + gbt(users[Idx].hash_ary, 8); // 69+8 = 77
  37.             gbt(users[Idx].hash_ary, 1); // 77+1 = 78
  38.             users[Idx].atk = 37 + gbt(users[Idx].hash_ary, 6);
  39.             users[Idx].def = 37 + gbt(users[Idx].hash_ary, 6);
  40.             users[Idx].spd = 37 + gbt(users[Idx].hash_ary, 6);
  41.             users[Idx].acr = 37 + gbt(users[Idx].hash_ary, 6);
  42.             users[Idx].luk = 37 + gbt(users[Idx].hash_ary, 6); // 78 + 6*5 = 108
  43.             users[Idx].cdef = 0;
  44.             users[Idx].cbit = 0;
  45.             users[Idx].cpos = 0;
  46.             users[Idx].cup = 0;
  47.             users[Idx].ccrs = 0;
  48.             users[Idx].ccnt = 0;
  49.             users[Idx].cang = 0;
  50.             users[Idx].cslp = 0;
  51.             if (gbt(users[Idx].hash_ary, 2) == 0) {
  52.                 users[Idx].cdef = 1;
  53.             }
  54.             if (gbt(users[Idx].hash_ary, 2) == 1) {
  55.                 users[Idx].cbit = 1;
  56.             }
  57.             if (gbt(users[Idx].hash_ary, 2) == 0) {
  58.                 users[Idx].cpos = 1;
  59.             }
  60.             if (gbt(users[Idx].hash_ary, 2) == 3) {
  61.                 users[Idx].cup = 1;
  62.             }
  63.             if (gbt(users[Idx].hash_ary, 2) == 0) {
  64.                 users[Idx].ccrs = 1;
  65.             }
  66.             if (gbt(users[Idx].hash_ary, 2) == 2) {
  67.                 users[Idx].ccnt = 1;
  68.             }
  69.             if (gbt(users[Idx].hash_ary, 2) == 1) {
  70.                 users[Idx].cang = 1;
  71.             }
  72.             if (gbt(users[Idx].hash_ary, 2) == 1) { // 108 + 2*8 = 124
  73.                 users[Idx].cslp = 1;
  74.             }
  75.             users[Idx].matk = 0;
  76.             users[Idx].magic = "";
  77.             users[Idx].spdup = 0;
  78.             users[Idx].defup = 0;
  79.             trace (((((((((users[Idx].uname + users[Idx].zg[0]) + "(") + users[Idx].zp[users[Idx].zg[0]]) + ")") + users[Idx].zg[1]) + "(") + users[Idx].zp[users[Idx].zg[1]]) + ")") + users[Idx].cdef);
  80.             I++;
  81.         }
  82.         /* 计算装备的效果。略 */
  83.         /* 修正&显示 */
  84.         Idx = 0;
  85.         while (Idx < 2) {
  86.             users[Idx].sum = (((((users[Idx].mhp / 4) + users[Idx].atk) + users[Idx].def) + users[Idx].spd) + users[Idx].acr) + users[Idx].luk;
  87.             users[Idx].sum = users[Idx].sum / 20;
  88.             tskillsum = ((((((users[Idx].cdef + users[Idx].cbit) + users[Idx].cpos) + users[Idx].cup) + users[Idx].ccrs) + users[Idx].ccnt) + users[Idx].cang) + users[Idx].cslp;
  89.             tskilldisp = ((((((("" + users[Idx].cdef) + users[Idx].cbit) + users[Idx].cpos) + users[Idx].cup) + users[Idx].ccrs) + users[Idx].ccnt) + users[Idx].cang) + users[Idx].cslp;
  90.             users[Idx].sum = users[Idx].sum + tskillsum;
  91.             tface = "start2";
  92.             if (users[Idx].sum < 19) {
  93.                 tface = "start1";
  94.             }
  95.             if (users[Idx].sum > 25) {
  96.                 tface = "start3";
  97.             }
  98.             users[Idx].face.gotoAndStop(tface);
  99.             users[Idx].disp = (((((((((((users[Idx].uname + "  HP:") + Math.ceil(users[Idx].mhp)) + " 攻:") + Math.ceil(users[Idx].atk)) + " 防:") + Math.ceil(users[Idx].def)) + " 速:") + Math.ceil(users[Idx].spd)) + " 技:") + Math.ceil(users[Idx].acr)) + " 运:") + Math.ceil(users[Idx].luk);
  100.             if (users[Idx].item != "") {
  101.                 users[Idx].disp = users[Idx].disp + ("  装备:" + users[Idx].item);
  102.             }
  103.             if ((gversion > 1.05) && (users[Idx].uname.indexOf(fjjstr) > -1)) {
  104.                 users[Idx].fjj = 1;
  105.                 users[Idx].mhp = Math.floor(users[Idx].mhp * 0.8);
  106.             } else {
  107.                 users[Idx].fjj = 0;
  108.              }
  109.             users[Idx].mhp = Math.ceil(users[Idx].mhp);
  110.             users[Idx].hp = users[Idx].mhp;
  111.             users[Idx].hp_txt.text = users[Idx].hp;
  112.             users[Idx].mhp_txt.text = users[Idx].mhp;
  113.             users[Idx].atk_txt.text = Math.ceil(users[Idx].atk);
  114.             users[Idx].def_txt.text = Math.ceil(users[Idx].def);
  115.             users[Idx].spd_txt.text = Math.ceil(users[Idx].spd);
  116.             users[Idx].acr_txt.text = Math.ceil(users[Idx].acr);
  117.             users[Idx].luk_txt.text = Math.ceil(users[Idx].luk);
  118.             users[Idx].atk_txt.textColor = 0;
  119.             users[Idx].def_txt.textColor = 0;
  120.             users[Idx].spd_txt.textColor = 0;
  121.             users[Idx].acr_txt.textColor = 0;
  122.             users[Idx].luk_txt.textColor = 0;
  123.             users[Idx].spd = users[Idx].spd + fixspd;
  124.             users[Idx].acr = users[Idx].acr / 100;
  125.             users[Idx].luk = users[Idx].luk / 100;
  126.             I++;
  127.         }
  128.         if (users[1].spd == users[0].spd) {
  129.             if (users[0].uname > users[1].uname) {
  130.                 users[0].spd = users[0].spd + 0.001;
  131.             } else {
  132.                 users[1].spd = users[1].spd + 0.001;
  133.              }
  134.         }
  135.     }
复制代码

属性说明:
.mhp:[命]生命
.atk:[攻]攻击
.def:[防]防御
.spd:[速]速度
.acr:[技]命中
.luk:[运]幸运
.cdef:[抗]防御
.cbit:[咬]发狂了,咬一口
.cpos:[毒]投毒
.cup :[翻]垂死抗争。属性提高40%
.ccrs:[咒]诅咒。属性降低20%
.ccnt:[绊]绊倒
.cang:[暴]按在地上一顿暴打
.cslp:[晕]打晕了,趁机恢复了体力
连击只与速度有关

所以最强的MD5为:
0~55位:(任意)
56~69位:用于计算zg,具体效果不清楚
70~77位:全为1。mhp=145+255 = 400
78位:(任意)
79~84位:全为1。atk=37+63=100
85~90位:全为1。def=37+63=100
91~96位:全为1。spd=37+63=100
97~102位:全为1。acr=37+63=100
103~108位:全为1。luk=37+63=100
109~110位:为0
111~112位:为1
113~114位:为0
115~116位:为3
117~118位:为0
119~120位:为2
121~122位:为1
123~124位:为1
125~127位:(任意)

即:
000000000000000030BFFFFFFFFFFF0F:掩码
________________3_BFFFFFFFFD32_5:匹配
回复

使用道具 举报

发表于 2007-1-2 14:07:08 | 显示全部楼层
555
偶想知道怎么破译的...

可以做一个程序来穷举料...
回复

使用道具 举报

发表于 2007-1-2 14:13:32 | 显示全部楼层
用“Action Script Viewer5.01”
能识别出绝大多数的代码
再人工分析变量
回复

使用道具 举报

发表于 2007-1-2 14:24:04 | 显示全部楼层
555。
飞雪大人已经帮910大人改好密码老。
现在的新密码素当前这个MJ的密码。
回复

使用道具 举报

发表于 2007-1-2 14:27:50 | 显示全部楼层
555...5.01版果然强大...
回复

使用道具 举报

发表于 2007-1-2 14:30:14 | 显示全部楼层
910大人和白银大人帮偶看一下到底哪里出问题老吧。
5555。
回复

使用道具 举报

发表于 2007-1-2 14:38:35 | 显示全部楼层
910大人...貌似掩码和匹配有点问题...
偶根据那些数据算出来滴素
掩码:00000000 00000000 03FDFFFF FFFFFFF8
匹配:00000000 00000000 03FDFFFF FFF89938

PS: 某A滴Java版调试中...
回复

使用道具 举报

发表于 2007-1-2 15:11:59 | 显示全部楼层
引用第146楼白银の式神2007-01-02 14:38发表的:
910大人...貌似掩码和匹配有点问题...
偶根据那些数据算出来滴素
掩码:00000000 00000000 03FDFFFF FFFFFFF8
匹配:00000000 00000000 03FDFFFF FFF89938

.......


我算错了一位
回复

使用道具 举报

发表于 2007-1-2 15:17:25 | 显示全部楼层
555...解析失败...
回复

使用道具 举报

发表于 2007-1-2 15:18:53 | 显示全部楼层
555。555。555。555。
回复

使用道具 举报

发表于 2007-1-2 16:46:19 | 显示全部楼层
终于完美破解...
910大人弄错料一件事...
恩恩...整理中...
回复

使用道具 举报

发表于 2007-1-2 17:18:01 | 显示全部楼层
好吧 ...  作废料...
回复

使用道具 举报

发表于 2007-1-2 17:30:38 | 显示全部楼层
厄,按那最强的id就能计算啦?
回复

使用道具 举报

发表于 2007-1-2 17:38:11 | 显示全部楼层
好吧 ...  作废料...
回复

使用道具 举报

发表于 2007-1-2 19:51:20 | 显示全部楼层
好吧 ...  作废料...
回复

使用道具 举报

发表于 2007-1-2 19:56:26 | 显示全部楼层
本楼已经达到世界第5高楼了
由两位仙人总工程师主盖
回复

使用道具 举报

发表于 2007-1-2 20:31:03 | 显示全部楼层
引用第151楼白银の式神2007-01-02 17:18发表的:
910大人研究的结果关于人物属性在md5array中滴位置基本素正确滴...
但素弄错料一件事...hash_ary不是那个id的md5值,而是一个由"0","1"组成的数组

经研究,md5.hash()才素返回正确滴md5字符串
而md5.md5array()素将core_md5()返回滴4个值ABCD处理成01串
.......


我调试了一下午才终于发现这个Bug
正想发帖更正
没想到被你抢先了
555

改正后的:
// 作废
回复

使用道具 举报

发表于 2007-1-2 20:35:00 | 显示全部楼层
引用第154楼白银の式神2007-01-02 19:51发表的:
好吧...
然后又发现一个更简单的计算属性值滴方法...

Hp=((C>>5)&0xff)+145
Atk=((C>>14)&0x3f)+37
.......

我是写了一个这样的函数:
  1. private int GetBits(UInt32[] x, int iStart, int iSize)
  2. {
  3.     Debug.Assert(x != null);
  4.     Debug.Assert(iStart>0);
  5.     Debug.Assert(iSize>0);
  6.     int Idx = iStart / 32;
  7.     int n = iStart % 32;
  8.     UInt32 t = x[Idx];
  9.     t >>= n;
  10.     int m = 32-n;
  11.     if (iSize > m)
  12.     {
  13.         t |= x[Idx+1] << m;
  14.     }
  15.     if (iSize < 32)
  16.     {
  17.         t &= (1U<<iSize) - 1;
  18.     }
  19.     return (int)t;
  20. }
复制代码

然后这样计算属性:
  1. p.mhp = 145 + GetBits(h, 69, 8);
  2. p.atk = 37 + GetBits(h, 78, 6);
  3. p.def = 37 + GetBits(h, 84, 6);
  4. p.spd = 37 + GetBits(h, 90, 6);
  5. p.acr = 37 + GetBits(h, 96, 6);
  6. p.luk = 37 + GetBits(h, 102, 6);
复制代码
回复

使用道具 举报

发表于 2007-1-2 20:42:50 | 显示全部楼层
以下是刚穷举的以zyl910结尾+4个ascII字符的平均属性96以上滴ID(HP/4)...
实力评估都极其BT,有超过99%的...
全极品的太难找,事实上平均属性98以上就找不到了...
  1. !"oBzyl910
  2. !/22zyl910
  3. !Nuozyl910
  4. $H0tzyl910
  5. %l:Vzyl910
  6. '9b1zyl910
  7. )R?ozyl910
  8. *n5;zyl910
  9. +5VBzyl910
  10. ,}(yzyl910
  11. -X[ozyl910
  12. -y3pzyl910
  13. -{tszyl910
  14. .;+ezyl910
  15. /2trzyl910
  16. /KqQzyl910
  17. /`QUzyl910
  18. 1%wnzyl910
  19. 2Z,Qzyl910
  20. 3!*Ozyl910
  21. 3Ijlzyl910
  22. 4c6Zzyl910
  23. 5exYzyl910
  24. 5snNzyl910
  25. 6Gzvzyl910
  26. 7$cAzyl910
  27. ;x"hzyl910
  28. ;{.kzyl910
  29. <%dgzyl910
  30. <5bQzyl910
  31. <@CCzyl910
  32. =1L0zyl910
  33. =Rn#zyl910
  34. @!CGzyl910
  35. @hO*zyl910
  36. ARAozyl910
  37. D!Vlzyl910
  38. DZJUzyl910
  39. D_s`zyl910
  40. EVwdzyl910
  41. E]_+zyl910
  42. Eh:]zyl910
  43. Ehmwzyl910
  44. G>]Wzyl910
  45. HZW*zyl910
  46. ICbjzyl910
  47. IJ`Pzyl910
  48. J)cPzyl910
  49. J6I;zyl910
  50. KR79zyl910
  51. L3;zyl910
  52. O$d:zyl910
  53. O-9Ezyl910
  54. O^?]zyl910
  55. Q-8zzyl910
  56. QHk~zyl910
  57. Q`Huzyl910
  58. Rc_]zyl910
  59. Rw7Qzyl910
  60. SaC`zyl910
  61. U+V%zyl910
  62. UZZyzyl910
  63. Uf&Czyl910
  64. V]N-zyl910
  65. W>?xzyl910
  66. WR5Pzyl910
  67. Y9rDzyl910
  68. Y>rQzyl910
  69. Yi,(zyl910
  70. YniTzyl910
  71. Z?u!zyl910
  72. Znffzyl910
  73. [4'*zyl910
  74. [U.Ezyl910
  75. ^ZUyzyl910
  76. ^Amzyl910
  77. `$19zyl910
  78. ``l+zyl910
  79. a<l4zyl910
  80. b&~nzyl910
  81. d.&gzyl910
  82. d4C!zyl910
  83. d8jNzyl910
  84. dHzkzyl910
  85. ect!zyl910
  86. eef6zyl910
  87. e|k}zyl910
  88. fFtozyl910
  89. g"w$zyl910
  90. gS0pzyl910
  91. grj}zyl910
  92. jr]rzyl910
  93. kNL6zyl910
  94. l#,nzyl910
  95. mGU)zyl910
  96. n"u"zyl910
  97. tJD.zyl910
  98. tw";zyl910
  99. w.;Dzyl910
  100. w>.ezyl910
  101. x^eezyl910
  102. xaNyzyl910
  103. }5iyzyl910
  104. }DcZzyl910
  105. }O"ozyl910
  106. ~$3-zyl910
  107. aV{zyl910
复制代码
回复

使用道具 举报

发表于 2007-1-2 20:44:38 | 显示全部楼层
cgfan上面的前缀只能是汉字,最多两个

现在正在研究它具体的编码范围
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-6-27 03:10 , Processed in 0.109782 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表