吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 16897|回复: 146
收起左侧

[原创工具] 【原创软件开发者的福音】【8-29更新】无需服务器,基于蓝奏云的软件更新工具

    [复制链接]
善良的果仁 发表于 2023-8-28 13:23
本帖最后由 善良的果仁 于 2023-11-8 13:50 编辑


工具主要功能说明:
可以让软件每次打开时,自动检测是否有更新,此功能无需软件作者具备服务器。

使用说明及实现原理:
1、蓝奏云网盘设置:网盘中要设置一个带密码的文件夹(假设为:HotUpdate)用于存放软件更新数据及更新说明(更新数据、更新说明文件不要设置密码);



2、设置更新说明:更新说明为txt文件,里面内容为新版本更新的主要内容,txt文件名需要设置为大写    V. + 最新版本号 + . dll  (例如:V.1.0.1.dll ),上传到 HotUpdate文件夹




3、设置更新数据:更新数据用压缩为zip格式,更新数据文件名需要设置为大写  U. +最新版本号+.zip(例如:U.1.0.1.zip ),上传到 HotUpdate文件夹




4、初始化设置:(1)设置网址为 HotUpdate文件夹分享地址【必填】,例如:https://guoren.lanzouo.com/b00wvmvli
                           (2)密码为HotUpdate文件夹分享密码【必填】,例如:0000
                           (3)软件现行版本号为未更新的软件版本号【必填】,例如:1.0.0
                           (4)更新软件logo:用于设置更新程序左上角logo【选填】例如:/小白点/xbd.png
                           (5)软件启动程序路径:要启动的程序填写相对本软件路径【必填】,例如:/小白点/小白点A股助手.exe









6、原理:获取HotUpdate所有文件名称,取第一个以 V. 开头  .dll  结尾的文件并取中间的版本号(V.1.0.1.dll  取1.0.1),获取软件现行版本号(1.0.0),两个版本号不一样,检查是否存在U.1.0.1.zip ,如果存在则获取更新内容,让用户选择是否更新。
2023/8/29 11:20 更新
    V1.0.1
     aardio重构,去除python代码,体积变小   17.8M   ——>  789 k


软件链接:https://guoren.lanzouy.com/b00xj009c  密码:52pj


说下实现的思路,大家用的编程语言不一样,源码没有参考价值(我这边用的是aardio+python实现的)。


这个东西本质就是蓝奏云直链解析
本次用    https://guoren.lanzouy.com/b00wvmvli密码:0000     为例进行讲解,采用手机网页版访问(稳定),因此请求头设置手机浏览器请求头:Mozilla/5.0 (Linux; Android 7.1.2; PCT-AL10 Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/111.0.5563.116 Mobile Safari/537.36 XWEB/5197 MMWEBSDK/20221109 MMWEBID/5104 MicroMessenger/8.0.31.2281(0x28001F39) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android

1、get请求:https://guoren.lanzouy.com/b00wvmvli  得到内容有这一段:
[JavaScript] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<script type="text/javascript">
        var imzcbj ='HotUpdate';
        document.title = imzcbj;
