javascript - 淘宝新版UA文件中字符串‘JR;ZNRC]Y”yQD”PVR$’用正则表达式替换其他内容时的"奇怪"现象
迷茫
迷茫 2017-04-11 10:16:11
0
1
538
目前淘宝最新的UA文件是https://af.alicdn.com/js/cj/64.js,使用的混淆方法之一是字符串 字面量混淆:首先提取全部的字符串,在全局作用域创建一个字符串数组,同时转义字符增大阅 读难度,然后将字符串出现的地方替换成为数组元素的引用。 在C#中用正则表达式尝试反混淆时该文件时发现字符串数组r[1163]对应的字符串 ‘JR;ZNRC]Y”yQD”PVR$’,而用正则表达式去替换r[1163]时,结果与想象中的不一致。以下代码中,第一段代码是 在64.js中截取的代码;第二段代码是可以在C#中执行的验证代码。 更详细的对64.js文件反混淆的方案请参考: [C# 正则表达式实现对淘宝 UA 文件初步反混淆][1] 这应该是淘宝设置的防止反混淆的手段,那么请问它的原理是什么?谢谢各位大神的指点。
//在64.js中截取的代码//////////////////////////////// w = g ? new r[410](r[1161]) : new r[410](e + ua), b = w[r[550]](d[C]); return d[m] && d[m](p, a = function () { d[t(r[1163])](p, a, h), o() }, h), g && d[r[849]](y, a = function () { new r[410](r[1164])[r[550]](d[C]) && (d[t(r[1165])](y, a), o()) }), //在64.js中截取的代码////////////////////////////////
//在C#中可执行的验证代码//////////////////////////// string tmpStr0 = "contentOut(r[1163])strArray"; string tmpStr = "'JR;ZNRC]Y\"yQD\"PVR$'"; Regex reg1 = new Regex(@"r\[1163\]"); string tmpStr1 = reg1.Replace(tmpStr0, tmpStr);//contentOut('JR;ZNRC]Y"yQD"PVR)strArray)strArray string tmpStr2 = tmpStr0.Replace("r[1163]", tmpStr);//contentOut('JR;ZNRC]Y"yQD"PVR$')strArray //在C#中可执行的验证代码////////////////////////////
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

Antworte allen (1)
阿神

C#的正则表达式中,$是一个特殊的字符,具体请参考:https://msdn.microsoft.com/en-us/library/ewy2t5e0.aspx#AfterMatch。
$' 替换将匹配的字符串替换为匹配项后的整个输入字符串。它将在删除匹配的文本时重复匹配项后的输入字符串。匹配文本前面的任何文本在结果字符串中保持不变。

    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!