1
pyengwoei OP 或者把这段 JS 翻译成通俗一点,也行,实在看不太明白
|
2
xcatliu 2016-06-30 16:16:59 +08:00
可以先排版好么……
|
3
pyengwoei OP var a = "60o0749460o07134482";
//var b= parseInt(a, 10); G = function(a, b) { var c = function(a) { for (var b, c = [], d = 3, e = function(a) { return a >= "0" && "9" >= a ? parseInt(a, 10) : a.charCodeAt(0) - "a".charCodeAt(0) + 10 }, f = function(a, b) { var c, d, f, g, h; //c =e 函数 return c = e(a[b]), d = e(a[b + 1]), d = 15 & d, f = (12 & c) >> 2, g = (2 & c) > 0, h = (1 & c) > 0, { value: d, //d=e 函数 winner: f,// f = (12 & c) playerPair: g, //g=(2&c) bankerPair: h // h = (1 & c) > 0 } }, g = 0; g < a.length - 1; g += 2) b = f(a, g), b.winner !== d ? c.push(b) : c = []; return c }; if (!a || void 0 === b) return []; switch (a) { case "7bal": case "bal": return c(b); case "rol": case "rofl": return b.split(";").map(function(a) { return { result: a } }); default: return b } } document.write(G("bal",a)); |
4
pyengwoei OP 放到 IDE 里面看 就不会乱 这里排好了发出来 又乱了
|
5
whnzy 2016-06-30 16:28:57 +08:00
用 ``` <pre> ```试试
|
6
calabashfox 2016-06-30 16:31:03 +08:00
因为做过代码混淆了。。能理清楚也是厉害
|
8
pyengwoei OP @calabashfox 没有混淆,只是函数名都是 一个字母放在 IDE 里面逻辑很清楚的
|
9
ynyounuo 2016-06-30 16:39:20 +08:00 1
|
13
zrp1994 2016-06-30 16:51:20 +08:00
|
14
maijiawei 2016-06-30 16:58:09 +08:00
我试着帮你翻译看看
|
18
jeremaihloo 2016-06-30 17:09:53 +08:00
强迫症看到你这代码乱的心里好难受,为什么不格式好
|
19
maijiawei 2016-06-30 17:10:39 +08:00
这段代码哪里的,功能是什么,混淆过,这代码功能应该是加密解密的?
|
20
pyengwoei OP |
22
maijiawei 2016-06-30 17:16:29 +08:00
var c = function(a)
{ for (var b, c = [], d = 3, e = function(a) { return a >= "0" && "9" >= a ? parseInt(a, 10) : a.charCodeAt(0) - "a".charCodeAt(0) + 10 }, f = function(a, b) { var c, d, f, g, h; //c =e 函数 return c = e(a[b]), d = e(a[b + 1]), d = 15 & d, f = (12 & c) >> 2, g = (2 & c) > 0, h = (1 & c) > 0, { value: d, //d=e 函数 winner: f,// f = (12 & c) playerPair: g, //g=(2&c) bankerPair: h // h = (1 & c) > 0 } }, g = 0; g < a.length - 1; g += 2) b = f(a, g), b.winner !== d ? c.push(b) : c = []; return c }; 解密的过程就这一段咯。变量一个一个对上,很好理解 |
24
pyengwoei OP @maijiawei 是的,主要是 JS 这个写法太票 函数作为 for 循环变量,看不太明白,自己试着改成 C#最后带入 var a = "60o0749460o07134482"; 都解密不成功,解密成功会返回
value: d, winner: f, playerPair: bankerPair: 这个 object |
26
ToughGuy 2016-06-30 17:47:47 +08:00 1
base64 解码下, 我懒得处理对齐。
不是程序, 狗逼运维一个, 你对下程序结果和 JS 是否一致。 IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgppbXBvcnQganNv bgoKCmRlZiB0b19pbnQodmFsMSk6CiAgICB0cnk6CiAgICAgICAgcmV0dXJuIGludCh2YWwxKQog ICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgcmV0dXJuIG9yZCh2YWwxKSAtIG9yZCgnYScp ICsgMTAKCgpkZWYgY2FsYyhhLCBiKToKICAgIGMgPSB0b19pbnQoYVtiXSkKICAgIGQgPSB0b19p bnQoYVtiICsgMV0pCiAgICBlID0gMTUgJiBkCiAgICBmID0gKDEyICYgYykgPj4gMgogICAgZyA9 ICgyICYgYykgPiAwCiAgICBoID0gKDEgJiBjKSA+IDAKCiAgICByZXR1cm4gewogICAgICAgICd2 YWx1ZSc6IGUsCiAgICAgICAgJ3dpbm5lcic6IGYsCiAgICAgICAgJ3BsYXllclBhaXInOiBnLAog ICAgICAgICdiYW5rZXJQYWlyJzogaAogICAgfQoKCmRlZiBnKHgsIHkpOgogICAgZGVmIGIoYyk6 CiAgICAgICAgZCA9IFtdCiAgICAgICAgZSA9IDMKICAgICAgICBmb3IgZiBpbiByYW5nZSgwLCBs ZW4oYykgLSAxLCAyKToKICAgICAgICAgICAgZyA9IGNhbGMoYywgZikKICAgICAgICAgICAgaWYg Z1snd2lubmVyJ10gIT0gZToKICAgICAgICAgICAgICAgIGQuYXBwZW5kKGcpCiAgICAgICAgICAg IGVsc2U6CiAgICAgICAgICAgICAgICBkID0gW10KICAgICAgICByZXR1cm4gZAoKICAgIHJldHVy biB7CiAgICAgICAgJzdiYWwnOiB5LAogICAgICAgICdiYWwnOiBiKHkpLAogICAgICAgICdyb2wn OiB5LAogICAgICAgICdyb2ZsJzogW3sncmVzdWx0Jzogen0gZm9yIHogaW4geS5zcGxpdCgnOycp XSwKICAgIH0uZ2V0KHgsIHkpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHMgPSAn NjBvMDc0OTQ2MG8wNzEzNDQ4MicKICAgIHByaW50IGpzb24uZHVtcHMoZygnYmFsJywgcyksIGlu ZGVudD00KQo= |
27
pyengwoei OP @ToughGuy V2EX 还是有高手的,太感谢了。我看了但是还没测试,等程序回来了测试成功,我私信你,你方便给我一个你支付宝么
|
28
ToughGuy 2016-06-30 18:02:29 +08:00 1
不用支付宝啦, 我就满足下自己的好奇心, 代码有没有 BUG 我还不知道呢。
|
30
995573753 2016-06-30 18:16:56 +08:00
要是不清楚的话,参考下这个:
http://www.cnblogs.com/yjmyzz/p/3359204.html |
31
xqin 2016-06-30 19:22:57 +08:00 1
@ToughGuy python 代码有 bug.
对 switch 那里翻译的不对. 7bal/bal 要执行一样的操作 rol 和 rofl 也是执行同样的操作 而现在的代码不是. ``` return { '7bal': y, 'bal': b(y), 'rol': y, 'rofl': [{'result': z} for z in y.split(';')], }.get(x, y) ``` |
32
omengye 2016-06-30 20:39:41 +08:00 1
写了个 java 版的,这个思路应该会清晰点
https://gist.github.com/omengye/eb67eea5989faab33f041315a66fa5f4 |
33
anoymoux 2016-06-30 20:41:01 +08:00
百家乐? 黑产?
|
34
gleox 2016-06-30 23:48:23 +08:00 1
不想写代码了,我直接阐述原理吧。
'bal'作为算法的决策条件,没什么可说的。选择的算法如下: ** 把最外层字符串变量 a 的值按 2 个字符拆分,然后解析到最后结果数组的每个对象。 先说下 for 循环里 e 函数 这个函数接受一个字符,把字符转换数字,内部会作如下判断 * 如果字符是 0-10 的数字字符串,转到原数字 * 如果不是 0-10 的数字字符串,取字符的 ASSCI 码减去 a 的 ASSCI 码,再加上 10 返回,公式 ``` // ASSCI(str) - 87 -- a 的 ASSCI 码是 97 ASSCI(str) - ASSCI(a) + 10 ``` 回到刚才说到的 2 个字符解析。 for 循环会把 2 个字符的依次传给上面提到的函数 e ,把值保存到两个变量 c,d ``` c = 第 1 个字符转换的数字 d = 第 2 个字符转换的数字 ``` 接着,用变量 d 与 15 做二进制与运算, 15 的二进制是 4 个 1(1111),也就是取 d 的最后 4 个二进制位。 把这个 4 个二进制代表的值赋值给最后结果对象的 value 属性 用变量 c 与 12 , 2 , 1 这 3 个数字作二进制与运算,这 3 个数字的二进制分别是'1100'、 '10'、'1'。 * 用 12 和 c 作与运算后又把数字向右偏移了 2 位,其实就是取数字的第 3 、 4 两个二进制位, 把这两个二进制位表示的值赋值给最后对象的 winner 属性 * 用 2 和 c 作与运算后,其实取出了数字的第 2 个二进制位,然后判断是否大于 0(其实就是第 2 个二进制位有值就表示 true),结果赋值给最后对象的 playerPair * 用 1 和 c 作运算,原理同上面的 2 一样,只是取得是数字的第 1 个二进制位,结果赋值给对面的 bankerPair 属性 上面的对象属性解析对应如下: value: 取 2 个字符的第 2 个字符的数值的第 1 到第 4 的二进制位 winner: 取 2 个字符的第 1 个字符的数值的第 3 、 4 两个二进制位 playerPair: 取 2 个字符的第 1 个字符的数值的第 2 个二进制位,如果有值就是 true bankerPair :同 playerPair 取值很相似,区别在于取值位置是第 1 个二进制位 在 for 循环里,对象创建完成后,用对象的 winner 属性和数字 3 作比较。 * 如果等于 3 ,就重置最后的结果数组 * 如果不等于 3 ,就把对象压栈到最后的结果数组的最后一位 循环完后,返回对象数组。 总算写完了,想的时候没猜到写这么多。希望了帮到露珠 :) |
41
jsq2627 2016-07-01 23:51:45 +08:00
|