同程旅行 user-dun参数js逆向流程

同程旅行中有多个接口用到了user-dun参数,这里我以hoteldetailroomlist接口为例,找到参数加密入口如下(A6方法):

根据分析可知入参为AJ, AH, AP, AG值分别是:

AJ: 'https://www.ly.com/tapi/v4/hoteldetailroomlist?hotelid=66011327&indate=2025-10-15&outdate=2025-10-16&adultsNumber=1&childrenAges=&filterList=&rechargeTicket=1&searchEntranceId=h5_home&traceToken=&if=&of=&ch=&refid='

AH: undefined

AP: 2

AG: {}

那么我们就需要自己定义个函数来实现获取user-dun加密的返回值:

url = 'https://www.ly.com/tapi/v4/hoteldetailroomlist?hotelid=66011327&indate=2025-10-15&outdate=2025-10-16&adultsNumber=1&childrenAges=&filterList=&rechargeTicket=1&searchEntranceId=h5_home&traceToken=&if=&of=&ch=&refid='

function main123(url) {
    let arg2 = undefined;
    let arg3 = 2
    let arg4 = {}
    let userDun1 = A7(url, arg2, arg3, arg4);
    process = _process;
    return userDun1;

}

而整个加密算法就是一步一步扣就行,哪个变量和函数未定义就扣哪个:

function U(Q, h) {
    var X = v();
    return U = function (J, H) {
        J = J - 0xb6;
        var s = X[J];
        if (U['bOEoyS'] === undefined) {
            var P = function (K) {
                var Z = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';
                var i = ''
                    , L = '';
                for (var x = 0x0, l, g, T = 0x0; g = K['charAt'](T++); ~g && (l = x % 0x4 ? l * 0x40 + g : g,
                x++ % 0x4) ? i += String['fromCharCode'](0xff & l >> (-0x2 * x & 0x6)) : 0x0) {
                    g = Z['indexOf'](g);
                }
                for (var f = 0x0, F = i['length']; f < F; f++) {
                    L += '%' + ('00' + i['charCodeAt'](f)['toString'](0x10))['slice'](-0x2);
                }
                return decodeURIComponent(L);
            };
            var R = function (K, Z) {
                var L = [], k = 0x0, l, g = '';
                K = P(K);
                var T;
                for (T = 0x0; T < 0x100; T++) {
                    L[T] = T;
                }
                for (T = 0x0; T < 0x100; T++) {
                    k = (k + L[T] + Z['charCodeAt'](T % Z['length'])) % 0x100,
                        l = L[T],
                        L[T] = L[k],
                        L[k] = l;
                }
                T = 0x0,
                    k = 0x0;
                for (var f = 0x0; f < K['length']; f++) {
                    T = (T + 0x1) % 0x100,
                        k = (k + L[T]) % 0x100,
                        l = L[T],
                        L[T] = L[k],
                        L[k] = l,
                        g += String['fromCharCode'](K['charCodeAt'](f) ^ L[(L[T] + L[k]) % 0x100]);
                }
                return g;
            };
            U['QboEeO'] = R,
                Q = arguments,
                U['bOEoyS'] = !![];
        }
        var G = X[0x0]
            , j = J + G
            , a = Q[j];
        return !a ? (U['XErZTD'] === undefined && (U['XErZTD'] = !![]),
            s = U['QboEeO'](s, H),
            Q[j] = s) : s = a,
            s;
    }
        ,
        U(Q, h);
}





url = 'https://www.ly.com/tapi/v4/hoteldetailroomlist?hotelid=66011327&indate=2025-10-15&outdate=2025-10-16&adultsNumber=1&childrenAges=&filterList=&rechargeTicket=1&searchEntranceId=h5_home&traceToken=&if=&of=&ch=&refid='

function main123(url) {
    let arg2 = undefined;
    let arg3 = 2
    let arg4 = {}
    let userDun1 = A7(url, arg2, arg3, arg4);
    process = _process;
    return userDun1;

}

console.log(main123(url));

除了加密算法,还需要模拟浏览器的环境,也就是经常说的补环境,由于字数限制补环境和整体代码并不完整,有需要可以联系博主获取。

解决 Conda 执行 `conda activate LADEDUN` 时提示 `CondaError: Run 'conda init' before 'conda activate'`,可参考以下方法: - **查找 conda 环境路径**:使用 `which conda` 命令查看 conda 的环境路径,确保路径无误。例如 `[root@bigdata-server python]# which conda /root/anaconda3/bin/conda` [^1]。 - **执行 conda init**:按照提示执行 `conda init` 命令,对 shell 进行初始化设置。不过部分情况执行该命令后仍会报错,若如此可参考 Anaconda 社区的方法链接:Unable to activate environment - prompted to Run 'conda init' before 'conda activate' but it doesn't work - Product Help - Anaconda Community [^2]。 - **检查脚本执行权限(PowerShell)**:若在 PowerShell 中出现此问题,打开 PowerShell 时可能会有提示“无法加载文件 C:\Users\87897\Documents\WindowsPowerShell\profile.ps1,因为在此系统上禁止运行脚本”。可参考 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies 来解决脚本执行权限问题 [^3]。 - **检查 zsh 配置(适用于 zsh)**:若使用 zsh,可查看 zsh 中的内容。确保 `conda initialize` 相关配置正确,示例如下: ```bash # >>> conda initialize >>> # !! Contents within this block are managed by 'conda init' !! __conda_setup="$('/home/hanliqiang/miniconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)" if [ $? -eq 0 ]; then eval "$__conda_setup" else if [ -f "/home/hanliqiang/miniconda3/etc/profile.d/conda.sh" ]; then . "/home/hanliqiang/miniconda3/etc/profile.d/conda.sh" else export PATH="/home/hanliqiang/miniconda3/bin:$PATH" fi fi unset __conda_setup # <<< conda initialize <<< ``` 确保路径等信息与自身环境相符 [^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值