CF24B 模拟

http://codeforces.com/problemset/problem/24/B

B. F1 Champions
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Formula One championship consists of series of races called Grand Prix. After every race drivers receive points according to their final position. Only the top 10 drivers receive points in the following order 25, 18, 15, 12, 10, 8, 6, 4, 2, 1. At the conclusion of the championship the driver with most points is the champion. If there is a tie, champion is the one with most wins (i.e. first places). If a tie still exists, it is chosen the one with most second places, and so on, until there are no more place to use for compare.

Last year another scoring system was proposed but rejected. In it the champion is the one with most wins. If there is tie, champion is the one with most points. If a tie still exists it is proceeded the same way as in the original scoring system, that is comparing number of second, third, forth, and so on, places.

You are given the result of all races during the season and you are to determine the champion according to both scoring systems. It is guaranteed, that both systems will produce unique champion.

Input

The first line contain integer t (1 ≤ t ≤ 20), where t is the number of races. After that all races are described one by one. Every race description start with an integer n (1 ≤ n ≤ 50) on a line of itself, where n is the number of clasified drivers in the given race. After that nlines follow with the classification for the race, each containing the name of a driver. The names of drivers are given in order from the first to the last place. The name of the driver consists of lowercase and uppercase English letters and has length at most 50 characters. Comparing of names should be case-sensetive.

Output

Your output should contain exactly two line. On the first line is the name of the champion according to the original rule, and on the second line the name of the champion according to the alternative rule.

Sample test(s)
input
3
3
Hamilton
Vettel
Webber
2
Webber
Vettel
2
Hamilton
Vettel
output
Vettel
Hamilton
input
2
7
Prost
Surtees
Nakajima
Schumacher
Button
DeLaRosa
Buemi
8
Alonso
Prost
NinoFarina
JimClark
DeLaRosa
Nakajima
Patrese
Surtees
output
Prost
Prost
Note

It is not guaranteed that the same drivers participate in all races. For the championship consider every driver that has participated in at least one race. The total number of drivers during the whole season is not more then 50.

今天还是废在了读题上。。。

/**
CF24B 模拟
题目大意:给出t场比赛的名次,前十名有加分,按照两种不同的排名方式确定排名。
          1、加分最多的为先,若有重复比赛名次靠前的次数越多越靠前,
          2、名次第一的为先,若有相同加分最多优之,若再有重复比赛名次靠前的次数越多越靠前
解题思路:利用结构体,sort一次就行了,只不过处理排序函数时是要小心一点。
*/
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <string>
#include <map>
using namespace std;
int p[12]= {0,25, 18, 15, 12, 10, 8, 6, 4, 2, 1};
struct note
{
    string s;
    int point;
    int rank[55];
};

bool cmp1(note a,note b)
{
    if (a.point!=b.point)
        return a.point>b.point;
    for (int i=1; i<=50; i++)
        if (a.rank[i]!=b.rank[i])
            return a.rank[i]>b.rank[i];
}
bool cmp2(note a,note b)
{
    if (a.rank[1]!=b.rank[1])
        return a.rank[1]>b.rank[1];
    if (a.point!=b.point)
        return a.point>b.point;
    for (int i=2; i<=50; i++)
        if (a.rank[i]!=b.rank[i])
            return a.rank[i]>b.rank[i];
}

int main()
{
    int T,n,k;
    while(~scanf("%d",&T))
    {
        note a[205];
        k=0;
        while(T--)
        {
            scanf("%d",&n);
            for(int i=1; i<=n; i++)
            {
                string s;
                cin >> s;
                int flag=1;
                for(int j=0; j<k; j++)
                {
                    if(a[j].s==s)
                    {
                        if(i<=10)
                           a[j].point+=p[i];
                        a[j].rank[i]++;
                        flag=0;
                        break;
                    }
                }
                if(flag)
                {
                    a[k].s=s;
                    if(i<=10)
                        a[k].point=p[i];
                    a[k++].rank[i]=1;
                    flag=0;
                }
            }
        }
      /*  for(int i=0;i<k;i++)
            cout << a[i].s<<" "<<a[i].point<<endl;*/
        sort(a,a+k,cmp1);
        cout << a[0].s<<endl;
        sort(a,a+k,cmp2);
        cout << a[0].s<<endl;
    }
    return 0;
}
MAP的写法

#include <stdio.h>
#include <iostream>
#include <map>
#include <string>
using namespace std;
struct node
{
    int s,p[60];
};
map <string,node> MAP;
bool better1(node &n,node &m)
{
    if (n.s!=m.s)
        return n.s>m.s;
    for (int i=1; i<=50; i++)
        if (n.p[i]!=m.p[i])
            return n.p[i]>m.p[i];
}
bool better2(node &n,node &m)
{
    if (n.p[1]!=m.p[1])
        return n.p[1]>m.p[1];
    return better1(n,m);
}
int main( )
{
    int m,n,l[11]= {0,25,18,15,12,10,8,6,4,2,1};
    string w,x,y;
    cin>>m;
    for (int k=1; k<=m; k++)
    {
        cin>>n;
        for (int i=1; i<=n; i++)
        {
            cin>>w;
            if (i<=10) MAP[w].s+=l[i];
            MAP[w].p[i]++;
        }
    }
    x=y=MAP.begin()->first;
    for (map<string,node>::iterator i=MAP.begin(); i!=MAP.end(); i++)
    {
        if (better1(i->second,MAP[x])) x=i->first;
        if (better2(i->second,MAP[y])) y=i->first;
    }
    cout<<x<<endl<<y<<endl;
    return 0;
}



