当前位置:首页 » 《资源分享》 » 正文

携程testab补环境/纯算分析

27 人参与  2024年09月21日 11:20  分类 : 《资源分享》  评论

点击全文阅读


声明
本文以学习交流为目的、不得用于任何商业用途和违法违规场景。
一 , 正片开始

网址:aHR0cHM6Ly9ob3RlbHMuY3RyaXAuY29tL2hvdGVscy8xNTAxODQ5Mi5odG1s

需要分析的参数:testab

然后直接搜索会发现 testab 会发现这两个地方

在这个地方打断点你会惊奇的发现打不上 

所以只能第一个搜索出来的地方上了断点 准备的差不多 然后刷新一下界面 然后等待一会 会发现成功的断住了

这里生成了一个随机数 返回把它加载到window的全局方里面 

点击下一步

然后让他跳进去 我们这是已经知道了一个方法加载到window全局方法里面

所以在在里面打了一个断点  然后执行到了这里 看一下e()执行了什么 

发现这个e()生成的就是我们需要的testab参数

通过浏览器发包会发现 这个生成的随机数会去请求一个js文件 这里大概就是可以猜测这是个动态js加密参数

解决这个有几种办法 :

rpc补环境还原算法

这里交流2和3

1. 补环境:

先整体看一下

因为js是动态的 所以要保存一份作为替换以便调试 SekishikiMeikaiHa会传入一个window和一个打对象 是先调用的方法 然后返回了一个方法 然后再传入的 _bot_1417为window。  _bot_3bd0a这个是传入的对象 看下在哪使用到了这个对象 (可以了解一下vmp的执行过程 这里就不多说了)

会发现他把对象的b值传入到了decode解码。尝试把代码扣下来放在本地执行 查看decode返回的结果 发现是一个二维数组(vmp里面是指令集 不过多的介绍了)

然后看一下把返回的数组 然后入到这个里面使用 所有这个就是开始执行这些指令的循环

在这个地方打印调试输出。 看一下结果 呢么有人会说为什么在这个地方下个打印呢 因为我也不知道 哈哈哈哈哈 开下玩笑 字符的拼接无非就是join + 这是这几种 最多的就是运算符+

一顿打印会发现拼接了下面这些值(简化了的 全部输出有几万行)

通过日志分析 需要补充的环境还是还是挺多的 可以考虑使用jvtool插件之类的进。补环境 发现里面还检测了node一些api 使用node来执行得先解决一些node的api以防止检测。推荐在vm或v8里面执行 具体不说了 可以尝试学习补环境 

