有时候放弃也是一种智慧。
就像这说的一样,美团的拼图滑块,不知道这个缺口该怎么去处理,正常划顶到最外面去了,所以就不知道这个是咋计算的。
先来看看他的这个加密,跟原来的一划到底其实是一样的,难度只是在轨迹的处理上,我觉得还是一划到底简单点,然后的话拼图滑块取消了sign跟sess的计算。
这就叫给你关了一扇门,又给你打开了一扇窗,各有各的难。
behavior值:包含了时间,滑动距离的验证。
token也是一样的流程: 然后轨迹信息在这个ft,mt中,mt为倒叙的behiver_info['trajectory'][0]['point']信息,这个可以去看看,不过最后一个时间值不同,找了几次规律发现时间差为37,47。大家也可以去试试看。
分享一个自己写的轨迹处理:
def get_tracks(distance):
trajectory=[]
track_token_ft=[]
track_token_mt=[]
ts=int(time.time()*1000)
cts=int(int(time.time()*1000)+random.random()*(10**6))
first_x=826
first_y=random.randint(400,410)
behiver_info={
"env": {
"Type": 1,
"zone": [[first_y-72,first_y-3],[296,222],[296,44]],
"client": [803,388],
"Timestamp": [ts,cts],
"count": 1,
"timeout": 0
},
"trajectory": [
{
"point": [
[0,826,403,cts-ts],
[0,827,403,190805],
[0,828,403,190821],
[0,829,403,190837],
[0,830,403,190854],
[0,831,403,190869],
[0,832,403,190901],
[0,833,403,190917],
[0,834,403,190933],
[0,835,403,190957],
[0,836,403,190965],
[0,837,403,190981],
[0,838,403,191015],
[0,840,403,191037],
[0,841,403,191045],
[0,843,403,191061],
[0,844,403,191077],
[0,846,403,191085],
[0,847,403,191101],
[0,849,403,191117],
[0,850,403,191125],
[0,852,403,191133],
[0,853,403,191149],
[0,855,403,191157],
[0,856,403,191173],
[0,857,403,191181],
[0,858,403,191189],
[0,859,403,191213],
[0,860,403,191229],
[0,861,403,191237],
[0,862,403,191253],
[0,864,403,191269],
[0,865,403,191285],
[0,867,403,191301],
[0,868,403,191317],
[0,869,403,191333],
[0,871,403,191341],
[0,873,403,191357],
[0,874,403,191365],
[0,876,403,191381],
[0,878,403,191389],
[0,879,403,191397],
[0,881,403,191413],
[0,882,403,191421],
[0,883,403,191429],
[0,884,403,191453],
[0,885,403,191461],
[0,886,403,191477],
[0,887,403,191485],
[0,888,403,191493],
[0,889,403,191501],
[0,890,403,191509],
[0,891,403,191517],
[0,892,403,191525],
[0,893,403,191541],
[0,894,403,191549],
[0,895,403,191565],
[0,896,403,191573],
[0,898,403,191581],
[0,899,403,191597],
[0,901,403,191605],
[0,903,403,191621],
[0,904,403,191629],
[0,905,403,191637],
[0,906,403,191645],
[0,907,403,191653],
[0,910,403,191661],
[0,911,403,191677],
[0,913,403,191685],
[0,914,403,191701],
[0,916,403,191718],
[0,917,403,191725],
[0,918,403,191733],
[0,919,403,191741],
[0,921,403,191749],
[0,922,403,191757],
[0,923,403,191766],
[0,925,403,191773],
[0,926,403,191781],
[0,927,403,191797],
[0,928,403,191805],
[0,929,403,191814],
[0,930,403,191821],
[0,931,403,191829],
[0,932,403,191837],
[0,933,403,191846],
[0,934,403,191853],
[0,936,403,191862],
[0,938,403,191869],
[0,939,403,191885],
[0,941,403,191893],
[0,942,403,191909],
[0,944,403,191933],
[0,945,403,191965],
[0,947,403,191981],
[0,948,403,191997],
[0,950,403,192005],
[0,951,403,192013],
[0,953,403,192021],
[0,954,403,192029],
[0,955,403,192037],
[0,956,403,192045],
[0,957,403,192053],
[0,958,403,19206],
[0,959,403,192069],
[0,960,403,192077],
[0,961,403,192093],
[0,962,403,192101],
[0,963,403,192109],
[0,964,403,192125],
[0,966,403,192133],
[0,967,403,192149],
[0,969,403,192157],
[0,970,403,192173],
[0,972,403,192181],
[0,973,403,192197],
[0,974,403,192205],
[0,975,403,192213],
[0,976,403,192229],
[0,977,403,192245],
[0,978,403,192261],
[0,979,403,192277],
[0,980,403,192285],
[0,982,403,192293],
[0,985,403,192309],
[0,987,403,192317],
[0,989,403,192325],
[0,991,403,192333],
[0,992,403,192349],
[0,994,403,192357],
[0,996,403,192381],
[0,997,403,192405],
[0,998,403,192437],
[0,999,403,192445],
[0,1000,403,192461],
[0,1001,403,192477],
[0,1003,403,192509],
[0,1004,403,192525],
[0,1006,403,192550],
[0,1007,403,192573],
[0,1008,403,192597],
[0,1009,403,192613],
[0,1010,403,192629],
[0,1011,403,192669],
[0,1012,403,192765],
[0,1013,403,192781],
[0,1014,403,192814]
],
"vector": {
"orientation": "h"
}
}
]
}
strat_time=int(cts-ts)
trajectory.append([0,first_x,first_y,strat_time])
for points in range(1,distance):
next_x=first_x+points
next_y=first_y+random.randint(-1,1)
strat_time=int(strat_time+random.randint(5,25))
if next_x-first_x!=distance:
trajectory.append([0,next_x,next_y,strat_time])
else:
break
print("distance:",trajectory[-1][1]-trajectory[0][1])
behiver_info['trajectory'][0]['point']=trajectory
print('behiver_info:',behiver_info)
# timeout=behiver_info['env']['Timestamp'][1]-behiver_info['env']['Timestamp'][0]
# print(timeout)
# timeout=behiver_info['trajectory'][0]['point'][0][3]
# print(timeout)
# behiver_dis=behiver_info['trajectory'][0]['point'][-1][1]-behiver_info['trajectory'][0]['point'][0][1]
# print(behiver_dis)
token_mt=[
"1014,403,192851",
"1013,403,192818",
"1012,403,192802",
"1011,403,192706",
"1010,403,192666",
"1009,403,192650",
"1008,403,192634",
"1007,403,192610",
"1006,403,192587",
"1004,403,192562",
"1003,403,192546",
"1001,403,192514",
"1000,403,192498",
"999,403,192482",
"998,403,192474",
"997,403,192442",
"996,403,192418",
"994,403,192394",
"992,403,192386",
"991,403,192370",
"989,403,192362",
"987,403,192354",
"985,403,192346",
"982,403,192330",
"980,403,192322",
"979,403,192314",
"978,403,192298",
"977,403,192282",
"976,403,192266",
"975,403,192250",
"974,403,192242",
"973,403,192234",
"972,403,192218",
"970,403,192210",
"969,403,192194",
"967,403,192186",
"966,403,192170",
"964,403,192162",
"963,403,192146",
"962,403,192138",
"961,403,192130",
"960,403,192114",
"959,403,192106",
"958,403,192098",
"957,403,192090",
"956,403,192082",
"955,403,192074",
"954,403,192066",
"953,403,192058",
"951,403,192050",
"950,403,192042",
"948,403,192034",
"947,403,192018",
"945,403,192002",
"944,403,191970",
"942,403,191946",
"941,403,191930",
"939,403,191922",
"938,403,191906",
"936,403,191899"
] ####倒序behiver_info['trajectory'][0]['point']
for points in trajectory[::-1][0:60]:
track_token_mt.append(f"{points[1]},{points[2]},{int(points[3])+37}")
print('track_token_mt:',track_token_mt)
first_x_ft=first_x+10
first_y_ft=distance-37
strat_time_ft=2858
track_token_ft.append(f"{first_x_ft},{first_y_ft},{strat_time_ft}")
next_first_x_ft = first_x_ft - random.randint(1, 3)
next_first_y_ft = first_y_ft - random.randint(1, 3)
next_strat_time_ft = strat_time_ft - random.randint(10, 30)
track_token_ft.append(f"{next_first_x_ft},{next_first_y_ft},{next_strat_time_ft}")
for i in range(0,59):
next_first_x_ft=next_first_x_ft-1
next_first_y_ft=next_first_y_ft-2
if next_first_y_ft<=0 or next_first_y_ft<=1:
next_strat_time_ft=next_strat_time_ft-i
track_token_ft.append(f"{next_first_x_ft},{next_first_y_ft+(-next_first_y_ft)+2},{next_strat_time_ft}")
else:
track_token_ft.append(f"{next_first_x_ft},{next_first_y_ft},{next_strat_time_ft}")
last_ft_x=int(track_token_ft[-1][0].strip(',')[0])
last_ft_time = track_token_ft[-1].split(',')[-1]
track_token_ft.append(f"{last_ft_x},{0},{last_ft_time}")
token_info={
"v": "2.2.2",
"ts": ts,
"cts": int(time.time()*1000),
"brVD": [
1920,
487
],
"brR": [
[
1920,
1080
],
[
1920,
1050
],
24,
24
],
"bI": [
"https://verify.meituan.com/v2/web/general_page?action=spiderindefence&requestCode=becca4f50deb45dab160f17ebc43b8fd&platform=1000&adaptor=auto&succCallbackUrl=https%3A%2F%2Foptimus-mtsi.meituan.com%2Foptimus%2FverifyResult%3ForiginUrl%3Dhttps%253A%252F%252Fwww.meituan.com%252F",
"https://passport.meituan.com/"
],
"aM": "",
"broP": [
"PDF Viewer",
"Chrome PDF Viewer",
"Chromium PDF Viewer",
"Microsoft Edge PDF Viewer",
"WebKit built-in PDF"
],
"cV": "606031946ed0a0ab251a38223152c059",
"wV": "WebKit",
"wR": "WebKit WebGL",
"wVU": "Google Inc. (NVIDIA)",
"wRU": "ANGLE (NVIDIA, NVIDIA GeForce GT 1030 Direct3D11 vs_5_0 ps_5_0, D3D11)",
"aF": "",
"wI": "3166190811",
"wC": "{\"platform\":\"Win32\",\"userAgent\":\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36\",\"contextName\":\"webgl2\",\"glVersion\":\"WebGL 2.0 (OpenGL ES 3.0 Chromium)\",\"shadingLanguageVersion\":\"WebGL GLSL ES 3.00 (OpenGL ES GLSL ES 3.0 Chromium)\",\"vendor\":\"WebKit\",\"renderer\":\"WebKit WebGL\",\"unMaskedVendor\":\"Google Inc. (NVIDIA)\",\"unMaskedRenderer\":\"ANGLE (NVIDIA, NVIDIA GeForce GT 1030 Direct3D11 vs_5_0 ps_5_0, D3D11)\",\"antialias\":\"Available\",\"angle\":\"Yes, D3D9\",\"majorPerformanceCaveat\":\"No\",\"maxColorBuffers\":8,\"redBits\":8,\"greenBits\":8,\"blueBits\":8,\"alphaBits\":8,\"depthBits\":24,\"stencilBits\":8,\"maxRenderBufferSize\":16384,\"maxCombinedTextureImageUnits\":32,\"maxCubeMapTextureSize\":16384,\"maxFragmentUniformVectors\":1024,\"maxTextureImageUnits\":16,\"maxTextureSize\":16384,\"maxVaryingVectors\":30,\"maxVertexAttributes\":16,\"maxVertexTextureImageUnits\":16,\"maxVertexUniformVectors\":4095,\"aliasedLineWidthRange\":\"[1, 1]\",\"aliasedPointSizeRange\":\"[1, 1024]\",\"maxViewportDimensions\":\"[32767, 32767]\",\"maxAnisotropy\":16,\"vertexShaderBestPrecision\":\"[-1.7014118346046923e+38, 1.7014118346046923e+38] (23 bit mantissa)\",\"fragmentShaderBestPrecision\":\"[-1.7014118346046923e+38, 1.7014118346046923e+38] (23 bit mantissa)\",\"fragmentShaderFloatIntPrecision\":\"highp/highp\",\"webglExtensions\":[\"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_compression_bptc\",\"EXT_texture_compression_rgtc\",\"EXT_texture_filter_anisotropic\",\"EXT_sRGB\",\"KHR_parallel_shader_compile\",\"OES_element_index_uint\",\"OES_fbo_render_mipmap\",\"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\",\"WEBGL_compressed_texture_s3tc_srgb\",\"WEBGL_debug_renderer_info\",\"WEBGL_debug_shaders\",\"WEBGL_depth_texture\",\"WEBGL_draw_buffers\",\"WEBGL_lose_context\",\"WEBGL_multi_draw\"],\"maxColorBuffers2\":1,\"webgl2Extensions\":[\"EXT_color_buffer_float\",\"EXT_color_buffer_half_float\",\"EXT_disjoint_timer_query_webgl2\",\"EXT_float_blend\",\"EXT_texture_compression_bptc\",\"EXT_texture_compression_rgtc\",\"EXT_texture_filter_anisotropic\",\"EXT_texture_norm16\",\"KHR_parallel_shader_compile\",\"OES_draw_buffers_indexed\",\"OES_texture_float_linear\",\"OVR_multiview2\",\"WEBGL_compressed_texture_s3tc\",\"WEBGL_compressed_texture_s3tc_srgb\",\"WEBGL_debug_renderer_info\",\"WEBGL_debug_shaders\",\"WEBGL_lose_context\",\"WEBGL_multi_draw\",\"WEBGL_provoking_vertex\"],\"maxVertexUniformComponents\":16380,\"maxVertexUniformBlocks\":12,\"maxVertexOutputComponents\":120,\"maxVaryingComponents\":120,\"maxFragmentUniformComponents\":4096,\"maxFragmentUniformBlocks\":12,\"maxFragmentInputComponents\":120,\"minProgramTexelOffset\":-8,\"maxProgramTexelOffset\":7,\"maxDrawBuffers\":8,\"maxColorAttachments\":8,\"maxSamples\":8,\"max3dTextureSize\":2048,\"maxArrayTextureLayers\":2048,\"maxTextureLodBias\":2,\"maxUniformBufferBindings\":24,\"maxUniformBlockSize\":65536,\"uniformBufferOffsetAlignment\":256,\"maxCombinedUniformBlocks\":24,\"maxCombinedVertexUniformComponents\":212988,\"maxCombinedFragmentUniformComponents\":200704,\"maxTransformFeedbackInterleavedComponents\":120,\"maxTransformFeedbackSeparateAttribs\":4,\"maxTransformFeedbackSeparateComponents\":4,\"maxElementIndex\":4294967294,\"maxServerWaitTimeout\":0,\"webgl2Functions\":[\"copyBufferSubData\",\"getBufferSubData\",\"blitFramebuffer\",\"framebufferTextureLayer\",\"getInternalformatParameter\",\"invalidateFramebuffer\",\"invalidateSubFramebuffer\",\"readBuffer\",\"renderbufferStorageMultisample\",\"texStorage2D\",\"texStorage3D\",\"texImage3D\",\"texSubImage3D\",\"copyTexSubImage3D\",\"compressedTexImage3D\",\"compressedTexSubImage3D\",\"getFragDataLocation\",\"uniform1ui\",\"uniform2ui\",\"uniform3ui\",\"uniform4ui\",\"uniform1uiv\",\"uniform2uiv\",\"uniform3uiv\",\"uniform4uiv\",\"uniformMatrix2x3fv\",\"uniformMatrix3x2fv\",\"uniformMatrix2x4fv\",\"uniformMatrix4x2fv\",\"uniformMatrix3x4fv\",\"uniformMatrix4x3fv\",\"vertexAttribI4i\",\"vertexAttribI4iv\",\"vertexAttribI4ui\",\"vertexAttribI4uiv\",\"vertexAttribIPointer\",\"vertexAttribDivisor\",\"drawArraysInstanced\",\"drawElementsInstanced\",\"drawRangeElements\",\"drawBuffers\",\"clearBufferiv\",\"clearBufferuiv\",\"clearBufferfv\",\"clearBufferfi\",\"createQuery\",\"deleteQuery\",\"isQuery\",\"beginQuery\",\"endQuery\",\"getQuery\",\"getQueryParameter\",\"createSampler\",\"deleteSampler\",\"isSampler\",\"bindSampler\",\"samplerParameteri\",\"samplerParameterf\",\"getSamplerParameter\",\"fenceSync\",\"isSync\",\"deleteSync\",\"clientWaitSync\",\"waitSync\",\"getSyncParameter\",\"createTransformFeedback\",\"deleteTransformFeedback\",\"isTransformFeedback\",\"bindTransformFeedback\",\"beginTransformFeedback\",\"endTransformFeedback\",\"transformFeedbackVaryings\",\"getTransformFeedbackVarying\",\"pauseTransformFeedback\",\"resumeTransformFeedback\",\"bindBufferBase\",\"bindBufferRange\",\"getIndexedParameter\",\"getUniformIndices\",\"getActiveUniforms\",\"getUniformBlockIndex\",\"getActiveUniformBlockParameter\",\"getActiveUniformBlockName\",\"uniformBlockBinding\",\"createVertexArray\",\"deleteVertexArray\",\"isVertexArray\",\"bindVertexArray\"]}",
"aG": "325",
"wA": "390933e72e6096e878c1b972bac13f16",
"fT": track_token_ft,
"mT": track_token_mt,
"kT": [],
"aT": [
"1004,28,DIV,4318158"
],
"tT": [],
"dT": [
"827,411,rect,211510"
],
"sT": [],
"inputs": [],
"buttons": [],
"fL": "3c9243fc96d5e34649a98b502d509451"
}
print('track_token_ft:',track_token_ft)
return {
'behiver_info': behiver_info,
'token_info': token_info
}
还有个难点就是这个请求头的Authencation值,hock一下看看。
(function() {
var org = window.XMLHttpRequest.prototype.setRequestHeader;
window.XMLHttpRequest.prototype.setRequestHeader = function(key, value) {
console.log(key, ':', value)
if (key == 'Authencation') {
debugger ;
}
return org.apply(this, arguments);
}
;
}
)();
在这里
然后就没然后了,基本上关键的入口都找完了。
这个识别是有问题的,所以在线征集meituan选手一起玩玩。
每天都在被洗脑,哈哈
完事儿了哦,大表哥们。有问题可以给我留言。或者V:15702312233
记得关注我们的作坊:图腾视觉开放平台-高速、稳定、易用的webapi接口调用 (现已合作大佬超乎你想象)图腾视觉-OCR识别平台
提示:有问题的小伙伴可以私信讨论。
重要的事儿说三遍 :若是侵权请联系作者删,若是侵权请联系作者删,若是侵权请联系作者删。