国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【VX小程序逆向】房*下小程序pseusign參數(shù)分析

這篇具有很好參考價(jià)值的文章主要介紹了【VX小程序逆向】房*下小程序pseusign參數(shù)分析。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

【VX小程序逆向】房*下小程序pseusign參數(shù)分析

請(qǐng)求包分析

使用 Charles 軟件進(jìn)行抓包,詳細(xì)過程就不細(xì)說了,直接貼上抓包結(jié)果

headers = {  
    'Host': 'miniapp.fang.com',  
    'pseusign': 'p10120230411162220f9a1195df01c47a6065f53b22d1c4100',  
    'openid': 'oxBn60ADRc6eURhDDkYReN4MjFik',  
    'content-type': 'application/json',  
    'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_1_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.33(0x18002129) NetType/WIFI Language/zh_CN',  
    'Referer': 'https://servicewechat.com/wxffbb41ec9b99a969/758/page-frame.html',  
}  
  
params = {  
    'appname': 'fangx',  
    'v': '1.3.4',  
    'miniplat': 'weixin',  
    'scene': '1027',  
}  
  
response = requests.get('https://miniapp.fang.com/pingyin/cityList', params=params, headers=headers, verify=False)  

經(jīng)過來回刪除恢復(fù)參數(shù)的方式,得出 pseusign 參數(shù)尤為重要,直接分析小程序代碼。

獲取小程序代碼

由于開源倉庫已經(jīng)被作者刪除,新版本已經(jīng)商業(yè)化,這里就不再敘述。

運(yùn)行小程序

使用微信小程序開發(fā)工具導(dǎo)入解包后的代碼,直接編譯運(yùn)行,會(huì)得到以下錯(cuò)誤信息

[插件 wx1db9e5ab1149ea03] provider:wx1db9e5ab1149ea03, version:2.1.1, INVALID_LOGIN,access_token expired
插件文檔: https://mp.weixin.qq.com/wxopen/plugindevdoc?appid=wx1db9e5ab1149ea03&token=&lang=zh_CN(env: macOS,mp,1.06.2303060; lib: 2.30.3)

可以大概看懂是插件過期的意思,那么就找到 app.jsonplugins 刪除就好了,就想下面這樣

::: code-group

"plugins": {
	"echarts": {
	"version": "2.1.1",
	"provider": "wx1db9e5ab1149ea03",
	"subpackage": ""
	}
},
"plugins": {
},

:::

繼續(xù)編譯允許,繼續(xù)報(bào)錯(cuò),內(nèi)容如下

WAServiceMainContext.js?t=wechat&s=1681204008944&v=2.30.3:1 TypeError: _typeof3 is not a function

解決辦法,找到 @babel/runtime/helpers/typeof.js,把下面內(nèi)容替換到文件中

function _typeof2(o) {

"@babel/helpers - typeof";

return (_typeof2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {

return typeof o;

} : function(o) {

return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;

})(o);

}

function _typeof(o) {

return "function" == typeof Symbol && "symbol" === _typeof2(Symbol.iterator) ? module.exports = _typeof = function(o) {

return _typeof2(o);

} : module.exports = _typeof = function(o) {

return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : _typeof2(o);

}, _typeof(o);

}

module.exports = _typeof;

繼續(xù)編譯運(yùn)行,通過了。

分析代碼

直接全局搜索 pseusign 找到下面代碼處

