| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent ce5e58f commit f89449a
1 file changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -2,13 +2,13 @@ | |||
| 2 | 2 | ||
| 3 | 3 | # 一、此脚本的作用是什么? | |
| 4 | 4 | ||
| 5 | - 用于快速定位使用jQuery绑定到DOM元素上的事件的代码的真实位置,辅助逆向分析。 | ||
| 5 | + 用于快速定位使用`jQuery`绑定到`DOM`元素上的事件的代码的真实位置,辅助逆向分析。 | ||
| 6 | 6 | ||
| 7 | 7 | # 二、为什么会有这个? | |
| 8 | 8 | ||
| 9 | - jQuery曾经引领过一个时代,虽然现已没落,但是很多遗留下来的系统都用到了jQuery,其市场还是比较大的, 而笔者在做js逆向的时候发现用Chrome自带的开发者工具查看元素绑定事件的功能,看到的值是被jQuery包裹着一层的代码: | ||
| 9 | + `jQuery`曾经引领过一个时代,虽然现已没落,但是很多遗留下来的系统都用到了`jQuery`,其市场还是比较大的, 而笔者在做`js`逆向的时候发现用`Chrome`自带的开发者工具查看元素绑定事件的功能,看到的值是被`jQuery`包裹着一层的代码: | ||
| 10 | 10 |  | |
| 11 | - 这是因为jQuery在原生的DOM元素事件机制上自己定义了一套事件管理机制,这套机制为开发者带来了便利,比如可以很方便的对某个DOM元素的相同事件绑定多个回调方法,但同时也为逆向带来不方便,逆向者不太容易能定位到DOM事件代码逻辑真实代码所在的位置,而这个小脚本就是解决这个问题的,**提供了一种简单有效的方法能够快速定位到jQuery DOM元素事件对应的真实代码的位置**。 | ||
| 11 | + 这是因为`jQuery`在原生的`DOM`元素事件机制上自己定义了一套事件管理机制,这套机制为开发者带来了便利,比如可以很方便的对某个`DOM`元素的相同事件绑定多个回调方法,但同时也为逆向带来不方便,逆向者不太容易能定位到`DOM`事件代码逻辑真实代码所在的位置,而这个小脚本就是解决这个问题的,**提供了一种简单有效的方法能够快速定位到`jQuery DOM`元素事件对应的真实代码的位置**。 | ||
| 12 | 12 | ||
| 13 | 13 | # 三、安装 | |
| 14 | 14 | ||
@@ -20,40 +20,40 @@ jQuery曾经引领过一个时代,虽然现已没落,但是很多遗留下 | |||
| 20 | 20 | ||
| 21 | 21 | ## 3.2 手动安装 | |
| 22 | 22 | ||
| 23 | - 手动复制此仓库的main分支的根目录下的jQuery-hook.js文件到您自己的油猴插件新建一个脚本粘贴代码即可: | ||
| 23 | + 手动复制此仓库的`main`分支的根目录下的`jQuery-hook.js`文件到您自己的油猴插件新建一个脚本粘贴代码即可: | ||
| 24 | 24 | ||
| 25 | 25 | ``` | |
| 26 | 26 | https://github.com/JSREI/jQuery-hook/blob/main/jQuery-hook.js | |
| 27 | 27 | ``` | |
| 28 | 28 | ||
| 29 | - 注意此种方式后续此脚本有版本更新油猴插件不会自动提醒升级,不过您可以star/watch本仓库关注后续更新。 | ||
| 29 | + 注意此种方式后续此脚本有版本更新油猴插件不会自动提醒升级,不过您可以`star`/`watch`本仓库关注后续更新。 | ||
| 30 | 30 | ||
| 31 | 31 | # 四、使用案例 | |
| 32 | - 随便找一个使用jQuery开发的网站,比如这个: | ||
| 32 | + 随便找一个使用`jQuery`开发的网站,比如这个: | ||
| 33 | 33 | ||
| 34 | 34 | [http://wap.wfu.edu.cn:8001/authz/login/slogin](http://wap.wfu.edu.cn:8001/authz/login/slogin) | |
| 35 | 35 | ||
| 36 | - 尝试触发登录请求,会发现它发出的登录请求中密码对应的参数mm是被加密传输的: | ||
| 36 | + 尝试触发登录请求,会发现它发出的登录请求中密码对应的参数`mm`是被加密传输的: | ||
| 37 | 37 | ||
| 38 | 38 |  | |
| 39 | - 通过这里可以看到,发出的请求是doc类型的请求,看起来是使用表单提交的方式发送的请求: | ||
| 39 | + 通过这里可以看到,发出的请求是`doc`类型的请求,看起来是使用表单提交的方式发送的请求: | ||
| 40 | 40 |  | |
| 41 | 41 | 那么按照我们以往的js逆向经验来推测: | |
| 42 | 42 | ||
| 43 | - - 应该是单击“登录”按钮的时候触发了按钮绑定的click事件 | ||
| 44 | - - click事件的js代码获取密码对应的名为mm的input里的明文密码的值,进行加密得到密码的加密值 | ||
| 45 | - - 然后更新密码的mm input的值为加密后的密码的值 | ||
| 46 | - - 然后提交表单,此时请求中的密码参数mm就是被加密后的值了 | ||
| 43 | + - 应该是单击“登录”按钮的时候触发了按钮绑定的`click`事件 | ||
| 44 | + - `click`事件的`js`代码获取密码对应的名为`mm`的`input`里的明文密码的值,进行加密得到密码的加密值 | ||
| 45 | + - 然后更新密码的`mm input`的值为加密后的密码的值 | ||
| 46 | + - 然后提交表单,此时请求中的密码参数`mm`就是被加密后的值了 | ||
| 47 | 47 | ||
| 48 | - 当然上面都是我们基于经验脑补出来的过程,具体还是得找到事件代码看一眼才靠谱,在Chrome中使用查看元素功能选中这个登录按钮,左侧会自动切换到Elements标签并定位到DOM元素的代码位置,然后在右侧切换到Event Listener标签查看此元素绑定的事件,发现是有一个click事件,只是代码位置是在jQuery里,不必在意这些细节,大喜,于是单击跟进去这个代码位置: | ||
| 48 | + 当然上面都是我们基于经验脑补出来的过程,具体还是得找到事件代码看一眼才靠谱,在`Chrome`中使用查看元素功能选中这个登录按钮,左侧会自动切换到`Elements`标签并定位到`DOM`元素的代码位置,然后在右侧切换到`Event Listener`标签查看此元素绑定的事件,发现是有一个`click`事件,只是代码位置是在`jQuery`里,不必在意这些细节,大喜,于是单击跟进去这个代码位置: | ||
| 49 | 49 | ||
| 50 | 50 |  | |
| 51 | - 然后会陷入到jQuery的闭包中无法自拔,喜早了,这是因为jQuery自己封装了一套事件机制不太容易逆向: | ||
| 51 | + 然后会陷入到`jQuery`的闭包中无法自拔,喜早了,这是因为`jQuery`自己封装了一套事件机制不太容易逆向: | ||
| 52 | 52 |  | |
| 53 | - 此时就是这个脚本发挥作用的时候了,油猴插件开启本脚本jQuery hook,刷新页面重新加载以便脚本能够注入到页面,如果加载成功控制台会有提示: | ||
| 53 | + 此时就是这个脚本发挥作用的时候了,油猴插件开启本脚本`jQuery hook`,刷新页面重新加载以便脚本能够注入到页面,如果加载成功控制台会有提示: | ||
| 54 | 54 | ||
| 55 | 55 |  | |
| 56 | - 再次对登录按钮检查元素,不必理睬右边Event Listener里Chrome给出的的绑定事件, 注意左边Elements面板中使用jQuery绑定的事件都已经以元素属性的方式展示出来了: | ||
| 56 | + 再次对登录按钮检查元素,不必理睬右边`Event Listener`里`Chrome`给出的的绑定事件, 注意左边`Elements`面板中使用`jQuery`绑定的事件都已经以元素属性的方式展示出来了: | ||
| 57 | 57 | ||
| 58 | 58 |  | |
| 59 | 59 | 比如: | |
@@ -65,16 +65,18 @@ cc11001100-jquery-click-event-function="cc11001100_click_5" | |||
| 65 | 65 | ```text | |
| 66 | 66 | cc11001100_click_5 | |
| 67 | 67 | ``` | |
| 68 | - 然后我们在开发者工具中切换到console,粘贴这个全局变量的名称`cc11001100_click_5`并回车,查看它的内存地址: | ||
| 68 | + 然后我们在开发者工具中切换到`console`,粘贴这个全局变量的名称`cc11001100_click_5`并回车,查看它的内存地址: | ||
| 69 | 69 |  | |
| 70 | - 然后单击内存地址跟进去,就直接定位到了登录按钮的click事件所绑定的代码: | ||
| 70 | + 然后单击内存地址跟进去,就直接定位到了登录按钮的`click`事件所绑定的代码: | ||
| 71 | 71 |  | |
| 72 | 72 | 往下拉,可以看到参数`mm`的加密方式: | |
| 73 | + | ||
| 73 | 74 |  | |
| 75 | + | ||
| 74 | 76 | 至此梳理完毕,以比较科学的方式很轻松就定位到了加密位置,逆向不是体力活,这才是逆向的乐趣啊! | |
| 75 | 77 | ||
| 76 | 78 | # 五、原理概述 | |
| 77 | - 通过hook jQuery的$.fn原型上的一些设置事件的方法来实现,目前支持的jQuery事件方法: | ||
| 79 | + 通过`hook` `jQuery`的`$.fn`原型上的一些设置事件的方法来实现,目前支持的`jQuery`事件方法: | ||
| 78 | 80 | ||
| 79 | 81 | ```text | |
| 80 | 82 | "click", | |
@@ -105,14 +107,14 @@ cc11001100_click_5 | |||
| 105 | 107 | "on" | |
| 106 | 108 | ``` | |
| 107 | 109 | ||
| 108 | - 元素每被设置一个事件就会多一个属性,复制这个属性的值,对应着一个全局变量,在console上粘贴,这个就是此元素的此事件对应着的真实代码位置。 | ||
| 110 | + 元素每被设置一个事件就会多一个属性,复制这个属性的值,对应着一个全局变量,在`console`上粘贴,这个就是此元素的此事件对应着的真实代码位置。 | ||
| 109 | 111 | ||
| 110 | 112 | # 六、问题反馈 | |
| 111 | 113 | ||
| 112 | - - 如果发现有Hook不到的情况,请在[issue](https://github.com/JSREI/jQuery-hook/issues)中反馈 | ||
| 114 | + - 如果发现有`Hook`不到的情况,请在[issue](https://github.com/JSREI/jQuery-hook/issues)中反馈 | ||
| 113 | 115 | - 任何诉求与建议,请在[issue](https://github.com/JSREI/jQuery-hook/issues)中反馈 | |
| 114 | - - 如果您觉得此项目有任何可改进的地方(不仅局限于文档、代码)并且懒得说一堆话解释想直接上手改,欢迎提pr | ||
| 116 | + - 如果您觉得此项目有任何可改进的地方(不仅局限于文档、代码)并且懒得说一堆话解释想直接上手改,欢迎提`pr` | ||
| 115 | 117 | ||
| 116 | 118 | # 七、TODO | |
| 117 | - - 对jQuery发出的请求进行监控和Hook | ||
| 119 | + - 对`jQuery`发出的请求进行监控和`Hook` | ||
| 118 | 120 | - 如果希望有其它功能在[issue](https://github.com/CC11001100/jQuery-hook/issues)区留言讨论 | |
| Back | FazBrowse Home | New Git URL |
0 commit comments