【反爬虫】极验4 W参数逆向分析

张开发
2026/4/15 9:34:22 15 分钟阅读

分享文章

【反爬虫】极验4 W参数逆向分析
声明本文只讲快速定位 跟栈过程 不提供完整代码 本文章中所有内容仅供学习交流严禁用于商业用途和非法用途否则由此产生的一切后果均与作者无关逆向分析验证接口当中 主要参数为W 其余参数在请求验证码时返回 W明文如下{passtime:3151,userresponse:[2,2],device_id:,lot_number:ed912d7b613d457784a0e0a183c2a128,pow_msg:1|14|sha256|2026-04-14T09:14:53.63648208:00|08c16c99330a5a1d6b7f4371bbd5a978|ed912d7b613d457784a0e0a183c2a128||99f6d6260560cb6f,pow_sign:000097ffb9d37b0d88115d9eba712e73e5f89b01e27ed8ba3a19b439f8715a58,geetest:captcha,lang:zh,ep:123,biht:1426265548,yDWL:hZGx,c2a14577:{84a0e0a1:7b61},em:{ph:0,cp:0,ek:11,wd:1,nt:0,si:0,sc:0}}其中userresponse会根据验证码类型的不同而不同其中就是识别结果快速定位找到4代的JS代码 script断点或者直接根据请求的堆栈跟 很容易找到 名字叫做gcaptcha4.js的代码 直接全局搜索 symmetrical 或者 asymmetric这就是加密的位置可以直接在这个function里打断点粗略看一下 猜测2应该是个aes 1是个什么暂时不知道 断点直接打到return可以看到是两段拼接的 第一段如下图第二段粗略看一下代码逻辑 第一段是一个AES加密 直接鼠标放到第一步搜索出来那里就会显示 模式为CBC 偏移量固定值0000000000000000 密钥n 是前面生成的 一会再弄这里要注意一下return (0, _ᖈᖂᕸᕴ[_ᕸᕿᕸᖉ(161)])(u) _ }采用的是16进制编码 不能直接tostring第一段 可以其实是一个rsa 只不过公钥直接搜索不到 使用模数n和指数e的十六进制字符串 生成公钥或者直接使用function get__(plainText){const nHex00C1E3934D1614465B33053E7F48EE4EC87B14B95EF88947713D25EECBFF7E74C7977D02DC1D9451F79DD5D1C10C29ACB6A9B4D6FB7D0A0279B6719E1772565F09AF627715919221AEF91899CAE08C0D686D748B20A3603BE2318CA6BC2B59706592A9219D0BF05C9F65023A21D2330807252AE0066D59CEEFA5F2748EA80BAB81;const eVal10001;const nBigIntBigInt(0xnHex);const nBufferBuffer.from(nBigInt.toString(16),hex);const eBufferBuffer.from(eVal.toString(16),hex);const jwk{kty:RSA,n:nBuffer.toString(base64url),e:eBuffer.toString(base64url)};const publicKeycrypto.createPublicKey({key:jwk,format:jwk});const messageBuffer.from(plainText,utf8);const encryptedcrypto.publicEncrypt({key:publicKey,padding:crypto.constants.RSA_PKCS1_PADDING//对应 PKCS1_v1_5},message);let hexResultencrypted.toString(hex);if(hexResult.length%2!0){hexResult0hexResult;}returnhexResult}然后将两段破解的加起来 关于密钥n 往上跟可以看到e() e() e() e()这样的东西 e函数很简单

更多文章