《封号码罗》关于js逆向猿人学第一题m值的获取[纯扣代码](二十五)

Js逆向 | 猿人学爬虫攻防大赛 | 第一题: js 混淆 - 源码乱码(多图预警!!手把手教学!!) 第一题地址 题目: 抓取所有(5页)机票的价格,并计算所有机票价格的 初探: 进入网站,我们看下 url: http://match.yuanrenxue.com/match/1 阅读详情

温故而知新,对比了网上几篇文章,重新总结学习。
在这里插入图片描述
在这里插入图片描述

var _0x2268f9 = Date['\x70\x61\x72\x73\x65'](new Date()) + (16798545 + -72936737 + 156138192)
      , _0x57feae = oo0O0(_0x2268f9['\x74\x6f\x53\x74\x72' + '\x69\x6e\x67']()) + window['\x66'];
// 整理之后
var _0x2268f9 = Date["parse"](new Date()) + 100000000,
      _0x57feae = oo0O0(_0x2268f9["toString"]()) + window["f"];

在这里插入图片描述

_0x2268f9 = 一个时间戳 + 100000000
_0x57feae  = oo0O0(_0x2268f9 ) + window["f"]

在断点的情况下:oo0O0(_0x2268f9 )返回了一个空字符串,window["f"]是有值的
在这里插入图片描述
在这里插入图片描述
思考:一个函数传入了一个时间错,但是又返回了一个空字符串,取值的时候又取了window对象下的f,感觉上应该是再oo0O0(_0x2268f9 )里面对window.f进行赋值,进入函数查看一下
在这里插入图片描述
在这里插入图片描述
可以找到oo0O0这个函数,它的形参是mv,注意mv是形参,实际参数是上面说过的,它是一个时间戳字符串

var _0x2268f9 = Date["parse"](new Date()) + 100000000,
      _0x57feae = oo0O0(_0x2268f9["toString"]()) + window["f"];

整理了一下oo0O0

window=global;
function oo0O0(mw) {
    // 此处删除了一些window变量
    var U = ['W5r5W6VdIHZcT8kU', 'WQ8CWRaxWQirAW=='];
    var J = function (o, E) {
        o = o - 0x0;
        var N = U[o];
        if (J['bSSGte'] === undefined) {
            var Y = function (w) {
                var m = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=',
                    T = String(w)['replace'](/=+$/, '');
                var A = '';
                for (var C = 0x0, b, W, l = 0x0; W = T['charAt'](l++); ~W && (b = C % 0x4 ? b * 0x40 + W : W, C++ % 0x4) ? A += String['fromCharCode'](0xff & b >> (-0x2 * C & 0x6)) : 0x0) {
                    W = m['indexOf'](W)
                }
                return A
            };
            var t = function (w, m) {
                var T = [], A = 0x0, C, b = '', W = '';
                w = Y(w);
                for (var R = 0x0, v = w['length']; R < v; R++) {
                    W += '%' + ('00' + w['charCodeAt'](R)['toString'](0x10))['slice'](-0x2)
                }
                w = decodeURIComponent(W);
                var l;
                for (l = 0x0; l < 0x100; l++) {
                    T[l] = l
                }
                for (l = 0x0; l < 0x100; l++) {
                    A = (A + T[l] + m['charCodeAt'](l % m['length'])) % 0x100, C = T[l], T[l] = T[A], T[A] = C
                }
                l = 0x0, A = 0x0;
                for (var L = 0x0; L < w['length']; L++) {
                    l = (l + 0x1) % 0x100, A = (A + T[l]) % 0x100, C = T[l], T[l] = T[A], T[A] = C, b += String['fromCharCode'](w['charCodeAt'](L) ^ T[(T[l] + T[A]) % 0x100])
                }
                return b
            };
            J['luAabU'] = t, J['qlVPZg'] = {}, J['bSSGte'] = !![]
        }
        var H = J['qlVPZg'][o];
        return H === undefined ? (J['TUDBIJ'] === undefined && (J['TUDBIJ'] = !![]), N = J['luAabU'](N, E), J['qlVPZg'][o] = N) : N = H, N
    };
    eval(atob(window['b'])[J('0x0', ']dQW')](J('0x1', 'GTu!'), '\x27' + mw + '\x27'));
    return ''
}
// eval(atob(window['b'])["replace"]("mwqqppz", 'mw'));
// J('0x0', ']dQW') -- 'replace'
// J('0x1', 'GTu!') -- 'mwqqppz'
// '\x27' ------------- "'"
oo0O0("1684922761000");