{  '0': 'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890$_[]',  '1': '__pluginBodyChildren',  '4': 'default',  '6': '__pluginElementAppend',  '9': 'default',  '11': '__pluginElementCreate',  '14': 'default',  '16': '__pluginElementRender',  '19': 'default',  '21': '__pluginElementTagname',  '24': 'default',  '26': '__pluginErrorStack',  '29': 'default',  '31': '__pluginImageCreate',  '34': 'default',  '36': '__pluginNavigatorPlatform',  '39': 'default',  '41': '__pluginNodeJs',  '44': 'default',  '46': '__pluginPlatform',  '49': 'default',  '51': '__pluginReadOnlyPlatform',  '54': 'default',  '56': '__pluginReadOnlyAppCodeName',  '59': 'default',  '61': '__pluginReadOnlyUserAgent',  '64': 'default',  '66': '__pluginWindowPrototype',  '69': 'default',  '71': '__pluginWebdriver',  '74': 'default',  '76': 'root',  '78': '__pluginBodyChildren',  '79': 'default',  '81': '__pluginElementAppend',  '82': 'default',  '84': '__pluginElementCreate',  '85': 'default',  '87': '__pluginElementRender',  '88': 'default',  '90': '__pluginElementTagname',  '91': 'default',  '93': '__pluginErrorStack',  '94': 'default',  '96': '__pluginImageCreate',  '97': 'default',  '99': '__pluginNavigatorPlatform',  '100': 'default',  '102': '__pluginNodeJs',  '103': 'default',  '105': '__pluginPlatform',  '106': 'default',  '108': '__pluginReadOnlyPlatform',  '109': 'default',  '111': '__pluginReadOnlyAppCodeName',  '112': 'default',  '114': '__pluginReadOnlyUserAgent',  '115': 'default',  '117': '__pluginWindowPrototype',  '118': 'default',  '120': '__pluginWebdriver',  '121': 'default',  '132': 'Math',  '133': 'require',  '134': 'document',  '135': 'navigator',  '136': 'location',  '137': 'Object',  '138': 'Window',  '139': 'window',  '140': 'String',  '141': 'escape',  '142': 'Array',  '143': 'Boolean',  '144': 'Date',  '145': 'RegExp',  '146': 'JSON',  '147': 'Function',  '148': 'Location',  '149': 'Navigator',  '150': 'encodeURIComponent',  '151': 'bind',  '154': 'j9dJSRWGMezHLqyCu1pPQfs2XN0Ilhma7-UicAK6btroVxgZw5_nYOvE3TF48BDk',  '155': 'call',  '156': 'bind',  '158': 'bind',  '159': 'call',  '161': 'toString',  '164': 'map',  '168': 'forEach',  '172': 'push',  '176': 'join',  '180': 'indexOf',  '184': 'charCodeAt',  '188': 'replace',  '192': 'toLowerCase',  '196': 'indexOf',  '199': 'fromCharCode',  '202': 'toGMTString',  '204': 'setMinutes',  '206': 'getMinutes',  '208': 'undefined',  '209': 'OwAFMfVbLF',  '212': '\\s+|\\s*\\/\\*.*?\\*\\/\\s*|\\s*\\/\\/.*\\s*',  '215': 'hotelhst',  '219': 'OwAFMfVbLF',  '310': 'length',  '330': 'div',  '333': 'h1',  '334': 'h2',  '335': 'h3',  '336': 'h4',  '337': 'span',  '339': 'ul',  '340': 'li',  '357': 'jsdom',  '358': 'async_hooks',  '359': 'cluster',  '360': 'os',  '361': 'repl',  '389': 'floor',  '395': 'floor',  '396': 'WQ',  '400': 'floor',  '401': 'WQ',  '404': 'floor',  '405': 'WQ',  '406': 'WQ',  '418': 'length',  '420': 'floor',  '426': 'forEach',  '429': 'call',  '432': 'floor',  '433': 'random',  '438': 'setMinutes',  '439': 'getMinutes',  '443': 'cookie',  '446': 'WQ',  '447': ';expires=',  '448': 'WQ',  '449': 'toGMTString',  '451': 'WQ',  '452': ';path=/',  '453': 'WQ',  '455': 'push',  '458': 'length',  '463': 'Q1',  '464': 'length',  '470': 'charAt',  '471': 'length',  '474': 'length',  '477': 'WQ',  '479': 'Q4345',  '481': 'charCodeAt',  '496': 'window',  '497': 'document',  '499': 'body',  '500': 'children',  '502': 'length',  '504': 'window',  '505': 'parseInt',  '519': 'window',  '520': 'document',  '522': 'createElement',  '523': 'div',  '525': 'createElement',  '526': 'div',  '528': 'appendChild',  '530': 'appendChild',  '541': 'window',  '542': 'document',  '544': 'createElement',  '545': 'div',  '547': 'div',  '550': 'createElement',  '564': 'window',  '565': 'document',  '567': 'createElement',  '568': 'div',  '570': 'style',  '571': 'height',  '573': '20px',  '575': 'offsetHeight',  '576': 'body',  '577': 'appendChild',  '580': 'offsetHeight',  '582': 'remove',  '593': 'window',  '594': 'document',  '596': 'div',  '599': 'h1',  '600': 'h2',  '601': 'h3',  '602': 'h4',  '603': 'span',  '605': 'ul',  '606': 'li',  '608': 'length',  '610': 'createElement',  '612': 'tagName',  '633': 'fbejkbakrbadskfe',  '635': 'stack',  '637': 'vm|repl|bootstrapNodeJSCore|tryModuleLoad|evalmachine|runInContext',  '640': 'test',  '641': 'stack',  '645': 'number',  '656': 'window',  '657': 'Image',  '659': 'window',  '660': 'Image',  '663': 'keys',  '664': '__proto__',  '667': 'length',  '669': 'indexOf',  '682': 'window',  '683': 'navigator',  '685': 'platform',  '688': 'length',  '699': 'length',  '707': 'constructor',  '708': 'constructor',  '710': 'return process.mainModule.constructor._load',  '725': 'window',  '726': 'navigator',  '728': 'platform',  '731': 'length',  '746': 'ctrip.com',  '747': 'window',  '748': 'navigator',  '750': 'platform',  '751': 'platform',  '753': 'platform',  '756': 'platform',  '767': 'ctrip.com',  '768': 'window',  '769': 'navigator',  '771': 'appCodeName',  '772': 'appCodeName',  '774': 'appCodeName',  '777': 'appCodeName',  '788': 'ctrip.com',  '789': 'window',  '790': 'navigator',  '792': 'userAgent',  '793': 'userAgent',  '795': 'userAgent',  '798': 'userAgent',  '809': 'window',  '810': 'function',  '815': 'native code',  '820': 'stringify',  '822': '{}',  '833': 'window',  '834': 'navigator',  '836': 'window',  '837': 'document',  '839': 'window',  '840': 'webdriver',  '843': 'getOwnPropertyNames',  '845': 'getOwnPropertyNames',  '847': 'join',  '851': 'indexOf',  '852': 'webdriver',  '854': '_phantom',  '856': 'undefined',  '859': '__nightmare',  '861': 'undefined',  '864': '_selenium',  '866': 'undefined',  '869': 'callPhantom',  '871': 'undefined',  '874': 'callSelenium',  '876': 'undefined',  '879': '_Selenium_IDE_Recorder',  '881': 'undefined',  '884': '__webdriver_evaluate',  '886': 'undefined',  '889': '__selenium_evaluate',  '891': 'undefined',  '894': '__webdriver_script_function',  '896': 'undefined',  '899': '__webdriver_script_func',  '901': 'undefined',  '904': '__webdriver_script_fn',  '906': 'undefined',  '909': '__fxdriver_evaluate',  '911': 'undefined',  '914': '__driver_unwrapped',  '916': 'undefined',  '919': '__webdriver_unwrapped',  '921': 'undefined',  '924': '__driver_evaluate',  '926': 'undefined',  '929': '__selenium_unwrapped',  '931': 'undefined',  '934': '__fxdriver_unwrapped',  '936': 'undefined',  '939': 'external',  '940': 'external',  '941': 'toString',  '942': 'external',  '943': 'toString',  '945': 'external',  '946': 'toString',  '949': 'indexOf',  '951': 'Sequentum',  '956': 'documentElement',  '957': 'getAttribute',  '959': 'selenium',  '962': 'documentElement',  '963': 'getAttribute',  '965': 'webdriver',  '968': 'documentElement',  '969': 'getAttribute',  '971': 'driver',  '974': '\\$[a-z]dc_',  '980': 'concat',  '981': 'keys',  '984': '__proto__',  '986': 'length',  '988': 'match',  '990': 'cache_',  '994': 'userAgent',  '997': 'userAgent',  '998': 'toLowerCase',  '1001': 'indexOf',  '1002': 'headless',  '1007': 'getOwnPropertyDescriptor',  '1008': 'webdriver',  '1009': 'getOwnPropertyDescriptor',  '1010': 'webdriver',  '1012': 'get'}

下面是补环境运行的结果发现运行结果一直 环境补出来大概几千行 加油慢慢补 

2. 接下来分析算法还原。

然后我们在这些运算符号的位置打印输出日志

发现最后的结果是由这个64位数组拼接过来结果

看一下这个数组怎么来的

对应的是 发现这个f是转码过来  在vmp里面大部分都是由String.fromCharCode转码过来

初始化完会生成这个64位数组 然后对该数组进行运算

最后生成下面这个数组 

最后补一张纯算的运行结果

纯算分析就到这里 多观察打印日志 里面都在里面 主要还是靠自己

如有侵权 请联系我删除 有需要的断点调试信息的需备注


点击全文阅读


本文链接:http://zhangshiyu.com/post/162597.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1