我来图书馆小程序签到流程分析

9 篇文章 2 订阅
8 篇文章 0 订阅

先抓包看看提交的哪些参数

再来看看源代码的

  • 可以看到,我们单击签到,是跳转到了iBeacon 页面

  • 我们再去iBeacon页面看看,

可以看到关键的签到代码

 signAppoint: function() {
        wx.showLoading({
            title: "签到座位中",
            mask: !0
        });
        var o = getApp(), e = wx.getStorageSync("colleageId"), a = wx.getStorageSync("userId"), n = t.getKeyPair(o.globalData.rsa.exponent, "", o.globalData.rsa.modulus), s = t.encryptedString(n, this.data.urlOptions.appoint_id + "");
        wx.request({
            url: o.globalData.httpAddress + "/wx/sign",
            data: {
                colleageId: e,
                userId: a,
                appointId: s,
                x: this.data.latitude,
                y: this.data.longitude
            },
            header: {
                "content-type": "application/json"
            },
            success: function(t) {
                console.log(t.data), t.data.success, wx.showToast({
                    title: t.data.message,
                    mask: !0,
                    icon: "none",
                    duration: 2e3
                }), setTimeout(function() {
                    wx.hideLoading(), wx.navigateBack({
                        delta: 1
                    });
                }, 2100);
            },
            fail: function(t) {
                console.log(t), wx.showToast({
                    icon: "none",
                    title: "服务器错误"
                });
            }
        });
    },
  • 然后我们通过找寻appointId的来源,后面发现可以通过https://wxcourse.jxufe.cn/wxlib/wx/mineCurrentAppoint?userId=个人学号当中的id字段来获取
  • 如图,图中的id就是appoint_id字段

签到大概流程就这样子

顺便附上代码

//蓝牙签到
const ttt = require("./security.js");
var modulus = "00ae1d6d965af848bc5814af9073dce0b03ee18f5f2448f922549826c7ae54601ea7c09ef026c8997343833160298849a9b73483f324100b7095b4bd10afabed447ea1b0871ca613aeb391f1e7361f3ae0a147d1431ddd1c1c080ba46a51d70dc93508a9fc4dcc683ed64d429e026d1335ab01020cfee00e788d78dced6fe5199b";
var exponent = "010001";
var n = ttt.getKeyPair(exponent, "", modulus);

//预约位置的id信息为每一次预约都变化
var appoint_id = "id信息填写";
var check_result = ttt.encryptedString(n, appoint_id + "");
console.log("签到预约代码",check_result);

security.js文件内容

  • 我是以nodejs运行的,security.js也可以浏览器运行,改改就OK
var i;

