LXK0301京东签到脚本-京喜工厂解决无法签到异常

LXK0301京东签到脚本-京喜工厂解决无法签到异常

orzlee
2021-03-03 / 75 评论 / 7,176 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年05月08日,已超过1279天没有更新,若内容或图片失效,请留言反馈。

jd_dreamFactory.png

前言

LXK0301大佬的京喜工厂自动签到脚本不知怎么一直提示:亲,活动太火爆了,请稍后再试吧!,基本无法使用,任务也不自动做了。

上网查了一下,全是说黑号,真蛋疼。因为脚本无法做任务什么的,但是手动完全没有问题,根本不是黑号,网上一股脑说黑号。

我就不信邪,app能做任务脚本就不行,肯定是脚本有问题。

2021-03-25 第二次更新,已经不需要自己抓包获取签名参数了,脚本会在每次执行时自动获取签名参数。已经联系作者,等作者更新吧!(推荐使用作者脚本,修复了参团问题)

2021-03-25更新,今天更新了下脚本,应该可以获取自己的签名参数使用了,有时间的朋友可以测试一下!仓库地址:jd_scripts-orzlee

2021-03-23更新,自己获取签名的方法可能无效,作者已经跟新脚本,目前使用我提供的签名参数可以正常做任务和领取电力,后续可能还需要研究。更新作者脚本即可!

原因

最根本的原因就是脚本发送请求链接签名有问题,这个好像只针对了部分用户,有的用户没问题,有的就会一直提示:亲,活动太火爆了,请稍后再试吧!

起初发现问题是在手机上用QuantumultX抓包京喜APP,点击地上的零件,再抓包脚本,然后找出usermaterial/PickUpComponent请求来对比。开始我还以为是cookie问题,我替换cookie重试请求还是太火爆错误,再重发一下抓包京喜APP的请求,依然成功。再替换替换脚本请求的url参数为抓包app的,莫名奇妙的成功了。这个锅必须脚本背了!

脚本中decrypt函数是负责请求链接签名的,但是目前脚本有问题,很多签名key都是没有值的,因为根本没有获取值,只有少部分定义了默认值。来看一下代码(目前是1535行):

function decrypt(time, stk, type) {
  if (stk) {
    const random = 'pmUmA8IyRcDp'; //这些常量其实每个用户都可能不一样
    const token = `tk01wd4571d58a8nT0tkdXczeW94f5x4qjWs44kcPCTXeWKa2xXY+ZxHaOtbRxmyw6vrIF4RDFwwTUfwy1pIqNE0oyWW`; //这些常量其实每个用户都可能不一样
    const fingerprint = 8410347712257161; //这些常量其实每个用户都可能不一样
    //这个时间转换和现在的不一样,现在是new Date(time).Format("yyyyMMddhhmmssSSS");,转换结果不一样,加密出来也不一样
    const timestamp = new Date(time).Format("yyyyMMddhhmmssS");
    const appId = 10001; //这个是活动id  是固定的
    const str = `${token}${fingerprint}${timestamp}${appId}${random}`;
    const hash1 = $.CryptoJS.HmacSHA512(str, token).toString($.CryptoJS.enc.Hex); //这里加密算法有可能不一样
    let st = '';
    stk.split(',').map((item, index) => {
        //下面的签名参数只有些默认值,很多都是空的,但是链接上又带了有效值,服务器验签估计不合法(但是有的用户却没有问题,搞不懂)
      st += `${item}:${item === '_time' ? time : item === 'zone' ? 'dream_factory' : item === 'type' ? type || '1' : ''}${index === stk.split(',').length -1 ? '' : '&'}`;
    })
    const hash2 = $.CryptoJS.HmacSHA256(st, hash1).toString($.CryptoJS.enc.Hex);
    console.log(`st:${st}\n`)
    // console.log(`hash2:${JSON.stringify(["".concat(timestamp.toString()), "".concat(fingerprint.toString()), "".concat(appId.toString()), "".concat(token), "".concat(hash2)])}\n`)
    console.log(`h5st:${["".concat(timestamp.toString()), "".concat(fingerprint.toString()), "".concat(appId.toString()), "".concat(token), "".concat(hash2)].join(";")}\n`)
    return ["".concat(timestamp.toString()), "".concat(fingerprint.toString()), "".concat(appId.toString()), "".concat(token), "".concat(hash2)].join(";")
  } else {
    return '20210121201915905;8410347712257161;10001;tk01wa5bd1b5fa8nK2drQ3o3azhyhItRUb1DBNK57SQnGlXj9kmaV/iQlhKdXuz1RME5H/+NboJj8FAS9N+FcoAbf6cB;3c567a551a8e1c905a8d676d69e873c0bc7adbd8277957f90e95ab231e1800f2'
  }
}