document.getElementById('sp_name').innerHTML=imzcbj;        var pwd;
        var pgs;
        var ib2o7x = '1693209538';
        var _h109q = 'a6fb8e273dd47b11b3fc800a2fcba9b3';
        pgs =1;
        function file(){
                var pwd = document.getElementById('pwd').value;
        $('#sub').val("提交中...");
                $.ajax({
                        type : 'post',
                        url : '/filemoreajax.php',
                        data : {
                        'lx':2,
                        'fid':7417478,
                        'uid':'1162887',
                        'pg':pgs,
                        'rep':'0',
                        't':ib2o7x,
                        'k':_h109q,
                        'up':1,
                                                'ls':1,
                        'pwd':pwd                        },
                        dataType : 'json',



然后截取一下字符串,整理一下得到下次post请求的data,把data带入第二次请求
post 请求  https://guoren.lanzouy.com/filemoreajax.php
[JavaScript] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
data = {lx: 2,
fid: 7417478,
uid: 1162887,
pg: 1,
rep: 0,
t: 1693209538,
k: a6fb8e273dd47b11b3fc800a2fcba9b3,
up: 1,
ls: 1,
pwd: 0000}

得到:
[JavaScript] 纯文本查看 复制代码
1
{"zt":1,"info":"sucess","text":[{"icon":"dll","t":0,"id":"ibVKf16ft28h","name_all":"V.1.0.1.dll","size":"81.0 B","time":"\u524d\u592922:01","duan":"i16ft28","p_ico":0},{"icon":"zip","t":0,"id":"ieQ8U16ft27g","name_all":"U.1.0.1.zip","size":"39.4 M","time":"\u524d\u592922:01","duan":"i16ft27","p_ico":0}]}

把文件的id进行拼接  得到下次请求url ,(例如,"id":"ibVKf16ft28h")拼接文件详情链接(手机版)---> https://guoren.lanzouo.com/   +   tp/    +    ibVKf16ft28h
第三次请求,get    请求   https://guoren.lanzouo.com/tp/ibVKf16ft28h
得到网页中有
[JavaScript] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
<script type="text/javascript">var cppat = 'as';
var tedomain ='c';
var vkjxld = 'https://developer-oss.lanzouk.com/file/';
var tedomaina = '';
var hyggid = '?UjRXaQ08VGUIAQU9BDFRPVZpBz8DKldkBy5XYVQmUWEGKAEyDj9UbFEhCjpRbFM+AzxQCldhBGIDOVptBWgBMFJlVzENZVQ2CGYFagR2UTZWfwc/A2RXZAcmVyFUeFFtBjQBZg5hVDNRKApsUTFTfQNoUGZXJwQxAzxaPQVgATZSMFdmDWZUMgg8BWMEZlE2VjkHZwNsVzEHMFdjVDpRYgZgAWYOMlQ1UWQKPVE0UzQDOFA3VzEEKANgWjAFNQEmUidXcw01VHIINwU3BG1RYVY9BzQDbldtBzhXZlQuUSQGbwE7DjZUZlE6Cm1RM1NrA2tQbFc9BDUDNVppBWsBJlI0V2wNJ1Q9CG8FZQRoUWJWPAc3A2hXZwcwV2ZULlElBnYBIQ5uVDFRMQpkUTRTYQNuUGVXOAQyAzJaegUsAWlSIlc9DWFUOAhuBX0EYVFgVjUHLANtV2EHMFd/VDtRYAYgATIOP1Q9UTc=';
var domianload = 'c';
//var subtis = 'sa';
(function(document) {
var submit = document.getElementById('submit');
submit.onfocus = submit.onmousedown = function() {
submit.href =  vkjxld + hyggid
}


取  vkjxld + hyggid  得到下次请求url    ,这里可以进行判断(vkjxld 、 hyggid 这两个变量名有可能会变),用 = 分割为列表listone ,遍历listone ,listone前几个字符串为“https 且同时存在   lanzou   那 listone 切割  ‘ 得到 https://developer-oss.lanzouk.com/file/  ,  listone[i-1]切割 var   得到变量名称(注意去除空格),hyggid 变量名及他的值同理亦可得。

第四次请求,这次比较特殊, vkjxld + hyggid得到的链接实际上是重定向的,要用head方法进行请求,解析取Location的值就是文件直链

剩下的事情就简单了,按照   6、原理就可以实现本软件功能。




7、探讨
之前有朋友提出强制更新问题,但是前段时间一直比较忙,今天闲下来主要探讨一下强制更新的思路。
假设我现在提供更新检测和更新服务的软件为A,需要更新的软件为B,目前软件运行模式是这样的:先运行A检测软件是否需要更新,然后通过软件A启动软件B,抛开A,用户是可以直接启动B的,一样可以运行,这种情况下无法对原软件进行约束强迫其进行更新。
因此我设想通过时间戳加密来规避这个问题,先运行A联网检测然后产生时间戳C,A对时间戳C加密得到密文D保存在本地,A运行完成后启动B,B需要做下面的事情:在启动主程序前获取当前时间戳E并检测获取本地密文D,如果获取到D,则解密D得到时间戳C,判断E-C是否大于5分钟,大于则自动关闭。实际上要做的是把时间戳解密方式给到软件开发者,用于比较两个软件启动时间差。时间差太大,说明没有启动更新程序,那么中止软件功能运行,这样变相实现强制更新。


免费评分

参与人数 49吾爱币 +60 热心值 +44 收起 理由
QQDCY + 1 + 1 鼓励转贴优秀软件安全工具和文档!
liyonglan + 1 我很赞同!
wudi1860 + 1 + 1 我很赞同!
hackerxj + 1 运行程序A检测是否需要更新,启动更新程序B销毁A更新完,启动A销毁更新程序.
npc6699 + 1 + 1 用心讨论,共获提升!
lyhjh + 1 + 1 我很赞同!
fkeuaii + 1 + 1 我很赞同!
ALDShD + 1 + 1 太厉害了···
jason76wong + 1 + 1 我很赞同!
MeetCode + 1 + 1 谢谢@Thanks!
ialove + 2 + 1 谢谢@Thanks!
taotaofox + 1 + 1 我很赞同!
liping8764 + 1 + 1 我很赞同!
lztym + 1 + 1 谢谢@Thanks!
cc58c58 + 1 + 1 热心回复!
username171 + 1 + 1 热心回复!
北冥鱼 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
windy8848 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
sas + 1 + 1 我很赞同!
pbgz + 1 + 1 谢谢@Thanks!
感悟 + 1 + 1 谢谢@Thanks!
a14520 + 1 + 1 谢谢@Thanks!
jianghw + 1 + 1 我很赞同!
Mr丶Yang + 2 + 1 热心回复!
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
CuresW + 1 热心回复!
colinxia + 1 + 1 我很赞同!还是希望分享下源码,我就是用aardio+python。
Coqgaulois + 1 谢谢@Thanks!
windong + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
www152321 + 1 + 1 我很赞同!
笙若 + 1 + 1 谢谢@Thanks!
splic2012 + 1 + 1 热心回复!
似水流年2015 + 2 + 1 热心回复!
catoo1 + 1 谢谢@Thanks!
BonnieRan + 1 + 1 谢谢@Thanks!
y_w_o + 1 + 1 谢谢@Thanks!
ma4907758 + 1 谢谢@Thanks!
Kristine_He + 1 + 1 鼓励转贴优秀软件安全工具和文档!
一场荒唐半生梦 + 1 + 1 热心回复!
Marken888 + 1 + 1 用心讨论,共获提升!
vethenc + 2 + 1 谢谢@Thanks!你这么叼家里人知道吗!
riyaolaowang + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
ziyunyi + 1 我很赞同!
洋葱Pie + 1 谢谢@Thanks!
czz404 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
愚无尽 + 2 + 1 我很赞同!
FarSight2333 + 1 + 1 热心回复!
S1280P + 1 谢谢@Thanks!
wszjf + 4 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 善良的果仁 发表于 2023-9-1 09:59
february 发表于 2023-8-30 09:18
感谢分享,能否分享下aardio的源码

main.aardio
[JavaScript] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
import win.ui;
import inet.http;
import inet.httpFile;
import web.rest.client;
import web.json;
import fsys.ini
import thread.event;
import process;
import win.ui.simpleWindow;
import thread.command;
 
var UpdatePackageUrl = '';
var UpdateDescriptionUrl = '';
var filename = '';
var  wjnum = 0; 
var $ini = fsys.ini("/updata.ini")
var version = $ini.read("version","num");
var mainpath = $ini.read("set","mainpath");
var url = $ini.read("lanzouyun","url");
var pwd = $ini.read("lanzouyun","pwd");
var logopath = $ini.read("set","logopath");
if(version==null or mainpath==null or url==null or pwd==null ){
    if( ! win.loadForm("\dlg\ck.aardio").doModal() ){
        return;
    }  
}
/*DSG{{*/
mainForm = win.form(text="更新";right=499;bottom=339;border="none")
mainForm.add(
bk={cls="bk";left=-5;top=0;right=505;bottom=29;dl=1;dr=1;dt=1;z=2};
button={cls="button";text="更新";left=20;top=267;right=140;bottom=302;db=1;dr=1;z=1};
button2={cls="button";text="取消";left=362;top=267;right=482;bottom=302;db=1;dr=1;z=3};
button3={cls="button";text="暂不更新";left=188;top=268;right=308;bottom=303;db=1;dr=1;z=8};
edit={cls="edit";left=20;top=58;right=482;bottom=215;autohscroll=false;edge=1;font=LOGFONT(h=-18);multiline=1;readonly=1;vscroll=1;z=5};
plus={cls="plus";left=0;top=0;right=24;bottom=24;z=7};
progress={cls="progress";left=20;top=229;right=482;bottom=247;color=65280;edge=1;max=100;min=0;z=6};
static={cls="static";left=13;top=33;right=276;bottom=50;notify=1;transparent=1;z=4}
)
/*}}*/
 
mainForm.onMouseDown  = function(wParam,lParam){
    mainForm.hitCaption()  
}
 
win.ui.simpleWindow(mainForm);
 
var $ini = fsys.ini("/updata.ini")
var version = $ini.read("version","num");
var mainpath = $ini.read("set","mainpath");
var url = $ini.read("lanzouyun","url");
var pwd = $ini.read("lanzouyun","pwd");
var logopath = $ini.read("set","logopath");
mainForm.plus.background = logopath;
var Host= string.split(string.split(tostring(url),"<//>")[2],"</>")[1];//ybmzlqzj.lanzoue.com
var Origin =  "https://"+Host
var listener = thread.command();
mainForm.edit.print("获取更新中...")
listener.getgxnr = function(data1,data2,data3,data4){
    wjnum = data1;
    UpdatePackageUrl = data2;
    UpdateDescriptionUrl = data3;
    filename = data4;if(wjnum ==1 ){
        /*
var pyMain = py3.import("pyMain");
        var pyStr = pyMain.fetch_direct_link(UpdateDescriptionUrl);
*/
        var http = web.rest.client("Mozilla/5.0 (Linux; Android 7.1.2; PCT-AL10 Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.117 Mobile Safari/537.36");
        var data = http.get(UpdateDescriptionUrl);
        mainForm.edit.text=data
        mainForm.button.disabled = false;
    }elseif(wjnum == 2){
        mainForm.edit.text="暂未上传更新包!"
        var http = web.rest.client("Mozilla/5.0 (Linux; Android 7.1.2; PCT-AL10 Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.117 Mobile Safari/537.36");
        var data = http.get(UpdateDescriptionUrl);
        mainForm.edit.print(data)
        mainForm.button.disabled = true;
    }
    else {
        mainForm.button.disabled = true;
        mainForm.close()
        var prcs = process(mainpath);
    }
 
}  
     
     
 
mainForm.button.disabled = true;
mainForm.show();
//多线程
thread.invoke(
    function(mainForm){
    import win.ui;
    import inet.http;
    import inet.httpFile;
    import web.rest.client;
    import web.json;
    import fsys.ini
    import thread.command;
    var $ini = fsys.ini("/updata.ini")
    var version = $ini.read("version","num");
    var filename = "";
    var wjnum = 0;
    var UpdatePackageUrl = ""
    var UpdateDescriptionUrl = ""
    var mainpath = $ini.read("set","mainpath");
    var url = $ini.read("lanzouyun","url");
    var pwd = $ini.read("lanzouyun","pwd");
    var Host= string.split(string.split(tostring(url),"<//>")[2],"</>")[1];//ybmzlqzj.lanzoue.com
    var Origin =  "https://"+Host
    function IntoPageDir(url) {
        var http = web.rest.client();
        var data = http.get(url);
        var t,k,s,uid,fid;
        try{
            t = string.split(string.split(string.split(tostring(data),"<var pgs;>")[2],"<= '>")[2],"<';>")[1];
            k = string.split(string.split(string.split(tostring(data),"<var pgs;>")[2],"<= '>")[3],"<';>")[1];
            fid = tonumber(string.split(string.split(tostring(data),"<'fid':>")[2],"<,>")[1]);
            uid = string.split(string.split(tostring(data),"<'uid':'>")[2],"<',>")[1];
            s =  {"error":0,"t":t,"k":k,"fid":fid,"uid":uid};
            }
        catch(e){
            s = {"error":1,"t":"0","k":"0","fid":0,"uid":0};
            $ini.write("error",tostring(e),"error");
            }
        http.close();
        return s;
    };
 
    function IntoPage2(url,pwd,data1) {
        var t = data1.t; 
        var k = data1.k;
        var fid = data1.fid;
        var uid = data1.uid;
        var Host= string.split(string.split(tostring(url),"<//>")[2],"</>")[1];
        var Origin =  "https://"+Host; 
        var url2 = Origin +"/filemoreajax.php";
        var http = web.rest.client();
        var data = http.post(url2,{
            'lx'=tonumber(2);
            'fid'= fid;
            'uid'= uid;
            'pg'= tonumber(1);
            'rep'= '0';
            't'= t;
            'k'= k;
            'up'= tonumber(1);
            'ls'=tonumber(1);
            'pwd'=pwd;
        });
        var responsedata = web.json.parse(data).text;
        http.close();
        return responsedata;
    };
    //解析下载地址
     
     
     
     
    function IntoPage3(url,data){
        var list = data;
        var Host= string.split(string.split(tostring(url),"<//>")[2],"</>")[1];
        var Origin =  "https://"+Host;
        var url2 =  Origin+"/tp/"+data.id;
        var http = web.rest.client("Mozilla/5.0 (Linux; Android 7.1.2; PCT-AL10 Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.117 Mobile Safari/537.36");
        var data = http.get(url2);
        var wjnum =0;
        data = string.split(tostring(data),'<javascript">')[2]
        data = string.split(tostring(data),'<var>')
        var urlsplit1 ;
        var urlsplit2;
        for(i=1;#data;1){
            if(string.indexOf(data[i],"lanzou") != null){
                urlsplit1 = data[i]
                urlsplit1 = string.split(tostring(urlsplit1),"<'>")[2]
            }elseif(string.indexOf(data[i]," = '?")!= null){
                urlsplit2 = string.split(tostring(data[i]),"<'>")[2]
            }
        }
        newurl = urlsplit1 + urlsplit2 
        return newurl
    };
 
        IP_ADDRESSES = {
        "218", "218", "66", "66", "218", "218", "60", "60", "202", "204", "66", "66", "66", "59", "61", "60", "222", "221", "66", "59",
        "60", "60", "66", "218", "218", "62", "63", "64", "66", "66", "122", "211"
    }
    URL_DOMAINS = {
        "wwa.lanzoux.com",
        "wwa.lanzoup.com",
        "wwa.lanzouw.com",
        "wwa.lanzouy.com"
    }
    function get_random_ip(){
        var ip1 = IP_ADDRESSES[math.random(1,#IP_ADDRESSES)];
        var ip2 = tostring(math.random(60, 255));
        var ip3 = tostring(math.random(60, 255));
        var ip4 = tostring(math.random(60, 255));
        return ip1+'.'+ip2+'.'+ip3+'.'+ip4
    };
    var random_ip = get_random_ip();
    var referer_url = URL_DOMAINS[math.random(1,#URL_DOMAINS)];
 
 
    try{
        var Page1 = IntoPageDir(url);
        var Page2 = IntoPage2(url,pwd,Page1);//得到  {"icon":"dll","t":0,"id":"iReFr0svzqsj","name_all":"v1.0.1.dll","size":"81.0 B","time":"2023-04-13","duan":"i0svzqs","p_ico":0},{"icon":"zip","t":0,"id":"iXT3a0slnxkb","name_all":"\u5c0f\u767d\u70b9.zip","size":"39.4 M","time":"2023-04-10","duan":"i0slnxk","p_ico":0}]
        var updatatext = {}; //Page2中  name_all 包含  V. 的数据分别排在第几位 例如{1,3}表示第1、3个文件都包含V. 最新文件就是updatatext[1]
        //Page2中  name_all 包含  V. 的数据分别排在第几位
        for(i=1;#Page2;1){
            if(string.indexOf(Page2[i].name_all,"V.") != null){
                table.push(updatatext,i)
            }
        }
        //var jsj = IntoPage3(url,Page2[1]);
        //mainForm.edit.print(jsj)
        //判断存在是否包含 V.的文件
        if(#updatatext != 0){
            var newvupdata = Page2[updatatext[1]].name_all//文件名  V.1.0.1.dll
            var bbh =string.replace(newvupdata,'V.','')//得到  1.0.1.dll
            var hzm = '.'+string.split(newvupdata,'.')[#string.split(newvupdata,'.')]// 得到后缀名 dll
            bbh =string.replace(bbh,hzm,'')//得到  1.0.1
            //检查 最新版本号与data.ini的version[num]是否相同,如果不相同
            if(bbh!=version){
                for(i=1;#Page2;1){
                    //检查Page2中是否存在 U.+getversion 字符串的文件名,如果存在,返回文件id
                    if(string.indexOf(Page2[i].name_all,"U."+bbh) != null){   //判断是否存在文件名包含 U.1.0.1  的文件
                        wjnum = 1
                        //updataid = Page2[i].id;//U.1.0.1.zip 的id
                        //upversionid = Page2[updatatext[1]].id;//V.1.0.1.dll 的id
                        var resques3 = IntoPage3(url,Page2[updatatext[1]]);
                        var http = inet.http();
                        UpdateDescriptionUrl = http.location(resques3,'GET',,
                            {'User-Agent': 'Mozilla/5.0 (Linux; Android 7.1.2; PCT-AL10 Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.117 Mobile Safari/537.36',
                            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
                            'Accept-Encoding': 'deflate, sdch, br',
                            'Accept-Language': 'zh-CN,zh;q=0.8',
                            'Cache-Control': 'max-age=0',
                            'Connection': 'keep-alive',
                            'Upgrade-Insecure-Requests': '1',
                            'X-Forwarded-For': random_ip,
                            'Referer': referer_url}
                        );//更新说明文件直链
                         
                        var resques3 = IntoPage3(url,Page2[i]);
                        var http = inet.http();
                        UpdatePackageUrl = http.location(resques3,'GET',,
                            {'User-Agent': 'Mozilla/5.0 (Linux; Android 7.1.2; PCT-AL10 Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.117 Mobile Safari/537.36',
                            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
                            'Accept-Encoding': 'deflate, sdch, br',
                            'Accept-Language': 'zh-CN,zh;q=0.8',
                            'Cache-Control': 'max-age=0',
                            'Connection': 'keep-alive',
                            'Upgrade-Insecure-Requests': '1',
                            'X-Forwarded-For': random_ip,
                            'Referer': referer_url}
                        );//更新压缩包直链
                         
                         
                    filename = Page2[i].name_all;
                    }
                }
                if(wjnum!=1){
                    wjnum=2
                }  
            }
        }
        thread.command.getgxnr(wjnum,UpdatePackageUrl,UpdateDescriptionUrl,filename)
    }
    catch(e){
        mainForm.edit.print("更新异常")
        mainForm.button.disabled = true;
    }
},mainForm)
 
mainForm.button.oncommand = function(id,event){
    thread.invoke(
    function(mainForm,filename,UpdatePackageUrl){
        import win.ui;
        import inet.http;
        import inet.httpFile;
        import web.rest.client;
        import web.json;
        import fsys.ini
        import process;
        import thread.command;
        var $ini = fsys.ini("/updata.ini")
        var mainpath = $ini.read("set","mainpath");
        var url = $ini.read("lanzouyun","url");
        mainForm.button.disabled = true;
        mainForm.progress.setRange(0,100)
        var onReceiveFileSize = 0
        var remoteFile = inet.httpFile(UpdatePackageUrl ,"/")
        var ok,err,errCode = remoteFile.test()
        if( ok ){
            mainForm.edit.print("文件已下载完成、服务器未更新,无需重新下载");
        }
        elseif( ok === null ){
            mainForm.edit.print("下载错误,HTTP错误代码",remoteFile.statusCode,err);
        }
        remoteFile.onReceiveBegin = function(statusCode,contentLength,fileSize){
            if( statusCode == 206/*断点续传*/ ){
                mainForm.edit.print("正在断点续传")
                mainForm.progress.pos=(fileSize/contentLength)*100
            }
            elseif(fileSize){
                mainForm.edit.print("正在重新下载")
                mainForm.progress.pos=(fileSize/contentLength)*100
            }
        }
         
        remoteFile.onReceive = function(str,downSize,contentLength){
            onReceiveFileSize+=downSize
             
            mainForm.edit.text = "正在下载 文件大小:" + math.size64(onReceiveFileSize).format()+'/'+math.size64(contentLength).format()
            mainForm.progress.pos=tonumber(string.format("%.0f",(onReceiveFileSize/contentLength)*100))     
        }
        //下载文件
        var ok,err,fileSize = remoteFile.download()
                 
        //解压
        import zlib.unzip
        var unzipsize=0 ;
        var ok,err = zlib.unzip.extract( "/"+filename,"/",
        function(fileName,extractPath,fileInfo,size,unitSize,unitName){
            if( size !== null ){
                unzipsize += fileInfo.compressed_size
                mainForm.edit.print( "正在解压文件:",fileName,size++ unitName )
                mainForm.progress.pos=tonumber(string.format("%.0f",(unzipsize/onReceiveFileSize)*100))}
            else {
            mainForm.edit.print( "正在解压目录:",fileName );
                }
            return true;
        })
        mainForm.edit.text="解压完成!"
        mainForm.edit.print("重新启动中,请稍等...")
        fsys.delete("/"+filename)
        var getversion = string.replace(filename,'U.','');
        var hzm = '.'+string.split(getversion,'.')[#string.split(getversion,'.')];
        getversion = string.replace(filename,hzm,'');
        getversion = string.replace(getversion,'U.','');
        $ini.write("version","num",getversion)
        var prcs = process(mainpath);
        mainForm.close()
        },mainForm,filename,UpdatePackageUrl)
}
 
mainForm.button2.oncommand = function(id,event){
        mainForm.close();
        }
mainForm.button3.oncommand = function(id,event){
        mainForm.close();
        var prcs = process(mainpath);
        }
mainForm.onClose = function(hwnd,message,wParam,lParam){
    mainForm.text = "正在等待关闭"; }
mainForm.static.oncommand = function(id,event){
}
win.loopMessage();


ck.aardio
[JavaScript] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import win.ui;
import win.ui.simpleWindow;
import fsys.ini
/*DSG{{*/
var winform = win.form(text="热更新设置";right=499;bottom=299;border="none")
winform.add(
bk={cls="bk";left=-5;top=0;right=505;bottom=29;dl=1;dr=1;dt=1;z=2};
button={cls="button";text="保存设置";left=132;top=247;right=332;bottom=282;z=11};
edit={cls="edit";left=52;top=80;right=465;bottom=102;edge=1;z=1};
edit2={cls="edit";left=52;top=129;right=146;bottom=151;edge=1;z=4};
edit3={cls="edit";left=318;top=128;right=464;bottom=150;edge=1;z=6};
edit4={cls="edit";left=130;top=207;right=465;bottom=229;edge=1;z=8};
edit5={cls="edit";left=131;top=169;right=466;bottom=191;edge=1;z=12};
plus={cls="plus";left=0;top=0;right=24;bottom=24;z=9};
static={cls="static";text="网址:";left=9;top=83;right=49;bottom=105;align="center";transparent=1;z=3};
static2={cls="static";text="密码:";left=9;top=132;right=49;bottom=154;align="center";transparent=1;z=5};
static3={cls="static";text="软件现行版本号:";left=212;top=131;right=317;bottom=153;align="center";transparent=1;z=7};
static4={cls="static";text="软件启动程序路径:";left=7;top=209;right=131;bottom=231;align="center";transparent=1;z=10};
static5={cls="static";text="更新程序logo路径:";left=8;top=172;right=132;bottom=193;align="center";transparent=1;z=13};
static6={cls="static";text="初始化设置";left=82;top=35;right=409;bottom=59;align="center";font=LOGFONT(h=-22;name='楷体';weight=700);transparent=1;z=14}
)
/*}}*/
 
winform.onMouseDown  = function(wParam,lParam){
    winform.hitCaption()   
}
win.ui.simpleWindow(winform);
 
var $ini = fsys.ini("/updata.ini")
var version = $ini.read("version","num");
var mainpath = $ini.read("set","mainpath");
var url = $ini.read("lanzouyun","url");
var pwd = $ini.read("lanzouyun","pwd");
var logopath = $ini.read("set","logopath");
winform.plus.background = logopath;
if(version==null or mainpath==null or url==null or pwd==null){
    winform.edit.text="https://guoren.lanzouo.com/b00wvmvli"
    winform.edit2.text="0000"
    winform.edit3.text="1.0.0"
    winform.edit4.text="/小白点/小白点A股助手.exe"
    winform.edit5.text="/小白点/xbd.png"
 
}
else {
    winform.edit.text=url
    winform.edit2.text=pwd
    winform.edit3.text=version
    winform.edit4.text=mainpath
    winform.edit5.text=logopath
}
 
winform.button.oncommand = function(id,event){
 
    $ini.write("lanzouyun","url",winform.edit.text);
    $ini.write("lanzouyun","pwd",winform.edit2.text);
    $ini.write("version","num",winform.edit3.text);
    $ini.write("set","logopath",winform.edit5.text);
    $ini.write("set","mainpath",winform.edit4.text);
    winform.endModal("已设置")
        }
winform.show();
win.loopMessage();
return winform;

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
february + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| 善良的果仁 发表于 2023-8-28 15:22
Marken888 发表于 2023-8-28 15:18
那就是不同用户区别对待了,我的都有密码

你尝试新建一个带密码的文件夹,然后在这个文件夹里面上传文件,之后什么都不要操作,直接分享刚刚创建的文件夹,用无痕模式打开刚刚的分享链接,输入文件夹密码,下载东西的时候看看需不需要额外的文件密码
 楼主| 善良的果仁 发表于 2023-8-28 15:37
Marken888 发表于 2023-8-28 15:28
现在是dll不行了,看来那个支持类型不是很准确

我后面再改一下,U.开头.zip结尾,中间存在相同版本号的,例如U.1.0.1-1.zip、U.1.0.1-2.zip这两个文件都存在1.0.1,那就都下载,都解压,唯一要注意的是避免同名文件覆盖。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Marken888 + 1 + 1 不错的解决思路

查看全部评分

 楼主| 善良的果仁 发表于 2023-8-28 15:11
Marken888 发表于 2023-8-28 14:29
我看了下,蓝奏云不支持关闭分享密码,这个功能属于会员功能,收费

不设置就没有密码,创建一个带密码的文件夹,然后直接往文件夹中传文件,上传文件默认都没有密码
 楼主| 善良的果仁 发表于 2023-8-28 14:03
hjtx2022 发表于 2023-8-28 13:57
就是需要这种,一直没弄好,易语言的,有源码吗

不是易语言 ,是aardio+python
february 发表于 2023-8-30 09:18
感谢分享,能否分享下aardio的源码

免费评分

参与人数 1吾爱币 +1 收起 理由
善良的果仁 + 1 已分享

查看全部评分

aq425518860 发表于 2023-8-28 13:44
开发者需要你这东西
wszjf 发表于 2023-8-28 13:35
这个工具非常不错,就是不知会不会被兰奏封堵
bohong65 发表于 2023-8-28 13:41
可以奥,很巧妙的工具
不知道改成啥 发表于 2023-8-28 13:51
wszjf 发表于 2023-8-28 13:35
这个工具非常不错,就是不知会不会被兰奏封堵

咋拦,难道关了么
hjtx2022 发表于 2023-8-28 13:57
就是需要这种,一直没弄好,易语言的,有源码吗
seny1163 发表于 2023-8-28 14:07
感谢分享,收藏备用,希望不要被官方针对。
头像被屏蔽
zjy0051 发表于 2023-8-28 14:15
提示: 作者被禁止或删除 内容自动屏蔽
ziyunyi 发表于 2023-8-28 14:27
功能很棒!求源码,
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-2-21 07:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表