1. 无限debugger的绕过技巧遇到无限debugger是Web逆向中常见的反调试手段。第一次打开题目页面时如果直接开启开发者工具就会陷入无限debugger循环。这里有个实用技巧先正常加载页面等页面完全加载完成后再打开开发者工具这样就能绕过这个保护机制。我测试过几种方法发现最稳定的是通过Tampermonkey油猴脚本来hook关键函数。不过要注意直接hook构造器可能会遇到浏览器卡死的情况。这时候可以换个思路尝试hook XMLHttpRequest的open方法。下面是我实际使用的一个hook脚本示例// UserScript // name hook_debugger // namespace http://tampermonkey.net/ // version 0.1 // description 绕过无限debugger // match https://match2023.yuanrenxue.cn/topic/2 // grant none // run-at document-start // /UserScript (function() { var originalConstructor window.Function.prototype.constructor; window.Function.prototype.constructor function() { if(arguments[0] debugger) { return function(){}; } return originalConstructor.apply(this, arguments); }; })();这个脚本的原理是重写Function构造器当检测到debugger字符串时就返回一个空函数。在实际操作中我发现有时候需要配合页面刷新才能生效。建议的操作顺序是安装脚本→刷新页面→打开开发者工具→开始调试。2. 分析网络请求与时间戳机制翻页时会发出两个请求一个获取数据的API请求一个看似返回图片的请求。但仔细观察会发现图片请求每次返回的内容都一样这显然不合常理。用Fiddler或Python抓包分析后发现这个图片实际上返回的是一个时间戳。我做了多次测试确认这个时间戳会在后续的token生成中被使用。数据API请求的token参数需要逆向分析而这个token是拼接在URL的params里的。这里有个小技巧可以用油猴脚本直接hook URL中的token参数。(function() { var open window.XMLHttpRequest.prototype.open; window.XMLHttpRequest.prototype.open function(method, url, async) { if (url.indexOf(token) ! -1) { debugger; } return open.apply(this, arguments); }; })();通过这个hook可以轻松定位到token生成的位置。逆向分析发现token生成函数_$o(_0x8c4029)的参数_0x8c4029是由时间戳和URL拼接而成。这里的关键是确认使用的时间戳来源 - 经过验证就是之前那个图片请求返回的时间戳。3. 逆向分析token生成算法定位到token生成函数后接下来的工作就是逆向算法。首先需要把关键函数_$o抠出来但实际操作中会遇到几个问题函数依赖其他函数和变量需要一并提取代码经过混淆需要还原部分逻辑存在环境检测需要补全必要的浏览器环境我遇到的第一个坑是内存爆破错误。这种错误通常是由于代码格式化引起的。解决方法很简单使用在线JS压缩工具把格式化后的代码还原成压缩状态。推荐使用菜鸟工具的JS压缩功能实测可以有效解决这类问题。第二个常见错误是缺少document方法。比如遇到createElement缺失的错误就需要补全document环境。在Node.js环境下运行时还需要补全window、Document等浏览器特有对象。特别要注意的是有些页面会检测login状态需要手动设置logintrue。4. 完整实现方案与注意事项经过上述步骤我们已经掌握了token生成的完整逻辑。现在可以用Python实现自动化流程首先请求图片接口获取时间戳将时间戳与URL拼接作为参数调用逆向出来的token生成算法使用生成的token发起数据请求这里有个重要细节两次使用的时间戳必须是同一个即都要使用图片接口返回的那个时间戳不能自己生成新的时间戳。我刚开始就犯了这个错误导致生成的token无效。在实现过程中建议先确保在浏览器控制台能正确生成token然后再移植到Python环境。这样可以快速定位问题是出在算法实现还是环境配置上。如果遇到生成的token在Python中无效但在浏览器中有效的情况大概率是缺少某些环境变量或全局配置。最后提醒一点逆向工程要遵守法律法规仅用于学习研究目的。这个案例中的技术可以帮助我们更好地理解Web安全机制在实际开发中设计更安全的系统。
猿人学第二届第二题:逆向破解Web端token生成机制
1. 无限debugger的绕过技巧遇到无限debugger是Web逆向中常见的反调试手段。第一次打开题目页面时如果直接开启开发者工具就会陷入无限debugger循环。这里有个实用技巧先正常加载页面等页面完全加载完成后再打开开发者工具这样就能绕过这个保护机制。我测试过几种方法发现最稳定的是通过Tampermonkey油猴脚本来hook关键函数。不过要注意直接hook构造器可能会遇到浏览器卡死的情况。这时候可以换个思路尝试hook XMLHttpRequest的open方法。下面是我实际使用的一个hook脚本示例// UserScript // name hook_debugger // namespace http://tampermonkey.net/ // version 0.1 // description 绕过无限debugger // match https://match2023.yuanrenxue.cn/topic/2 // grant none // run-at document-start // /UserScript (function() { var originalConstructor window.Function.prototype.constructor; window.Function.prototype.constructor function() { if(arguments[0] debugger) { return function(){}; } return originalConstructor.apply(this, arguments); }; })();这个脚本的原理是重写Function构造器当检测到debugger字符串时就返回一个空函数。在实际操作中我发现有时候需要配合页面刷新才能生效。建议的操作顺序是安装脚本→刷新页面→打开开发者工具→开始调试。2. 分析网络请求与时间戳机制翻页时会发出两个请求一个获取数据的API请求一个看似返回图片的请求。但仔细观察会发现图片请求每次返回的内容都一样这显然不合常理。用Fiddler或Python抓包分析后发现这个图片实际上返回的是一个时间戳。我做了多次测试确认这个时间戳会在后续的token生成中被使用。数据API请求的token参数需要逆向分析而这个token是拼接在URL的params里的。这里有个小技巧可以用油猴脚本直接hook URL中的token参数。(function() { var open window.XMLHttpRequest.prototype.open; window.XMLHttpRequest.prototype.open function(method, url, async) { if (url.indexOf(token) ! -1) { debugger; } return open.apply(this, arguments); }; })();通过这个hook可以轻松定位到token生成的位置。逆向分析发现token生成函数_$o(_0x8c4029)的参数_0x8c4029是由时间戳和URL拼接而成。这里的关键是确认使用的时间戳来源 - 经过验证就是之前那个图片请求返回的时间戳。3. 逆向分析token生成算法定位到token生成函数后接下来的工作就是逆向算法。首先需要把关键函数_$o抠出来但实际操作中会遇到几个问题函数依赖其他函数和变量需要一并提取代码经过混淆需要还原部分逻辑存在环境检测需要补全必要的浏览器环境我遇到的第一个坑是内存爆破错误。这种错误通常是由于代码格式化引起的。解决方法很简单使用在线JS压缩工具把格式化后的代码还原成压缩状态。推荐使用菜鸟工具的JS压缩功能实测可以有效解决这类问题。第二个常见错误是缺少document方法。比如遇到createElement缺失的错误就需要补全document环境。在Node.js环境下运行时还需要补全window、Document等浏览器特有对象。特别要注意的是有些页面会检测login状态需要手动设置logintrue。4. 完整实现方案与注意事项经过上述步骤我们已经掌握了token生成的完整逻辑。现在可以用Python实现自动化流程首先请求图片接口获取时间戳将时间戳与URL拼接作为参数调用逆向出来的token生成算法使用生成的token发起数据请求这里有个重要细节两次使用的时间戳必须是同一个即都要使用图片接口返回的那个时间戳不能自己生成新的时间戳。我刚开始就犯了这个错误导致生成的token无效。在实现过程中建议先确保在浏览器控制台能正确生成token然后再移植到Python环境。这样可以快速定位问题是出在算法实现还是环境配置上。如果遇到生成的token在Python中无效但在浏览器中有效的情况大概率是缺少某些环境变量或全局配置。最后提醒一点逆向工程要遵守法律法规仅用于学习研究目的。这个案例中的技术可以帮助我们更好地理解Web安全机制在实际开发中设计更安全的系统。