研究过程我就不再多说了,京东那边全是混淆的JS,真的很头疼,我弄了一下午才摸清楚他的逻辑。
整个流程大概是这样(官方的js混淆了,乱七八糟的就不贴代码了):

  1. 第一次进入活动页面会发送POST请求:https://cactus.jd.com/request_algo?g_ty=ajax,将返回结果储存在本地(这个默认应该没有有效期,但是京喜工厂里面的JS会设置有效期,过期会重新获取)。已经更新脚本自动获取签名参数了。

    请求参数:

     {
         appId: "10001"
         expandParams: ""
         //fingerprint
         //pc浏览器我试过,就算拿到所有数据跑脚本依然不行,还是太火爆错误。所以保险还是去京喜APP抓包吧!
         fp: "5525701123405161"
         platform: "web"
         timestamp: 1614687205087
         version: "1.0"
     }

    接口会返回:

     {
         data: {
           result: {
           //加密函数
             algo: "function test(token,fingerprint,timestamp,appId,algo){const random='jQ1SS0VI2Vuw';const str=`${token}${fingerprint}${timestamp}${appId}${random}`;return algo.SHA512(str)}"
             //加密token
             tk: "tk01w91541b51a8nWURUM3hiZk9HHRKep5j4FeOg/jHOQoGSDcsasdSOZ+83iz4uf/YBXHcK6xMIUqqv5/iJv6F0aooT5Nd3"
           }
           version: "1.0"
           message: ""
           status: 200
         }
     }

    这个接口会返回所有签名需要的参数,也就是脚本中decrypt中的参数,其实照着值样子都知道怎么替换了。

  2. 当前时间格式转换new Date(time).Format("yyyyMMddhhmmssSSS")这个时间是和链接参数中的'_time匹配'。

  3. 字符串拼接${token}${fingerprint}${timestamp}${appId}${random}

  4. 第一次签名,将第三步的字符串用SHA或者MD5加密,这个主要参考第一步中的机密函数:

         function test(token,fingerprint,timestamp,appId,algo){
             const random='jQ1SS0VI2Vuw';
             const str=`${token}${fingerprint}${timestamp}${appId}${random}`;
             return algo.SHA512(str)
         }

    这个函数提供了加密方法和随机字符串,官方直接用它做闭包函数第一次签名。

  5. 第一次签名完成后,开始第二次了,这个参数每个接口可能不同,它会按照请求url中的_stk参数来提供签名参数,例如&_stk=_time,pin,placeId,zone,那么就需要将参数拼接成time:xxxx&pin:xxxx&placeId:xxxx&zone:xxx这样子。stk参数的值也会包含在url中,例如:

     https://m.jingxi.com/dreamfactory/usermaterial/PickUpComponent?zone=dream_factory&placeId=1&pin=91DCBu8VvYt6rEdezHZ_VQ%3D%3D&_time=1614622722731&_stk=_time%2Cpin%2CplaceId%2Czone&_ste=1&h5st=20210302021842732%3B6099600123439161%3B10001%3Btk01wa66691cafa8nSmV1UDN2SWtZAiPI1uR1EAuPwYDaw36v9gQGhJz5Ac4h2cjfkeCQexVweqwa6%2BsjvERwkVU6wxTK%3Ba795we798qwe789789qe8262584d49f9449a1ce0194bb26c72049eef428f5e23e1043a641d&_=1614622722744&sceneval=2&g_login_type=1&callback=jsonpCBKR&g_ty=ls
  6. 第二次签名加密的算法是固定的,SHA256。

  7. 最后拼接:

     ["".concat(timestamp.toString()), "".concat(fingerprint.toString()), "".concat(appId.toString()), "".concat(token), "".concat(hash2)].join(";")

抓包

2021-03-04 更新可以免去抓包和修改脚本操作了:

一旦有一个设备的url签名参数更新,其他设备都会失效,如果多设备跑同一个账号要保持一直,否则还是会失败的!!!

我更新了脚本,不需要手动抓包了,QuantumultX可以添加url_sign_params.conf重写引用,其他平台可能需要自己写一下。然后删除京喜APP,重新下载后进入京喜工厂(最好重下APP,不然有可能还是太火爆异常,如果没有提示退出京喜工厂再进一次,多试试!):

折腾好了就只使用京喜APP进入京喜工厂(url签名参数会被京喜工厂里面的JS设置过期时间,过期会重新获取),以免从京东APP进入京喜工厂跳转到京喜APP重新获取覆盖,京东APP里面的京喜工厂获取的url签名参数也不能执行成功!只能使用京喜APP的url签名参数!
tips_get_url_sign_params.png

日志可以查看url签名参数:
get_url_sign_params.jpg

