微信小程序 Spdier - OfferShow 反編譯逆向(一)
前言
本文需要使用到的工具有:
Charles抓包工具、夜神模擬器、微信開發(fā)者工具、wxapkg反編譯工具CrackMinApp;提示:需要安裝好Charles和夜神模擬器并配置好App抓包環(huán)境,以及安裝好微信開發(fā)者工具 / 反編譯工具CrackMinApp
Charles&夜神模擬器安裝教程:https://blog.csdn.net/EXIxiaozhou/article/details/127767808
微信開發(fā)者工具 / 反編譯工具CrackMinApp 下載安裝:https://blog.csdn.net/EXIxiaozhou/article/details/128110468
該文章涉及到App抓包以及微信小程序反編譯逆向等相關(guān)的Spider技術(shù)
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、任務(wù)說明
1.嘗試反編譯分析出js_code參數(shù)的生成方式,用來獲取token
2.將小程序搜索出來的數(shù)據(jù)保存至本地excel
二、微信小程序抓包 - 分析
1、打開Charles抓包工具,啟動模擬器,進(jìn)入微信
2、搜索小程序offershow,打開進(jìn)入,崗位搜索,輸入關(guān)鍵詞:“python”
3、生成token接口分析,接口url:https://www.ioffershow.com/V4/silent_login
提示:第一次打開,需要請求這個接口提交js_code參數(shù)才能拿到token,headers添加一個token即可風(fēng)雨無阻
4、刷新token接口分析,小程序每隔一段時間會刷新token
接口url:https://www.ioffershow.com/V4/refresh_token
請求該接口時,提交當(dāng)天服務(wù)器返回的任意一個token,即可請求成功獲得新的token;
下圖使用postman工具模擬請求刷新token接口,Postman API測試工具 基本使用:https://blog.csdn.net/EXIxiaozhou/article/details/128333884
5、search_salary、根據(jù)關(guān)鍵詞進(jìn)行接口請求,url:https://www.ioffershow.com/V4/search_salary
可以看到返回的json數(shù)據(jù)
三、wxapkg反編譯 - 分析
1.在夜神模擬器獲取微信程序員的包
1.1 獲取wxapkg的地址
方式一、直接全局搜索文件后綴(.wxapkg)
點擊右側(cè)的任意處,再點擊右上側(cè)的三個點,選擇搜索,輸入.wxapkg
方法二、一般具體的文件目錄地址是:/data/data/com.tencent.mm/MicroMsg/{一串16進(jìn)制字符
}/appbrand/pkg/
1.2 刪除wxapkg文件重新生成
區(qū)分那些包是屬于offershow小程序
- 1.需要將微信的OfferShow小程序清除掉,再退出微信
- 2.將原來已經(jīng)生成的所有wxapkg文件刪除
- 3.重新登錄微信,再次打開小程序再生成新的wxapkg文件
- 4.再次打開模擬器存放wxapkg文件的目錄,里面出現(xiàn)的wxapkg文件都屬于OfferShow
1.3 復(fù)制wxapkg文件至windows目錄,用來反編譯調(diào)試
路徑:/data/data/com.tencent.mm/MicroMsg/e8b469b0e57e32dd18d1293036fc556f/appbrand/pkg/
左側(cè)找到windows本地目錄,右側(cè)找到模擬器存放wxapkg文件的目錄,長按文件選擇復(fù)制即可,全部復(fù)制;
2.使用CrackMinApp對.wxapkg文件進(jìn)行反編譯
1、將.wxapkg文件復(fù)制到CrackMinApp-master\wxapkg目錄;
微信開發(fā)者工具 / 反編譯工具CrackMinApp 下載安裝:https://blog.csdn.net/EXIxiaozhou/article/details/128110468
2、
將三個.wxapkg文件依次反編譯,區(qū)分主包和依賴包,真正的小程序包大小1M左右,而依賴包大小2、3M甚至更多,將依賴包復(fù)制放入主包;
反編譯之后的主包
3.使用微信開發(fā)者工具打開反編譯好的主包開始調(diào)試
4.分析結(jié)果
我調(diào)試到最后,發(fā)現(xiàn)js_code的加密代碼被隱藏了,到此結(jié)束,如果有大佬知道加密方式的話,歡迎在評論處指教,非常感謝;
我的做法是手動復(fù)制當(dāng)天服務(wù)器返回的token去請求刷新token的接口,拿到最新的token去請求查詢薪資的接口,最后將數(shù)據(jù)保存至xlsx;
四、運行結(jié)果
輸出xlsx文件文章來源:http://www.zghlxwxcb.cn/news/detail-796304.html
五、示例代碼
import os
import time
import requests
import pandas as pd
class OfferShow(object):
def __init__(self):
# 當(dāng)天的任意token
self.ord_token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MTAwNDI2MSwibmlja25hbWUiOiJcdTcwZWRcdTVmYzNcdTc1MjhcdTYyMzciLCJleHAiOjE2Njk2NDY0OTEsIm9yaWdfaWF0IjoxNjY5NjQ1ODkxfQ.cWukvcTzgtQGyIVjzRT4Lr2Dcm1Y3Nnfov-bEX0QwfY'
self.headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 7.1.2; SM-G9810 Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile Safari/537.36 MMWEBID/5551 MicroMessenger/8.0.30.2260(0x28001E3A) WeChat/arm32 Weixin NetType/WIFI Language/zh_CN ABI/arm32 MiniProgramEnv/androidUser-Agent Mozilla/5.0 (Linux; Android 7.1.2; SM-G9810 Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile Safari/537.36 MMWEBID/5551 MicroMessenger/8.0.30.2260(0x28001E3A) WeChat/arm32 Weixin NetType/WIFI Language/zh_CN ABI/arm32 MiniProgramEnv/android',
'content-type': 'application/x-www-form-urlencoded',
'token': self.ord_token,
'Accept-Encoding': 'gzip,compress,br,deflate'
}
self.xueli = ''
self.result_file_path = 'OfferShow_salary.csv'
def get_token(self):
refresh_token_url = 'https://www.ioffershow.com/V4/refresh_token'
form_data = {
'token': self.ord_token
}
token_response = requests.post(url=refresh_token_url, headers=self.headers, data=form_data)
token = token_response.json()['data']['token']
print("token獲取成功:", token)
return token
def search_salary(self, keyword):
salary_url = 'https://www.ioffershow.com/V4/search_salary'
from_data = {
'content': keyword,
'ordertype': 2,
'search_priority': 3,
'part_school': '',
'xueli': self.xueli,
'year': ''
}
salary_response = requests.post(url=salary_url, headers=self.headers, data=from_data)
json_data = salary_response.json()['data']
for item in json_data:
content = f"{keyword},{item['id']},{item['company'].replace(',', ',')},{item['position'].replace(',', ',')}" \
f",{item['salary'].replace(',', ',')},{item['city'].replace(',', ',')}," \
f"{item['hangye'].replace(',', ',')},{item['xueli']},{item['salarytype']},{item['score']},{item['time']}"
content = content.replace('\n', '').replace('\n', '') + '\n'
self.csv_save(content=content)
print("寫入成功:", content, end='')
def create_csv_file(self):
if os.path.exists(self.result_file_path) is False:
with open(file=self.result_file_path, mode='w', encoding='utf-8') as fis:
fis.write('關(guān)鍵詞,薪資ID,公司,崗位,薪資,城市,行業(yè),學(xué)歷,薪資類型,可信度,發(fā)布時間\n')
def csv_save(self, content):
with open(file=self.result_file_path, mode='a+', encoding='utf-8') as fis:
fis.write(content)
def csv_save_as_xlsx(self):
""" 讀取csv文件將結(jié)果寫入xlsx """
filename_prefix = os.path.splitext(self.result_file_path)[0] # 切割文件路徑以及后綴
df = pd.read_csv(self.result_file_path, encoding='utf-8', dtype='object')
df.to_excel(f"{filename_prefix}.xlsx", index=False)
print("csv 轉(zhuǎn) xlsx 成功!\n", end='')
def runs(self, keyword_list):
self.create_csv_file()
token = self.get_token()
self.headers['token'] = token
for keyword in keyword_list:
self.search_salary(keyword=keyword)
time.sleep(0.25)
self.csv_save_as_xlsx()
if __name__ == '__main__':
keywords_list = [
'Python', 'Java', 'Php', 'JavaScript', 'Go', 'R語言', 'MATLAB', 'C++', 'C#', '后端', '前端', '算法', '人工智能',
'軟件測試', 'IT運維', '數(shù)據(jù)庫', 'VisualBasic'
] # 需要搜索的關(guān)鍵詞
obj = OfferShow()
obj.runs(keywords_list)
總結(jié)
以上就是今天要講的內(nèi)容,本文僅僅簡單介紹了微信小程序Spider的基本流程,也留下了一些bug,不過最后是拿到了想要的數(shù)據(jù),關(guān)于其他的微信小程序Spider案例,請來我的主頁查看;文章來源地址http://www.zghlxwxcb.cn/news/detail-796304.html
到了這里,關(guān)于微信小程序 Spdier - OfferShow 反編譯逆向(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!