吾愛破解 - LCG - LSG |安卓破解|病毒分析|破解軟件|排列三5码组三最大遗漏 www.ynjqb.tw

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

搜索
查看: 5705|回復: 35
上一主題 下一主題

极速3d组三技巧规律: [原創] 關于pandownload的一般性研究

  [復制鏈接]
跳轉到指定樓層
樓主
tzwsoho 發表于 2019-9-6 18:18 回帖獎勵
本帖最后由 tzwsoho 于 2019-9-6 22:06 編輯

眾所周知,最近由于某些特殊原因,pandownload關閉了默認搜索功能,一直使用暢快的我感到了前所未有的掣肘感。但很感謝pandownload的作者提供了這么好用的功能,希望事情過去后仍然可以把功能開放一下。本文僅供學習研究使用,禁止用作非法用途,如有不妥之處請告之,本人會在第一時間修改刪除。


這篇文章主要是對pandownload(下面簡稱PD)兩大功能的挖掘:
  • 默認搜索功能
  • 提取碼搜索功能



軟件環境:
  • Visual Studio 2012
  • WireShark
  • WinHex
  • Navicat
  • unluac_2015_06_13.jar(https://sourceforge.net/projects/unluac/)
  • lua53(//www.lua.org/ftp/lua-5.3.5.tar.gz)
  • Pandownload v2.1.3



默認搜索功能


一直在用PD的朋友都應該知道,自從2019年8月30日開始,PD不再提供強大的默認搜索功能。而大家可以在PD的目錄中看到,一些如盤多多之類的插件,都是通過lua腳本來實現的,這時我們可以很容易就聯想,會不會默認搜索也是同樣適用lua來實現呢?答案其實是肯定的,并且因為PD自身使用lua5.3的原因,我們可以通過修改lua53.dll的一些函數就可以把默認搜索的lua腳本提取出來,但因為搜索功能已經關閉,其實PD已不再加載相關的腳本,這個我們可以通過wireshark抓包知道:


首先我們打開WireShark,設置過濾器為http,再打開PD,我們可以看到,PD會先訪問一個初始化的地址,然后會通過訪問
//pandownload.com/api/script/list?clienttype=0&referral=&t=1567735359&version=2.1.3
來獲取腳本的配置信息,如下圖:



這個腳本配置是個JSON文本,目前是這樣的:
[JavaScript] 純文本查看 復制代碼
{
"scripts": [
{
"name": "search_pandown.lua",
"remove": true
},
{
"name": "search_ncckl.lua",
"remove": true
},
{
"name": "search_quzhuanpan.lua",
"remove": true
},
{
"name": "anime_01.lua",
"remove": true
},
{
"name": "anime_02.lua",
"id": 1000,
"url": "//static.pandownload.com/scripts/anime_agefans_0.0.5.lua",
"md5": "2d5d32f3294e7617bb0e5f0d942b29c9"
},
{
"name": "anime_dilidili.lua",
"id": 1001,
"url": "//pandownload.com/static/scripts/anime/anime_dilidili_0.0.4.lua",
"md5": "197927c0ad7098f59c2c8674fd7054a8"
},
{
"name": "s",
"id": 2,
"url": "//pandownload.com/static/scripts/s005",
"md5": "93c6666f6b10c40ac6d55771ddb98367"
},
{
"name": "anime",
"id": 3,
"url": "//static.pandownload.com/scripts/anime_0.0.2",
"md5": "5fd63dc5bf617225ebfb3b16413879cb"
},
{
"name": "default",
"id": 0,
"url": "//pandownload.com/static/scripts/default_0.3.8",
"md5": "363d53675fdd959d2ec5ad30c160435d",
"key": "3ae81c85790faeccd3ed39d533816b32"
}
],
"code": 0,
"message": "success"
}


我們可以看到,search_pandown.lua就是默認搜索的腳本,而它的remove狀態現在已經是true,所以PD不會從服務器里下載下來,那怎么才能知道默認搜索的功能實現呢?其實一般軟件的開發都是迭代進行的,舊版本的PD或許還留有一些BUG之類的可以供我們去發掘,這時我們可以考慮下載舊版本的PD進行研究。我們從PD的官網更新日志得知,從2.0.3版本開始,PD便加入了搜索功能,可以通過https://pandownload.com/2.0.3這個鏈接下載v2.0.3版本,但解壓后會發現這個版本并不包含默認搜索功能,可能是作者當時還沒弄好本地數據庫的原因吧。我們可以繼續下載更新的版本,一直到v2.0.6,解壓之后你可以看到里面就有一個search_pandown.lua。但打開后會發現這個文件其實是已經編譯過的luac格式的文件,我們可以使用工具進行反編譯(如果反編譯出現錯誤,需要用WinHex把文件打開,把所有的0D0A字節替換成0A,后面操作雷同)
java -jar unluac_2015_06_13.jar search_pandown.lua > C:\search_pandown.lua
這時可以看到,這個版本的腳本訪問的搜索URL并沒有附加sign字段,可能是之前PD作者沒考慮到會被盜鏈。
但本人很有幸,在PD作者關閉默認搜索腳本功能之前就已經把最新版本的代碼dump了下來。dump腳本的方法很簡單,我們可以在lua的官網上下載一份lua53的源碼,使用VS編譯出修改后的dll并替換掉原來的,那便可以為所欲為了!這里我自己修改了lua_loadbufferex函數:
[C++] 純文本查看 復制代碼
LUALIB_API int luaL_loadbufferx (lua_State *L, const char *buff, size_t size,
const char *name, const char *mode) {
FILE* f = NULL;
char fn[50];
LoadS ls;
ls.s = buff;
ls.size = size;


sprintf(fn, "D:\\%d.luac", rand() * 100000);
f = fopen(fn, "w");
fwrite(buff, size, 1, f);
fclose(f);


return lua_load(L, getS, &ls, name, mode);
}


替換掉原來的DLL后,打開PD,隨便搜索一些東西再關閉PD,我們可以看到D:盤下生成了許多“數字.luac”文件。我們再次使用unluac將它們逐一反編譯,可以看到一份源碼是這樣的(由于邊幅過長,我去掉了一些與本文無關緊要的代碼):
[Lua] 純文本查看 復制代碼
local L1_1
L0_0 = require
L1_1 = "lcurl.safe"
L0_0 = L0_0(L1_1)
L1_1 = require
L1_1 = L1_1("cjson.safe")
script_info = {
  title = "默認",
  description = "",
  version = "0.0.5"
}
function onSearch(A0_2, A1_3)
  local L2_4, L3_5
  L2_4 = os
  L2_4 = L2_4.time
  L2_4 = L2_4()
  L3_5 = "//search.pandown.cn/api/query?clienttype=0&highlight=1&key="
  L3_5 = L3_5 .. pd.urlEncode(A0_2) .. "&page=" .. A1_3 .. "&timestamp=" .. L2_4 .. "&sign=" .. e(A0_2, A1_3, L2_4)
  return parse(get(L3_5))
end
function onItemClick(A0_6)
...
end
function get(A0_9)
...
end
function parse(A0_13)
...
end
function replace(A0_22, A1_23)
...
end
function getIcon(A0_25, A1_26)
...
end
function e(A0_33, A1_34, A2_35)
  local L3_36
  L3_36 = ""
  if pd.makeSign then
    L3_36 = pd.makeSign(A0_33 .. "_" .. A1_34 .. "_" .. A2_35)
  end
  return L3_36
end


這時我們可以清晰地看到,PD的默認搜索其實就是訪問了一個URL,然后解析返回的內容再以列表的形式展示出來:
//search.pandown.cn/api/query?clienttype=0&highlight=1&key=編碼后的關鍵字&page=頁碼&timestamp=當前時間&sign=pd.makeSign(原關鍵字 + "_" + 頁碼 + "_" + 當前時間)
這里的pd.makeSign其實是一個PD使用C/C++寫的內置函數,并不是腳本實現,所以很可惜我并不能知道這個函數的實現細節。這個函數可以用兩種方法來獲取在內存中的地址,一種是修改lua,比如PanData\script\default\rename_01.lua,增加以下代碼:
[Lua] 純文本查看 復制代碼
for k, v in pairs(pd) do
        if "makeSign" == k then
                pd.logInfo(k .. "|" .. tostring(v))
        end
end


在PD啟動時就會把makeSign函數的地址寫入PanData\log\xxx.log日志文件里,這時直接用OD/VS/CheatEngine之類的調試器直接附加到PD,然后跳轉到日志里的地址就可以進行反匯編。
另外還有一種方法就是跟蹤lua_pushstring和lua_pushcclosure兩個函數,PD在啟動時會調用這兩個函數生成pd表格對象,可以對lua_pushstring下個條件斷點,然后也能找到makeSign函數的真實地址。雖然找到了makeSign的實現匯編代碼,但由于能力所及我并不知道這個函數的實現原理。
看到這里,聰明的讀者是不是想到,雖然我們并不知道pd.makeSign的實現方法,但是既然我們已經知道了默認搜索的實現腳本,而PD又支持插件功能,自己照樣畫葫蘆再寫一個相同功能的腳本不就同樣可以實現默認搜索的功能?但是很遺憾的是,PD的作者在服務器端也將此功能關閉了,目前訪問這個URL,得到的回復都只會是{"code":-1,"message":"服務器維護中"},所以一切只能等PD的作者恢復默認搜索功能才能愉快地玩耍了。


提取碼搜索功能


我覺得PD之所以如此受大眾喜愛,除了突破了某種限制,還有強大得無人能敵的默認搜索功能,最重要的我覺得就是網盤提取碼的搜索功能。這個功能的發掘相對簡單,使用WireShark即可。按之前的方法,我們先打開WireShark,設置http過濾器,打開PD,然后復制一個網盤分享鏈接(比如:https://pan.baidu.com/s/1GmaGU1FmZ5uwMtE8lUWKOA),這時PD會訪問一個網址來搜索提取碼:

我們可以看到,PD通過訪問這個URL來獲取提取碼:
//search.pandown.cn/api/query?clienttype=0&referral=&surl=1naiIOD7m8gZSrVk-Zr30dg&t=1567738781&version=2.1.3
其中,surl參數是網盤鏈接/s/后面的那段路徑,t是當前時間,其他參數固定。返回的內容也是JSON格式的文本,如果找不到提取碼,會返回以下內容:
[JavaScript] 純文本查看 復制代碼
{
        "code": 0,
        "message": "success",
        "total": 0,
        "data": []
}


如果找到了提取碼,就會返回這樣的格式:
[Asm] 純文本查看 復制代碼
{
"code": 0,
"message": "success",
"total": 1,
"data": [
{
"id": "3Nzk91",
"password": "mj8d",
"title": "彩虹島",
"ctime": "1567679677",
"expired": "0",
"isdir": "1"
}

}


同時PD還內置了SQLite數據庫,如果在找不到提取碼的情況下,PD還允許用戶自行輸入提取碼,當提取碼正確的時候,PD會把提取碼記錄到PanData\share.db文件里面,下次用戶再訪問同一個分享鏈接便不需要再向服務器請求提取碼。這文件可以使用Navicat之類的SQLite數據庫管理器直接打開,除了這個數據庫外還有下載任務列表數據庫(PanData\task.db),看著像是用戶數據庫(PanData\user.db),但用戶庫文件由于進行了加密,并不能正常打開,有時間再研究打開這個數據庫的密碼吧。

免費評分

參與人數 21威望 +1 吾愛幣 +28 熱心值 +19 收起 理由
sunsain + 1 用心討論,共獲提升!
夏日miku + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
佛系青年love + 1 + 1 雖熱看不懂,但還是感謝大佬的分析
西街胖娃娃 + 1 + 1 不明覺厲,只認識你寫的漢字
呼叫大牛 + 1 + 1 我很贊同!
hch91222 + 1 厲害,分析了許多!
靈魂歌手 + 1 + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!
waltzofjack + 2 + 1 我很贊同!
Hmily + 1 + 7 + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!
wkxq + 3 [email protected]!
mzl980425 + 1 + 1 我很贊同!
NOODOO + 1 + 1 支持下
15291037368 + 1 + 1 用心討論,共獲提升!
wslftz + 1 + 1 用心討論,共獲提升!
閑著就暈 + 1 + 1 [email protected]!
tangyb828 + 1 + 1 已經處理,感謝您對吾愛破解論壇的支持!
七月七日晴aaa + 1 + 1 我很贊同!
wvxinvw + 1 + 1 這么牛,為什么不開發一個啊
qijicxl + 1 + 1 [email protected]!
非寒 + 1 + 1 用心討論,共獲提升!
booom8513 + 1 我很贊同!

查看全部評分

發帖前要善用論壇搜索功能,那里可能會有你要找的答案或者已經有人發布過相同內容了,請勿重復發帖。

推薦
西街胖娃娃 發表于 2019-9-28 20:27
capelin 發表于 2019-9-24 13:21
學習了,這個軟件我一直在用,而且用得很爽。

兄弟,現在用的還爽不爽,下載文件  user is not authorized. hitcode: 118      軟件作者我是非常感謝的,只是現在10多T找不到其他工具下載了
推薦
 樓主| tzwsoho 發表于 2019-9-11 09:36 <
神器 發表于 2019-9-10 12:54
大神能寫一個一樣功能的嗎??

我也只是挖掘一下PD的一部分功能而已, 要寫一個一樣的軟件我可寫不出來,除了寫軟件還要受到百度方面的壓力,所以我也挺佩服PD的作者的
沙發
flyingct 發表于 2019-9-9 16:14
3#
lampson 發表于 2019-9-9 18:15
哎,已經被封了,
4#
非寒 發表于 2019-9-10 08:44
頂樓主,就喜歡這種技術牛貼,雖然看不太懂
5#
ConnorTple 發表于 2019-9-10 09:16
可惜了,唉
6#
Flytom 發表于 2019-9-10 09:23
速度只有幾十k了
7#
hua111 發表于 2019-9-10 09:34
認真學習,看看
8#
神器 發表于 2019-9-10 12:54
大神能寫一個一樣功能的嗎??
9#
hoohoo 發表于 2019-9-11 09:17
可惜被封了
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則 警告:本版塊禁止灌水或回復與主題無關內容,違者重罰!

快速回復 收藏帖子 返回列表 搜索

RSS訂閱|小黑屋|聯系我們|排列三5码组三最大遗漏 ( 京ICP備16042023號 | 京公網安備 11010502030087號 )

GMT+8, 2020-2-27 13:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回復 排列三5码组三最大遗漏 返回列表