转自 http://gv7.me/articles/2018/fast-locate-the-front-end-encryption-method/
0x00 前言
相信用过我jsEncrypter这个插件的朋友,都会碰到一个问题。 那就是一些大型网站前端太复杂,以至于无法定位到前端数据加密函数所在的位置。无法定位到加密方法所在,自然就无法编写jsEncrypter的phantomJS脚本了。k哥在今晚给了我很多灵感,让我对这个问题有一个完美的解决方案。以至于现在已是12号的凌晨3点,我仍不舍得搁浅内心零散的想法。窗外稍许的车辆略过的轰鸣,在夜深人静时显得格外刺耳。不过还好,没破坏我静静码字感觉。下面让我慢慢将这简单弱智有点零散,但细细思考,却有点意思的想法,串成一个流程。
0x01 onClick定位法
有时候在触发提交表单的标签中会存在一个onClik属性,该属性的值正好是一个js函数。而这个函数往往就是我们要找的数据加密函数。我们只需要找到它定义的地方即可。
找到了加密数据的方法名之后,我们就可以去找一下该方法在那个js文件中定义,即可定位到位置。
0x02 Event Listeners定位法
这个方法非常好,也是我觉得最好的方法。F12打开开发者工具,然后使用选择箭头选择目标标签,最后打开开发者工具Event Listeners面板。就能显示该标签对应的额事件了。我们关注的当然是click事件了。
由此我们就知道,我们的数据加密方法在uni_loginv4_tangram_dde753f.js
文件的32行。点击该链接就能直接调转到代码处。
这个方法虽然非常好,但是有一个天坑需要注意!有时候标签是有绑定方法的,但看到Event Listeners面板却是空的。我猜是因为浏览器它没有加载完全所有的数据,导致无法分析出各个元素绑定的方法。这时我们可以进行将登录整个流程走一遍,多次刷新页面,甚至可以ctrl+s将网页保存到本地等操作,总之只为一个目的: 间接告诉浏览器赶紧将一些网页资源保存下来,以供Event Listeners分析出click事件对应的方法。目前发现这样勉强能解决。
这里插一句题外话:有一个和Event Listeners有关的辅助插件Visual Event,大家可以去体验一下。不过个人觉得不是特别好!
0x03 搜索定位法
如果遇到的情况很糟糕,页面没有指定onClick方法,Event Listeners怎么操作都是空白一片,Visual Event也是半死不活的时候。这是我们就只能自己动手,丰衣足食了。当然我承认这种情况基本不可能发生。然而谁还没有个万一呢?
先将页面ctrl+s,保存起来。然后使用notepad++搜索保存目录下所有内容。这时我们就要考虑寻找搜索关键字了。搜索操作过程虽然有点繁琐,但很简单。这里我挑比较有意思的选择搜索关键字的思考跟大家分享一下。
从源头搜,什么是我们的源头搜呢?我们触发前端数据加密,然后进行传输的整个过程皆因为点击了一个标签造成。所以我们就可以通过这个标签的
id名
,class名
或者标签名
作为关键字去搜索,就能定位到开始进行加密处理的位置。最后根据起始位置,一步一步跟进就能找到我们的加密方法。从终点搜,什么是我们的终点呢?当然是我们的最终发送数据包这一步了。我们可以用burp进行抓包,然后分析数据包的特点,提取关键字来定位。比如我们可以拿数据包提交的路径,可以拿数据包的参数等等作为关键字。定位到加密流程的最后一步,最后一步一步回溯找到加密方法。
例如:我打算从源头开始搜,查看到源码中淘宝的登录按钮标签id值为J_SubmitStatic
,于是我以#J_SubmitStatic
作为关键字开始定位。
0x04 调试确认
在使用了以上三个方法加辅助插件,基本可以保证能定位到99%网站前端密码的处理函数了。但我们仍然需要通过调式来确定我们定位到的地方就是数据加密方法。首选我们在定位的方法中打一个断点,然后在表单输入账号密码,最后点击提交。就可以进入调试模式了。进入调式模式,我们可以单步执行,梳理加密处理的每一步。方便我们更好的编写jsEncrypter插件的phantomJs脚本。
0x05 最后的话
我使用了以上流程,先后定位到了百度,淘宝,腾讯和京东的前端页面数据加密方法。证明了我们的流程大体还是很实用的。各位同学可以按照上面的方法去测试一下,看看自己能否快速定位到数据加密方法?当然你有更加快速的方法,欢迎留言,让我们的这个快速定位前端加密方法的流程更加完美!已是凌晨4点,明天还有工作。祝每个还在深夜码字写代码的灵魂晚安!