v.pseusign = h(e.url, i), o || (o = l("openid") || ""), v.openid = o, wx.request({

url: e.url,

data: "POST" === e.method ? e.data : i,

header: v,

method: e.method || "GET",

dataType: e.dataType || "json",

responseType: e.responseType || "text",

可以看到 pseusign 是由 h 函數(shù)生成,跟進(jìn) h 來看下

function h(e, n) {

var o = "",

a = getApp();

if (a) {

var i = a.vars.headerSgin;

try {

if (!n) return "";

var c = {};

if ("string" == typeof n) n.split("&").forEach((function (e) {

var t = e.split("=");

2 === t.length && (c[t[0]] = t[1])

}));

else c = n;

if (e.includes("?")) e.substr(e.indexOf("?") + 1).split("&").forEach((function (e) {

var t = e.split("=");

2 === t.length && (c[t[0]] = t[1])

}));

var u = i.encodeNumber,

s = i.password,

g = function (e, t) {

var n = new Date(e.getUTCFullYear(), e.getUTCMonth(), e.getUTCDate(), e.getUTCHours(), e.getUTCMinutes(), e.getUTCSeconds()),

r = new Date(n.setHours(e.getUTCHours() + 8)),

o = {

"M+": r.getMonth() + 1,

"d+": r.getDate(),

"h+": r.getHours(),

"m+": r.getMinutes(),

"s+": r.getSeconds(),

"q+": Math.floor((r.getMonth() + 3) / 3),

S: r.getMilliseconds()

};

for (var a in /(y+)/.test(t) && (t = t.replace(RegExp.$1, String(r.getFullYear()).substr(4 - RegExp.$1.length))), o) new RegExp("(" + a + ")").test(t) && (t = t.replace(RegExp.$1, 1 === RegExp.$1.length ? o[a] : ("00" + o[a]).substr(String(o[a]).length)));

return t

}(new Date, "yyyyMMddhhmmss"),

l = "p".concat(u).concat(g),

f = t(t({}, c), {}, {

micalltime: g,

miversion: i.miversgin,

misource: u

}),

h = Object.keys(f);

h.sort((function (e, t) {

return e.toLowerCase().localeCompare(t.toLowerCase())

}));

var d = "";

h.forEach((function (e) {

d += "&".concat(e, "=").concat(f[e])

})), d = d.substr(1);

var p = r.hex_md5("".concat(d).concat(s));

o = "".concat(l).concat(p)

} catch (e) {

o = ""

}

}

return o

}

打上 debugger 進(jìn)行調(diào)試

var i = a.vars.headerSgin;

a.vars 則聲明在 app.js 是一個(gè)常量對(duì)象,那么 headerSginheaderSgin: {encodeNumber: "101",password: "4f0c6725d917f8fe4e2791921187fd7d",miversgin: "p"}

c = n;

n 為函數(shù)的第 2 個(gè)參數(shù),是一個(gè)對(duì)象,多調(diào)試幾次就知道是接口的請(qǐng)求參數(shù)

if (e.includes("?")) e.substr(e.indexOf("?") + 1).split("&").forEach((function (e) {
        var t = e.split("=");
        2 === t.length && (c[t[0]] = t[1])
      }));

e 為函數(shù)的第 1 個(gè)參數(shù),是一個(gè) URL 地址

var u = i.encodeNumber,

u = 101

s = i.password,

s = 4f0c6725d917f8fe4e2791921187fd7d

g = function (e, t) {
          var n = new Date(e.getUTCFullYear(), e.getUTCMonth(), e.getUTCDate(), e.getUTCHours(), e.getUTCMinutes(), e.getUTCSeconds()),
            r = new Date(n.setHours(e.getUTCHours() + 8)),
            o = {
              "M+": r.getMonth() + 1,
              "d+": r.getDate(),
              "h+": r.getHours(),
              "m+": r.getMinutes(),
              "s+": r.getSeconds(),
              "q+": Math.floor((r.getMonth() + 3) / 3),
              S: r.getMilliseconds()
            };
          for (var a in /(y+)/.test(t) && (t = t.replace(RegExp.$1, String(r.getFullYear()).substr(4 - RegExp.$1.length))), o) new RegExp("(" + a + ")").test(t) && (t = t.replace(RegExp.$1, 1 === RegExp.$1.length ? o[a] : ("00" + o[a]).substr(String(o[a]).length)));
          return t
        }(new Date, "yyyyMMddhhmmss"),

這塊代碼就是取當(dāng)前時(shí)間然后轉(zhuǎn)化格式,g = 20230411175542

l = "p".concat(u).concat(g),

l = “p” + 101 + 20230411175542 = “p10120230411175542”

f = t(t({}, c), {}, {
  micalltime: g,
  miversion: i.miversgin,
  misource: u
}),

f 就是把上文中的 g、i.miversgin、u 合并為一個(gè)對(duì)象

h = Object.keys(f);

hf 對(duì)象的所有 key 的數(shù)組

h.sort((function (e, t) {
return e.toLowerCase().localeCompare(t.toLowerCase())
}));

對(duì) h 數(shù)組中的元素全部轉(zhuǎn)小寫

var d = "";
h.forEach((function (e) {
d += "&".concat(e, "=").concat(f[e])
})), d = d.substr(1);

聲明一個(gè)空字符串 d ,然后把 h 中的元素全部使用 & 拼接起來

 var p = r.hex_md5("".concat(d).concat(s));
o = "".concat(l).concat(p)

d 和之前的 s 拼接起來使用 md5 加密之后,在和 l 拼接,結(jié)果就出來了

o = “p10120230411175542fab22e3db8c2d5a523289a398d920647”

部分最終代碼

function getSign(e, n) {
    var i = {
        encodeNumber: "101",
        password: "4f0c6725d917f8fe4e2791921187fd7d",
        miversgin: "p"
    };
    s = i.password;
    var c = {};
    if ("string" == typeof n) {
        n.split("&").forEach((function (e) {
            var t = e.split("=");
            2 === t.length && (c[t[0]] = t[1])
        }));
    } else {
        c = n;
        if (e.includes("?")) e.substr(e.indexOf("?") + 1).split("&").forEach((function (e) {
            var t = e.split("=");
            2 === t.length && (c[t[0]] = t[1])
        }));
    }
    var u = i.encodeNumber;
    g = function (e, t) {
        var n = new Date(e.getUTCFullYear(), e.getUTCMonth(), e.getUTCDate(), e.getUTCHours(), e.getUTCMinutes(), e.getUTCSeconds()),
            r = new Date(n.setHours(e.getUTCHours() + 8)),
            o = {
                "M+": r.getMonth() + 1,
                "d+": r.getDate(),
                "h+": r.getHours(),
                "m+": r.getMinutes(),
                "s+": r.getSeconds(),
                "q+": Math.floor((r.getMonth() + 3) / 3),
                S: r.getMilliseconds()
            };
        for (var a in /(y+)/.test(t) && (t = t.replace(RegExp.$1, String(r.getFullYear()).substr(4 - RegExp.$1.length))), o) new RegExp("(" + a + ")").test(t) && (t = t.replace(RegExp.$1, 1 === RegExp.$1.length ? o[a] : ("00" + o[a]).substr(String(o[a]).length)));
        return t
    }(new Date(), "yyyyMMddhhmmss");
    l = "p".concat(u).concat(g);
    f = _objectSpread2(_objectSpread2({}, c), {}, {
        micalltime: g,
        miversion: i.miversgin,
        misource: u
    });
    h = Object.keys(f);
    h.sort((function (e, t) {
        return e.toLowerCase().localeCompare(t.toLowerCase())
    }));
    var d = "";
    h.forEach((function (e) {
        d += "&".concat(e, "=").concat(f[e])
    })), d = d.substr(1);
    var p = hs.hex_md5("".concat(d).concat(s));
    o = "".concat(l).concat(p)
    return o;
}

// let url = 'https://miniapp.fang.com/pingyin/cityList';
// let params = {
//     'appname': 'fangx',
//     'v': '1.3.4',
//     'miniplat': 'weixin',
//     'scene': '1027',
// }
// console.log(getSign(url, params));

完整代碼

關(guān)注公眾號(hào)【趣碼周】回復(fù) ftx 即可獲得。

關(guān)注我們

微信公眾號(hào):【趣碼周文章來源地址http://www.zghlxwxcb.cn/news/detail-443212.html

到了這里,關(guān)于【VX小程序逆向】房*下小程序pseusign參數(shù)分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【驗(yàn)證碼逆向?qū)凇繑?shù)美驗(yàn)證碼全家桶逆向分析以及 AST 獲取動(dòng)態(tài)參數(shù)

    本文章中所有內(nèi)容僅供學(xué)習(xí)交流使用,不用于其他任何目的,不提供完整代碼,抓包內(nèi)容、敏感網(wǎng)址、數(shù)據(jù)接口等均已做脫敏處理,嚴(yán)禁用于商業(yè)用途和非法用途,否則由此產(chǎn)生的一切后果均與作者無關(guān)! 本文章未經(jīng)許可禁止轉(zhuǎn)載,禁止任何修改后二次傳播,擅自使用本文講

    2024年02月03日
    瀏覽(27)
  • 網(wǎng)易易盾——推理拼圖驗(yàn)證碼參數(shù)逆向分析和調(diào)用

    網(wǎng)易易盾——推理拼圖驗(yàn)證碼參數(shù)逆向分析和調(diào)用

    本篇文章主要是對(duì)驗(yàn)證的提交參數(shù)進(jìn)行逆向分析,成功演示結(jié)果在最底部 目標(biāo)網(wǎng)址 抓包 提交分析 拖動(dòng)提交參數(shù) 以下幾個(gè)參數(shù)是會(huì)變動(dòng)的,所以我們主要是對(duì)這幾個(gè)參數(shù)進(jìn)行分析 我們先直接拖動(dòng)驗(yàn)證一下,看下請(qǐng)求發(fā)送,會(huì)發(fā)送一個(gè)check請(qǐng)求,再查看一下請(qǐng)求堆棧調(diào)用,所

    2024年02月13日
    瀏覽(19)
  • 最新PDD批發(fā)Anti-Content參數(shù)逆向分析與算法還原

    最新PDD批發(fā)Anti-Content參數(shù)逆向分析與算法還原

    【??作者主頁】: 吳秋霖 【??作者介紹】:擅長爬蟲與JS加密逆向分析!Python領(lǐng)域優(yōu)質(zhì)創(chuàng)作者、CSDN博客專家、阿里云博客專家、華為云享專家。一路走來長期堅(jiān)守并致力于Python與爬蟲領(lǐng)域研究與開發(fā)工作! 【??作者推薦】:對(duì)爬蟲領(lǐng)域以及JS逆向分析感興趣的朋友可以關(guān)

    2024年04月16日
    瀏覽(92)
  • 【Python爬蟲案例】抖音下載視頻+X-Bogus參數(shù)JS逆向分析

    【Python爬蟲案例】抖音下載視頻+X-Bogus參數(shù)JS逆向分析

    選擇自己感興趣的抖音博主,本次以“經(jīng)典老歌【車載U盤】”為例 每次請(qǐng)求的頁面會(huì)有很多接口,需要對(duì)接口進(jìn)行篩選: 第一步篩選XHR篩選 第二步篩選URL中帶有post 通過篩選play_add值找到視頻的地址 通過對(duì)比兩次請(qǐng)求發(fā)現(xiàn)只有X-Bogus數(shù)值會(huì)有變化,max_cursor是用翻頁,后文再

    2024年03月15日
    瀏覽(26)
  • 最新PDD商家端Anti-Content參數(shù)逆向分析與純算法還原

    最新PDD商家端Anti-Content參數(shù)逆向分析與純算法還原

    【??作者主頁】: 吳秋霖 【??作者介紹】:擅長爬蟲與JS加密逆向分析!Python領(lǐng)域優(yōu)質(zhì)創(chuàng)作者、CSDN博客專家、阿里云博客專家、華為云享專家。一路走來長期堅(jiān)守并致力于Python與爬蟲領(lǐng)域研究與開發(fā)工作! 【??作者推薦】:對(duì)爬蟲領(lǐng)域以及JS逆向分析感興趣的朋友可以關(guān)

    2024年04月09日
    瀏覽(25)
  • 【逆向】03-20擴(kuò)大節(jié) c++代碼完成 ;類當(dāng)作函數(shù)參數(shù)卻調(diào)用了析構(gòu)函數(shù)疑難分析

    若要看PE結(jié)構(gòu)操作最新代碼,點(diǎn)擊主頁查看?。?? 和上一節(jié)的代碼相比,本文章主要修復(fù)了上一篇文章代碼中PE類中的Analyze函數(shù),這樣不管是Before_Stretch_Data還是Stretch_Data,Shrink_Data,在這個(gè)函數(shù)中都可以分析出PE結(jié)構(gòu) 另外新添加了函數(shù)Expand_Section函數(shù),可以自動(dòng)擴(kuò)大最后一個(gè)

    2024年02月07日
    瀏覽(19)
  • 簡單分享下小程序商城開發(fā)要多少錢

    簡單分享下小程序商城開發(fā)要多少錢

    小程序商城的開發(fā)費(fèi)用因多種因素而異,包括以下幾點(diǎn): 一、功能需求:商城的功能要求不同,開發(fā)所需的工作量也會(huì)有所不同。例如,基本的商品展示和購買功能相對(duì)較簡單,而復(fù)雜的訂單管理、支付、物流等功能可能需要更多的開發(fā)工作。 二、設(shè)計(jì)與界面:商城的設(shè)計(jì)

    2024年02月12日
    瀏覽(16)
  • 微信小程序逆向分析

    微信小程序逆向分析

    WeChatAppEx.exe 版本:2.0.6609.4 以融智云考學(xué)生端為例。 網(wǎng)上已經(jīng)有關(guān)于微信小程序解密的非常優(yōu)秀的文章,本著學(xué)習(xí)的目的便不參考相關(guān)內(nèi)容。 筆者水平實(shí)在有限,如發(fā)現(xiàn)紕漏,還請(qǐng)讀者不吝賜教。 如涉及侵權(quán),請(qǐng)聯(lián)系作者處理。 工具:火絨劍 首先看看打開一個(gè)小程序微信

    2024年01月16日
    瀏覽(27)
  • 小程序逆向分析 (一)

    小程序逆向分析 (一)

    李老板:奮飛呀,最近耍小程序的比較多,而且貌似js好耍一點(diǎn)?要不咱們也試試? 奮飛: 你是老板,你說了算嘍。 第一次搞小程序,得找個(gè)軟柿子捏,就找個(gè)以前分析過的某段子App的小程序吧。 反編譯 靜態(tài)分析 動(dòng)態(tài)調(diào)試 春天在哪里? app下載回來就是apk包,那么小程序在

    2024年02月06日
    瀏覽(29)
  • 微信小程序前端加解密逆向分析

    微信小程序前端加解密逆向分析

    某小程序滲透測(cè)試項(xiàng)目,測(cè)試時(shí)發(fā)現(xiàn)請(qǐng)求包內(nèi)容進(jìn)行了加密 小程序文件目錄: 使用網(wǎng)易Mumu模擬器,開啟root權(quán)限,安裝手機(jī)微信并訪問指定小程序,然后打開RE文件管理器,在 data/data/com.tencent.mm/MicroMsg 會(huì)生成一個(gè)md5加密命名的文件夾,在該文件夾下的 appbrand/pkg 目錄下找到

    2024年02月05日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包