此时还是没有找到window['f'],对于eval来说,是要看一下它做了什么的,断点模式下打印atob(window['b']可以看到在最后对window.f = hex_md5(mwqqppz)进行了赋值操作
在这里插入图片描述
这里这一堆js字符串进行了字符串替换操作,就变成了window.f = hex_md5(mv),mv就是oo0O0函数的形参,是一个时间戳字符串,这里window.f是一个md5()时间戳,把这一堆字符串放到node.js验证一下
在这里插入图片描述
得到的结果和网页断点的结果一致
封装方法:

var hexcase = 0;
var b64pad = "";
var chrsz = 16;

function hex_md5(a) {
    return binl2hex(core_md5(str2binl(a), a.length * chrsz))
}

function b64_md5(a) {
    return binl2b64(core_md5(str2binl(a), a.length * chrsz))
}

function str_md5(a) {
    return binl2str(core_md5(str2binl(a), a.length * chrsz))
}

function hex_hmac_md5(a, b) {
    return binl2hex(core_hmac_md5(a, b))
}

function b64_hmac_md5(a, b) {
    return binl2b64(core_hmac_md5(a, b))
}

function str_hmac_md5(a, b) {
    return binl2str(core_hmac_md5(a, b))
}

function md5_vm_test() {
    return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72"
}

function core_md5(p, k) {
    p[k >> 5] |= 128 << ((k) % 32);
    p[(((k + 64) >>> 9) << 4) + 14] = k;
    var o = 1732584193;
    var n = -271733879;
    var m = -1732584194;
    var l = 271733878;
    for (var g = 0; g < p.length; g += 16) {
        var j = o;
        var h = n;
        var f = m;
        var e = l;
        o = md5_ff(o, n, m, l, p[g + 0], 7, -680976936);
        l = md5_ff(l, o, n, m, p[g + 1], 12, -389564586);
        m = md5_ff(m, l, o, n, p[g + 2], 17, 606105819);
        n = md5_ff(n, m, l, o, p[g + 3], 22, -1044525330);
        o = md5_ff(o, n, m, l, p[g + 4], 7, -176418897);
        l = md5_ff(l, o, n, m, p[g + 5], 12, 1200080426);
        m = md5_ff(m, l, o, n, p[g + 6], 17, -1473231341);
        n = md5_ff(n, m, l, o, p[g + 7], 22, -45705983);
        o = md5_ff(o, n, m, l, p[g + 8], 7, 1770035416);
        l = md5_ff(l, o, n, m, p[g + 9], 12, -1958414417);
        m = md5_ff(m, l, o, n, p[g + 10], 17, -42063);
        n = md5_ff(n, m, l, o, p[g + 11], 22, -1990404162);
        o = md5_ff(o, n, m, l, p[g + 12], 7, 1804660682);
        l = md5_ff(l, o, n, m, p[g + 13], 12, -40341101);
        m = md5_ff(m, l, o, n, p[g + 14], 17, -1502002290);
        n = md5_ff(n, m, l, o, p[g + 15], 22, 1236535329);
        o = md5_gg(o, n, m, l, p[g + 1], 5, -165796510);
        l = md5_gg(l, o, n, m, p[g + 6], 9, -1069501632);
        m = md5_gg(m, l, o, n, p[g + 11], 14, 643717713);
        n = md5_gg(n, m, l, o, p[g + 0], 20, -373897302);
        o = md5_gg(o, n, m, l, p[g + 5], 5, -701558691);
        l = md5_gg(l, o, n, m, p[g + 10], 9, 38016083);
        m = md5_gg(m, l, o, n, p[g + 15], 14, -660478335);
        n = md5_gg(n, m, l, o, p[g + 4], 20, -405537848);
        o = md5_gg(o, n, m, l, p[g + 9], 5, 568446438);
        l = md5_gg(l, o, n, m, p[g + 14], 9, -1019803690);
        m = md5_gg(m, l, o, n, p[g + 3], 14, -187363961);
        n = md5_gg(n, m, l, o, p[g + 8], 20, 1163531501);
        o = md5_gg(o, n, m, l, p[g + 13], 5, -1444681467);
        l = md5_gg(l, o, n, m, p[g + 2], 9, -51403784);
        m = md5_gg(m, l, o, n, p[g + 7], 14, 1735328473);
        n = md5_gg(n, m, l, o, p[g + 12], 20, -1921207734);
        o = md5_hh(o, n, m, l, p[g + 5], 4, -378558);
        l = md5_hh(l, o, n, m, p[g + 8], 11, -2022574463);
        m = md5_hh(m, l, o, n, p[g + 11], 16, 1839030562);
        n = md5_hh(n, m, l, o, p[g + 14], 23, -35309556);
        o = md5_hh(o, n, m, l, p[g + 1], 4, -1530992060);
        l = md5_hh(l, o, n, m, p[g + 4], 11, 1272893353);
        m = md5_hh(m, l, o, n, p[g + 7], 16, -155497632);
        n = md5_hh(n, m, l, o, p[g + 10], 23, -1094730640);
        o = md5_hh(o, n, m, l, p[g + 13], 4, 681279174);
        l = md5_hh(l, o, n, m, p[g + 0], 11, -358537222);
        m = md5_hh(m, l, o, n, p[g + 3], 16, -722881979);
        n = md5_hh(n, m, l, o, p[g + 6], 23, 76029189);
        o = md5_hh(o, n, m, l, p[g + 9], 4, -640364487);
        l = md5_hh(l, o, n, m, p[g + 12], 11, -421815835);
        m = md5_hh(m, l, o, n, p[g + 15], 16, 530742520);
        n = md5_hh(n, m, l, o, p[g + 2], 23, -995338651);
        o = md5_ii(o, n, m, l, p[g + 0], 6, -198630844);
        l = md5_ii(l, o, n, m, p[g + 7], 10, 11261161415);
        m = md5_ii(m, l, o, n, p[g + 14], 15, -1416354905);
        n = md5_ii(n, m, l, o, p[g + 5], 21, -57434055);
        o = md5_ii(o, n, m, l, p[g + 12], 6, 1700485571);
        l = md5_ii(l, o, n, m, p[g + 3], 10, -1894446606);
        m = md5_ii(m, l, o, n, p[g + 10], 15, -1051523);
        n = md5_ii(n, m, l, o, p[g + 1], 21, -2054922799);
        o = md5_ii(o, n, m, l, p[g + 8], 6, 1873313359);
        l = md5_ii(l, o, n, m, p[g + 15], 10, -30611744);
        m = md5_ii(m, l, o, n, p[g + 6], 15, -1560198380);
        n = md5_ii(n, m, l, o, p[g + 13], 21, 1309151649);
        o = md5_ii(o, n, m, l, p[g + 4], 6, -145523070);
        l = md5_ii(l, o, n, m, p[g + 11], 10, -1120210379);
        m = md5_ii(m, l, o, n, p[g + 2], 15, 718787259);
        n = md5_ii(n, m, l, o, p[g + 9], 21, -343485551);
        o = safe_add(o, j);
        n = safe_add(n, h);
        m = safe_add(m, f);
        l = safe_add(l, e)
    }
    return Array(o, n, m, l)
}

function md5_cmn(h, e, d, c, g, f) {
    return safe_add(bit_rol(safe_add(safe_add(e, h), safe_add(c, f)), g), d)
}

function md5_ff(g, f, k, j, e, i, h) {
    return md5_cmn((f & k) | ((~f) & j), g, f, e, i, h)
}

function md5_gg(g, f, k, j, e, i, h) {
    return md5_cmn((f & j) | (k & (~j)), g, f, e, i, h)
}

function md5_hh(g, f, k, j, e, i, h) {
    return md5_cmn(f ^ k ^ j, g, f, e, i, h)
}

function md5_ii(g, f, k, j, e, i, h) {
    return md5_cmn(k ^ (f | (~j)), g, f, e, i, h)
}

function core_hmac_md5(c, f) {
    var e = str2binl(c);
    if (e.length > 16) {
        e = core_md5(e, c.length * chrsz)
    }
    var a = Array(16), d = Array(16);
    for (var b = 0; b < 16; b++) {
        a[b] = e[b] ^ 909522486;
        d[b] = e[b] ^ 1549556828
    }
    var g = core_md5(a.concat(str2binl(f)), 512 + f.length * chrsz);
    return core_md5(d.concat(g), 512 + 128)
}

function safe_add(a, d) {
    var c = (a & 65535) + (d & 65535);
    var b = (a >> 16) + (d >> 16) + (c >> 16);
    return (b << 16) | (c & 65535)
}

function bit_rol(a, b) {
    return (a << b) | (a >>> (32 - b))
}

function str2binl(d) {
    var c = Array();
    var a = (1 << chrsz) - 1;
    for (var b = 0; b < d.length * chrsz; b += chrsz) {
        c[b >> 5] |= (d.charCodeAt(b / chrsz) & a) << (b % 32)
    }
    return c
}

function binl2str(c) {
    var d = "";
    var a = (1 << chrsz) - 1;
    for (var b = 0; b < c.length * 32; b += chrsz) {
        d += String.fromCharCode((c[b >> 5] >>> (b % 32)) & a)
    }
    return d
}

function binl2hex(c) {
    var b = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
    var d = "";
    for (var a = 0; a < c.length * 4; a++) {
        d += b.charAt((c[a >> 2] >> ((a % 4) * 8 + 4)) & 15) + b.charAt((c[a >> 2] >> ((a % 4) * 8)) & 15)
    }
    return d
}

function binl2b64(d) {
    var c = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    var f = "";
    for (var b = 0; b < d.length * 4; b += 3) {
        var e = (((d[b >> 2] >> 8 * (b % 4)) & 255) << 16) | (((d[b + 1 >> 2] >> 8 * ((b + 1) % 4)) & 255) << 8) | ((d[b + 2 >> 2] >> 8 * ((b + 2) % 4)) & 255);
        for (var a = 0; a < 4; a++) {
            if (b * 8 + a * 6 > d.length * 32) {
                f += b64pad
            } else {
                f += c.charAt((e >> 6 * (3 - a)) & 63)
            }
        }
    }
    return f
};
// window.f = hex_md5(mwqqppz)
function get_js_m() {
    var _0x2268f9_ = Date["parse"](new Date())
    var _0x2268f9 = _0x2268f9_ + 100000000
    var _0x57feae = hex_md5(_0x2268f9["toString"]())
    const _0x5d83a3 = {};
    _0x5d83a3["m"] = _0x57feae + "\u4E28" + _0x2268f9 / 1000;
    console.log(_0x2268f9_);
    console.log(_0x2268f9);
    console.log(_0x57feae);
    console.log(_0x5d83a3);
    return _0x5d83a3['m']
}

get_js_m()
# -*-coding: utf-8 -*-
# @Time    : 2023/5/23 14:32
# @Author  : allen
# @File    : match_01.py
# @Software: PyCharm
import os
import execjs
import requests
import jsonpath


os.environ["EXECJS_RUNTIME"] = "Node"

headers = {
    'User-Agent': 'yuanrenxue.project'
}


def get_m():
    ctx = execjs.compile(open("match_03.js",encoding="utf-8").read())
    data = ctx.call('get_js_m')
    return data

# get_m()

value = 0
for index in range(1, 6):
    m = get_m()
    url = f"https://match.yuanrenxue.com/api/match/1?page={index}&m={m}"
    res = requests.get(url, headers=headers).json()
    print(res)
    value += sum(jsonpath.jsonpath(res, '$..value'))
print(value / 50)

结果展示:
在这里插入图片描述
我用python的md5测试了一下,和js相同参数出来的md5值不一样,后来就直接调用js拉倒了。

IPM2_逆透视_逆透视变换_ 图像逆透视变换,本文只有程序,没有理论知识,理论知识可以参考网上的详细讲解,本文程序是搬网上大神的,谢谢! 立即下载

相关推荐

Power Automate Desktop实战:一键自动登录Chrome网站

本文详细介绍了如何使用Power Automate Desktop实现Chrome网站的一键自动登录,提升工作效率。从环境准备、基础配置到高级技巧与异常处理,全面解析自动化登录流程的构建与优化,特别适合需要频繁登录多个系统的用户。

weixin_29231725的博客 465

一个C语言写的简单的整数逆序的源码

写内容过程中中,把写内容过程中经常用的一些内容做个收藏,下面的内容段是关于一个C语言写的简单的整数逆序的的内容,应该是对各位朋友有所用处。 int reverse_number(int a) { int rev[20]; int i, j, b, d; for(i = 0; a ; i ++) { rev[i] = a % 10; a /= 10; } for(j = i - 1, b = 0, d = 1; j >= 0; j --) {

weixin_44121164的博客 554

用Matlab系统辨识工具箱搞定温控系统建模:从阶跃响应到传递函数(附完整代码)

本文详细介绍了如何使用Matlab系统辨识工具箱进行温控系统建模,从阶跃响应数据采集到传递函数参数辨识的全过程。通过实际案例和完整代码,帮助工程师快速掌握PID控制参数整定技巧,提升温控系统设计效率。特别适合单片机开发者和自动化控制工程师参考。

weixin_30736301的博客 309

Java集合之JDK1.7HashMap原理解析

Java集合之JDK1.7HashMap原理解析,主要对HashMap中涉及的参数以及常用的Get/Put方法进行原理分析

小宝潜行的博客 350

coreldraw sp2精简版 x4_CorelDRAW X4下载-CorelDRAW X4 SP2 精简版_Win10镜像官网

CorelDRAW X4 SP2是一个专业图形设计软件,专用于矢量图形编辑与排版,借助其丰富的内容和专业图形设计、照片编辑和网站设计软件,您将能够随心所欲地表达自己的风格与创意,轻松创作徽标标志、广告标牌、车身贴和传单、模型绘制、插图描画、排版及分色输出等。CorelDRAW X4 SP2软件特色CorelDraw X4 相比两年前的 CorelDraw X3 加入了大量新特性,总计有50项以上,...

weixin_30346025的博客 8883

数值计算方法 matlab用二分法或简单迭代法求_快速求解方程的根——二分法与牛顿迭代法

今天是周四高等数学专题的第7篇文章。之前的文章和大家聊了许多数学上的理论,今天和大家聊点有用的东西。我们都知道,工业上的很多问题经过抽象和建模之后,本质还是数学问题。而说到数学问题就离不开方程,在数学上我们可以用各种推算、公式,但是有没有想过在计算机领域我们如何解一个比较复杂的方程?如果之前没有想过,那你可能得想一想,因为以后很有可能会在面试题当中遇到。二分法我们要介绍的第一个方法是二分法。说到二...

weixin_39945915的博客 1303

js逆向-猿人学(5)乱码混淆增强

猿人学爬虫题目第五题: 《Js乱码-混淆增强》,该案例也非常简单。 任务5:抓取全部5页直播间热度,计算前5名直播间热度的加和。 抓包分析下请求流程。 接口: http://match.yuanrenxue.com/api/match/5? params:m=1611216186090, f=1611216185000 headers: 参数确定之后,开始调试一下。 ctrl+f 一下 _zw,可以找到一个数组。 我直接查了一下第24个push 也可以根据数组内容来快速查看,经确定 _zw[23

李玺 1517

COMSOL报错调试总结(不定期更新)

COMSOL报错调试总结1. 可定位错误1.1 除零错误1.2 未定义变量值1.3 边界条件/材料属性等缺失2. 难定位错误2.1. 装配期间内存不足 官方给的案例总是非常完美,运行流畅,结果完美。但是自己做模型时候就总是报错,而且不像自己coding的程序那样可以明确定位哪里出了bug。这里把我碰到的一些报错问题以及调试方法记录下来~ 部分来源于以下参考来源: http://wap.sciencenet.cn/blog-1467490-1118453.html?mobile=1 1. 可定位错误 以下错误

jessica0307的博客 8万+

《封号码罗》关于js逆向猿人学第一题m值的获取[纯补环境](二十四)

js逆向猿人学第一题,m值的获取,纯补环境

Python_DJ的博客 1万+

IEC61850 通信协议测试验证实战指南:从理论到实践

本文提供了一份全面的IEC61850通信协议测试验证实战指南,强调测试必须从理论走向工程实践。文章详细讲解了如何搭建测试环境,并深入剖析了MMS、GOOSE、SV三大核心协议的实战测试方法,旨在帮助工程师通过系统化的测试验证,确保电力自动化设备的互操作性与通信可靠性。

weixin_29204121的博客 170

手把手教你用C#实现TwinCAT 3 ADS通讯(附完整代码示例)

本文详细解析了如何使用C#实现TwinCAT 3 ADS通讯,包括协议核心价值、开发环境配置、变量通信实践及高级应用场景。通过完整代码示例和性能优化技巧,帮助开发者高效实现工业自动化系统中的实时数据交换,特别适合倍福(Beckhoff)平台用户。

weixin_29230901的博客 117

猿人学刷题系列(第一届比赛)——第一题

过来后可以看到代码是进行混淆了的,不过好在这里的逻辑比较简单,慢慢梳理的话也花费不了多少时间,更何况在这里还有一个非常耀眼的十六进制符号码'\u4e28',就算大家不认识那么在硬刚这段代码的时候也是需要将这些unicode码转换还原的,而还原过来后这个'\u4e28'就是一个丨符号,所以后面的我们就不用去管太多了,先把目标暂时放在这个位置,打上断点再去考虑其他,而从这里不难发现变量_0x57feae和变量_0x2268f9的生成逻辑就是在上方代码中紧挨着。再次请求,停止后,向上寻找调用栈,发现是一个。

weixin_45091564的博客 721

Gradient Accumulation 梯度累加/梯度累积 (Pytorch)

我们在训练神经网络的时候,batch_size的大小会对最终的模型效果产生很大的影响。一定条件下,batch_size设置的越大,模型就会越稳定。batch_size的值通常设置在 8-32 之间,但是当我们做一些计算量需求大的任务(例如语义分割、GAN等)或者输入图片尺寸太大的时候,我们的batch size往往只能设置为2或者4,否则就会出现 “CUDA OUT OF MEMORY” 的不可抗力报错。 那么如何在有限的计算资源的条件下,训练时采用更大的batch size...

hxxjxw的博客 5798

《封号码罗》关于js逆向猿人学第二题cookies里面m值的获取[纯扣算法](二十六)

js代码和python代码都有了,可以debug慢慢调试看看,暗坑已经踩过了。

Python_DJ的博客 457

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

《封号码罗》关于js逆向猿人学第六题m和q值的获取[纯扣算法](二十七)

这里有一个坑:就是在js测试调用后,在python调用时要注释js里面的方法,不然可能会出现只能获取到第一次或第二次请求的结果。

Python_DJ的博客 543

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

逆元求法(转)

转自: http://hi.baidu.com/pty123/item/06730a080b8523354bc4a356 逆元的几种求法 定义 a * x = 1(mod p),求x 1、扩展欧几里德: 令ax + py = 1 Gcd的本质就是进行迭代,不断缩小范围。 不详细讲。。参考:http://baike.baidu.com/...

anque1234的博客 197

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

js逆向-猿人学(10-11)js和app协议破解

猿人学爬虫比赛第十题:《js混淆 重放攻击对抗》 地址: http://match.yuanrenxue.com/match/10 开无痕,开控制台, debugger 右键选择 :never pause here ,先这样瞧一瞧 又是无限debugger,后面给页面卡蹦了,电脑内存卡满。 处理方法要么不debug要么用js-hook掉吧。然后从堆栈进去找m,拼代码。 不好意思,后面我就不看了,实在浪费时间。 猿人学爬虫比赛第十一题:《app so文件协议破解》 地址: http://match.y

李玺 2273

菜鸡学逆向——常见编码,加密算法逆向总结

最近打CTF太郁闷了,总是被逆向出来自己见过但又偏偏想不起来的算法。这次总结个大个的 Base64 代码参考52pojie论坛的kabeo大佬,原文地址:https://www.52pojie.cn/thread-793420-1-1.html #include <stdio.h> #include "string.h" #include "stdlib.h" const char ...

qq_43557177的博客 5758

原码_反码_补码_移码_阶码

原码 原码是指一个二进制数左边加上符号位后所得到的码,且当二进制数大于0时,符号位为0;二进制数小于0时,符号位为1;二进制数等于0时,符号位可以为0或1(+0/-0). 反码 正数的反码是其本身;负数的反码是在其原码的基础上, 符号位不变,其余各个位取反. 补码 正数的补码就是其本身;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1) 移码 不管正负数,只要将其补码的符号位取反即可. 机器零 计算机中机器零是指: 1、如果一个浮点数的尾数全为0,则不论其

qq_43806430的博客 3572

如何保证API不被别人恶意调用(彩蛋)

这两天比较悠闲,有很多时间可以用来写文章。扯扯淡,哈哈哈今天给大家分享一个纯业务的的东西,也会有代码辅助,但是不多。看名字是不是都觉得很屌哈哈哈哈哈哈哈。 博主是一个标题党。 先给你们上一张小编自己画的图吧。我不知道大家写APi的时候有没有这样的疑惑。。 就是api频繁被恶意调用,有没有这种的,我擦我新写的接口又被爬去了,竟然拼接了参数来不断请求。哎。。。。。 来听小编发生在自己身上...

猿码优创 7441

小猿圈操作系统之机器码(原码、反码、补码)

机器码是最底层的语言,那计算机最底层是什么?无疑最底层是由0和1组成,那什么是原码、什么是反码、什么是补码呢?他们之间有什么关系呢,小猿圈老师带你学习一下,认真听,防止挂科哦,哈哈哈。 一、机器数: 一个数在计算机中的二进制表示形式叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1。 比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00...

qq_42210792的博客 634

Java基础(1) - 基本数据类型

基本数据类型有哪些?   Java语言提供了八种基本类型。可以分为三类:字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。数值类型又可以分为整数类型byte、short、int、long和浮点数类型float、double。 占用多少空间?   首先先说两个常用的表示计算机空间的单位:位(bit)和字节(byte)。   位(bi...

qq_21283875的博客 401

Js逆向-猿人学(1)源码混淆

猿人学爬虫题目第一题: 《抓取所有机票价格》,该案例非常适合js新手入门。 题目链接:http://match.yuanrenxue.com/match/1 F12打开控制台,可见debugger出现,右键选择Never pause here; 接下来F5,就可以跳过debugger了,查看数据包。 看一下请求参数: 直接点击查看Initiator进行调试。 随便选一个进来断点,选择下一页触发debug 没找到就点右侧的call stack,按顺序点一下看 点到request看到了有一端不

李玺 4007

反向密码(破译难度不大,字符串较少时建议手动破译)

反向密码(破译难度不大,字符串较少时建议手动破译)

weixin_52351575的博客 603

js逆向不用扣代码系列(3)—3分钟快速破解猿人学第14题(巧过风控)

网址:http://match.yuanrenxue.com/match/14 1.加密参数分析 进行翻页请求抓包 似乎是先访问http://match.yuanrenxue.com/api/match/14/m该链接,返回一段js混淆的代码,生成cookie后再访问列表页获取结果,然而我们不必理会其具体过程,直接进入到下一步分析。 2.更改js代码,并替换响应为本地文件 点击下图红框跳入 下面我们对上述图片红框内代码进行修改,并保存到本地,后用fidder替换http://match.yuanr

weixin_42156283的博客 1147
上一篇: 关于使用python调用execjs报错‘gbk‘ codec can‘t decode byte 0xa8 in position 101的解决办法
下一篇: 《封号码罗》关于js逆向猿人学第二题cookies里面m值的获取[纯扣算法](二十六)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值