赞
踩
声明:案例分析仅供学习交流使用,勿用于任何非法用途。如学习者进一步逆向并对版权方造成损失,请自行承担法律后果,本人概不负责。
首先查看登录时的POST请求,发现加密字段k。
通过请求调用可以定位到高度可疑的 secendVerify() 函数。
格式化后查看,找到了指纹参数来源。
fingerprint 由下面相关函数赋值。
setFingerprint: function() { var _this = this; recognition.get({ preprocessor: function(key, value) { var icCache = $.cookie('ICCACHE'); if (key === 'plugins' && icCache) { return value + ',' + icCache; } return value; } }, function(components) { var fp = recognition.x64hash128(components.map(function(pair) { //这里是关键 return pair.value; }).join(), 31); var secretCode = ''; switch (fcacheType) { case 'A': secretCode = _this.handleCode(window.btoa(fp), 'int', '+', 0, 3) + '@' + fp + '*' + _this.handleCode(md5(fp), 'en', '+', 0, 5); break; case 'B': secretCode = _this.handleCode(md5(fp), 'en', '+', 0, 5) + '#' + fp + '*' + _this.handleCode(sha256(fp), 'int', '-', 0, 5); break; case 'C': secretCode = _this.handleCode(sha256(fp), 'en', '-', 0, 7) + '-' + _this.handleCode(md5(fp), 'int', '+', 0, 4) + fp; break; case 'D': secretCode = fp + '+' + _this.handleCode(md5(fp), 'en', '-', 0, 4) + _this.handleCode(sha256(fp), 'int', '+', 0, 3); break; case 'E': secretCode = _this.handleCode(fp, 'en', '+', 0, 2) + '%' + _this.handleCode(sha256(fp), 'int', '+', 0, 2) + fp; break; case 'F': secretCode = _this.handleCode(sha256('8f0' + fp + 'b7a'), 'mix', '-', 7, 8) + fp + _this.handleCode(md5('f16s' + fp + 'd'), 'mix', '+', 5, 8); break; case 'G': secretCode = _this.handleCode(sha224('9a1' + fp + 'q1'), 'mix', '+', 10, 9) + _this.handleCode(md5('e5cv' + fp + 'v1'), 'mix', '-', 7, 8) + fp; break; case 'H': secretCode = _this.handleCode(md5('eds' + fp + '874'), 'mix', '-', 4, 7) + fp + _this.handleCode(sha384('t3b' + fp + 'fe4'), 'mix', '+', 6, 8); break; case 'I': secretCode = _this.handleCode(sha224('11a' + fp + 'q1aa'), 'mix', '-', 12, 15) + fp + _this.handleCode(md5('r124' + fp + 'v'), 'mix', '-', 8, 7); break; case 'J': secretCode = fp + _this.handleCode(sha384('e5da' + fp + 'q'), 'mix', '-', 13, 5) + _this.handleCode(sha512('d31' + fp + 'l78'), 'mix', '-', 10, 9); break; case 'K': secretCode = _this.handleCode(md5('p3sa' + fp + 'ps5'), 'mix', '-', 8, 7) + _this.handleCode(sha224('vbne' + fp + '834'), 'mix', '-', 15, 10) + fp; break; case 'L': secretCode = fp + _this.handleCode(sha512('idmn' + fp + '78g'), 'mix', '-', 4, 6) + _this.handleCode(md5('d84' + fp + 'rtd'), 'mix', '-', 12, 5); break; case 'M': secretCode = _this.handleCode(sha224('dfs' + fp + 'e1y'), 'mix', '-', 10, 9) + _this.handleCode(sha512('bvs4' + fp + '12s'), 'mix', '-', 15, 7) + fp; break; case 'N': secretCode = fp + _this.handleCode(sha384('ad4f' + fp + 'qz'), 'mix', '-', 4, 6) + _this.handleCode(sha512('nqu' + fp + '7dbn'), 'mix', '-', 30, 12); break; case 'O': secretCode = _this.handleCode(sha512('7df4' + fp + '1f'), 'mix', '-', 9, 6) + fp + _this.handleCode(md5(fp + 'd3f1'), 'mix', '-', 4, 7); break; case 'P': secretCode = fp + _this.handleCode(sha512('nd8a' + fp + '1x'), 'mix', '-', 18, 7) + _this.handleCode(sha256('pa' + fp + '178a'), 'mix', '-', 7, 10); break; case 'Q': secretCode = _this.handleCode(sha224(fp + 'of555'), 'mix', '-', 4, 6) + _this.handleCode(sha512('37ol' + fp + 'j'), 'mix', '+', 15, 9) + fp; break; case 'R': secretCode = _this.handleCode(sha384('ok2' + fp + 'pzl1'), 'mix', '+', 8, 10) + fp + _this.handleCode(md5('grew5' + fp + '4'), 'mix', '-', 2, 7); break; default: secretCode = _this.handleCode(md5(fp), 'en', '+', 0, 5) + '#' + fp + '*' + _this.handleCode(sha256(fp), 'int', '-', 0, 5); } ;_this.fingerprint = window.btoa(secretCode); //Base64之后给fingerprint }); }, handleCode: function(code, type, order, start, length) { if (type !== 'mix') { var str = type === 'en' ? 'AAAAAAAAAA' : '0000000000'; var reg = type === 'en' ? /[0-9]/g : /\D/g; if (order === '+') { return code.replace(reg, '').concat(str).substr(start, length); } return (str + code).replace(reg, '').split('').reverse().join('').substr(start, length); } if (order === '+') { return code.substr(start, length); } return code.split('').reverse().join('').substr(start, length); },
查看入参components,全是是浏览器信息。
综上所述其指纹算法流程为:
仿写其指纹算法,它的 fingerprint2.min.js 库可以直接拿过来调用。
<!DOCTYPE html> <hr> <script src="fingerprint2.min.js"></script> <script> //网站取到我的浏览器指纹信息 let finger = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36,not available,zh-CN,24,8,4,1920,1080,1920,1040,-480,Asia/Shanghai,true,true,true,false,true,not available,Win32,360MMPlugin,360MMPlugin,application/x360mmplugin,dll,APlayer ActiveX hosting plugin,APlayer III ActiveX hosting plugin for Firefox,application/x-thunder-aplayer,ocx,AliSSOLogin plugin,npAliSSOLogin Plugin,application/npalissologin,AliSSOLogin,Alipay security control,npaliedit,application/aliedit,,BaiduYunGuanjia Application,YunWebDetect,application/bd-npyunwebdetect-plugin,,Chromium PDF Plugin,Portable Document Format,application/x-google-chrome-pdf,pdf,Chromium PDF Viewer,,application/pdf,pdf,GamePlugin,GamePlugin,application/gameplugin,,Microsoft® Windows Media Player Firefox Plugin,np-mswmp,application/x-ms-wmp,*,application/asx,*,video/x-ms-asf-plugin,*,application/x-mplayer2,*,video/x-ms-asf,asf,asx,*,video/x-ms-wm,wm,*,audio/x-ms-wma,wma,*,audio/x-ms-wax,wax,*,video/x-ms-wmv,wmv,*,video/x-ms-wvx,wvx,*,Native Client,,application/x-nacl,,application/x-pnacl,,QQGamePlugin Pro,QQWebGamePlugin Pro,application/npqqwebgame,rts,QQMiniDL Plugin,QQMiniDL Plugin,application/npxf-qqminidl,dll,QQÒôÀÖ²¥·Å¿Ø¼þ,QQÒôÀÖ²¥·Å¿Ø¼þ,application/tecent-qzonemusic-plugin,rts,Shockwave Flash,Shockwave Flash 32.0 r0,application/x-shockwave-flash,swf,application/futuresplash,spl,Shockwave Flash,Shockwave Flash 32.0 r0*,application/x-shockwave-flash,swf,application/futuresplash,spl,Tencent QQ,Tencent QQ CPHelper plugin for Chrome,application/qscall-plugin,dll,Web Components Kit,npWebVideoKitPlugin,application/webvideo-plugin-kit,rts,XunLei User Plugin,Xunlei User scriptability Plugin,version= 2.0.2.3,application/npxluser_plugin,,iTrusChina iTrusPTA,XEnroll,iEnroll,hwPTA,UKeyInstalls Firefox Plugin,iTrusPTA&XEnroll hwPTA,IEnroll,UKeyInstalls for FireFox,version=1.0.0.2,application/pta.itruspta.version.1,*,application/cenroll.cenroll.version.1,,application/itrusenroll.certenroll.version.1,,application/hwpta.itrushwpta,,application/hwwdkey.installwdkey,,application/hwepass2001.installepass2001,,npQQPhotoDrawEx,npQQPhotoDrawEx Module,application/tencent-qqphotodrawex2-plugin,rts,mhR9Pb/Nj35P1afAnbbvCFsmA4mlmjWkyfyylDCAya5WQTBUVUVxR2xPU2VqU3dt,canvas winding:yes,canvas fp:data:image/png;base64,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AgQIECBAgAABAgQIECBAgAABAgQIECBAoLjApA7oxXU9gAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqERDQqzmVRQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgpICAXlLXbAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoRkBAr+ZUFiVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBkgICekldswkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgGgEBvZpTWZQAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgoI6CV1zSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBagQE9GpOZVECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKCkgoJfUNZsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqhEQ0Ks5lUUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoKSAgF5S12wCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqEZAQK/mVBYlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgZICAnpJXbMJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoBoBAb2aU1mUAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoKCOgldc0mQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgWoEBPRqTmVRAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgpIKCX1DWbAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoRENCrOZVFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCkgIBeUtdsAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKhGQECv5lQWJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGSAgJ6SV2zCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKAaAQG9mlNZlAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKCgjoJXXNJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFqBAT0ak5lUQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoKSCgl9Q1mwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqERDQqzmVRQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgpICAXlLXbAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoRkBAr+ZUFiVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBkgICekldswkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgGgEBvZpTWZQAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgoI6CV1zSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBagSZMS8QAAAC7UlEQVQE9GpOZVECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKCkgoJfUNZsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqhEQ0Ks5lUUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoKSAgF5S12wCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqEZAQK/mVBYlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgZICAnpJXbMJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoBoBAb2aU1mUAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoKCOgldc0mQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgWoEBPRqTmVRAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgpIKCX1DWbAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoRENCrOZVFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCkgIBeUtdsAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKhGQECv5lQWJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGSAgJ6SV2zCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKAaAQG9mlNZlAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKCgjoJXXNJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFqBAT0ak5lUQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoKSCgl9Q1mwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqERDQqzmVRQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgpMCftlPMXiwBkOQAAAAASUVORK5CYII=,data:image/png;base64,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,extensions:ANGLE_instanced_arrays;EXT_blend_minmax;EXT_color_buffer_half_float;EXT_disjoint_timer_query;EXT_float_blend;EXT_frag_depth;EXT_shader_texture_lod;EXT_texture_filter_anisotropic;WEBKIT_EXT_texture_filter_anisotropic;EXT_sRGB;KHR_parallel_shader_compile;OES_element_index_uint;OES_standard_derivatives;OES_texture_float;OES_texture_float_linear;OES_texture_half_float;OES_texture_half_float_linear;OES_vertex_array_object;WEBGL_color_buffer_float;WEBGL_compressed_texture_s3tc;WEBKIT_WEBGL_compressed_texture_s3tc;WEBGL_compressed_texture_s3tc_srgb;WEBGL_debug_renderer_info;WEBGL_debug_shaders;WEBGL_depth_texture;WEBKIT_WEBGL_depth_texture;WEBGL_draw_buffers;WEBGL_lose_context;WEBKIT_WEBGL_lose_context;WEBGL_multi_draw;WEBGL_multi_draw_instanced;WEBGL_video_texture,webgl aliased line width range:[1, 1],webgl aliased point size range:[1, 1024],webgl alpha bits:8,webgl antialiasing:yes,webgl blue bits:8,webgl depth bits:24,webgl green bits:8,webgl max anisotropy:16,webgl max combined texture image units:32,webgl max cube map texture size:16384,webgl max fragment uniform vectors:1024,webgl max render buffer size:16384,webgl max texture image units:16,webgl max texture size:16384,webgl max varying vectors:30,webgl max vertex attribs:16,webgl max vertex texture image units:16,webgl max vertex uniform vectors:4096,webgl max viewport dims:[32767, 32767],webgl red bits:8,webgl renderer:WebKit WebGL,webgl shading language version:WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium),webgl stencil bits:0,webgl vendor:WebKit,webgl version:WebGL 1.0 (OpenGL ES 2.0 Chromium),webgl unmasked vendor:Google Inc.,webgl unmasked renderer:ANGLE (Intel(R) HD Graphics 630 Direct3D11 vs_5_0 ps_5_0),webgl vertex shader high float precision:23,webgl vertex shader high float precision rangeMin:127,webgl vertex shader high float precision rangeMax:127,webgl vertex shader medium float precision:23,webgl vertex shader medium float precision rangeMin:127,webgl vertex shader medium float precision rangeMax:127,webgl vertex shader low float precision:23,webgl vertex shader low float precision rangeMin:127,webgl vertex shader low float precision rangeMax:127,webgl fragment shader high float precision:23,webgl fragment shader high float precision rangeMin:127,webgl fragment shader high float precision rangeMax:127,webgl fragment shader medium float precision:23,webgl fragment shader medium float precision rangeMin:127,webgl fragment shader medium float precision rangeMax:127,webgl fragment shader low float precision:23,webgl fragment shader low float precision rangeMin:127,webgl fragment shader low float precision rangeMax:127,webgl vertex shader high int precision:0,webgl vertex shader high int precision rangeMin:31,webgl vertex shader high int precision rangeMax:30,webgl vertex shader medium int precision:0,webgl vertex shader medium int precision rangeMin:31,webgl vertex shader medium int precision rangeMax:30,webgl vertex shader low int precision:0,webgl vertex shader low int precision rangeMin:31,webgl vertex shader low int precision rangeMax:30,webgl fragment shader high int precision:0,webgl fragment shader high int precision rangeMin:31,webgl fragment shader high int precision rangeMax:30,webgl fragment shader medium int precision:0,webgl fragment shader medium int precision rangeMin:31,webgl fragment shader medium int precision rangeMax:30,webgl fragment shader low int precision:0,webgl fragment shader low int precision rangeMin:31,webgl fragment shader low int precision rangeMax:30,Google Inc.~ANGLE (Intel(R) HD Graphics 630 Direct3D11 vs_5_0 ps_5_0),false,false,false,false,false,0,false,false,Arial,Arial Black,Arial Narrow,Calibri,Cambria,Cambria Math,Comic Sans MS,Consolas,Courier,Courier New,Georgia,Helvetica,Impact,Lucida Console,Lucida Sans Unicode,Microsoft Sans Serif,MS Gothic,MS PGothic,MS Sans Serif,MS Serif,Palatino Linotype,Segoe Print,Segoe Script,Segoe UI,Segoe UI Light,Segoe UI Semibold,Segoe UI Symbol,Tahoma,Times,Times New Roman,Trebuchet MS,Verdana,Wingdings,124.04344884395687"; //从code中按升降序截取一定length的 英文/数字/混合 function handleCode(code, type, order, start, length) { if (type !== 'mix') { var str = type === 'en' ? 'AAAAAAAAAA' : '0000000000'; /* 補滿不足位數 */ var reg = type === 'en' ? /[0-9]/g : /\D/g; if (order === '+') { return code.replace(reg, '').concat(str).substr(start, length); } return (str + code).replace(reg, '').split('').reverse().join('').substr(start, length); } if (order === '+') { return code.substr(start, length); } return code.split('').reverse().join('').substr(start, length); } //网站里是写死的,我姑且也写死 let fcacheType = 'B'; //得到浏览器指纹 function fingerprint(finger) { var fp = recognition.x64hash128(finger, 31); var secretCode = ''; switch (fcacheType) { case 'A': secretCode = handleCode(window.btoa(fp), 'int', '+', 0, 3) + '@' + fp + '*' + handleCode(md5(fp), 'en', '+', 0, 5); break; case 'B': secretCode = handleCode(md5(fp), 'en', '+', 0, 5) + '#' + fp + '*' + handleCode(sha256(fp), 'int', '-', 0, 5); break; case 'C': secretCode = handleCode(sha256(fp), 'en', '-', 0, 7) + '-' + handleCode(md5(fp), 'int', '+', 0, 4) + fp; break; case 'D': secretCode = fp + '+' + handleCode(md5(fp), 'en', '-', 0, 4) + handleCode(sha256(fp), 'int', '+', 0, 3); break; case 'E': secretCode = handleCode(fp, 'en', '+', 0, 2) + '%' + handleCode(sha256(fp), 'int', '+', 0, 2) + fp; break; case 'F': secretCode = handleCode(sha256('8f0' + fp + 'b7a'), 'mix', '-', 7, 8) + fp + handleCode(md5('f16s' + fp + 'd'), 'mix', '+', 5, 8); break; case 'G': secretCode = handleCode(sha224('9a1' + fp + 'q1'), 'mix', '+', 10, 9) + handleCode(md5('e5cv' + fp + 'v1'), 'mix', '-', 7, 8) + fp; break; case 'H': secretCode = handleCode(md5('eds' + fp + '874'), 'mix', '-', 4, 7) + fp + handleCode(sha384('t3b' + fp + 'fe4'), 'mix', '+', 6, 8); break; case 'I': secretCode = handleCode(sha224('11a' + fp + 'q1aa'), 'mix', '-', 12, 15) + fp + handleCode(md5('r124' + fp + 'v'), 'mix', '-', 8, 7); break; case 'J': secretCode = fp + handleCode(sha384('e5da' + fp + 'q'), 'mix', '-', 13, 5) + handleCode(sha512('d31' + fp + 'l78'), 'mix', '-', 10, 9); break; case 'K': secretCode = handleCode(md5('p3sa' + fp + 'ps5'), 'mix', '-', 8, 7) + handleCode(sha224('vbne' + fp + '834'), 'mix', '-', 15, 10) + fp; break; case 'L': secretCode = fp + handleCode(sha512('idmn' + fp + '78g'), 'mix', '-', 4, 6) + handleCode(md5('d84' + fp + 'rtd'), 'mix', '-', 12, 5); break; case 'M': secretCode = handleCode(sha224('dfs' + fp + 'e1y'), 'mix', '-', 10, 9) + handleCode(sha512('bvs4' + fp + '12s'), 'mix', '-', 15, 7) + fp; break; case 'N': secretCode = fp + handleCode(sha384('ad4f' + fp + 'qz'), 'mix', '-', 4, 6) + handleCode(sha512('nqu' + fp + '7dbn'), 'mix', '-', 30, 12); break; case 'O': secretCode = handleCode(sha512('7df4' + fp + '1f'), 'mix', '-', 9, 6) + fp + handleCode(md5(fp + 'd3f1'), 'mix', '-', 4, 7); break; case 'P': secretCode = fp + handleCode(sha512('nd8a' + fp + '1x'), 'mix', '-', 18, 7) + handleCode(sha256('pa' + fp + '178a'), 'mix', '-', 7, 10); break; case 'Q': secretCode = handleCode(sha224(fp + 'of555'), 'mix', '-', 4, 6) + handleCode(sha512('37ol' + fp + 'j'), 'mix', '+', 15, 9) + fp; break; case 'R': secretCode = handleCode(sha384('ok2' + fp + 'pzl1'), 'mix', '+', 8, 10) + fp + handleCode(md5('grew5' + fp + '4'), 'mix', '-', 2, 7); break; default: secretCode = handleCode(md5(fp), 'en', '+', 0, 5) + '#' + fp + '*' + handleCode(sha256(fp), 'int', '-', 0, 5); }; return window.btoa(secretCode); } //测试 console.log(fingerprint(finger)) </script>
测试,可以得到其需要的指纹。该网站用浏览器信息摘要做指纹,那它就只能验证指纹是否重复,无法校验指纹的有效性,这里甚至可以随便输入一串字符作为指纹放入上面算法中。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。