以下为未更新之前的方法:

找到了问题就好解决了,抓包京喜APP一个请求就行了,抓包之前建议先删除APP,因为签名参数会存在本地,基本上弄不到了。删掉APP再进入京喜工厂之前,准备好抓包工具,IOS可以用QuantumultX、Surge等,PC抓包太多了,一搜一大把。

准备好抓包工具之后,进入京喜工厂,等待完全进入工厂,最好再捡下零件。没有报错就可以关掉抓包工具了。

搜索algo,找到签名参数请求:
quantumulxX-1.jpg

请求JSON和响应JSON都要看,不然你不知道fingerprint参数,是一串数字,在请求JSON里:
quantumulxX-2.jpg

复制返回请求中的参数:
quantumulxX-3.jpg

修改脚本

脚本我修改了很多处,但是很简单:

  1. 新增一个获取url参数的函数:

     /**
      * 新增url参数获取函数
      * @param url_string
      * @param param
      * @returns {string|string}
      */
     function getUrlQueryParams(url_string, param)
     {
       let  url = new URL(url_string);
       let data = url.searchParams.get(param);
       return data ? data : '';
     }
  2. 时间函数与官方不一致,会导致签名结果错误(这函数是官方混淆JS里面扒出来的):

     /*
     修改时间戳转换函数,京喜工厂原版修改
      */
     Date.prototype.Format = function (fmt) {
       var e,
           n = this, d = fmt, l = {
             "M+": n.getMonth() + 1,
             "d+": n.getDate(),
             "D+": n.getDate(),
             "h+": n.getHours(),
             "H+": n.getHours(),
             "m+": n.getMinutes(),
             "s+": n.getSeconds(),
             "w+": n.getDay(),
             "q+": Math.floor((n.getMonth() + 3) / 3),
             "S+": n.getMilliseconds()
           };
       /(y+)/i.test(d) && (d = d.replace(RegExp.$1, "".concat(n.getFullYear()).substr(4 - RegExp.$1.length)));
       for (var k in l) {
         if (new RegExp("(".concat(k, ")")).test(d)) {
           var t, a = "S+" === k ? "000" : "00";
           d = d.replace(RegExp.$1, 1 == RegExp.$1.length ? l[k] : ("".concat(a) + l[k]).substr("".concat(l[k]).length))
         }
       }
       return d;
     }
  3. decrypt函数也要修改,我加了一个url参数,在拼接签名参数需要的值可以在url中拿(实在不想动太多代码,怎么方便怎么来吧):

     /*
     签名函数
     签名信息获取地址:https://cactus.jd.com/request_algo?g_ty=ajax
     方法: POST
     参数:{
       appId: "10001"
       expandParams: ""
       fp: "5525701123405161" //fingerprint
       platform: "web"
       timestamp: 1614687205087
       version: "1.0"
     }
     返回结果:{data: {
       result: {
         algo: "function test(token,fingerprint,timestamp,appId,algo){const random='jQ1SS0VI2Vuw';const str=`${token}${fingerprint}${timestamp}${appId}${random}`;return algo.SHA512(str)}" //加密函数
         tk: "tk01w91541b51a8nWURUM3hiZk9HHRKep5j4FeOg/jHOQoGSDcsasdSOZ+83iz4uf/YBXHcK6xMIUqqv5/iJv6F0aooT5Nd3" //token
       }
       version: "1.0"
       message: ""
       status: 200
       }
     }
     将返回参数替换:
     const random : data.result.algo字符串中的const random='xxxxxx'
     const token : data.result.tk
     const fingerprint : 通过抓包APP获取
     const hash1加密方法(例子:algo.SHA512、algo.MD5,主要看签名信息获取地址返回结果data.result.algo)
      */
     function decrypt(time, stk, type, url) {
       stk = stk || (url ? getUrlQueryParams(url, '_stk') : '')
       if (stk) {
         const random = '1gy8nc5oDM+y';
         const token = `tk01w9a771c1aa8nd1k2NUo4UmNaahBe0/qh61gMNV9222JdJwlR0wyO9gko9dFTogSpvPIpqxstZJ9tl8JM9ONKNJWk`;
         const fingerprint = 5525701217505161;
         const timestamp = new Date(time).Format("yyyyMMddhhmmssSSS");
         const appId = 10001;
    
         const str = `${token}${fingerprint}${timestamp}${appId}${random}`;
         const hash1 = $.CryptoJS.HmacSHA512(str, token).toString($.CryptoJS.enc.Hex);
         let st = '';
         stk.split(',').map((item, index) => {
           // st += `${item}:${item === '_time' ? time : item === 'zone' ? 'dream_factory' : item === 'type' ? type || '1' : ''}${index === stk.split(',').length -1 ? '' : '&'}`;
           st += `${item}:${getUrlQueryParams(url, item)}${index === stk.split(',').length -1 ? '' : '&'}`;
         })
         const hash2 = $.CryptoJS.HmacSHA256(st, hash1).toString($.CryptoJS.enc.Hex);
         console.log(`st:${st}\n`)
         // console.log(`hash2:${JSON.stringify(["".concat(timestamp.toString()), "".concat(fingerprint.toString()), "".concat(appId.toString()), "".concat(token), "".concat(hash2)])}\n`)
         console.log(`h5st:${["".concat(timestamp.toString()), "".concat(fingerprint.toString()), "".concat(appId.toString()), "".concat(token), "".concat(hash2)].join(";")}\n`)
         return ["".concat(timestamp.toString()), "".concat(fingerprint.toString()), "".concat(appId.toString()), "".concat(token), "".concat(hash2)].join(";")
       } else {
         return '20210121201915905;8410347712257161;10001;tk01wa5bd1b5fa8nK2drQ3o3azhyhItRUb1DBNK57SQnGlXj9kmaV/iQlhKdXuz1RME5H/+NboJj8FAS9N+FcoAbf6cB;3c567a551a8e1c905a8d676d69e873c0bc7adbd8277957f90e95ab231e1800f2'
       }
     }
  4. 最后一步了,搜索${decrypt(关键字,大概有8处要修改,主要是团长这部分多,主要还是没有解耦:
    参团部分(每一个api不一样,只要剥离出&h5st=${decrypt(xxxxx就行了,单独拼接):

     //可获取开团后的团ID,如果团ID为空并且surplusOpenTuanNum>0,则可继续开团
     //如果团ID不为空,则查询QueryTuan()
     function QueryActiveConfig() {
       return new Promise((resolve) => {
         //option中的url拉出来替换如下
         let url = `https://m.jingxi.com/dreamfactory/tuan/QueryActiveConfig?activeId=${escape(tuanActiveId)}&_time=${Date.now()}&_=${Date.now()}&sceneval=2&g_login_type=1&_ste=1`
         url += `&h5st=${decrypt(Date.now(), '', '', url)}`
         const options = {
           'url': url, //改成变量
           "headers": {
         ...

    taskurlnewtasksysUrl函数部分:

     function taskurl(functionId, body = '', stk) {
       let url = `${JD_API_HOST}/dreamfactory/${functionId}?zone=dream_factory&${body}&sceneval=2&g_login_type=1&_time=${Date.now()}&_=${Date.now()}&_ste=1`
       url += `&h5st=${decrypt(Date.now(), stk, '', url)}`
       if (stk) {
         url += `&_stk=${stk}`;
       }
       ...
    
     function newtasksysUrl(functionId, taskId, stk) {
       let url = `${JD_API_HOST}/newtasksys/newtasksys_front/${functionId}?source=dreamfactory&bizCode=dream_factory&sceneval=2&g_login_type=1&_time=${Date.now()}&_=${Date.now()}&_ste=1`;
       if (taskId) {
         url += `&taskId=${taskId}`;
       }
       if (stk) {
         url += `&_stk=${stk}`;
       }
       //传入url进行签名,加入位置不要错了,不然有些签名参数获取不到值
       url += `&h5st=${decrypt(Date.now(), stk, '', url)}`
       ...

大功告成,发到手机上或者node跑一下试试:
success.png

结果非常完美。

docker处理

手机端好办,docker麻烦一点,放到远程或者本地都行,具体看说明jd_scripts docker。docker提供了一个环境变量CUSTOM_SHELL_FILE(你也可以用CUSTOM_LIST_FILE挂载本地定时任务列表,只是更新要手动,要自动还是需要脚本的)可以跑远程shell脚本,jd_scripts docker说明中还有示例,照葫芦画瓢即可。我在github上弄一份自用,你可以参考或者fork一份自己用,地址:jd_scripts-orzlee。只需替换decrypt函数部分常量就好了,shell脚本最好看看我写的注释。然后在环境变量中加入shell脚本地址CUSTOM_SHELL_FILE=https://raw.githubusercontent.com/xxx/xxx.sh即可。

如果用我仓库的远程脚本,务必docker配置环境变量RANDOM_DELAY_MAX=600, 600的值可以自己设置非零正整数,意思是所有脚本每天随机延迟0-600秒执行。

结语

经过不懈努力,终于还是折腾好了,这半个月都是手动点击脚本,人家升级都比我快,没办法手动哪里有脚本那么按时呢!混淆JS浪费不少时间,眼睛都能看瞎。

9
取消
扫码打赏
支付金额随意哦!

评论 (75)

取消
  1. 头像
    毛毛
    Windows 10 · Google Chrome

    大佬好

    回复
  2. 头像
    xgbc
    Windows 10 · Google Chrome

    您好,想请教一下,您分析的混淆JS地址可以给一下吗?

    回复
    1. 头像
      orzlee 作者
      Windows 10 · Google Chrome
      @ xgbc

      他的JS就在頁面裏面啊!沒有神單獨的JS。

      回复
      1. 头像
        xgbc
        Windows 10 · Google Chrome
        @ orzlee

        感谢,您说的algo的我找到了,我再看看其他的,我在研究财富岛的脚本,我现在试的几个功能没有h5st也可以用,我再长时间测一下

        回复
    2. 头像
      xgbc
      Windows 10 · Google Chrome
      @ xgbc

      请问是不是这个,今晚翻js文件发现的

      回复
  3. 头像
    天天向上
    Windows 10 · Google Chrome

    let st = '';
    stk.split(',').map((item, index) => {
    // st += ${item}:${item === '_time' ? time : item === 'zone' ? 'dream_factory' : item === 'type' ? type || '1' : ''}${index === stk.split(',').length -1 ? '' : '&'};
    st += ${item}:${getUrlQueryParams(url, item)}${index === stk.split(',').length -1 ? '' : '&'};
    })
    const hash2 = $.CryptoJS.HmacSHA256(st, hash1).toString($.CryptoJS.enc.Hex);
    console.log(st:${st}\n)

    大佬你好,不太懂js,请问下这个二次加密 是那些东西来加密的表情 这个st是个啥参数 怎么拼接的有参考吗 谢谢

    回复
    1. 头像
      orzlee 作者
      Linux · Google Chrome
      @ 天天向上

      通过接口请求的加密参数来加密的

      回复
      1. 头像
        天天向上
        Windows 10 · Google Chrome
        @ orzlee
        该回复疑似异常,已被系统拦截!
        回复
        1. 头像
          orzlee 作者
          Linux · Google Chrome
          @ 天天向上

          我文章里面应该写了,仔细看看lxk0301的惊喜工厂脚本有几个函数就是专门处理加密的!用什么参数拼接和加密方式、随机字符串等都是通过请求加密参数接口获取的,每次请求的结果都是随机的,所以加密方法等信息也不固定!你仔细看看文章有提到这个接口!

          回复
          1. 头像
            天天向上
            Windows 10 · Google Chrome
            @ orzlee

            大佬,二次加密 是这样拼接对吧表情time:1627711049738&factoryid=1099525712379&zone:dream_factory1c52cdf6da16b0942722da41631ae9918e13cc412f17a46a7044f455e2e7ce1dfc50616eef1d6c8d3e776015d5a1f00185d76c256096c2d98a89107a686e4f64

            回复
            1. 头像
              天天向上
              Windows 10 · Google Chrome
              @ 天天向上

              拼接之后sha256加密出来的050577e97774992a83cf895eefa95795a9fb2cbefeae58cb83200b75157e85d1 这就加到h5st的最后那一段吧

              回复
              1. 头像
                orzlee 作者
                Linux · Google Chrome
                @ 天天向上

                拼接参数也是加密参数返回的,怎么突然折腾这个加密?脚本都已经修复了!

                回复
                1. 头像
                  天天向上
                  Windows 10 · Google Chrome
                  @ orzlee

                  表情我想用易语言写一个惊喜工厂挂机工具

                  回复
                  1. 头像
                    orzlee 作者
                    Linux · Google Chrome
                    @ 天天向上

                    那你有的折腾了,先请求api获取加密方式等信息(签名参数api一次脚本请求一次就好了),然后按照api返回的内容加密,api会返回一个加密函数,那个js函数是封装好了的,目前js通过new Function把它从字符串变成一个可以调用的函数使用,你用易语言这里弄起来相当麻烦!

                    回复
                    1. 头像
                      天天向上
                      Windows 10 · Google Chrome
                      @ orzlee

                      嗯,慢慢研究表情

                      回复
  4. 头像
    好好study
    Windows 10 · Google Chrome

    大佬考虑弄一下京喜token的自动获取吗,可以方便财富岛提现

    回复
    1. 头像
      orzlee 作者
      Linux · Google Chrome
      @ 好好study

      京喜脚本混淆了,没法阅读!

      回复
      1. 头像
        好好study
        Windows 10 · Google Chrome
        @ orzlee

        {"timestamp":"1618558883029","phoneid":"40位,"farm_jstoken":"32位"},它的长度是类似这种的。
        然后可以在京喜农场做水滴任务可以抓到(/cubeactive\/farm\/dotask),在京喜工厂收取电力也可以抓到(/dreamfactory/generator/CollectCurrentElectricity),只不过farm_jstoken应该是换成了apptoken,可以参考whyour大佬的这个脚本(https://github.com/whyour/hundun/blob/master/quanx/jx_tokens.js)。之前有大佬提供了tg机器人生成京喜token,只需要发送自己的pt_pin就可以,所以我觉得应该也是有可能自动获取的表情

        回复
        1. 头像
          se7en
          Windows 10 · Google Chrome
          @ 好好study

          生成京喜token的TG机器人还可以使用吗?

          回复
          1. 头像
            orzlee 作者
            Linux · Google Chrome
            @ se7en

            用作者脚本就好了,已经修复了!

            回复
  5. 头像
    好好学习
    Windows 10 · Google Chrome

    大佬可以看一下京东极速版签到的算法吗,学习表情

    回复
  6. 头像
    二锅头
    MacOS · Google Chrome

    感谢大佬,感谢lxk0301表情

    回复
    1. 头像
      orzlee 作者
      Windows 10 · Google Chrome
      @ 二锅头

      不客气的,自己也在玩这个脚本,蛮有意思的!!

      回复
  7. 头像
    冠了个松
    Linux · Google Chrome

    仓库在哪里?谢谢!!!

    回复
  8. 头像
    guest
    Windows 7 · Google Chrome

    可以给作者推RP。强强联合。~表情

    回复
    1. 头像
      lxk0301
      Windows 10 · Google Chrome
      @ guest

      哎, 私有仓库合作者只能五个人,我这边已经满人数了。

      回复
      1. 头像
        好好学习
        Windows 10 · Google Chrome
        @ lxk0301

        LXK大佬可以分享下极速版签到的算法吗,谢谢表情

        回复
        1. 头像
          orzlee 作者
          Windows 10 · Google Chrome
          @ 好好学习

          我不是LXK大佬哦,这个脚本可以去LXK0301的CDN下载啊!如果混淆了我也没办法!!!

          回复
  9. 头像
    guest
    Windows 7 · Google Chrome

    可以开率给作者推RP啊。强强联合。

    回复
  10. 头像
    lxk0301
    Windows 10 · Google Chrome

    你好。我是lxk0301

    刚才此issue https://gitee.com/lxk0301/jd_docker/issues/I3CHNJ 说要我看你这篇文章。我看你这边已经解决了火爆问题(h5st验证问题),不知我能否参考你这边一下 弄到我仓库脚本进行修复 ??

    回复
    1. 头像
      lxk0301
      Windows 10 · Google Chrome
      @ lxk0301

      我github目前暂无,可tg联系一下。我tgID @lxk0301

      回复
    2. 头像
      orzlee 作者
      Windows 10 · Google Chrome
      @ lxk0301

      可以的,幸苦你了,造福大众!

      回复
      1. 头像
        lxk0301
        Windows 10 · Google Chrome
        @ orzlee

        好的。 不过我刚才遇到一个奇怪的问题, 按你说的,从圈x里面找到了url签名参数和签名参数返回结果,然后跑脚本是做不了任务。但是如果用node直接跑 ,因为没有提供顶部那些值,所以用的random,token,fingerprint等等都是你默认的。却可以正常跑脚本

        /
        url签名参数
        /
        const random = 'cNlpbJCwIFx/';
        let token = tk01wc7951ceea8nVzY0UlBvK3QvPAfwG6UuVMo3YIwnuyPtwgIZr9BSCkJT96NMHRqNWCO5x0zbNsEA2bkjst3tYymV;
        let fingerprint = 6318883301648161;
        const appId = 10001;

        但是如果node上面换成我从圈x获取的。 然后替换成你的,就又变成了火爆了

        回复
        1. 头像
          orzlee 作者
          Windows 10 · Google Chrome
          @ lxk0301

          我也发现这个问题,很奇怪,刚刚我一个朋友也是跑不了脚本。我帮他这样操作还是不行,但是用我的那些签名参数就没问题。

          回复
  11. 头像
    jd
    Windows 10 · Google Chrome

    京喜农场也会有类似的问题。大佬有没有办法也修复一下

    回复
    1. 头像
      orzlee 作者
      Windows 10 · Google Chrome
      @ jd

      京喜农场脚本全部混淆了,阅读性太差了,没法看!

      回复
    2. 头像
      orzlee 作者
      Windows 10 · Google Chrome
      @ jd

      看了下确实很多活动都是失败的,全是 ret:1034 retmsg:"freq limit" 和 ret:147 retmsg:"filter", 有时间了看看。

      回复
  12. 头像
    kiss
    Windows 10 · Google Chrome

    厉害,高手,膜拜
    对了,能解决脚本运行最后阶段参团失败这个问题吗?
    脚本提示错误log如下:
    参团失败:{"msg":"好可惜,没中奖哦~","nowTime":1616162417,"ret":10030}

    回复
    1. 头像
      orzlee 作者
      Windows 10 · Google Chrome
      @ kiss

      这个没怎么研究过,貌似这个团都是作者固定好的,因为没有地方提交团ID,而且团会过期,重建团ID应该会变,没什么好办法!

      回复
      1. 头像
        lxk0301
        Windows 10 · Google Chrome
        @ orzlee

        有设置了自己账号内部参团。 但是有些异常账号参团, 就会提示未中奖或者异常等提示信息

        回复
        1. 头像
          orzlee 作者
          Windows 10 · Google Chrome
          @ lxk0301

          参团这块还没仔细研究,之前还以为是自己开团就不能参团了!

          回复
  13. 头像
    jason
    Windows 10 · Google Chrome

    大佬,您好!
    docker下安装你的方法自定义了远程脚本,执行时出现如下错误,然后就一直循环部署,是怎么回事?

    echo '下载完成,开始执行...'

    下载完成,开始执行...

    echo '#远程自定义shell脚本追加定时任务'

    sh -x /scripts/docker/shell_script_mod.sh

    '[' '!' -d /jd_scripts_orz/ ]

    echo '更新jd_scripts_orz脚本相关文件'

    更新jd_scripts_orz脚本相关文件

    git -C /jd_scripts_orz reset --hard

    HEAD is now at 2ba874a Create README.md

    git -C /jd_scripts_orz pull --rebase

    Already up to date.

    Current branch main is up to date.

    cp ./jd_dreamFactory.js /scripts/jd_dreamFactory_orz.js

    /scripts/docker/shell_script_mod.sh: line 16: arithmetic syntax error

    设定远程仓库地址...

    HEAD is now at f62d47e 移除 jd_joy_steal.js脚本,app和小程序都需进行拼图验证

    git pull拉取最新代码...

    Already up to date.

    Current branch master is up to date.

    npm install 安装最新依赖

    回复
    1. 头像
      121
      Windows 10 · Google Chrome
      @ jason

      兄弟你docker下是怎么部署的,我在yml文件中添加了CUSTOM_SHELL_FILE=https://raw.githubusercontent.com/xxx/xxx.sh,也启用了随机延时,但是就是更新没反应。而且也找不到你这个日志

      回复
      1. 头像
        Jason
        Android · Google Chrome
        @ 121

        我用的宝塔面板,最近github好像被墙了,要挂梯子或加hosts文件

        回复
        1. 头像
          121
          Windows 10 · Google Chrome
          @ Jason

          我用的国外小鸡,能访问的

          回复
          1. 头像
            orzlee 作者
            Windows 10 · Google Chrome
            @ 121

            在编译容器的时候应该会有详细日志啊!里面每一步都会输出屏幕。

            回复
            1. 头像
              121
              Windows 10 · Google Chrome
              @ orzlee

              我用的lxk0301大佬的docker,每次都是用docker-compose up -d更新的,屏幕不显示日志,也没有更新的log文件

              回复
        2. 头像
          Jason
          Android · Google Chrome
          @ Jason

          yml文件里那个raw.xxx.com对应的ip更新下,原配置那个好像变了,我就这样搞好的

          回复
          1. 头像
            orzlee 作者
            Windows 10 · Google Chrome
            @ Jason

            部分国内线路访问github奇慢无比,简直不能用,所以科学上网很有必要!

            回复
      2. 头像
        orzlee 作者
        Windows 10 · Google Chrome
        @ 121

        这个链接地址要换成你的,或者我仓库的脚本地址。刚刚修复了下脚本,再试试看!

        回复
        1. 头像
          善良的小朋友
          Windows 7 · Google Chrome
          @ orzlee

          请问一下,您仓库的脚本地址,在哪里?可以分享一下吗?谢谢!

          回复
        2. 头像
          121
          Windows 10 · Google Chrome
          @ orzlee

          地址我改了的,但是不显示更新日志,我也不知道更新成功没,进docker scripts文件夹下也看不到这个脚本文件。怎样设置才能像层主这样打印出更新日志?

          回复
          1. 头像
            orzlee 作者
            Windows 10 · Google Chrome
            @ 121

            cd /jd_scripts_orz
            到这里看看,我pull代码在这个目录
            如果有这个目录,但是scripts文件夹下面没有_orz.js脚本的话应该是拷贝命令错误了。
            cd /jd_scripts_orz && git pull && sh docker_shell.sh
            试试

            回复
            1. 头像
              121
              Windows 10 · Google Chrome
              @ orzlee

              在国外小鸡是上运行的,我把目录名称改了,但是找不到我改后这个目录。而且我想运行自己找的其它的脚本,按照你那个格式添加了定时任务,最终更新容器啥也没有,我现在就想知道怎么能显示详细更新日志,看看问题到底在哪

              回复
              1. 头像
                orzlee 作者
                Windows 10 · Google Chrome
                @ 121

                如果你只是解决京喜工厂异常的话不需要我这个脚本了,作者已经更新了,目前可以解决这个问题。

                回复
                1. 头像
                  121
                  Windows 10 · Google Chrome
                  @ orzlee

                  shell脚本文件解决了,是我添加其它定时任务时漏了个'

                  回复
                  1. 头像
                    orzlee 作者
                    iPhone · Safari
                    @ 121

                    重新编译容器要加-—build参数,不然只是单纯启动容器,只启动确实没有回显日志!你可以用命令“ docker logs --since 30m 容器名称”,这是查看最近30分钟的日志!

                    回复
                    1. 头像
                      121
                      Windows 10 · Google Chrome
                      @ orzlee

                      感谢大佬帮助,我用docker-compose up --build能看到详细日志了

                      回复
                      1. 头像
                        orzlee 作者
                        iPhone · Safari
                        @ 121

                        不客气!

                        回复
        3. 头像
          冠了个松
          Linux · Google Chrome
          @ orzlee

          您好,您的仓库脚本地址在哪里可以看一下?谢谢!

          回复
          1. 头像
            orzlee 作者
            Windows 10 · Google Chrome
            @ 冠了个松

            https://github.com/jianminLee/jd_scripts

            回复
            1. 头像
              冠了个淞
              Windows 7 · Google Chrome
              @ orzlee

              谢谢!~

              回复
        4. 头像
          冠了个松
          Linux · Google Chrome
          @ orzlee

          请问,orzlee作者,你仓库在哪里?有网址吗?谢谢

          回复
    2. 头像
      jason
      Windows 10 · Google Chrome
      @ jason

      /scripts/docker/shell_script_mod.sh: line 16: arithmetic syntax error 这个错误

      回复
      1. 头像
        orzlee 作者
        Windows 10 · Google Chrome
        @ jason

        RANDOM_DELAY_MAX=600,添加这个环境变量。这是延迟执行脚本的(所有脚本都会延迟),600意思是0-600取一个随机值,单位是秒。本来脚本1:00执行,延迟0-600秒中间的随机值,最多延迟到1:10执行脚本,你也可以设置为非零的任何整数,但是要配置这个环境变量。

        回复
        1. 头像
          jason
          Windows 10 · Google Chrome
          @ orzlee

          谢大佬,问题解决表情

          回复
          1. 头像
            FENG
            Windows 10 · Google Chrome
            @ jason

            你docker怎么部署的

            回复
            1. 头像
              orzlee 作者
              Windows 10 · Google Chrome
              @ FENG

              openwrt?还是VPS,网上蛮多教程的!

              回复
              1. 头像
                FENG
                Windows 10 · Google Chrome
                @ orzlee

                vps

                回复
                1. 头像
                  FENG
                  Windows 10 · Google Chrome
                  @ FENG

                  我是指这条变量的增加,我增加了还是提示火爆

                  回复
                  1. 头像
                    orzlee 作者
                    Windows 10 · Google Chrome
                    @ FENG

                    手机获取加密的那些替换了还是提示火爆?你试试看我的脚本,今天刚跟新的!

                    回复
  14. 头像
    nick
    Windows 10 · Google Chrome

    大佬,现在的github上的jd_dreamFactory.js脚本看到你前两天才更新,可以直接跑吗?还需改什么注意吗?
    我刚直接跑可以收取电力了。

    回复
    1. 头像
      orzlee 作者
      Windows 10 · Google Chrome
      @ nick

      有个问题我一直没搞懂,我修改了这个加密方法后,之前没有异常的用户也不会报异常,不知道你之前报异常吗?
      能跑就行了,因为我一直报异常,所以我会一直更新这个脚本加密参数,因为我在软路由也跑了一份docker。手机记得加我文章中的url_sign_params.conf重写脚本,他会自动获取并且替换加密参数的。

      回复
      1. 头像
        nick
        Windows 10 · Google Chrome
        @ orzlee

        我就是昨天出现的火爆才来使用你github的脚本,直接跑,今天一直可以收,不过好像参加大佬团不了可能是满了吧。
        对的,我是vps上定时bash跑的node,没有用docker。今儿下午丰收了,货架没啥好物。。。只能把洗面奶做做 囧。

        回复
        1. 头像
          orzlee 作者
          Windows 10 · Google Chrome
          @ nick

          嗯嗯,那个团是原作者的,我除了修复这个错误其他都没动。能用就好了!

          回复