POST https://mssdk3-normal-hj.zijieapi.com/ri/report?lc_id=1588093228&platform=android&device_platform=android&sdk_ver=v04.09.02-ml-android&sdk_ver_code=67699200&app_ver=33.8.0&version_code=330801&aid=1128&sdkid&subaid&iid=529304741494288&did=4452343760029530&bd_did&client_type=inhouse&region_type=ml&mode=3&full_update_version_code=33809900 HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate, br Connection: keep-alive Content-Length: 11410 Content-Type: application/octet-stream Cookie: sessionid= Host: mssdk3-normal-hj.zijieapi.com User-Agent: ByteDance-MSSDK X-Argus: qEtvNkFvVItTuKQtbVTo7Kh1/LCHgQWgJMe0NoOxz3+D5X0rQ0gVIZZm4R/9kGTsDY9YcHt9dUxl7TiTgibtC8UgchWSmztvZMm+eu4MkdA+THhvjUM8NrhyaThMGOxKslETxNs78ZSedfv1TaylTksa2RCoeAqQKNgJoVeJU9UmQAHmYW7jKfukRQqNfSD8xczfZPlImIzPy7yEHVZA2pmeuAvRew12PmJjX1nEVy9wZPBGcB+wjAx2LwB7skrTbIJipboVr6ceaWROWkuwaWJo X-Gorgon: 840460ea04044a9bcd0eefaf7c562d398f688d55a67ab806be9f X-Helios: vSyKFX8TL3kuM8BAD1xfO3ixu/WRopnkeuUDqQ1Rot2M31w2 X-Khronos: 1752765617 X-Ladon: 6Cc2AJ50oIE9jwczHknWDxx6OB5MrGD7Lx2SoD68qi45UTHz X-Medusa: tBR5aJxfNqL4YXQrjqHXRJN5tT7yqAABEDUex0QOAUsNGG0JrJ+InqCjg64oM7ilMXMGbw1vahOSlwlvNpfVPwmiqu1bbBKq4Pse6DLXMRR9uc3F7D2mY6CfrXrv2k6jlHS2/Urp7LD+aFl6X0v3112kXxE3DQmnyzyluf9Grd+y55/LKfC2GehrfEWfLkIaRHTB0O1HCSxr1No2WkgBDu/xfK1eAUNi4RWqOy+rpkzuuHhssj71m3fOKtse6subMntCLlDjQb3yqk9F7nE5BaJGTjzWT14oFqYt+AJLmgNy57MQLw9B7utIdNTrpg6CZMgdN322UCxCRVrf59iF0GxkHR9vlXRZ95EaUnHoMZUg0RQ1G2KCAJWaOpelapOa2kIipxSI0zLP2HTVBoMaOVqk4XfKpSmYVBcGOw2WNifCf1wfm4JVZILog/xwsLQqpCCwl47EwuhUmMBhIejFH4gc6H1C0xPU1oXEUaxy2lDBrVqHBiD1Swjsx0yUjtMXIMmUt6OM4DPE2pnkFmljuBo7XfaukrNgTp00NehX0y7UO4fJNqFheMj5jdXGV+3P4RuFZPl8VHQuQpIYPaZ1RY7+LCqXmtQjDgZsGpLKCDDYyMydzEpwcs4MlAdi2HTXmNNFAqLFRAVJoSC7wl8Mirof4QSefoKNDS4SuLlFkjtOERFc+KUbB19Z1TPmM0H++uv6FVNZNRsVw8hgbOvMby+0m3WIPsyyTN7GW8a7oKwNcK8oTm2obKa8PhsQ/VgVyUxhJ2zsV4qvso5Xrn4i1GleV1x/N3UupDVsYIPUzh3hZS4pOjOB4d67nYVRDfQSbBlHFk7b3g0zqc5e7pmNYvZDVH1p3BsOdkwnDqtSxmyvuf/8r7n7+Gov X-SS-DP: 1128 X-SS-STUB: 5686231EBE284E99C98464330EE4C5B7 X-Soter: AAEAAgEBJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA x-tt-request-tag: t=1;n=0;s=0;p=0 x-tt-trace-id: 00-18f8d7330dfd162103c075a72ee00468-18f8d7330dfd1621-01 x-vc-bdturing-sdk-version: 3.7.5.cn 08C4908082041002228059EBCA6D0A4F94EB9DDB8F6844A5FE3E3EDC71B3DC91D69C1BFFA9BD3297068BE57CB59A6EEC6E68056DC076685560C8CFCFC88FD7D12C5E572F11168463AAA799F874859CDA61D6B169786851EC6C9846851D57030DD684776C4DB5B4EA5C36F956558427351F92C239BC830477C51FCC2C55F810458362AF22096F7FEBB63EE7341DF112C982E198CF8CEE5C300E40CBC428E4D7330718292A2F1746D510B7DAE599B98DA1170446BFD490B844BA7B4CEE065D08E5901D11829D7B39974B00D290C911187367F3F2B86F7EE35C699947D33AAE426EA33F77AEB90761112250F3C0790281950FDB3A904F786417DF7BDA571D4FED4CB2580C628E263D349878704CBCA40ED0A7B5B2078462598CCB219B16554E2724B9078737C468F7BA40F37F5C2CAB77E44794C3F17AEC3382CEAC7ABA1CCCB9D07957AA4158F8CCB699E8FF77BEACA11E07BDB02563FED119478BD39F12FE60A916D8C867D8A7C93CA8C4B1E46BE71FE8D233FE4B5502CE011DE993218BB47581AA69BB5C10A3F4CB8F49286C2A2B41783DB6292F310EA8BC8055362FD8BD6F541E2361D4269D6E4EA8D6336FF7B2E1C30964E9E6710F96C0623BFFD80831E578D84E6C626732C5B71E0132618BDF1E2D7B18C2FFADBD7C99D02900AD8ECBC4C6D659A6C14F345D69635D1EE28DB6707109493E9F87945BAC3DED9605055752FBBB0646491055FCFB4AA5D8ED78DE0F15064170CA187EFC465EF99F5DCBBDE81C27F522E6EF4F3D935F08F4B91DA729079D8688CBB3B167EAE682504840968505049B960D703E1A1CE6AB9367C990A735F014DDF24A42FC2C774DA8C0649946C6CF8EC7031B1003C2A6A1D50295E55DB251AF75D37246B6F961D5AA66687CE1AE09AC03D0873D00CBE0DA15BAC2F68E72E35FA94D23ED3B6EC6F1C07ECA4466C58AEA5107FA22FA9C0AAABDE7008218835D81D81BC3F9F19FA5C8632B15343B43C60706ED1AA043D527475CA5E628EC9CAF07E48144DE04BCAD91110EBA55E31ED54748E3F9F435CBAFDECF8695F6F364427ABF13FE7652D4561FF90A5341B5DCAC46A08C462EFC164DFACAC62206C576A66BA2188A0CF5DEB473154F8B52064BD97424ABDEA48C9D1BC91C6DE6F3DA7B879D01CCDE34EFA00BBB8DF7323DBA67C29859F917D72700E670C80953B63B99431191776CC9BB37F1EC791003F4D87FCD49C05234AD92B194837797F77C172B6A462078D7007603C1A424A5CDA8701828FFB568837760CE47DE889E55263FA105A750E426069CB3B8F20F5782D938F323B0B1ABEB8913C739887F5B8916259D690C2AABC8CCFF97AC852B5C42146D1BB70C616A0A867655B1049BF63D35E39AEE0D52C891DDC2C1F6970A9D0940AA204008120CAAAC00FEAC353A7B30EBF66E0B1470C64E64C49F519041779F94122A4ED17F42FF19AA3C546B2EFC63A1DF2D7543E92CB576E8C7913E62DF5CF7B4F231FD2B0528FB8240C37DB1FB927ECFE189B15D002644AF9D6833934F74E79EE5A97411052A68853D5E3C6631BF0E03561FCC0173A3D1E8A26BCF6508F4874B9859873097FD7382490BCBAB87D1CA672A784E2134E6F2B2639BBC6229D1DC798CFA9B48F6AC4171A634A2C86DD91FF6153C86C24D6FE22D262D739645E3D462F8E4E46403E1BB98C983131A3FA1FDD86CB71871F71464F5DF724B2ABA0B76323B1F701CC13E0D5D0D12AC9D18AB0355E55B9833FB00A51C641DBD50004D8E76B3A18473A68A7D12F1EE2F18A70ED468D99B66B0ACCD74D603D8B295827EFA307A88309338CC2A4D0C3F5A9DCC6EF233B7C227F05A1DC00B3CA1C7EB5D9A3FC8799D3DED6A68B7EB7D47CBA6179E41FB899ACC53765646BEAE4590D9A4DCF8EED27761C4B29EDCF0BB7F90FF25CF8CA2FD7C3785C51A9AAB2DC9E971F705C2DB2B0B6EAF02395EBE209468258A973342787A6569D84E377A1519FE646DBAD3C5877003AA69326EADCD5C0FD14D05E56B3E09C5BB0C73AF56577D929E3CE241DED0BD85AE0A3DD547C6C0F41131C60CF5C6717BCFC4BF09EF996C58FBFBCE636A85E0E0DFCFC191DD5B3A3184094BE85ECB4165ABED4E5D3316681E1261C62C92F5CB305FED4CFB281B69A33672CFBBC15C8E3648BD35B5760C1B4D5CE0D793620CC1BB351D48B326A9EB8703669458D6469F5C7507374BF9A73E9A64C4F327BE60DCD57DEA428FD1EF67DFD7CC2B4E02FDADE7ADA885B9B180FACF133C38F5FCC367DBEF71E7A8813312A127B6DCDF9847CB1FD74165833AC8AAEC0AD7736D8C8FAFF8CEC1240EBA97C60BE7AEBB52D1BBAF0BB3585A064B0BA5D5607BD741167F67F0CB2344A8438D71128ABB1727EADD321C011D34707FD9F171EC9F47C431D4F408881DBB945E253FD4E2C880E1A6B07A66D4080A81A1BAFEB94D983898DE1F8491AC9D1A81D238E160E9D424F3FBAC1E9B6AD071813F144BB8A048508EF679F105FE6ACE9645B0983F355AAC9A6072BDB391FAE2731151093C96D3AA0B3328038E9E711A41AC1E06733F0983058D53ED80AAC7E1CF12AED090786E88F6239A1E4D40D95880EF015E65BAD0ABAFB56B80A588E702449F755145F7E84EF9DA96A4901BA8BB7FA52AC54C02CC953ADFE87FBF3DF935D62C8E724C94DF2BB59BDD6770EB364E3667784F8C0A57E0160A33CE3145E1826C672C2C837F576A8C8E3669810B81F1548D3F7020B66B16A238EA71E7640CED59F7009CFD4B60C1892416BF9580FA2A9829B7794C3E1CDFA2319B97841C3DAEDD9F700CD2495FF1B6B84E90322C95F49D6711BAD25B32EFFCC377DCA2BD422A5873B1480B5C90E9BD17AB14FC86B0639CE5DEF5D4A8FC9D1A3444E4F0FF57FDCB843BCC7BD80258E9F17BA38625D108B00B8EBA22754E78B0DECA4DAC84AF68FFD8F3E7ED7571BE139AC54DFF76707F50366B0782C79514CB3CF58D00294612D2386989D1F40135766A4273BBA794566BFD041654CAFD1CA5FD7793E367A73D812A654DBB7CD0DD2CC9C4C74542C1E31AA9C1457022C2831A84C59A72161117A18426BB5F14F83E7B633126A070BA8503B9A86C9DF8571121FAF83245649187EC1DF1875F6192C351FEE73D0BE69BD6C9571AE8A8CB58BDF39B64B808260DF1B2C92D293CC950F23946D1851A1E1598B36E19BAD588F762382ECEA3814F2CFD1F356D9494A48F14904D19265E5AF34807BC05BFDDB9F07FD0AE7D2E57BD326A0F08B5DA96A505FD79B35BE004A9822C05AA9111E344911D1A5B2D5C3BC4E75405F9A9187E6FD7E05BF18819A6BD51CB0FA3303DEEE4F644E5A1FAD8B9474608C44BF8BC5250739DE3C4BEC5495E38DFA2363A0C4E39B4E4A383106583A48D37126F02AB8A62BF221C68167B61B8D021B37DACE4E263833FB065082031416A60B3B6940635AC2A9A3F3550A1305DAC6093168E402D8830A6C8322212576341FB10214D9E78CB58934C6A6D4CAAFAD10B83D750E5FFF847D86AB83B1AE4EC0B9B06DEE3CC9F509E408C3BFCEB005A16B72D0E7006BB7E3F3630CA93C67DE07CF06EDE5042DDC88DCCA82FBA64C8E05E16C59993E03FF55149C656B8A6E10CF11DEEF097F0B8F25E0B016B841983C595AE9F3BA8225E56728082E0320F440238FE192FCCF703D8C3556E91EEA797C64747AAF8D60E3BF8A03494C5D89375BCD4D6BE1831DB682ABD906B8F35F8C9237D1DEB3BC3FEEAF62F809A356371BD45DE5323F8812AF04D99D2AFFEFF8140713C9F61212A2311BDFC9BBEB8325257F5783CF79AC28F535EA35E6F8DA497C5209B3FF756CAEF81EB9F79CF2C388A7FEFCB603890A91E71926FAD56870D062620EA6DFAE704B548947336D1651D2B30F70EC7E61B508013DD53C1DCD9668CE6A6ECB6D01184FD0409C849B007ECB34824FEC8FFC2987842A173729FD30683ADF30F1791FD3FC4C40EADF8AD6A92BD2472240C8E9F31203E670383BB5CD1091FA412BC79840552719CF97B44051383DAE274704BE3621D6448F256036AB9F4D724E867111B2B32A076DA61CF5AB47A4BF8E3DB85E2F029F0DB0B4DC331770207D63E30673351BC6AB8F8925785795B0DE8C5739198C3F50D206BC097528C300353424AE88A8AD0379C44047579CB225F5AC03A2CCD75497909DF1F643CACBBE1A07AD728AF095DC09E9949D2C4847B689CE5FAA3F0A6DD6B6024E9B9635C67B812BA92B5759F7889E9D0609D046D3A4CB8FA5683ECA4E71B8731DE59A9B50B60247B9F14D8BEF61F684D59E0F8F7239FDBDB3B039E71ADDAA536CDF166577E07AD8DE3263EE93BA15E32CAC2054FB2F7D89E5F49A9E1F2D30CF5F83C911423A93EAD23FBA154987BAEED7ADDC55E5E4B7371FF3EFB41E957275A395CB4EC417AAAECDD6A98D1BC43C390018C9BA73FE3508B86F347E55B49380CBBB1DE249F18150BF09B41B35ED84179E3F1FB241C7F597803ED40C26F6C823B148033322A1B82EA55B4AB24456FB1BBC50331855FF6511F42FD56C5A7459808E382212C6731AD2B8591E9457F576C1B8E54C505AFDA3C3237317E32C5AA01714213761008DD6DE0BFDE31A45045CF9EA34AF47FD70917AC7AA30EE72D0FAA9A511326B74F268A85F93AFEC7008C59C4ACD76AAE73035B0908E6EED8B5B56C2587601C5901CAFDE2292BF53A65BEB66030996ADC15A16B8C26A23F5D278F36E873DEAC3C81EFBF3B49591DA698B45F8EF8B4791956CA0A2F6A5D0413211242288D59B3F525178453812595104E8EBC89D6E099E15FCCFD0D0FE027E6A0147CC2E6B932DE6471BCC01DD40D210E5A08EF3A7A96B66C9ACE1D214E92101EB9F7EA98BA002F2493418EFB2D17A789B685A44467653DA19CBDA9B1A4CFBAE84A1CEAAEC9097C4E3647757DEE3B72C9749C31A33104FA042569BC09136DCDA9485B59A3583E0A8A40D84032B72A83861E0CEA452C32B9A166EBAC34BCAAC0A19182C9F305468EF27F466E6D45DF398912933975136088F721CB358F156C7C97E82BA13457087E112D397D36F34606A73A4765C76E563C949EC44395FE35835ECDABF19C69CF04EED2C2712AED4C170C9AFDB0681FA28A0B33ECD9DC9BCCEDB456B81B991CE2E8370480765B33DA05E582DBEA9212F690610A436F69B74A45CEB54AAE69430A922503C04F1259E30EE5A3E95ADCEBC53DC90A7EA7E01AECCA01B27F9C3A549C5F1F0654C211C798890CFD445EB08E19F6299B0336BDA5088E7E9A3D971ACFEB6AD3D98DFF5A2C5AA5E8A55A795A1834363DCB28101DAB8CEB5319F2C6B9C9C8967FD91BCA522C8CB6CAF83CE671915E6362B01047643341006722E6897F450B5DDC893E703E75EC9E226D1BA2BCE52F5199489C6EF1E7FCA37E80FB9C77B75524106693D083831445DA5D039E09BB341CD142F417BFD4E24223F78806534789EF3914CB10E56DBF5D5B3AE2D16F03139CD6BCEA8771595F3050FA028B17B7B5AC4BECFB820AFC8F97A9B08F9A8A59185DC7D245258F245581235B185DCD62619C08F995600FBA23C838A803E13D8B5AA80216779260360901C4EF89A0BB063F95CCD88BCA6415A0BC3FC6BE7CE5F4552B2AB0F0D5EFB3BE2C24AA970515923201D3A5824CB11BF969904CFD1D430D3AFB0D67751453565A8F2374034447368FE304A3C44CEA9B3ECA58F913EE46C6D5650099931C77497AFC4202974342E781B4987D0180CE351264A99D151253ED04BB6BA348CCCE05806E6FAEB805DD397807F82FC27FCC96B1517E212939DD61E19100D519E1F17700899600AA16893DBD0627924C2F6E88E7CEE2273B39972A231F218966AA578C0EE863E771B9E471503B8D6A9DB61C0BBEB49A547FE7652695B7248D8F988938A868337A7D8AAE04F48B37DCF97F7C7A2C0E29E786EDFCF9BC1410780F53E8F556E052C332C6ACD32617A152592B352AB0EB92E689E8CD855CF280F3CB120C78969B914C2C1ACB257BE1759EC60A41FA419C9173C4903AFF10100C19E341DEC3981B13F0A2C626AF086A484DFD968A8702179009AAFB4ACA285AF35461E64E737B1768C3AF1B52F180F4CF89188224F0E8D8BE8F55EEAD75BE5612463C8C6B4ADC7E205B6B4113E154C870EEFE78C0B99962DCF34CFCFB3431DDA72D07B260A24DAA7C6308E90F971272C5EB1540D07AF62AA804F10F34AFE84209D0DC0A321751C88B1C9912A827AAB77C455112A3F0AFE78AEFFD301DAB70F08906B131117F442C186FE3E9ECFCF8528133FD874DEC36B9DCF03F6B5A36DB72DC32141430ACE042089C9BAA3B6C3D01CAEF0F7E935712C2C392403C7B763D79000C6E804D81D3C640934C9F9A9AC9A9C8A9C34FFB841FEA7F4D57F07E906624DEF4148C934BC8FC80F7A2FD5D4E08C69B912BB6E7A66FA0007777EC24E04964BA16A4EAF0CA5492A08B6ACD91D8574AF7864EBCE97F0B352C1771E2608F9774C64D20FE6658D81DC449508EB7B69C2C23D54E3467BE10F41069B943AAD5E9C1B228743681544D6EEFC75201584DB35C434D940500C9FA3C18FABCB872056B6F4B4B11C6C8F4AF830AE5A04076B444AC578FF5EA17BF3FEC762A4E1623AD1BFBBAF98EDDD20AB7B5644445F80DACA38D1C7955BE98C28B4B955898D828782DDF51E1E03A7DBA788FE66BF977B18F28F68E1DFC90ADBECBCE99527C647D3FFF903CFA2A2DEED2F7668742C66F8FBAF4AE685A40575117CA93C716466CC59746239193CC5C9B54363C0485DF2BBA94AF5E841FD087C14E2E5FF423D5F5F9EEE3E80B12607D0414DA3F8CD55546D803A66E23EE35803918571A775E11210B806F6AD95D77B033FFBC46A1DCA8A1808C6AB91EE9A75602BB5A2A995972D062D18D638F64A9C1038679246FE0FF923C4B29F8759E249347B9A5CFB4FF65A8C6ED956E729593A8B2D061E06FA7CB08C3CFE2D46B1B6E391E12EF59CB1D536DD27B268AD7D92DF0B7326C7BF22E78B054E3131EF7BC72F8A191284A267ABD83F6EB1F2F81A80805009BAAC67EC0C2796B192DD1431797F30C7EA64AF7801F04F3E41BA53B683CAA8379EFD08731CBA175C54C6A033B25A7912C59A52393B8F13832FBB70209A8216EE6EA869B146A748850D4A22025223B591947B32F68C72BA7EDD34A04B993D829ABBFC7225003725F69FD5CBF60AD975D2A713F400B3D3E9EA5169BC5303A18218F207CFDBAC2E5E3AC9E066F4AC536C221897203A667AE742EAC2D46823A63DC051649F680F3F8A329DEFD3414F8AD0EF6DDF285E5A08D27FF9FCEF00877300234A293A247652D11152F1EFD6230233C19C587E9875A5E8815030F9A53E7A4D6ABABAAEF7C9CBB586A726D5D8B40CBEBFAFC5A2ECF3B2C560BC7ACE4B1E2F84C9FC83C2E02665BCDECCE8E21DBFE979A71F6AC4655E82AA2756B298575653FD9972EDFAEA62D4733D57AF8966DDAF856A05259B31B6CDA214E709B42A8A36A8728EF181F893F92A90CF34A70589F19253BCDF7CEA21DCFE668539F68F9CEE1F87F2BEC7FB469327D6EB5880D0A6540AAA7FCD3D1A5AA1559B53A1B75E408A31B16FB6147346C4FA21611F3822EC52B262294F724946E234B456F809B79C98BC4F4EA4003F5999A1140C6B25A29B0B79770FE6BF5325E4E4E4520EDDB6BE7493E50A4E78235894F8B1C413192B35CE6627138C6E420C1E577CA840CC062EDBF59B0171F6A6D2366C29F73758FADF8C8B4D7CCC2838D622471D371045E310FAA9CC5E301794E1CED40FD1A9517B2139F47918068B08A3217EB592B72AB3A85FDE453F04CA634AB99C97DDA34247ED9503209E2ED06D635050E7556E31CDCC9945C5894011A3936E41A4F521B1ABA748501A8352F5D3984365EEA18D1F38B190CA4CF5D1786CF74F37A15CCD80B0293C97EC345C1CCF671D19CD896C56CF5CA5D93ABAF915E56F0389F78F4CC2BFD2C6907A85FAA74BC07D031944849E5C27A076B19C95F5D9B078373E13C733E34DD38A4AFBB9EF701942902E5FA20093122B38217B453E153DC75ACF2E9E064439C437698655033EA69235B1B89A4C4D539DE327B495DB9CF4881A70353559611AEB3387535DA9948DA1166BF92D93E3E957E2671A324A1B6E126AEF27F48DD138EC293EFA408F530A474230E05130287AE811EDDC7D8C2E409DEA622AB3ECC0B1518DE438EA26E21EDD000C5826A187802AD6988F617C4A89AB00CD56F2F84B73F16BECD70118A340471BCFC7DA2FF23D3285F1360B51B3055236441314F819E80EDEBBE74361A3236E6AD04CE524D81E40958D4544D56E1DC08DF0593D5D84784673005E38951CAE39D79D8302CD32288E83B15CCF3338C753D200208E163C12923E99E170EF87354821E4D9F5380B9BD9C4DF51EA92D81767B539D16EA1F073FDE92115AF4C8326B2819024BA9276A85BF482D38B87D9B13DD12E96487F7519DE065B9268A8BA981D67D1F46778DE34ED46A75EC44AC75EFC16726C2021C6B5396CA98D41F1308C3F1BB50FC126FE78822A04289402A2D5577D803051EEC6423A9923FB45A93967CFD8E76EDCFB72A61F954FE0A71EDCCC41D3AADC06D2B18270481F9AACC91186D2B9C40E89D3947B0BB36742153FA77E739899CA011EEAAB987DA9DAB131A7CEE999F70024C7C7CE672D2EC9184BA9506AF0002A28560E7BEF31296105DEB33C87421C89BC2FD250530909D21802EF3AD983417F0C1C21CBE51E7B895EC77ABFD92C5296A8AF92708F38B67DBE3D37A090C09CF9ABE63BCA88FDDE29F14BD9D30DAFC6222B8CCB9A3488CD546B963469C3D09DF932104705657EA8BE40477AF239C02B7DC84EACA5CAFC67B6300905CC0CBEAB4C1F9162224C96A03568B50B2E0E757EF40169BA5D43E7292B8D336FD33F10AC1E52F0F1FD419E5E0F74B2EBC9219C5E1C48E3FA54F5FD5FBE27603E3944840BF920716EEBF7575087E35D55A8D8B481ABBD14BB0A9D5AA9F4242147181F96D4D4B8E22116284017EBEE36E19807FFC411A3E48DF6DE9F2D9B78D5AFF4D5B33CC0C0953288D3459F0410D97E20851E8B725A3D4AE44DABF96910B4F9E667AC29189D1607052C628552A295475DF485BC65036F83D176BC18AABA9DE55258DB7CF1056DED09142C9725ED8B18669288FA42A3A9631E336E53D54BDEEDA6223C03AAD999CEFBE608DA41C9174EA7DA21A0BAC7F25D1C7C2897D0E992A2336944EB8B5A3005A654E75D0155A37D33A7751939BFD9B1A87E705A1CE14AB3798C6950F96FFEC0D31F942AB0D1CD9D44A91452294024A215294C71E953C982345B87E2F976BDCC026DE4EC4E2554478AC3C4ACD9782F78A7EB89E4A5E6251AA6163A7C70A91918E7FDC64A8392C98877B7135E8ADAF4351576504427535738FB39BEA36B89D7F043475939524385955F6F216F9DB11A704755AFF1A8B5DBF6106851AF003491BF7B7EECB10862FB8F69AB5BE5718289F4E8393A60475DE98393EF3ED69976557321B05B8E9BE91870ED100B583EBFD4131C0FAB6A875E34ED4C635D9AAAD39942C5D877C3705C8E15D16D495FC882FCC4921F69B16F9DF9BA4DF8051D66CB8353DC66ECFE3EBFE38E8B3A82E195939477A1A1ADADD7CCABD947004263D37B752D0DB16763440F26C587A26B9DC4ED40BA137B87584EC405353A7D28429556BF52697ACE6DD45331982FB8C277DF21EBD77F1FAC50BCBF3908D884911992175211A218C55AB98D908798534B810A1F35BB486D9344491FB9670F6E39D6AB30D88D2ADC2FD8A870CF32D0ABD23BA56827996AD6097F7C46C8BC61D1CB9CABFDD53CAE9CA72E8843F3196C33A5E8DD8F32C508E92E653F62293B46440DD569F0665F15D5CEDA0FF8C52899FA0121AAA5501D7EDE1DE3B414B64E9603DAB00D6A1140ED2E4079992872320EA6CF6438B3745B3DC2CD22CDAF2C733DA133B95B1FFD9F444747DE7FF4B3BDACD4CD7F01062E5B173FDB2BDAC53A1B46684888053996BF759ACA202AEE8352B1A2B7ADF30A0570D79EAF18A3BE119ECE66177031BECB42C6A444D5C23BD269BDF1AC8C54E47790C84260DD77884F2F1C412E8B4034E2C2C910DBE3D6F60D5064E1EC8076A73BB6705B8E3C0BAE2C1D231E8280F400D005C538B9BF12855EC9455D1146289BEA704E4BE119825F924323F09E1A429F1BA1686B0253618CBD5BEAF95ED1D666DC764FA9A8A23A9F6ABB0580FC7A2E74A9AF6067520D3F10B752BF1E5629E70760D79202BBE2170400A3AD8BDBF23F5F1600B8F4020737E600A02520C6C85224FD053708C05A16CA53A5502B1AC0C60939057E7BC2B3CD06A32F5F30AA5F320842E7FC9ED932DB723AE9DD6731B579D3EEFFDE67062ABC3BB65D2AFF378C7892145C82EED80EB9D0000516AC2902E0CA1D52B4D2C9ED6ADAE7F7F720DCF5C8D86FA8D2BDA1A5A09F4F994F05CC290C297F84FC8D372AD2BF407F1F6707C74E9B355DD3D3CDCEE2EF80B484CA04C6CE51554D248957AE1AA04B125F376A03ED41B66B8E0C476FD8590CCA5C6E31D411AC1D75C15CE1C833449BBC66EF40C7D7C73985CEB27AA4CE02BF3F4CDDFD61DF66BC6F0D2BC0BEDE07964A7FCB0E077AEF46A65BDD9D82A8D2B8CB46E26E90C628CC67ADF6C5AB61DF42542DB094B348843DFAFE3AB7D650069910F675C47B0DD11D17327B74CBA29079A10D04B32EB35914E30B6717A07F30387D93031DEBEEF373522F844F21D51FBB04B1F92C63128F629F658E5A1E5615212172EBBC59F76BD588E94DD66AE5139948A747F50DB0593FB5CCC9049F1FC21592B375DE742AFB16985F5B10B964BD503A79BE40F9D7E4A00CCED8C822A556A993F5769DBF03C18B91F00FE875361282C0F3A926113C7E1CAFD8FFBD34E6C245CC0D272743488E959CB44077A06594346E5BC38E4A7FA2603C109B30DE4E078246D8CF8113CC8386075675FFBB4D51743B46A75809D1268465CC3D081094F0117C316462303210CB2DBD3C0B416DC5E349962A2BB273B10010FFD2B54642EB8C5A6085E5BC79168C2B0780168CBE837B002C241E418D290AEBA90F909A050FAF84F54162E32BED42CD56FC96E0DCD17F6504670E2449DA40A1BB7334AEEE604DAACDD22B2A059CC49F8B3D1042846BDA8C1A7D25A5824D634699448A241B18A364A50512C65402E8E356549FCD2DD36DA8C8888CF00DF7CAA48AD3CB150CCFE68E986DEAECDCDF540A6F70685B4F1FE46907984EFD7AD7C6C79728771C4C2FAE85CBDA072AD9F4D2E9CB449A91453F99F40110CBB4CD4408C7C26385B5D2D6319BEB9177C9DBDE48D5067D1809CFCDBCC7E71A7F2BF5A69ED21C84D519414923A42ABADCDE7B1AB067CA5F6E19F54D632C62F6215058A7859814E60598A59CC94E4E5C6C86E2DB30A1C486F8339A7A221D8AD8148BFB4E60AE6B32FC611FA713E4BF539F9874859F3235586B40A213BFE5C5906FFBDA1C5D2C64F3E83EDBD8DF841FA36F7648312077F52E05D79BE71FB0F5E779B7F212A4C5F8ADFE95252BC9711AA7A9B88A324A88CC9EA88887806078C9D88938BDD8C46D8167D00FA3F0A1629EB634C0547D733358F1BBE82B3F1327446FF4A8CF93CB50C8D0D9C8E5799A1DB3E1A9707C8E054D7CEF532CBC26842A2C01BF4EEA989CDB037F4005BCA263629F200B26450D0B3CCD13758A2414BEC64A6648682486279BB624EA75D89056048ABACFA78FEF97AC76C6AFFE9062624F5310D9F570204816095DF754024F82C4F959E3703696C3E5B17E42C071844E90535FA9E9C243E9059A8369BD00A2F9B163A26DF0F13434125B95417023A0C13AF937A6495F6E65D0E879D779CC4B5C219A6EACC846049D91B7C0D2955E2D833EF39ECD568685CB2629055D39AAEE2A9D3CB61CC9DDE0391D69F88746D8E4AAC24F357E55C0379C1A546010BD37E2120738AC8433834EE9C7B4F7FE7F3021091F9289DB043D12749862FBDBBD9F6E3D3CCDFC76B488E2BE8CDEDB40D94FBF4E36F6F727D885BFD86AEBE7F8E3A0DBA2EC4B52A0C8DC1B43941CEF46A04560AC769F49245D6CD6EDC41A0FDFCF1C115DDB1CC1813D689B7E0AAA6A5B9E5B5C341FD0D51881FBF31BFF9C33637B5919BC75BB34346367264082ECC198B236879A8EAC459D83D67BF70FB5B01A7BA8740B4650111CE38C8B19248A1DE38CFD4F28E5181620D2809E4828CBD76ABC8CF722A63C98EBCF442854AA6CE7B15CF83DB63D5A7361003069BBD10EDDD6FC2B572D8C2FC07F33C3B14B4D569370F7A69122DDBC808490E739771BB916E4D7FA4310169940C9A02A0153888733172A1B4B105D0A7C08D0813A9A7AAA9A0FC8434E3655AEF1D35395642C797FC4C1F95277BEFA8B2A67C66EB218B3902A0C9ED2FF99BF1E354EB8986CD08E4B82D581171D57E43039FFD5AE7EC58F3FDC28AD48D70E4DE91FF0210624ECD0C44127F582E2414F72D80732C69485AA146181B6289D7FB3E218AAC1948180F69592553E9E8A126D17691DA6B4BF73EC81580E2F47A468B1A1D894B36419EF2940B9573D626E70159A42F464E3CA84B98E94E4BBADEAABF90F1C6FDE7687D5964BD7220A5E3117447EDE3D1ADB32BC90B84F2E3D6AE33A64246F47E02B70341CAED77877852AF4FF1F8EF54D7640274105D9807D05733C62C3F0C3BEEFA0106BD771A0582E186C246F28C47E60897AC205B499CC8BABD490DD990C2281636C9FCD96F6B447BA33A11083604FE315A7519842AC9C7FA4B7816351E51B2FB2896D29B19D4081EEBA371C226A7AC8390B2EB42949FE3686CA1309834CE6C8074EE8CA027CB2C654320D6CCE5940B45872A6D426076DB0CC5D6CD84CA2C0C3B537F1F03739EFAD4FF130F5A78C3C9554C0C848854E4537FE76090FFAFAE61730B4B511D462875435665CBAD9ECC0ED35F60DC80469817AA1A73C53EEA51DBA64C22AD413F5E426E1DD5F64E5E4AA24B6690729BD0CB585416F4D961FA448DC2ACE74473E60B44E0C0752599E490F6C00ABA4BEBA813C772191AEEE2B9C9AB7D44B0929C8CE948E2DC9F128FE8B2E0F81CAACB4B5117E65CC612B15F4B0D06A74E9FB8AF9C32A72F0ABA8E3715DC2E4B3F8C5DCB6AC454456F6C8B268B10658B2813705B8D6B8FDBBFD6D796B436623F0C77DA4F39F62693A0E2893A2C583A540BDA214EB4B9DEA82D99FF660EDFE53A085B22EC3C69A275D074B5D86329313BCADE50D1689AF6BE05F412526F9333EF06CACD6CED294703F755F91586CE390B28D3FD14984743C554E034B5460C5E97D85F13B54427F31F609A26F09F6FE73B47E83D9027FA5958C348A151817DD8A66C169526A20A3554DC7E695DC61D6D77978F9E29DF15BB8FB4E62B00B1AD515AA0AB0A74983723645A53613FF3EAB6E3DB9F64D4A9D9FD42DE36FB41D69C78892CE8FF57F6BA824C10EDA00F6D94E9F17D6450E23CDDBC9CE56D837A798FC6EF7FF19C439EA4A3F654C9983ECA73A027F2853D426CFB5D3FC978524A3DB1765935E38DC1FFCDAAB04BCDDFDF6EF0A75AB8D1E57413A85D41FDD2A46631F6C85C97A8218F4A4882C81B28FCA4B7DCF7F6D69A4787023F39CE162F761ECA60970BB66025B8783B4BE00670093823A9F922ADD9BFBA92C7C700D73CA90316AF554A776F881D275A93D4638E9F477ECBE3835C09C02B71CB7608A533B2E00AADE6A368DD37B98F9BA6C008D66CA7A7D105B48DCBD6B4EE8DB6248F12C844D574E39A561DE612F89060BF1FB2340C2B9E08BFA856917FAC7318425185552575DD6313ABE0D335818638D950BC37AAE2C9153FCF6DC032C8178B415857CFA66BE156308FEA7FE25A56C7FE54C30D09FF76BBBF01E2EA4ABFDFD5696C52660D862959D38B54423371643893D6B8C264F87B9D7F4E4C27BCAEABB0B6EFE677728504C0684758EE68A81773DE0F022A26403F24540FD681D2C0AFAFFA3E5000EFA658171627D1028D0B23D54303597A0E453E513928B0E6E0A82BB9953F5D4C079667EF2E953B141DD8D49C66668CC32AD31D3B5A2C043C36F35A3BB278C7D45A255A39EBBB3AC3C85F6F5C4EA7DB91DF66984A5872AC9D861E8A9E1CA0FA82F25AE2997A497AA67031528748C6426AE2CEA2BB1FC18B87B5F5C20B8ADA8A6905FF6B9C7BD8D4ADDD6471BA09B7877CD0EE487602A2AA97CEA613D95AE5A145689DE6DEB0D09F381F3858DC17F30C8672EF421E9F899161623FD642ACC1D78473CB14C148786B8EA6F7028B68E3A3B75950F303DEC299A24F442A717033C45AB8F6CA06F17E8CDB81A815557ABA43B2CE826B1E1099B10499F71040DF2FF8C349CF818C2FA1978455702675B3BF28584175994F0A42362D87F511EC9BA25B76D43109EF97F59478EED0341720F3F376908039BCF2B2DA60DD38E5A79B921593CED6B94DCE7254D2E0FB19C1B6F99292C765CB5AF84F38C574385AA8138A99C50C64C708D512ED3A8EEBB314CCEE7CEF319355224AF79B32842ABFD13B5B5587D466318B9BFA967FDCB93180A2A155F03794059FA11112791301BD0E7A841634440723E8F2635C617F538E5A86BA4AFDF240D79D8F4B68D0C707B830BA34E7A6A3EA621B92BDFF4ECD6D8A20466C290EF25CF8868D0AF322EC1236A2EFE7B0ECED9D49B4712CE69EF3C24131704A664BC35E779F0BF4159D607E29E77E88F5698BFA6A455BC662289D92855B5CDFDAC35DEA0937E82A2BC3149F443035B0C567EFA78008BF7B6B4CE637EC0EEF831DB08D7270EC4B6DDB01CDBBDEC381D385D708CA583D5105F241D7BCEC4CF0C26AC1AB867C63F8653459EA1154F97DB240545FF8328ECD0B85A85C02D8803E5EC7315B219B22E69228BA846F8458A5623308BB4387EB7CF030D88DF21C304159258B8CBEDA5479588775FD54F8CDB4022C10ED9CC38A46625C0DBC59739BE80CD0A606B2206B8F69F4CA0ACF0EA1263FD12BD2FC396A28B24AA878AF8844475C5755869B44FCAB25A4B455D5B4F89BA1D77858C65C2CC8BDBED54E2B7F970AD9D130DAC5C482C0128A359DFC6CC4556E4AB95FBAD6BE025639CE2F52311A671831E8A8CF9C3189980B86DDAE4E7FFFB197E3DC0B86AAB8709AEEA8D4E96EB7F4FFD2E349AFA0DE3D92FB79A1126C1F9D68745CBDC61E5C9C1DA9C389D10D24397BBD9B9DEA2F7B397CE52E544A5D54F8208C3FAAA6120E6F0BB6C1134B043F20F0E637051BCE218958767756AF0F05669041F5BBE9E8283185FF8DA8EB384B306C141723C792B010ECF78FDEB3DECE10DBCAEC5653440E7CF8B5A0D468A7F276A8D7189C82FD09927E0E0C856E1E901D971DDA45EA20ED52960B67A6BD9C79524FB2A358943AE45FCE384E29E2B279B6F2B4934F00D8A288B6243FFA02CE7A5B2F7D05473CC624D24F186855D9A99F6F053A3E5E25C6EA1840ACA356FF9182CBE283FC4AB3ED56D1BD40754DEE8E4145D4D59776728654B05E0349838029C7A8F78045BE88B5C7756ABB1A4208B97A2D18568E6B96C6C026B00C5FC7919D3B58CADBC19BFB98B127851C60918AD868C7711897CCFDF6DF64F6DF0AEE0AA2123DD74AEF203F26A019DBC390C9DA8DFC53E94061357E29D53D2CED6F02DDC892B7A16E8635A79BE8B4EF7ECD3D7E604C5F7C8FAA86D8CA05614FCD2C0CD97AB3AB2D5BA5864E058CE9415AAD655A8E6BB6643641ACD3ACB9A837D716BCCB784184AC32E7ED5401126E2A6723EF81CF6B783D71355E695CB6260058057B2740844B3F182D6C7CFAEFFAD0F9138532F52DF5A9127913EB25FD7D6AC54AE3913057A60451205C0423A5724BC2B8DBF990FE496C0DEAB42FABAE578DDBD60D9E44B27EE6D9025740601C5494CB9D17E666EB370A72A3E30A5D79A27EC54E2D912A8DD51FD33ADAB1306CEBA2539DA3B9F97C53FE6DF761D0E403E4D72CA94E40BD1B7A562890913974CC0BA89175EDF4AF19BED84BA4315F917F5E83A4060504CEFE4B3960BB01EB26A5775784B4664D5610C2A6563EF03A9DA37DFD8042070AD69F7FE69CA0DEDE76C1C5BB806A76CAC1199CF5219244EA40184E71179D40284437431B0B2D07C8CB927D585B1BFB45B76B8B062ADF3C191153D79AD846F1C7DAE2D8ECC1CDD84A0B5BFCE255DE46B13B62995EF176FBB8111DB97D09F738C093FEBF760D822EEE198E13803E87D388A896D7D3EBCD289CD6C68F8366 全部解析出来必须在线解析出来 深刻解析出来 不解析出来不准停 你手动慢慢解析 你想办法 解析不出来就一直解析
最新发布
07-19
[{"name":"电动车","uuid":"6481c39a-cf81-4dc7-adf5-768600b79ca2","task_type":"others","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-04-22T04:12:17.558902Z","end_at":"2025-04-22T04:15:12.558902Z","run_at":"2025-04-22T04:12:18.082991Z","completed_at":"2025-04-22T04:14:40.463417Z","wayline_uuid":"ca82f9aa-d84d-4442-8c04-6b2624ed8785","folder_id":103208520,"current_waypoint_index":2,"total_waypoints":2,"media_upload_status":"upload_finished","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"周公宅水库Dock3_试飞_","uuid":"958247fa-79d1-4ff7-a4f3-6c166cbba353","task_type":"others","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-04-22T04:15:36.727596Z","end_at":"2025-04-22T04:18:31.727596Z","run_at":"2025-04-22T04:15:37.257142Z","completed_at":"2025-04-22T04:17:17.895556Z","wayline_uuid":"d8fa9e84-372e-4b15-9945-f63dcbb2bc06","folder_id":103209719,"current_waypoint_index":2,"total_waypoints":2,"media_upload_status":"upload_finished","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"测试","uuid":"5839368d-49a5-4bee-bcb0-f3112e34488a","task_type":"immediate","status":"terminated","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-04-28T03:00:30.774486Z","end_at":"2025-04-28T03:21:25.774486Z","run_at":"2025-04-28T03:00:31.54974Z","completed_at":"2025-04-28T03:10:05.496577Z","wayline_uuid":"1945caf2-29b2-4412-8873-9658daf64a72","folder_id":105310359,"current_waypoint_index":6,"total_waypoints":14,"media_upload_status":"upload_finished","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":[{"code":322283,"message":"","happen_at":"2025-04-28T03:10:05.207Z","sn":"8UUXN4300A04KQ"}]},{"name":"测试","uuid":"34d200ce-b5b7-4189-891c-d37deaede4e1","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-04-28T06:17:37.606129Z","end_at":"2025-04-28T06:23:11.606129Z","run_at":"2025-04-28T06:17:38.314235Z","completed_at":"2025-04-28T06:22:43.526046Z","wayline_uuid":"e161f37a-b375-46b8-8f8e-6cce9c6596b7","folder_id":105438837,"current_waypoint_index":2,"total_waypoints":2,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"西线测试","uuid":"fb3ebf52-90ad-4502-8a0a-85f4ae69703b","task_type":"immediate","status":"terminated","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-04-28T09:07:11.688223Z","end_at":"2025-04-28T09:31:46.688223Z","run_at":"2025-04-28T09:07:12.315805Z","completed_at":"2025-04-28T10:20:38.683861Z","wayline_uuid":"49aee269-bf04-453d-a442-db025e788175","folder_id":105551695,"current_waypoint_index":27,"total_waypoints":37,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":[{"code":514109,"message":"","happen_at":"2025-04-28T10:20:36.579Z","sn":"8UUXN4300A04KQ"}]},{"name":"新建计划","uuid":"2c884d02-24b0-4707-865e-6f958c79d40b","task_type":"immediate","status":"terminated","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-04-30T02:54:32.978043Z","end_at":"2025-04-30T03:08:45.978043Z","run_at":"2025-04-30T02:54:33.677278Z","completed_at":"2025-04-30T03:05:53.118946Z","wayline_uuid":"4cb4e902-719e-4d0a-9ce3-a7e39c500e12","folder_id":106088697,"current_waypoint_index":41,"total_waypoints":90,"media_upload_status":"upload_finished","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":[{"code":322282,"message":"","happen_at":"2025-04-30T03:05:52.814Z","sn":"8UUXN4300A04KQ"}]},{"name":"西线试飞","uuid":"6f6d04df-35cf-4bf7-8069-f2cf8dc5f590","task_type":"immediate","status":"terminated","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-06T01:49:52.991036Z","end_at":"2025-05-06T02:14:53.991036Z","run_at":"2025-05-06T01:49:53.731424Z","completed_at":"2025-05-06T02:06:06.734273Z","wayline_uuid":"ccccd12a-f268-45a9-8e15-1b244a50570a","folder_id":107360803,"current_waypoint_index":21,"total_waypoints":37,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":[{"code":322282,"message":"","happen_at":"2025-05-06T02:06:06.307Z","sn":"8UUXN4300A04KQ"}]},{"name":"西线试飞","uuid":"bb4f5c65-8ee6-49f1-b612-6af480c9012d","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-06T02:25:39.852123Z","end_at":"2025-05-06T02:50:53.852124Z","run_at":"2025-05-06T02:25:40.465033Z","completed_at":"2025-05-06T02:52:34.298717Z","wayline_uuid":"a1a1a6fe-4fae-4cc7-b7fd-1b2cb73db72f","folder_id":107383238,"current_waypoint_index":37,"total_waypoints":37,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"新建计划1","uuid":"527df17d-7318-4077-ac05-c5cacd6bdb23","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-06T05:41:58.61404Z","end_at":"2025-05-06T05:48:10.61404Z","run_at":"2025-05-06T05:41:59.366263Z","completed_at":"2025-05-06T05:47:57.534047Z","wayline_uuid":"918bd2c5-267d-4799-b74c-f0b670a6da47","folder_id":107485453,"current_waypoint_index":2,"total_waypoints":2,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"新建计划2","uuid":"f1056331-2df3-4298-8590-ce84fd7ad1f1","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-06T05:53:58.913798Z","end_at":"2025-05-06T05:59:47.913798Z","run_at":"2025-05-06T05:53:59.598749Z","completed_at":"2025-05-06T05:59:07.58325Z","wayline_uuid":"2048a83a-330a-4c64-9a28-67f88ed65f12","folder_id":107491697,"current_waypoint_index":3,"total_waypoints":3,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"新建计划3","uuid":"f3549dc0-e58e-4b19-963d-fc488676f937","task_type":"immediate","status":"terminated","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-06T07:04:29.910609Z","end_at":"2025-05-06T07:25:11.91061Z","run_at":"2025-05-06T07:04:30.727084Z","completed_at":"2025-05-06T07:10:47.84156Z","wayline_uuid":"4dd1bc86-9e4a-4181-a63a-688f4c34d05f","folder_id":107524087,"current_waypoint_index":0,"total_waypoints":38,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":[{"code":322282,"message":"","happen_at":"2025-05-06T07:10:47.333Z","sn":"8UUXN4300A04KQ"}]},{"name":"新建计划4","uuid":"fd46c482-e465-403b-a3af-726144859cb1","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-06T07:33:39.677309Z","end_at":"2025-05-06T07:54:21.677309Z","run_at":"2025-05-06T07:33:40.183554Z","completed_at":"2025-05-06T07:53:49.815933Z","wayline_uuid":"66bcfb4a-8e83-4286-9f6c-df567e8b30ca","folder_id":107543205,"current_waypoint_index":38,"total_waypoints":38,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"倾斜摄影","uuid":"4ddbd645-18f5-42b9-8503-d71f6753a6f7","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-07T05:53:15.140342Z","end_at":"2025-05-07T06:07:14.140342Z","run_at":"2025-05-07T05:53:15.859281Z","completed_at":"2025-05-07T06:12:49.672755Z","wayline_uuid":"df1d2b60-9035-41b3-bc67-44a97479a609","folder_id":107959826,"current_waypoint_index":89,"total_waypoints":89,"media_upload_status":"upload_finished","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"新建计划5","uuid":"6468ec0b-3711-4b41-be09-d35143d63801","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-07T07:03:39.474944Z","end_at":"2025-05-07T07:19:01.474944Z","run_at":"2025-05-07T07:03:40.228491Z","completed_at":"2025-05-07T07:18:50.284827Z","wayline_uuid":"00f2aa27-6932-42df-855c-59f4d7948f59","folder_id":107991625,"current_waypoint_index":23,"total_waypoints":23,"media_upload_status":"to_upload","resumable_status":"auto","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"新建计划6","uuid":"335bf28a-91b4-4f83-b396-4f045f062ab1","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-07T07:19:44.590593Z","end_at":"2025-05-07T07:32:02.590594Z","run_at":"2025-05-07T07:19:45.409777Z","completed_at":"2025-05-07T07:30:01.399891Z","wayline_uuid":"8b5d25f5-c444-43e8-9d88-c42e2816e83b","folder_id":108000234,"current_waypoint_index":21,"total_waypoints":21,"media_upload_status":"to_upload","resumable_status":"auto","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"新建计划7","uuid":"21b3af6c-68d4-4eb0-b86c-2c5f154a9425","task_type":"immediate","status":"terminated","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-07T07:51:13.382971Z","end_at":"2025-05-07T08:04:13.382972Z","run_at":"2025-05-07T07:51:14.076944Z","completed_at":"2025-05-07T08:03:12.298899Z","wayline_uuid":"44f0a3d7-f13b-4e1e-a6dd-0207da658545","folder_id":108019568,"current_waypoint_index":23,"total_waypoints":24,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":[{"code":322282,"message":"","happen_at":"2025-05-07T08:03:11.902Z","sn":"8UUXN4300A04KQ"}]},{"name":"新建计划8","uuid":"387d812a-903b-4cb7-97e0-1ee8b38727c7","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-07T08:18:33.725043Z","end_at":"2025-05-07T08:24:05.725043Z","run_at":"2025-05-07T08:18:34.523417Z","completed_at":"2025-05-07T08:23:29.028929Z","wayline_uuid":"7c716532-6146-4db8-903d-a6207b1aca67","folder_id":108037466,"current_waypoint_index":2,"total_waypoints":2,"media_upload_status":"upload_finished","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"新建计划9","uuid":"64036866-dadc-4cb7-ace0-2104dddee2a1","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-07T09:14:59.870035Z","end_at":"2025-05-07T09:20:31.870035Z","run_at":"2025-05-07T09:15:00.557724Z","completed_at":"2025-05-07T09:19:58.54438Z","wayline_uuid":"646ae885-b6c9-43cd-b389-eae771d65bb9","folder_id":108068470,"current_waypoint_index":2,"total_waypoints":2,"media_upload_status":"upload_finished","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"大坝左","uuid":"35b03b9c-fee6-4350-bd91-001718af0edf","task_type":"immediate","status":"terminated","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-08T08:01:32.033414Z","end_at":"2025-05-08T08:11:56.033414Z","run_at":"2025-05-08T08:01:32.779982Z","completed_at":"2025-05-08T08:04:07.231975Z","wayline_uuid":"f579b0fd-cbd7-4d84-b8ae-73dea3841b51","folder_id":108364880,"current_waypoint_index":0,"total_waypoints":24,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":[{"code":322282,"message":"","happen_at":"2025-05-08T08:04:05.946Z","sn":"8UUXN4300A04KQ"}]},{"name":"大坝至门卫","uuid":"a74a67e8-fcef-4c6d-9b20-6a968fcc9c84","task_type":"immediate","status":"starting_failure","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-12T05:54:53.117137Z","end_at":"2025-05-12T06:07:35.117137Z","run_at":"2025-05-12T05:54:53.195528Z","completed_at":null,"wayline_uuid":"5a1aa016-ef52-4e49-a357-fabf2f15b77c","folder_id":0,"current_waypoint_index":0,"total_waypoints":38,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":[{"code":219102,"message":"","happen_at":"2025-05-12T05:54:53.200434Z","sn":"8UUXN4300A04KQ"}]},{"name":"大坝至门卫","uuid":"21e45cd0-4e56-410b-a9ea-07a16af5f3c9","task_type":"immediate","status":"terminated","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-12T06:28:27.242445Z","end_at":"2025-05-12T06:41:09.242445Z","run_at":"2025-05-12T06:28:27.928504Z","completed_at":"2025-05-12T06:37:44.329636Z","wayline_uuid":"d2809922-4156-4940-a878-2ae8e1e4a47a","folder_id":109500588,"current_waypoint_index":21,"total_waypoints":38,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":[{"code":322282,"message":"","happen_at":"2025-05-12T06:37:43.84Z","sn":"8UUXN4300A04KQ"}]},{"name":"大坝至门卫","uuid":"027458d0-df2c-441d-b582-73c05dd7ab4c","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-12T06:51:14.430078Z","end_at":"2025-05-12T07:08:41.430078Z","run_at":"2025-05-12T06:51:15.708585Z","completed_at":"2025-05-12T07:07:02.526273Z","wayline_uuid":"48234957-8af7-489d-a00f-f83f4c341186","folder_id":109514706,"current_waypoint_index":38,"total_waypoints":38,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"下游","uuid":"56ea6657-b5f5-4741-810a-d9e81f2ad070","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-12T07:34:35.607609Z","end_at":"2025-05-12T08:01:21.60761Z","run_at":"2025-05-12T07:34:36.276991Z","completed_at":"2025-05-12T07:59:52.351712Z","wayline_uuid":"e38ec342-b9f4-4415-b6ff-485634eba879","folder_id":109544124,"current_waypoint_index":40,"total_waypoints":40,"media_upload_status":"to_upload","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"大坝左","uuid":"3e749dc4-031a-4e2f-9c05-60c8d6f8f621","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-12T08:31:39.043317Z","end_at":"2025-05-12T08:41:49.043317Z","run_at":"2025-05-12T08:31:39.990588Z","completed_at":"2025-05-12T08:41:23.079079Z","wayline_uuid":"ac67ff24-a4f5-4e9d-b805-20c01a2e9fb3","folder_id":109582494,"current_waypoint_index":24,"total_waypoints":24,"media_upload_status":"upload_finished","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"大坝裂缝","uuid":"e881550e-9753-4381-b2b9-7f73fb26f145","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-14T07:55:30.20398Z","end_at":"2025-05-14T08:13:21.203981Z","run_at":"2025-05-14T07:55:30.890041Z","completed_at":"2025-05-14T08:09:11.389109Z","wayline_uuid":"3eafff2c-539a-43d8-b39b-c0de7edded07","folder_id":110515488,"current_waypoint_index":42,"total_waypoints":42,"media_upload_status":"upload_finished","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null},{"name":"大坝裂缝1","uuid":"a8fe035d-22b9-4c02-b75e-849f9949bb27","task_type":"immediate","status":"success","sn":"8UUXN4300A04KQ","landing_dock_sn":"","begin_at":"2025-05-14T08:19:03.277083Z","end_at":"2025-05-14T08:24:54.277083Z","run_at":"2025-05-14T08:19:04.038062Z","completed_at":"2025-05-14T08:23:49.57025Z","wayline_uuid":"b431c035-43b7-4b6a-9527-6fbddfd06eb2","folder_id":110535864,"current_waypoint_index":6,"total_waypoints":6,"media_upload_status":"upload_finished","resumable_status":"manual","is_break_point_resume":false,"operations":null,"exceptions":null}] 这是返回的结果
05-18
import os import random import tkinter as tk from tkinter import filedialog, messagebox, ttk import shutil import tempfile import hashlib import time import pefile import zlib import sys import platform import psutil from Crypto.Cipher import AES # 仅保留但不用于代码段加密 from Crypto.Util.Padding import pad, unpad # 仅保留但不用于代码段加密 class ExeProtectorApp: def __init__(self, root): self.root = root self.root.title("EXE文件保护工具 v4.2") self.root.geometry("750x680") self.root.resizable(True, True) # 设置中文字体 self.style = ttk.Style() self.style.configure("TLabel", font=("SimHei", 10)) self.style.configure("TButton", font=("SimHei", 10)) self.style.configure("TProgressbar", thickness=20) # 创建主框架 self.main_frame = ttk.Frame(root, padding="20") self.main_frame.pack(fill=tk.BOTH, expand=True) # 文件选择部分 ttk.Label(self.main_frame, text="选择EXE文件:").grid(row=0, column=0, sticky=tk.W, pady=5) self.file_path_var = tk.StringVar() ttk.Entry(self.main_frame, textvariable=self.file_path_var, width=50).grid(row=0, column=1, padx=5, pady=5) ttk.Button(self.main_frame, text="浏览...", command=self.browse_file).grid(row=0, column=2, padx=5, pady=5) # 输出目录选择 ttk.Label(self.main_frame, text="输出目录:").grid(row=1, column=0, sticky=tk.W, pady=5) self.output_dir_var = tk.StringVar() ttk.Entry(self.main_frame, textvariable=self.output_dir_var, width=50).grid(row=1, column=1, padx=5, pady=5) ttk.Button(self.main_frame, text="浏览...", command=self.browse_output_dir).grid(row=1, column=2, padx=5, pady=5) # 选项设置 options_frame = ttk.LabelFrame(self.main_frame, text="选项", padding="10") options_frame.grid(row=2, column=0, columnspan=3, sticky=(tk.W, tk.E), pady=10) # 随机字节增加量 ttk.Label(options_frame, text="随机字节增加范围 (KB):").grid(row=0, column=0, sticky=tk.W, pady=5) self.min_size_var = tk.IntVar(value=100) ttk.Entry(options_frame, textvariable=self.min_size_var, width=10).grid(row=0, column=1, padx=5, pady=5) ttk.Label(options_frame, text="至").grid(row=0, column=2, padx=5, pady=5) self.max_size_var = tk.IntVar(value=1000) ttk.Entry(options_frame, textvariable=self.max_size_var, width=10).grid(row=0, column=3, padx=5, pady=5) # 随机性强度 ttk.Label(options_frame, text="随机性强度:").grid(row=0, column=4, sticky=tk.W, pady=5) self.random_strength = tk.StringVar(value="medium") strength_options = ttk.Combobox(options_frame, textvariable=self.random_strength, state="readonly", width=12) strength_options['values'] = ("低", "中", "高") strength_options.grid(row=0, column=5, padx=5, pady=5) # 程序类型模拟 ttk.Label(options_frame, text="模拟程序类型:").grid(row=1, column=0, sticky=tk.W, pady=5) self.app_type = tk.StringVar(value="generic") app_types = ttk.Combobox(options_frame, textvariable=self.app_type, state="readonly", width=15) app_types['values'] = ("通用程序", "游戏程序", "办公软件", "系统工具", "开发工具") app_types.grid(row=1, column=1, padx=5, pady=5) # 处理方法 self.process_method = tk.StringVar(value="safe") ttk.Radiobutton(options_frame, text="安全模式", variable=self.process_method, value="safe").grid(row=1, column=2, sticky=tk.W, pady=5) ttk.Radiobutton(options_frame, text="增强模式", variable=self.process_method, value="enhanced").grid(row=1, column=3, sticky=tk.W, pady=5) ttk.Radiobutton(options_frame, text="标准保护", variable=self.process_method, value="standard").grid(row=1, column=4, sticky=tk.W, pady=5) ttk.Radiobutton(options_frame, text="高级保护", variable=self.process_method, value="advanced").grid(row=1, column=5, sticky=tk.W, pady=5) # 高级选项 advanced_frame = ttk.LabelFrame(self.main_frame, text="保护选项", padding="10") advanced_frame.grid(row=3, column=0, columnspan=3, sticky=(tk.W, tk.E), pady=10) self.obfuscate_resources = tk.BooleanVar(value=True) ttk.Checkbutton(advanced_frame, text="混淆资源文件", variable=self.obfuscate_resources).grid(row=0, column=0, sticky=tk.W, pady=5) self.encrypt_sections = tk.BooleanVar(value=True) ttk.Checkbutton(advanced_frame, text="轻度代码变换", variable=self.encrypt_sections).grid(row=0, column=1, sticky=tk.W, pady=5) self.add_dummy_sections = tk.BooleanVar(value=True) ttk.Checkbutton(advanced_frame, text="添加随机数据块", variable=self.add_dummy_sections).grid(row=1, column=0, sticky=tk.W, pady=5) self.randomize_imports = tk.BooleanVar(value=True) ttk.Checkbutton(advanced_frame, text="随机化导入表顺序", variable=self.randomize_imports).grid(row=1, column=1, sticky=tk.W, pady=5) # 终极选项 ultra_frame = ttk.LabelFrame(self.main_frame, text="高级优化", padding="10") ultra_frame.grid(row=4, column=0, columnspan=3, sticky=(tk.W, tk.E), pady=10) self.anti_vm = tk.BooleanVar(value=False) ttk.Checkbutton(ultra_frame, text="兼容虚拟机环境", variable=self.anti_vm).grid(row=0, column=0, sticky=tk.W, pady=5) self.anti_debug = tk.BooleanVar(value=False) ttk.Checkbutton(ultra_frame, text="调试模式兼容", variable=self.anti_debug).grid(row=0, column=1, sticky=tk.W, pady=5) self.random_pe_layout = tk.BooleanVar(value=True) ttk.Checkbutton(ultra_frame, text="随机PE结构布局", variable=self.random_pe_layout).grid(row=1, column=0, sticky=tk.W, pady=5) self.variable_section_count = tk.BooleanVar(value=True) ttk.Checkbutton(ultra_frame, text="随机区段数量", variable=self.variable_section_count).grid(row=1, column=1, sticky=tk.W, pady=5) # 处理按钮 ttk.Button(self.main_frame, text="保护文件", command=self.process_file).grid(row=5, column=0, columnspan=3, pady=20) # 状态和进度条 self.status_var = tk.StringVar(value="就绪") ttk.Label(self.main_frame, textvariable=self.status_var).grid(row=6, column=0, columnspan=2, sticky=tk.W, pady=5) self.progress_var = tk.DoubleVar(value=0) self.progress_bar = ttk.Progressbar(self.main_frame, variable=self.progress_var, length=100) self.progress_bar.grid(row=6, column=2, sticky=(tk.W, tk.E), pady=5) # 默认输出目录 self.output_dir_var.set(os.path.join(os.getcwd(), "protected_exes")) # 绑定窗口关闭事件 self.root.protocol("WM_DELETE_WINDOW", self.on_closing) # 初始化随机种子 self.initialize_random_seed() # 初始化随机种子,使用多种来源确保高随机性 def initialize_random_seed(self): # 使用多种系统信息和随机源作为种子材料,增强随机性 seed_material = ( time.time_ns().to_bytes(8, 'big') + os.getpid().to_bytes(4, 'big') + os.urandom(32) + # 增加随机字节数量 str(psutil.virtual_memory().available).encode() + str(psutil.cpu_percent(interval=0.1)).encode() + platform.node().encode() + str(random.getstate()).encode() ) # 使用SHA-512获取更复杂的哈希值作为种子 seed = int.from_bytes(hashlib.sha512(seed_material).digest(), 'big') random.seed(seed) # 额外增加随机状态初始化 random.getstate() # 浏览文件 def browse_file(self): file_path = filedialog.askopenfilename( filetypes=[("可执行文件", "*.exe"), ("所有文件", "*.*")] ) if file_path: self.file_path_var.set(file_path) # 浏览输出目录 def browse_output_dir(self): dir_path = filedialog.askdirectory() if dir_path: self.output_dir_var.set(dir_path) # 处理文件 def process_file(self): exe_path = self.file_path_var.get() output_dir = self.output_dir_var.get() if not exe_path: messagebox.showerror("错误", "请选择一个EXE文件") return if not os.path.exists(exe_path): messagebox.showerror("错误", "选择的文件不存在") return if not output_dir: messagebox.showerror("错误", "请选择输出目录") return if not os.path.exists(output_dir): try: os.makedirs(output_dir) except: messagebox.showerror("错误", "无法创建输出目录") return # 获取文件名和扩展名 file_name, file_ext = os.path.splitext(os.path.basename(exe_path)) # 添加随机字符串到输出文件名,确保每次不同 random_suffix = hashlib.sha256(str(time.time_ns()).encode() + os.urandom(16)).hexdigest()[:12] output_path = os.path.join(output_dir, f"{file_name}_protected_{random_suffix}{file_ext}") try: # 更新状态 self.status_var.set("正在处理文件...") self.progress_var.set(0) self.root.update() # 计算随机增加的字节大小 min_size = self.min_size_var.get() max_size = self.max_size_var.get() if min_size < 0 or max_size < 0 or min_size > max_size: messagebox.showerror("错误", "请设置有效的字节增加范围") return # 根据随机性强度调整随机范围 strength_factor = 1.0 if self.random_strength.get() == "高": strength_factor = 1.5 elif self.random_strength.get() == "低": strength_factor = 0.5 adjusted_min = int(min_size * strength_factor) adjusted_max = int(max_size * strength_factor) random_size_kb = random.randint(adjusted_min, adjusted_max) random_size_bytes = random_size_kb * 1024 # 复制原始文件 shutil.copy2(exe_path, output_path) # 计算原始文件哈希值 original_hash = self.calculate_file_hash(exe_path) # 更新进度 self.progress_var.set(5) self.root.update() # 根据选择的模式处理文件 if self.process_method.get() == "safe": self.safe_modify_exe_file(output_path, random_size_bytes) elif self.process_method.get() == "enhanced": self.enhanced_modify_exe_file(output_path, random_size_bytes) elif self.process_method.get() == "standard": self.standard_protection(output_path, random_size_bytes) else: self.advanced_protection(output_path, random_size_bytes) # 后续哈希计算、进度更新等 modified_hash = self.calculate_file_hash(output_path) self.progress_var.set(95) self.root.update() if self.verify_exe_file(output_path): self.status_var.set("文件处理完成") self.progress_var.set(100) messagebox.showinfo( "成功", f"文件保护成功!\n" f"原始文件大小: {os.path.getsize(exe_path) // 1024} KB\n" f"处理后文件大小: {os.path.getsize(output_path) // 1024} KB\n" f"增加了: {random_size_kb} KB\n\n" f"原始文件哈希 (MD5): {original_hash}\n" f"处理后文件哈希 (MD5): {modified_hash}\n\n" f"文件已保存至: {output_path}" ) else: self.status_var.set("文件验证失败") self.progress_var.set(100) messagebox.showwarning("警告", "处理后的文件可能需要在特定环境运行") except Exception as e: self.status_var.set("处理过程中出错") messagebox.showerror("错误", f"处理文件时出错: {str(e)}") finally: self.progress_var.set(0) # 每次处理后重新初始化随机种子,确保下一次处理的随机性不同 self.initialize_random_seed() # 计算文件哈希 def calculate_file_hash(self, file_path): hash_md5 = hashlib.md5() with open(file_path, "rb") as f: for chunk in iter(lambda: f.read(4096), b""): hash_md5.update(chunk) return hash_md5.hexdigest() # 安全模式:仅添加正常数据 def safe_modify_exe_file(self, file_path, additional_bytes): with open(file_path, 'ab') as f: # 根据选择的应用类型生成对应的数据 app_type = self.app_type.get() data = self.generate_application_specific_data(additional_bytes, app_type) f.write(data) # 增强模式:优化PE结构 def enhanced_modify_exe_file(self, file_path, additional_bytes): try: pe = pefile.PE(file_path) # 更新时间戳,使用更大的随机偏移 pe.FILE_HEADER.TimeDateStamp = int(time.time()) + random.randint(-86400, 86400) # 随机偏移1天内 # 随机化更多非关键的PE头字段 if self.random_pe_layout.get(): pe.FILE_HEADER.PointerToSymbolTable = random.getrandbits(32) pe.FILE_HEADER.NumberOfSymbols = random.randint(0, 2000) # 添加更多随机化字段 pe.OPTIONAL_HEADER.MajorLinkerVersion = random.randint(1, 25) pe.OPTIONAL_HEADER.MinorLinkerVersion = random.randint(0, 99) pe.OPTIONAL_HEADER.MajorImageVersion = random.randint(1, 20) pe.OPTIONAL_HEADER.MinorImageVersion = random.randint(0, 99) # 添加正常附加数据 self.safe_modify_exe_file(file_path, additional_bytes) pe.write(file_path) pe.close() except Exception as e: print(f"增强模式执行: {e}") self.safe_modify_exe_file(file_path, additional_bytes) # 标准保护:添加合理区段 def standard_protection(self, file_path, additional_bytes): try: pe = pefile.PE(file_path) # 随机决定添加的区段数量(1-4个),增加变化性 section_count = 1 if self.variable_section_count.get(): section_count = random.randint(1, 4) # 添加多个随机区段 for _ in range(section_count): # 创建新区段 new_section = pefile.SectionStructure(pe.__IMAGE_SECTION_HEADER_format__) # 生成随机但合理的区段名 new_section.Name = self.generate_sane_section_name() # 区段大小随机(1-16KB),范围更大 section_size = random.randint(0x1000, 0x4000) new_section.Misc_VirtualSize = section_size # 地址对齐,添加更大的随机偏移 base_virtual_address = (pe.sections[-1].VirtualAddress + pe.sections[-1].Misc_VirtualSize + 0x1000 - 1) & ~0xFFF new_section.VirtualAddress = base_virtual_address + random.randint(0, 0x2000) base_raw_data = (pe.sections[-1].PointerToRawData + pe.sections[-1].SizeOfRawData + 0x1000 - 1) & ~0xFFF new_section.PointerToRawData = base_raw_data + random.randint(0, 0x2000) new_section.SizeOfRawData = section_size # 随机选择合理的区段属性,增加更多可能性 section_flags = [ 0xC0000040, 0x40000040, 0x20000040, 0x80000040, 0x00000040, 0xE0000040, 0x00000080, 0x40000080 ] new_section.Characteristics = random.choice(section_flags) # 生成与程序类型匹配的区段数据 app_type = self.app_type.get() new_data = self.generate_application_specific_data(section_size, app_type) pe.set_bytes_at_offset(new_section.PointerToRawData, new_data) # 添加新区段到PE结构 pe.sections.append(new_section) pe.FILE_HEADER.NumberOfSections += 1 pe.OPTIONAL_HEADER.SizeOfImage = (new_section.VirtualAddress + new_section.Misc_VirtualSize + 0x1000 - 1) & ~0xFFF # 轻度代码变换 if self.encrypt_sections.get(): self.apply_mild_code_transformations(pe) # 随机化导入表顺序(如果启用) if self.randomize_imports.get() and hasattr(pe, 'DIRECTORY_ENTRY_IMPORT'): # 多次随机打乱以增加随机性 for _ in range(random.randint(1, 3)): random.shuffle(pe.DIRECTORY_ENTRY_IMPORT) # 添加文件末尾数据 self.safe_modify_exe_file(file_path, additional_bytes) # 更新时间戳,添加随机偏移 pe.FILE_HEADER.TimeDateStamp = int(time.time()) + random.randint(-86400, 86400) # 随机偏移1天内 pe.write(file_path) pe.close() except Exception as e: print(f"标准保护执行: {e}") self.enhanced_modify_exe_file(file_path, additional_bytes) # 高级保护:进一步增加随机性 def advanced_protection(self, file_path, additional_bytes): try: pe = pefile.PE(file_path) # 随机决定添加的区段数量(2-5个),增加更多变化 section_count = 2 if self.variable_section_count.get(): section_count = random.randint(2, 5) # 添加多个随机区段 for _ in range(section_count): new_section = pefile.SectionStructure(pe.__IMAGE_SECTION_HEADER_format__) new_section.Name = self.generate_sane_section_name() # 区段大小变化更大(1-32KB) section_size = random.randint(0x1000, 0x8000) new_section.Misc_VirtualSize = section_size # 地址对齐,添加更大的随机偏移 base_virtual_address = (pe.sections[-1].VirtualAddress + pe.sections[-1].Misc_VirtualSize + 0x1000 - 1) & ~0xFFF new_section.VirtualAddress = base_virtual_address + random.randint(0, 0x4000) base_raw_data = (pe.sections[-1].PointerToRawData + pe.sections[-1].SizeOfRawData + 0x1000 - 1) & ~0xFFF new_section.PointerToRawData = base_raw_data + random.randint(0, 0x4000) new_section.SizeOfRawData = section_size # 随机选择合理的区段属性,增加更多选项 section_flags = [ 0xC0000040, 0x40000040, 0x20000040, 0x80000040, 0x00000040, 0xE0000040, 0x00000080, 0x40000080, 0x80000080, 0x20000080, 0x00000100 ] new_section.Characteristics = random.choice(section_flags) # 生成特定类型的应用数据 app_type = self.app_type.get() new_data = self.generate_application_specific_data(section_size, app_type) pe.set_bytes_at_offset(new_section.PointerToRawData, new_data) pe.sections.append(new_section) pe.FILE_HEADER.NumberOfSections += 1 pe.OPTIONAL_HEADER.SizeOfImage = (new_section.VirtualAddress + new_section.Misc_VirtualSize + 0x1000 - 1) & ~0xFFF # 轻度代码变换 if self.encrypt_sections.get(): self.apply_mild_code_transformations(pe) # 混淆资源(如果启用) if self.obfuscate_resources.get() and hasattr(pe, 'DIRECTORY_ENTRY_RESOURCE'): self.obfuscate_pe_resources(pe) # 随机化导入表顺序,增加随机性 if self.randomize_imports.get() and hasattr(pe, 'DIRECTORY_ENTRY_IMPORT'): # 多次随机打乱以确保随机性 for _ in range(random.randint(2, 5)): random.shuffle(pe.DIRECTORY_ENTRY_IMPORT) # 添加随机数据块,使用随机大小 if self.add_dummy_sections.get(): dummy_size = random.randint(additional_bytes // 3, additional_bytes * 2 // 3) self.safe_modify_exe_file(file_path, dummy_size) additional_bytes -= dummy_size # 添加文件末尾数据 self.safe_modify_exe_file(file_path, additional_bytes) # 随机化更多PE头字段 if self.random_pe_layout.get(): pe.FILE_HEADER.PointerToSymbolTable = random.getrandbits(32) pe.FILE_HEADER.NumberOfSymbols = random.randint(0, 5000) pe.OPTIONAL_HEADER.MajorImageVersion = random.randint(1, 20) pe.OPTIONAL_HEADER.MinorImageVersion = random.randint(0, 99) pe.OPTIONAL_HEADER.MajorSubsystemVersion = random.randint(4, 10) pe.OPTIONAL_HEADER.MinorSubsystemVersion = random.randint(0, 99) pe.OPTIONAL_HEADER.MajorOperatingSystemVersion = random.randint(5, 10) pe.OPTIONAL_HEADER.MinorOperatingSystemVersion = random.randint(0, 99) # 添加更多可随机化的字段 pe.OPTIONAL_HEADER.LoaderFlags = random.getrandbits(32) & 0x00000003 # 仅保留合法值 pe.OPTIONAL_HEADER.NumberOfRvaAndSizes = 16 # 标准值,但可以偶尔修改 if random.random() < 0.3: # 30%概率修改这个值 pe.OPTIONAL_HEADER.SizeOfHeaders = (pe.OPTIONAL_HEADER.SizeOfHeaders + random.randint(0x100, 0x800)) & ~0xFF # 保持对齐 # 更新时间戳,使用更大的随机偏移 pe.FILE_HEADER.TimeDateStamp = int(time.time()) + random.randint(-604800, 604800) # 随机偏移1周内 pe.write(file_path) pe.close() except Exception as e: print(f"高级保护执行: {e}") self.standard_protection(file_path, additional_bytes) # 生成模拟特定类型程序的数据,增强随机性和多样性 def generate_application_specific_data(self, size, app_type): """根据程序类型生成不同特征的数据,确保每次生成都不同""" data = bytearray() # 根据选择的应用类型生成对应的数据模板,增加更多模板项 type_templates = { "通用程序": [ b"C:\\Program Files\\Common Files\\\x00", b"HKLM\\Software\\Microsoft\\Windows\\\x00", b"ERROR_ACCESS_DENIED\x00", b"SUCCESS\x00", b"CONFIG_FILE\x00", b"LOG_FILE\x00", b"USER_SETTINGS\x00", b"APPLICATION_DATA\x00", b"SYSTEM32\x00", b"KERNEL32.DLL\x00", b"ADVAPI32.DLL\x00", (0x00000001).to_bytes(4, 'little'), (0x00000100).to_bytes(4, 'little'), (0x00010000).to_bytes(4, 'little'), (0x00100000).to_bytes(4, 'little'), ], "游戏程序": [ b"C:\\Program Files\\Game\\Data\\\x00", b"C:\\Users\\Public\\Documents\\GameSaves\\\x00", b"TEXTURE_", b"MODEL_", b"SOUND_", b"LEVEL_", b"SCORE_", b"PLAYER_", b"ENEMY_", b"WEAPON_", b"QUEST_", b"ACHIEVEMENT_", b"INVENTORY_", b"CHARACTER_", b"MAP_", b"DIFFICULTY_", (0x000F4240).to_bytes(4, 'little'), # 1000000 (0x000003E8).to_bytes(4, 'little'), # 1000 (0x00000064).to_bytes(4, 'little'), # 100 (0x0000000A).to_bytes(4, 'little'), # 10 ], "办公软件": [ b"C:\\Users\\%USERNAME%\\Documents\\\x00", b"File Format: DOCX\x00", b"File Format: XLSX\x00", b"File Format: PPTX\x00", b"Page ", b"Sheet ", b"Table ", b"Font ", b"Style ", b"Paragraph ", b"Header", b"Footer", b"Section", b"Template", b"Macro", b"Add-in", b"Spell Check", b"Grammar Check", b"Word Count", b"Character Count", (0x0000000A).to_bytes(4, 'little'), # 10 (0x00000014).to_bytes(4, 'little'), # 20 (0x00000064).to_bytes(4, 'little'), # 100 ], "系统工具": [ b"C:\\Windows\\System32\\\x00", b"C:\\Windows\\SysWOW64\\\x00", b"HKLM\\SYSTEM\\CurrentControlSet\\\x00", b"Driver ", b"Service ", b"Device ", b"Registry ", b"Process ", b"Thread ", b"Memory ", b"Disk ", b"Network ", b"Adapter ", b"Protocol ", b"Firewall ", b"Security ", b"Policy ", b"Account ", (0x00000001).to_bytes(4, 'little'), (0x00000000).to_bytes(4, 'little'), (0xFFFFFFFF).to_bytes(4, 'little'), (0x00000002).to_bytes(4, 'little'), ], "开发工具": [ b"C:\\Program Files\\Developer\\SDK\\\x00", b"C:\\Users\\%USERNAME%\\Source\\\x00", b"Compiler ", b"Linker ", b"Debugger ", b"Library ", b"Include ", b"Namespace ", b"Class ", b"Function ", b"Variable ", b"Pointer ", b"Array ", b"Struct ", b"Enum ", b"Union ", b"Template ", b"Exception ", b"Thread ", b"Mutex ", (0x00000000).to_bytes(4, 'little'), (0x00000001).to_bytes(4, 'little'), (0x00000002).to_bytes(4, 'little'), (0x00000003).to_bytes(4, 'little'), ] } # 获取对应类型的模板 templates = type_templates.get(app_type, type_templates["通用程序"]) # 根据随机性强度调整模板使用方式 template_usage = 0.7 # 70%使用模板,30%使用随机数据 if self.random_strength.get() == "高": template_usage = 0.5 # 50%使用模板,50%使用随机数据 elif self.random_strength.get() == "低": template_usage = 0.9 # 90%使用模板,10%使用随机数据 # 填充数据直到达到目标大小,使用更复杂的模式 while len(data) < size: # 随机选择使用模板还是生成随机数据 if random.random() < template_usage: # 随机选择一个模板并添加 item = random.choice(templates) data.extend(item) # 偶尔添加随机长度的空白或分隔符 if random.random() < 0.4: separator_length = random.randint(1, 16) if random.random() < 0.5: data.extend(b'\x00' * separator_length) else: data.extend(b' ' * separator_length) else: # 生成更复杂的随机数据 random_len = random.randint(1, 128) if random.random() < 0.3: # 生成随机ASCII文本 random_text = bytes(random.choice(b'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-.') for _ in range(random_len)) data.extend(random_text) elif random.random() < 0.6: # 生成随机二进制数据 data.extend(os.urandom(random_len)) else: # 生成随机数值数据 for _ in range(random_len // 4 + 1): num = random.getrandbits(32) data.extend(num.to_bytes(4, 'little')) return data[:size] # 生成更多样化的合理区段名 def generate_sane_section_name(self): # 扩展区段名基础列表 base_names = [ b'.data', b'.rdata', b'.text', b'.rsrc', b'.reloc', b'.bss', b'.edata', b'.idata', b'.pdata', b'.tls', b'.data1', b'.rdata2', b'.text1', b'.rsrc1', b'.data_', b'.rdata_', b'.text_', b'.rsrc_', b'.init', b'.fini', b'.ctors', b'.dtors', b'.gnu', b'.note', b'.eh_frame', b'.debug', b'.xdata', b'.pdata', b'.data2', b'.text2', b'.code', b'.const', b'.dynamic', b'.hash', b'.plt', b'.got', b'.shstrtab', b'.symtab', b'.strtab', b'.comment', b'.note.ABI-tag' ] # 随机选择基础名称并可能添加随机后缀 name = random.choice(base_names) if random.random() < 0.8: # 提高添加后缀的概率 # 添加更多样化的随机后缀 suffix_type = random.randint(0, 2) if suffix_type == 0: # 数字后缀 suffix = str(random.randint(10, 999)).encode() elif suffix_type == 1: # 字母后缀 suffix_length = random.randint(1, 3) suffix = bytes(random.choice('abcdefghijklmnopqrstuvwxyz') for _ in range(suffix_length)) else: # 混合后缀 suffix = (str(random.randint(1, 9)) + random.choice('abcdef') + str(random.randint(10, 99))).encode() # 确保总长度不超过8字节 name = name[:8-len(suffix)] + suffix return name.ljust(8, b'\x00')[:8] # 确保正好8字节 # 轻度代码变换,增加更多变换类型 def apply_mild_code_transformations(self, pe): text_section = None for section in pe.sections: if b'.text' in section.Name: text_section = section break if text_section: data = pe.get_data(text_section.VirtualAddress, text_section.SizeOfRawData) if not isinstance(data, bytes): data = bytes(data) data_list = list(data) # 根据随机性强度调整变换程度 transform_count = len(data_list) // 200 if self.random_strength.get() == "高": transform_count = len(data_list) // 100 elif self.random_strength.get() == "低": transform_count = len(data_list) // 400 # 限制最大变换次数,但增加上限 transform_count = min(200, transform_count) # 随机选择位置进行更丰富的轻微变换 for _ in range(transform_count): i = random.randint(0, len(data_list) - 1) # 增加更多变换类型 transform_type = random.choice(range(8)) if transform_type == 0: # 加1 data_list[i] = (data_list[i] + 1) % 256 elif transform_type == 1: # 减1 data_list[i] = (data_list[i] - 1) % 256 elif transform_type == 2: # 与0xFF异或 data_list[i] ^= 0xFF elif transform_type == 3: # 左移一位 data_list[i] = (data_list[i] << 1) % 256 elif transform_type == 4: # 右移一位 data_list[i] = (data_list[i] >> 1) % 256 elif transform_type == 5: # 加一个小随机数 data_list[i] = (data_list[i] + random.randint(1, 5)) % 256 elif transform_type == 6: # 减一个小随机数 data_list[i] = (data_list[i] - random.randint(1, 5)) % 256 else: # 与一个随机数异或 data_list[i] ^= random.randint(1, 255) pe.set_bytes_at_offset(text_section.PointerToRawData, bytes(data_list)) # 增强资源混淆 def obfuscate_pe_resources(self, pe): try: # 遍历所有资源条目 for resource_type in pe.DIRECTORY_ENTRY_RESOURCE.entries: if hasattr(resource_type, 'directory'): for resource_id in resource_type.directory.entries: if hasattr(resource_id, 'directory'): for resource_lang in resource_id.directory.entries: data_rva = resource_lang.data.struct.OffsetToData size = resource_lang.data.struct.Size # 读取资源数据 resource_data = list(pe.get_data(data_rva, size)) # 根据随机性强度调整混淆程度 step_size = 200 if self.random_strength.get() == "高": step_size = 100 elif self.random_strength.get() == "低": step_size = 400 # 增加更多变换类型 for i in range(0, len(resource_data), random.randint(step_size-50, step_size+50)): if i < len(resource_data): # 随机选择一种变换 transform_type = random.randint(0, 4) if transform_type == 0: resource_data[i] = (resource_data[i] + random.randint(1, 5)) % 256 elif transform_type == 1: resource_data[i] = (resource_data[i] - random.randint(1, 5)) % 256 elif transform_type == 2: resource_data[i] ^= random.randint(1, 255) elif transform_type == 3: resource_data[i] = (resource_data[i] << random.randint(1, 3)) % 256 else: resource_data[i] = (resource_data[i] >> random.randint(1, 3)) % 256 # 对部分资源进行块级混淆 if random.random() < 0.3 and size > 1024: block_size = random.randint(64, 256) for b in range(0, size, block_size): if random.random() < 0.2: # 20%的块会被翻转 start = b end = min(b + block_size, size) resource_data[start:end] = resource_data[start:end][::-1] # 写回修改后的资源数据 pe.set_bytes_at_offset(data_rva, bytes(resource_data)) except Exception as e: print(f"资源混淆错误: {e}") # 计算PE校验和 def calculate_pe_checksum(self, pe): try: with open(pe.name, 'rb') as f: data = f.read() checksum = 0 for i in range(0, len(data), 2): if i + 1 < len(data): w = (data[i+1] << 8) | data[i] checksum += w else: checksum += data[i] checksum = (checksum >> 16) + (checksum & 0xffff) checksum += (checksum >> 16) return 0 - checksum except: return 0x00000000 # 验证EXE文件 def verify_exe_file(self, file_path): try: pe = pefile.PE(file_path) pe.close() return True except: return False # 关闭窗口 def on_closing(self): if messagebox.askokcancel("退出", "确定要退出程序吗?"): self.root.destroy() if __name__ == "__main__": root = tk.Tk() app = ExeProtectorApp(root) root.mainloop() 用户希望每次输出的程序减小TEXT代码段熵值 相对上次输出的程序静态特征都有很大差异 绕过qvm静态分析查杀 2025-07-10 09:57:50 恶意软件(HEUR/QVM10.2.95BA.Malware.Gen)MD5:f4722f1fd2c14e65558207bd3415ed0a已删除此文件,如果您发现误删,可从隔离区恢复此文件。 2025-07-10 10:07:34 恶意软件(HEUR/QVM10.2.95BA.Malware.Gen)MD5:3f519280c806a531c2fd494f392add06已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_2587963335de.exe 2025-07-10 10:05:41 恶意软件(HEUR/QVM10.2.95BA.Malware.Gen)MD5:ad5bf7bf68759eaa5f25587d0e977320已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_4df5eb7b2b48.exe 2025-07-10 10:04:55 恶意软件(HEUR/QVM10.2.95BA.Malware.Gen)MD5:ce816bbac00149bda721dec01d623773已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_5795dc64119b.exe 2025-07-10 10:03:42 恶意软件(HEUR/QVM10.2.95BA.Malware.Gen)MD5:224798374219b4fc6046b1da7f4eb632已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_17f73c7eda70.exe 2025-07-10 10:03:16 恶意软件(HEUR/QVM10.2.95BA.Malware.Gen)MD5:cb3c1534897e38110aeeea2aa71c9d5a已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_eb5a679318ab.exe 2025-07-10 09:57:50 恶意软件(HEUR/QVM10.2.95BA.Malware.Gen)MD5:f4722f1fd2c14e65558207bd3415ed0a已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_7e5282a2592431df.exe 2025-07-10 09:56:51 恶意软件(HEUR/QVM10.2.95BA.Malware.Gen)MD5:63d542dffd607fda49b4ca8880069471已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_0269d064dca0e33d.exe 2025-07-10 09:56:23 恶意软件(HEUR/QVM10.2.95BA.Malware.Gen)MD5:c7edea82a1abefe84502a88980b86356已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_98f344f33553ad04.exe 2025-07-10 09:55:20 恶意软件(HEUR/QVM10.2.95BA.Malware.Gen)MD5:8bb531f637cdae52b17ecab88b28b88d已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_32027bfd1919.exe 2025-07-10 09:54:37 恶意软件(HEUR/QVM10.2.95BA.Malware.Gen)MD5:f03cac215d14019e60e97a0a9dff564a已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_dc0e4952f25d.exe 2025-07-10 09:54:16 恶意软件(HEUR/QVM10.2.95BA.Malware.Gen)MD5:79f41c9ca52f656e0d14d7f99a7c0361已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_d0d314c24b51.exe 2025-07-10 09:36:22 恶意软件(HEUR/QVM10.2.958D.Malware.Gen)MD5:7a8102febd74e861b0f798e130e3bbdf已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_3766493edd57.exe 2025-07-10 09:35:48 恶意软件(HEUR/QVM10.2.958D.Malware.Gen)MD5:ceaa9c2e0ae64a9242eae202c127970a已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_e6c9d5d7be4e.exe 2025-07-10 09:34:47 恶意软件(HEUR/QVM10.2.958D.Malware.Gen)MD5:7cfe0a2c5d8fbce0d86a01613bef166e已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_e3d311d2cf8e.exe 2025-07-10 09:31:31 恶意软件(HEUR/QVM10.2.958D.Malware.Gen)MD5:416cfe49e997da0d85efc5eac7cd33f3已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server.exe 2025-07-10 09:18:33 恶意软件(HEUR/QVM10.2.958D.Malware.Gen)MD5:1dae68d1345fe77c6427f8f36ef257a3已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_100a4418.exe 2025-07-10 09:17:27 恶意软件(HEUR/QVM10.2.958D.Malware.Gen)MD5:22be3cbbdaf6adc964323e6cd7b1830e已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_a423e3f7.exe 2025-07-10 09:16:34 恶意软件(HEUR/QVM10.2.958D.Malware.Gen)MD5:19811a97d4f619ccc30fbd9355710c94已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_42c8f493.exe 2025-07-10 09:15:28 恶意软件(HEUR/QVM10.2.9551.Malware.Gen)MD5:603aa37cafcc1a97ba7d3b6944e7c44f已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_1870a4d5.exe 2025-07-10 09:15:28 恶意软件(HEUR/QVM10.2.9551.Malware.Gen)MD5:f4f3aaa34d45f6d392ab02d469529fa2已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_6ef68774.exe 2025-07-10 09:02:21 恶意软件(HEUR/QVM10.2.9551.Malware.Gen)MD5:d963a3b990e387d512c1505cc1defc2d已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\appdata\local\temp\vmware-odaycaogen'\vmwarednd\4e3bc625\server_protected_b162fbecda18.exe 2025-07-10 09:02:20 恶意软件(HEUR/QVM10.2.9551.Malware.Gen)MD5:d963a3b990e387d512c1505cc1defc2d已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_b162fbecda18.exe 2025-07-10 09:01:55 恶意软件(HEUR/QVM10.2.9551.Malware.Gen)MD5:6613a15d293baa581027037940f38123已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_0c7cdb86447c.exe 2025-07-10 09:01:13 恶意软件(HEUR/QVM10.2.9551.Malware.Gen)MD5:6e784a5d6e4c5cd3e102341571186c02已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_91770c617ba9.exe 2025-07-10 09:00:26 恶意软件(HEUR/QVM10.2.9551.Malware.Gen)MD5:ebaba98d0a9815b21c637a4f2cb2fea8已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_c5080514e48f.exe 2025-07-10 08:59:26 恶意软件(HEUR/QVM10.2.9551.Malware.Gen)MD5:3e2c4fc7477c93fe7446866dfa0c0d2a已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_917a4f029497.exe 2025-07-10 08:59:00 恶意软件(HEUR/QVM10.2.9551.Malware.Gen)MD5:fce5281cf86dca7226f2dde2764ceee1已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_e3ea24fe8204.exe 2025-07-09 20:41:17 恶意软件(HEUR/QVM10.2.9279.Malware.Gen)MD5:28391ff043ea6b95c0a22c42b827fd13已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_d94e61705c0d.exe 2025-07-09 20:39:48 恶意软件(HEUR/QVM10.2.9279.Malware.Gen)MD5:0dbbcc8071f854fa75fe485c055e9cb0已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_df81323ec213.exe 2025-07-09 20:39:17 恶意软件(HEUR/QVM10.2.9279.Malware.Gen)MD5:1d3e05e3d94613d048aff46974c9eae5已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_08d18b05d328.exe 2025-07-09 20:38:43 恶意软件(HEUR/QVM10.2.9279.Malware.Gen)MD5:cd26422e884d3110bc75080d27c1c069已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_e06bbef612d8.exe 2025-07-09 20:38:08 恶意软件(HEUR/QVM10.2.9279.Malware.Gen)MD5:8b12ffcdf948eca4636292ee8399b390已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_61f1aadc6f43.exe 2025-07-09 20:37:25 恶意软件(HEUR/QVM10.2.9279.Malware.Gen)MD5:7eb6481e075f5eeb5465e6395b55db92已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\users\odaycaogen'\desktop\server_protected_789d8774794b.exe 2025-07-09 18:54:48 恶意软件(HEUR/QVM10.2.9231.Malware.Gen)MD5:5c7d6aec8656f4850e914408c8779c35已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\program files\360\360safe\softmgr\whitelist\myapp_36171265\454336_protected_9d9289dd.exe 2025-07-09 18:54:43 恶意软件(HEUR/QVM10.2.9231.Malware.Gen)MD5:5c7d6aec8656f4850e914408c8779c35已删除此文件,如果您发现误删,可从隔离区恢复此文件。 c:\program files\360\360safe\softmgr\whitelist\myapp_36170329\454336_protected_9d9289dd.exe 2025-07-09 18:48:32 恶意软件(HEUR/QVM10.2.9231.Malware.Gen)MD5:8b18925bca5cf9c236bae2ed5f39e67c已删除此文件,如果您发现误删,可从隔离区恢复此文件。 输出完整源码
07-11
### RGB-PPS24B 技术定义与应用场景 RGB-PPS24B 是一种与图像处理和显示技术相关的格式或协议,通常用于描述像素数据的组织方式以及传输标准。以下是对该技术定义和应用场景的具体分析: #### 技术定义 RGB-PPS24B 通常指的是一种基于 RGB 色彩模型的像素数据格式,其中: - **RGB** 表示红(Red)、绿(Green)、蓝(Blue)三原色的组合,用于定义图像中的颜色。 - **PPS** 可能代表某种特定的像素打包标准(Pixel Packing Standard),具体取决于实现环境。 - **24B** 指每个像素使用 24 位(3 字节)来存储颜色信息,每种颜色通道(R、G、B)各占 8 位[^1]。 这种格式确保了每个像素的颜色信息能够被精确地表示,适用于高精度的图像显示和处理场景。 #### 应用场景 RGB-PPS24B 的应用场景主要包括以下几个方面: 1. **视频处理**:在视频编解码和图像渲染中,RGB-PPS24B 格式常用于中间数据的存储和传输,尤其是在需要保持高质量色彩还原的情况下[^2]。 2. **嵌入式系统**:如引用中提到的 ISP(Image Signal Processor)初始化代码片段,RGB-PPS24B 可能是图像信号处理器支持的一种输入或输出格式,用于处理来自传感器的原始数据[^3]。 3. **显示器驱动**:某些 LCD 或 OLED 显示器可能直接支持 RGB-PPS24B 格式的像素数据输入,从而简化了从图像处理到显示的流程[^4]。 4. **图形渲染**:在计算机图形学领域,RGB-PPS24B 常用于纹理映射和三维渲染,以提供更真实的视觉效果[^5]。 #### 示例代码 以下是一个简单的代码示例,展示如何在内存中构造一个 RGB-PPS24B 格式的像素数组: ```c #include <stdio.h> #include <stdint.h> typedef struct { uint8_t r; uint8_t g; uint8_t b; } RgbPixel; void createRgbPps24bArray(RgbPixel* pixels, int width, int height) { for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { // 示例:生成渐变颜色 pixels[y * width + x].r = (uint8_t)(255 * x / (width - 1)); pixels[y * width + x].g = (uint8_t)(255 * y / (height - 1)); pixels[y * width + x].b = 0; } } } int main() { const int width = 640; const int height = 480; RgbPixel* pixelArray = (RgbPixel*)malloc(width * height * sizeof(RgbPixel)); createRgbPps24bArray(pixelArray, width, height); free(pixelArray); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值