!function(t) {
    void 0 === t.RSAUtils && (i = t.RSAUtils = {});
    var r, e, s, g = t.BigInt = function(i) {
        this.digits = "boolean" == typeof i && 1 == i ? null : r.slice(0), this.isNeg = !1;
    };
    i.setMaxDigits = function(i) {
        r = new Array(i);
        for (var t = 0; t < r.length; t++) r[t] = 0;
        e = new g(), (s = new g()).digits[0] = 1;
    }, i.setMaxDigits(20);
    i.biFromNumber = function(i) {
        var t = new g();
        t.isNeg = i < 0, i = Math.abs(i);
        for (var r = 0; i > 0; ) t.digits[r++] = 65535 & i, i = Math.floor(i / 65536);
        return t;
    };
    var n = i.biFromNumber(1e15);
    i.biFromDecimal = function(t) {
        for (var r, e = "-" == t.charAt(0), s = e ? 1 : 0; s < t.length && "0" == t.charAt(s); ) ++s;
        if (s == t.length) r = new g(); else {
            var d = (t.length - s) % 15;
            for (0 == d && (d = 15), r = i.biFromNumber(Number(t.substr(s, d))), s += d; s < t.length; ) r = i.biAdd(i.biMultiply(r, n), i.biFromNumber(Number(t.substr(s, 15)))), 
            s += 15;
            r.isNeg = e;
        }
        return r;
    }, i.biCopy = function(i) {
        var t = new g(!0);
        return t.digits = i.digits.slice(0), t.isNeg = i.isNeg, t;
    }, i.reverseStr = function(i) {
        for (var t = "", r = i.length - 1; r > -1; --r) t += i.charAt(r);
        return t;
    };
    var d = [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" ];
    i.biToString = function(t, r) {
        var s = new g();
        s.digits[0] = r;
        for (var n = i.biDivideModulo(t, s), o = d[n[1].digits[0]]; 1 == i.biCompare(n[0], e); ) n = i.biDivideModulo(n[0], s), 
        digit = n[1].digits[0], o += d[n[1].digits[0]];
        return (t.isNeg ? "-" : "") + i.reverseStr(o);
    }, i.biToDecimal = function(t) {
        var r = new g();
        r.digits[0] = 10;
        for (var s = i.biDivideModulo(t, r), n = String(s[1].digits[0]); 1 == i.biCompare(s[0], e); ) s = i.biDivideModulo(s[0], r), 
        n += String(s[1].digits[0]);
        return (t.isNeg ? "-" : "") + i.reverseStr(n);
    };
    var o = [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" ];
    i.digitToHex = function(t) {
        for (var r = "", e = 0; e < 4; ++e) r += o[15 & t], t >>>= 4;
        return i.reverseStr(r);
    }, i.biToHex = function(t) {
        for (var r = "", e = (i.biHighIndex(t), i.biHighIndex(t)); e > -1; --e) r += i.digitToHex(t.digits[e]);
        return r;
    }, i.charToHex = function(i) {
        return i >= 48 && i <= 57 ? i - 48 : i >= 65 && i <= 90 ? 10 + i - 65 : i >= 97 && i <= 122 ? 10 + i - 97 : 0;
    }, i.hexToDigit = function(t) {
        for (var r = 0, e = Math.min(t.length, 4), s = 0; s < e; ++s) r <<= 4, r |= i.charToHex(t.charCodeAt(s));
        return r;
    }, i.biFromHex = function(t) {
        for (var r = new g(), e = t.length, s = 0; e > 0; e -= 4, ++s) r.digits[s] = i.hexToDigit(t.substr(Math.max(e - 4, 0), Math.min(e, 4)));
        return r;
    }, i.biFromString = function(t, r) {
        var e = "-" == t.charAt(0), s = e ? 1 : 0, n = new g(), d = new g();
        d.digits[0] = 1;
        for (var o = t.length - 1; o >= s; o--) {
            var u = t.charCodeAt(o), a = i.charToHex(u), b = i.biMultiplyDigit(d, a);
            n = i.biAdd(n, b), d = i.biMultiplyDigit(d, r);
        }
        return n.isNeg = e, n;
    }, i.biDump = function(i) {
        return (i.isNeg ? "-" : "") + i.digits.join(" ");
    }, i.biAdd = function(t, r) {
        var e;
        if (t.isNeg != r.isNeg) r.isNeg = !r.isNeg, e = i.biSubtract(t, r), r.isNeg = !r.isNeg; else {
            e = new g();
            for (var s, n = 0, d = 0; d < t.digits.length; ++d) s = t.digits[d] + r.digits[d] + n, 
            e.digits[d] = s % 65536, n = Number(s >= 65536);
            e.isNeg = t.isNeg;
        }
        return e;
    }, i.biSubtract = function(t, r) {
        var e;
        if (t.isNeg != r.isNeg) r.isNeg = !r.isNeg, e = i.biAdd(t, r), r.isNeg = !r.isNeg; else {
            var s, n;
            e = new g(), n = 0;
            for (var d = 0; d < t.digits.length; ++d) s = t.digits[d] - r.digits[d] + n, e.digits[d] = s % 65536, 
            e.digits[d] < 0 && (e.digits[d] += 65536), n = 0 - Number(s < 0);
            if (-1 == n) {
                n = 0;
                for (d = 0; d < t.digits.length; ++d) s = 0 - e.digits[d] + n, e.digits[d] = s % 65536, 
                e.digits[d] < 0 && (e.digits[d] += 65536), n = 0 - Number(s < 0);
                e.isNeg = !t.isNeg;
            } else e.isNeg = t.isNeg;
        }
        return e;
    }, i.biHighIndex = function(i) {
        for (var t = i.digits.length - 1; t > 0 && 0 == i.digits[t]; ) --t;
        return t;
    }, i.biNumBits = function(t) {
        var r, e = i.biHighIndex(t), s = t.digits[e], g = 16 * (e + 1);
        for (r = g; r > g - 16 && 0 == (32768 & s); --r) s <<= 1;
        return r;
    }, i.biMultiply = function(t, r) {
        for (var e, s, n, d = new g(), o = i.biHighIndex(t), u = i.biHighIndex(r), a = 0; a <= u; ++a) {
            e = 0, n = a;
            for (var b = 0; b <= o; ++b, ++n) s = d.digits[n] + t.digits[b] * r.digits[a] + e, 
            d.digits[n] = 65535 & s, e = s >>> 16;
            d.digits[a + o + 1] = e;
        }
        return d.isNeg = t.isNeg != r.isNeg, d;
    }, i.biMultiplyDigit = function(t, r) {
        var e, s, n, d = new g();
        e = i.biHighIndex(t), s = 0;
        for (var o = 0; o <= e; ++o) n = d.digits[o] + t.digits[o] * r + s, d.digits[o] = 65535 & n, 
        s = n >>> 16;
        return d.digits[1 + e] = s, d;
    }, i.arrayCopy = function(i, t, r, e, s) {
        for (var g = Math.min(t + s, i.length), n = t, d = e; n < g; ++n, ++d) r[d] = i[n];
    };
    var u = [ 0, 32768, 49152, 57344, 61440, 63488, 64512, 65024, 65280, 65408, 65472, 65504, 65520, 65528, 65532, 65534, 65535 ];
    i.biShiftLeft = function(t, r) {
        var e = Math.floor(r / 16), s = new g();
        i.arrayCopy(t.digits, 0, s.digits, e, s.digits.length - e);
        for (var n = r % 16, d = 16 - n, o = s.digits.length - 1, a = o - 1; o > 0; --o, 
        --a) s.digits[o] = s.digits[o] << n & 65535 | (s.digits[a] & u[n]) >>> d;
        return s.digits[0] = s.digits[o] << n & 65535, s.isNeg = t.isNeg, s;
    };
    var a = [ 0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535 ];
    function b(t) {
        var r = i, e = r.biDivideByRadixPower(t, this.k - 1), s = r.biMultiply(e, this.mu), g = r.biDivideByRadixPower(s, this.k + 1), n = r.biModuloByRadixPower(t, this.k + 1), d = r.biMultiply(g, this.modulus), o = r.biModuloByRadixPower(d, this.k + 1), u = r.biSubtract(n, o);
        u.isNeg && (u = r.biAdd(u, this.bkplus1));
        for (var a = r.biCompare(u, this.modulus) >= 0; a; ) u = r.biSubtract(u, this.modulus), 
        a = r.biCompare(u, this.modulus) >= 0;
        return u;
    }
    function h(t, r) {
        var e = i.biMultiply(t, r);
        return this.modulo(e);
    }
    function l(t, r) {
        var e = new g();
        e.digits[0] = 1;
        for (var s = t, n = r; 0 != (1 & n.digits[0]) && (e = this.multiplyMod(e, s)), 0 != (n = i.biShiftRight(n, 1)).digits[0] || 0 != i.biHighIndex(n); ) s = this.multiplyMod(s, s);
        return e;
    }
    i.biShiftRight = function(t, r) {
        var e = Math.floor(r / 16), s = new g();
        i.arrayCopy(t.digits, e, s.digits, 0, t.digits.length - e);
        for (var n = r % 16, d = 16 - n, o = 0, u = o + 1; o < s.digits.length - 1; ++o, 
        ++u) s.digits[o] = s.digits[o] >>> n | (s.digits[u] & a[n]) << d;
        return s.digits[s.digits.length - 1] >>>= n, s.isNeg = t.isNeg, s;
    }, i.biMultiplyByRadixPower = function(t, r) {
        var e = new g();
        return i.arrayCopy(t.digits, 0, e.digits, r, e.digits.length - r), e;
    }, i.biDivideByRadixPower = function(t, r) {
        var e = new g();
        return i.arrayCopy(t.digits, r, e.digits, 0, e.digits.length - r), e;
    }, i.biModuloByRadixPower = function(t, r) {
        var e = new g();
        return i.arrayCopy(t.digits, 0, e.digits, 0, r), e;
    }, i.biCompare = function(i, t) {
        if (i.isNeg != t.isNeg) return 1 - 2 * Number(i.isNeg);
        for (var r = i.digits.length - 1; r >= 0; --r) if (i.digits[r] != t.digits[r]) return i.isNeg ? 1 - 2 * Number(i.digits[r] > t.digits[r]) : 1 - 2 * Number(i.digits[r] < t.digits[r]);
        return 0;
    }, i.biDivideModulo = function(t, r) {
        var e, n, d = i.biNumBits(t), o = i.biNumBits(r), u = r.isNeg;
        if (d < o) return t.isNeg ? ((e = i.biCopy(s)).isNeg = !r.isNeg, t.isNeg = !1, r.isNeg = !1, 
        n = biSubtract(r, t), t.isNeg = !0, r.isNeg = u) : (e = new g(), n = i.biCopy(t)), 
        [ e, n ];
        e = new g(), n = t;
        for (var a = Math.ceil(o / 16) - 1, b = 0; r.digits[a] < 32768; ) r = i.biShiftLeft(r, 1), 
        ++b, ++o, a = Math.ceil(o / 16) - 1;
        n = i.biShiftLeft(n, b), d += b;
        for (var h = Math.ceil(d / 16) - 1, l = i.biMultiplyByRadixPower(r, h - a); -1 != i.biCompare(n, l); ) ++e.digits[h - a], 
        n = i.biSubtract(n, l);
        for (var f = h; f > a; --f) {
            var v = f >= n.digits.length ? 0 : n.digits[f], c = f - 1 >= n.digits.length ? 0 : n.digits[f - 1], N = f - 2 >= n.digits.length ? 0 : n.digits[f - 2], m = a >= r.digits.length ? 0 : r.digits[a], M = a - 1 >= r.digits.length ? 0 : r.digits[a - 1];
            e.digits[f - a - 1] = v == m ? 65535 : Math.floor((65536 * v + c) / m);
            for (var y = e.digits[f - a - 1] * (65536 * m + M), p = 4294967296 * v + (65536 * c + N); y > p; ) --e.digits[f - a - 1], 
            y = e.digits[f - a - 1] * (65536 * m | M), p = 65536 * v * 65536 + (65536 * c + N);
            l = i.biMultiplyByRadixPower(r, f - a - 1), (n = i.biSubtract(n, i.biMultiplyDigit(l, e.digits[f - a - 1]))).isNeg && (n = i.biAdd(n, l), 
            --e.digits[f - a - 1]);
        }
        return n = i.biShiftRight(n, b), e.isNeg = t.isNeg != u, t.isNeg && (e = u ? i.biAdd(e, s) : i.biSubtract(e, s), 
        r = i.biShiftRight(r, b), n = i.biSubtract(r, n)), 0 == n.digits[0] && 0 == i.biHighIndex(n) && (n.isNeg = !1), 
        [ e, n ];
    }, i.biDivide = function(t, r) {
        return i.biDivideModulo(t, r)[0];
    }, i.biModulo = function(t, r) {
        return i.biDivideModulo(t, r)[1];
    }, i.biMultiplyMod = function(t, r, e) {
        return i.biModulo(i.biMultiply(t, r), e);
    }, i.biPow = function(t, r) {
        for (var e = s, g = t; 0 != (1 & r) && (e = i.biMultiply(e, g)), 0 != (r >>= 1); ) g = i.biMultiply(g, g);
        return e;
    }, i.biPowMod = function(t, r, e) {
        for (var g = s, n = t, d = r; 0 != (1 & d.digits[0]) && (g = i.biMultiplyMod(g, n, e)), 
        0 != (d = i.biShiftRight(d, 1)).digits[0] || 0 != i.biHighIndex(d); ) n = i.biMultiplyMod(n, n, e);
        return g;
    }, t.BarrettMu = function(t) {
        this.modulus = i.biCopy(t), this.k = i.biHighIndex(this.modulus) + 1;
        var r = new g();
        r.digits[2 * this.k] = 1, this.mu = i.biDivide(r, this.modulus), this.bkplus1 = new g(), 
        this.bkplus1.digits[this.k + 1] = 1, this.modulo = b, this.multiplyMod = h, this.powMod = l;
    };
    var f = function(r, e, s) {
        var g = i;
        this.e = g.biFromHex(r), this.d = g.biFromHex(e), this.m = g.biFromHex(s), this.chunkSize = 2 * g.biHighIndex(this.m), 
        this.radix = 16, this.barrett = new t.BarrettMu(this.m);
    };
    i.getKeyPair = function(i, t, r) {
        return new f(i, t, r);
    }, void 0 === t.twoDigit && (t.twoDigit = function(i) {
        return (i < 10 ? "0" : "") + String(i);
    }), i.encryptedString = function(t, r) {
        for (var e = [], s = r.length, n = 0; n < s; ) e[n] = r.charCodeAt(n), n++;
        for (;e.length % t.chunkSize != 0; ) e[n++] = 0;
        var d, o, u, a = e.length, b = "";
        for (n = 0; n < a; n += t.chunkSize) {
            for (u = new g(), d = 0, o = n; o < n + t.chunkSize; ++d) u.digits[d] = e[o++], 
            u.digits[d] += e[o++] << 8;
            var h = t.barrett.powMod(u, t.e);
            b += (16 == t.radix ? i.biToHex(h) : i.biToString(h, t.radix)) + " ";
        }
        return b.substring(0, b.length - 1);
    }, i.decryptedString = function(t, r) {
        var e, s, g, n = r.split(" "), d = "";
        for (e = 0; e < n.length; ++e) {
            var o;
            for (o = 16 == t.radix ? i.biFromHex(n[e]) : i.biFromString(n[e], t.radix), g = t.barrett.powMod(o, t.d), 
            s = 0; s <= i.biHighIndex(g); ++s) d += String.fromCharCode(255 & g.digits[s], g.digits[s] >> 8);
        }
        return 0 == d.charCodeAt(d.length - 1) && (d = d.substring(0, d.length - 1)), d;
    }, i.setMaxDigits(130);
}({}), module.exports = i;

舔狗日志

舔狗日记 6月19日 晴

今天你终于通过我好友了,打招呼的方式还是那么别致,一个阿玛尼包包的淘宝链接,我从兄弟那边借了3000,很快给你买了,你很开心,给我发了可爱的表情包,还对我说了谢谢,你开心,我也就开心了


舔狗日记 6月20日 晴

今天发工资了,我一个月工资800,你猜我会给你多少,是不是觉得我会给你1200,因为厂里全勤奖还有400。错了,我会再和工友借114凑够1314转给你。

舔狗日记 6月21日 阴

我给你打了一通电话,你终于接了。听到了你发出啊啊啊啊的声音,你说你脚痛,我想你一定是很难受吧。电话还有个男的对你说“来换个姿势”。你一定是在做理疗,好心疼,期待你早日康复。

舔狗日记 10月26日 晴

今天约喜欢的女孩子一起出去喝奶茶,她回我一句“有病”,我想着,有病啊,那等她病好了,再约她吧,嘿嘿


舔狗日记 10月30日 晴

今天你破天荒的给我发了个早,我开心极了,难道这就是恋爱的感觉吗?我一看时间,十二点整,你一醒来就在想我,我流下了激动的泪水,又想到你现在都没有吃饭,我给你发了二百块钱的红包。你快速的领取了,却迟迟没有回我消息。我想你可能也沉浸在感动当中吧,我给你发了句吃点东西吧。回复我的确实一个红色感叹号!红色代表爱情,你一定是不好意思说出口,采用这么委婉的方式表达你对我的爱,我也爱你。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
微信小程序签到功能是一种常见的应用场景,可以通过使用PHP编写后端接口来实现。下面是一个简单的微信小程序签到的PHP源码示例: ```php <?php // 连接数据库 $servername = "localhost"; $username = "your_username"; $password = "your_password"; $dbname = "your_database"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 获取用户openid和签到日期 $openid = $_POST['openid']; $sign_date = date("Y-m-d"); // 查询用户当天是否已签到 $sql = "SELECT * FROM sign_records WHERE openid='{$openid}' AND sign_date='{$sign_date}'"; $result = $conn->query($sql); if ($result->num_rows > 0) { // 已签到 $response = array("status" => 0, "message" => "已签到"); } else { // 未签到,插入签到记录 $sql = "INSERT INTO sign_records (openid, sign_date) VALUES ('{$openid}', '{$sign_date}')"; if ($conn->query($sql) === TRUE) { $response = array("status" => 1, "message" => "签到成功"); } else { $response = array("status" => -1, "message" => "签到失败"); } } // 返回签到结果 echo json_encode($response); $conn->close(); ?> ``` 以上是一个简单的微信小程序签到的PHP源码示例。其中,通过与数据库进行交互来存储和查询用户的签到记录。用户首先需要提供其openid和签到的日期,如果数据库中存在对应的记录,则表示已经签到过了,返回相应的提示信息;若不存在,则插入新的记录,并返回签到成功的提示信息。最后,通过JSON格式返回签到结果给小程序进行显示。 需要注意的是,该示例只提供了基础的签到功能,具体地方需要根据实际需求进行扩展和修改。另外,还需要根据自己的数据库配置和微信小程序的开发要求进行相应的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未成年梦想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值