隐藏 C2的几种方式 安全博客

隐藏 C2的几种方式

本文已加密 隐藏加速你的 C2 e119eb1da295c95738b0b95b5e5abff8d58a645e5116fafddafced491e4a2ac56ccb54ffa4f53d2dba55e821199cbf2287a8d2e8373891e601a016b5f1d3bc745d4380180cf12d806056e36b5c2c9918f4096e44a2fdff212195c2de14d5da714bbcf8a5ace5e0e004d00d1dfdb10f169e58e63f6ad309a82069af66bd4b99bbc9ec952cca43f2cf3b66937b9b4668090a556f3b66ddb0fa0f4712a888c1594e285ebab44b6a8f2ca2c2d9a10f374a531c93234d6c4128b4927fd13aed85c5785c4566421033a23864f825504bb014856494be24434cc18ef4e24b44343442df6d27a0b3521909a808ad3d8723c633c994830d135f516a10fc129aa19140543fd2aa19555cf7342500470aefaaf16b8aecd74b0370bf9b97a131fae0801949a5ab36bb314c99cb99fdf52830a3d3e8f7db52e76b019bf7ebbcb2d94861b88fa4a9d6617135511421c61918c1b2b55602c33c91d4e76f27dacf74cdbeadfcc29f89e64eab13625c7290916a54cb8686d5c7d909fda0a7feeceb72a0ea7c2d9854a49b991bcd8518df339ca938ed62760e0731b337e72f5b23e1bb1e28f5ee46ebc6f8aeb92d07400f2855c8207e79dc1af2379ccb780bd91f81a6772ade317a1276d5e158869f9cf863992a6c24a96e11b8b32347d20492178b53bfb754f580df31f1068dcc71f7f3abaac1d9c6d60b256df81368c0518bf9b6d7ff246d5a507fc7c9577919472a630f4a65bd728ceae6dc0a56916c9291595206917d7f815c0ed1797e6778da9f77c7591993b1b0ea203bb23bf06d529c85f4284553b2aabc506800cf5f7d28b7c7aaacac357f3c54fbd034c1a82fcd33e4627cec654ecd95f3b58b8209126813999e14d1fc043bd7a67a5dabd97bd28f7630631cebd8c11560163b88aea98f7ce1ccd46f5aa028892deb90329188da5821a2fb887e94d737900cbcd491b5f511787b186e45ba54cfcece9758ff211f1e9269fcddffc47b5c7e7cffbb3aa1bebb1730405fd9b84971750cd035d5aa1182b6a53f9e1eaec2471173e643a2f5d75968ac5daa44e485202ec1fee72ac196c3f0604eaeac36aa60e874169e9c4faf326dd67dc7587fdf0fa3b0d2d3672eecbad825aec98e98abe85dd38aec53fa38a09bd58f83473a5df410e5572675026e40d95207b32a561cb7cd71546be9f66d56130206bec4bb0d24ba89c88034fdb7f4a199810e6b813df7c1cb6be2e26853fa2c258b5125bbb40f9966c739e7f4080841928d79b8c9e61817fb13ddb6b183ce3b764dd02419dcddf04eac7725916466706ae70aefe18f8c0178e3845872a11c576f6a2342b21000a376dc0cf2befdfc4b077a583dc4dbeed518c014210694d04742c347334ca9c0fad739993a2bf8a72d9051115f0ec7050ee60cc277a2b8ef3ba3e70f75ca684908c4697a5d53e58520cd2cdaf2c32f4916c475dcc91414e88c4f19b8b72dfbe376ae50a87b03964a5fe1887a69f05856393be8610b09c70e05b90f260454dd881873666caa416edc4c9736c28b120cbee19c36ce45998f240bbb5422893ff2449678fad552682d9d3d43b785fdd0e7cd9cf44a60304a10a871bf6078ad581c0f85a06682e1aa4f1d4182b8bcb52484c6a33c62b5a1e5ee7be11336329a9281771417b87af3b964e906d3582fba6d4312707a2c551509a494d1aac9d76ae89e93eec18aac0aa9d74bdc97eea13ed1cd91a4b6a032e823c509dc6e9ec8a82515eb6d88269456f6c51c2bdfcf5d536ae6a0480e8cd0ba80016b6595e5a1655686b455219a24f8fd0d8ffdb5b4152165b655bc4f80a2ff7b08c91c4bc20833bee7b4e708db2ff10873252d71eae0ac53e911db5cdb8dad4938bed945e87a1787fe331a715e48f4526d90cb527756b2b9885c9ca8107750cb4ad9ee3959cf181b87b6ff0530fd06b4174f154728f1a3da3ee0e0decf7c1006bd7531b58630bd74fc75ecb3066dc82c00e705ee8979457ef0a4e1e56cfe4f481ce5e3edfd2e42c1a7b88050a77142be347f3e694dc653deebb5e1694b913ceb2d88b8ce3bcab717061d7ca14565c78daf4ffd067d642aba6a7fcad21d336380a13dc72fdb6ed7f60816be4ec8bf6e067eed753777866c13c0c13adac37dbbbea0560ae01c635b089a75cf03cf483548618673c35ebf23881dbf89a2d19bef34f8cd9c999538b018a7ce895cddd8b24bc7fa36d77a748f51a9d903863518000e440c53f7410de3edddfa15edce9b7c2b110dd5d955cd013b5a1d6542b7ab8b5a1550397976d8f4c4230d3874fe529a2166fc035861e232d6372d29eef559e767c55210c34e00812b89e3759ddb97e2c19d548f4ee97fde7a736151f49ed0bd3d0854b8f77b96a4f397dd15c24ea5f84155e8e90873628e62b1cd44a8f95be05f581f86c7a6b20f2048c4a7a60b7b2aa093356487226a38f06c84dd567b969fb9b5c0e35df645965dc3e9cbe1c247d3ebf2c05d7b2dcba514880288025ea053b5c9b6455e761a341998d28994e9e02bbebc51422d96d9699a75d1ae553bfc2e21b52191e4fcefb8da237fb44ce4f87334ea7e5433695caf0dcfce8261f28ddf4f701333abf333f24348ec05ae6ed61ffed5132bd15294a9a8015a484103baa5424c54407f36997b9d501b70e2315f7be09e03d0565f29186ca5150888cded1bf00c322062bb90cde5b7a6214348218ed197d64e491e1a24f76638119e9002fb7d20e585c9bd5eb0d0c9deda8c4aa6fa33f56875e7b9860cd4e57b3adafdb50a343b58c7694ac0f3f4e95b0d077de1620bcb73ea46cdec96b2ce295aad844333113ebf079ca2cd65ca6e4e0bd1d3af669327659e1f18ee2363631796d3682df0fc4a70c56f91c01a974a8a7e5ef253c2c1823d80ad357cee3c97b99f7ab3a55407979b2b4d2bd0342af21f2ab6ad12c0c58c6828ee4855638c611ea0e683f7715fa5723544159706c65b6804067d8ce1c43e764ba5993725f18157c2b732b24fda86752dcdb80fd7de3edebaa3428e08807831b4c0db52eef25eaccb2c89d1e735ad459e27f65bc9457d54f1fbb73f8c1e029b3383f71e93e3ee99cbbab764e0ed9e1ff2cc290ae1057f97cd7b66a629cc1769fd99f23ead1b31f6d87e434a677ae2d0ed7819cd9a473138eea9db49b38d685480f890eda2b136c89702621682291fce860e133d1ad80eeaa5fc945705593de8e52470fdf51f42e6d7d029274abacb7774fa3c3e3b193337b432fa285139ad153f6aee3e492d40514d8a517f337fe28ab57f8fdc8d3e6590113649ae8aa3ab12d73825ec6ba738dc7e61a56043b7ed1fb0841e549719c0979e95870900a8ea53c7f539733b96c657e4ff5476c5105bfc646b68f3a96388396c3fca4f1f2ca36d87154c1885a404a9ac2e1e692e48823cc59f91449a3433d0221b642c7b5c1ddc20fce162778f1021c87df6b8224e488b2f254eb22cffcc8fb7d9f175e9a0deac46a972fd04b45257a7e8d5643fecf8172e5448839b60a67facdb65bde0c21bdc7cac17d051b380349da72e2063189966b1825e408cac2e33f478ad1d174b1f61c522a1d0455ad415da05af3406fd29fdd9aed5416ee2a5cda4a972be56c31397faa933a6218db4fdb102488dcf5cf4a58be532b4490046cd7c1be2a63c133e174240933daaceecc205beda949e17f5404d0acf987a221cdae3836b68ebf833b59b0ef2192c67b10de8891e1867686876b9d0b65415358884da286c950daebfbd16e10cd16e998969b46c8af666dc48161c618ebe963434495f0ede1f9fccf442be169e3e9783fd55dc5793f567d8cf1f5d5bacf272d2648dff3f95a327cd395d0c9fd75466917b479466c64710f94f1be94d9c20266b0546e547ec855510df694f97bfc3c2bfbf3982a0fbdb8ad92ef08ac24f67723ade743be5575b3a0dd6606739848180880476844ac74718c35f41f5094335e847598f56e8f6854eed8fb0714efe20f4830f9febf1f1708321aae1ac1fa4f840b46039e558dcd07289433d6ab47f9e0a1810608aa10ea54dbbe084b2ba8fa01f482a62b369dda26b0c0d068df66d1f54a43b3009182d3bcafda2b87acd69c5be74e0bdbbc833f4d72bbff2a7cb84080e8e52e1555d651d8ab61fd885355e97da4e7cab9cf6cca87c63409c062f9994c11b8481ac8a46f363a3b1c5a263c0f621fc2d71e9b1cbfa5c63807f33b3446f2707a068561c053bc795c6d0d20dc8abd2fb54cbe30c43d1b7afaf08f8116fbef31053775846d9e5afca5dd07f5c038c8ed48e5d53ca07f84d9538279a5edb11c17ec79a3bf15ac2435c6662ac0ed09408824fcb66187f263b7d1abcca266248ddfb3b29454ced3ea8e19f66467f057a8391b2b5c92a262081abe6dd97d412317789aef9a7c59ccebea5f026019b9c91cce35988fdc3f287675d76bf95faded4c2af7336f50a100d642a769efc86deb04f1ffbac6f34e762cba115f430621e13c0f514e29fffd5b95684be58403f8df83f498f5987d542ca7b0868676c327becf488ed788c6f7188bec46132e2d8581b50390cc096b2ae0dc8907cf230be5152df7431f5277e02f92ac53e24753f21198d0739fbd082f8ab6872b347c55f15eca7597973c52a06b9654619f7d4d0ef6ef4bc553d15150a4bf87216c1631fcff7544b88d89a3ba5f68c91e4d89ba62167112f126b3a812c5f1a1b87158d8c8b19e813d3ae05b5356a50c72238490a0381afcc8cb5a120f70e896cfb860bcca605edde837720fbb733c528707924edc88bf482d41b9ce01097bec42dfffea1070eb3e31fecc7c71440335b86e825292a3f32bb1e019c7ae95012824e3fe9b7a75323db6c90a1a1b454f91880aeee00a861cd89df3afdce69de513263463959766fbaa11f9ba054735ace2d95ffb5dcce6006b8382d8f6399c3630a164af366dae1a35936faa847160e54f802a0efc9ecb63259d3e2b0abe980234305088402857264390553cd00bff71840712b542ea0e793ab9be298433ccce76644c01fdbd9d2d479e6a006392b86f4303ffe48b5a9b418ac8b66635cf4e84c985d8be19e295df6b2097f03e62043c28f85e6d0b6f4712f6e9df720fbb011b22a684f8617c6f5d2c7e6ab39d399dc2014e2c19d96eeffd82ef240d58cc9ced6eb60b234a17097b3897e49fb58b67354676668731463e66b0abac54d4e5858947598d36780303d643a6bc121d3b97690778c600481ad6a5a93b121bfd6e74ef30be908cfa61b437d59271c7c41be8fa85cbf7ac37fd9b7300b0745fae5159a0f5f0ec4e94c97451e551f9c2e7caff516bd1af052f2e93c1c00fd98a921d3a4cd882c717b83f35df1c2ee51127c0e8721a720d61bc336fd7f5c1d83c5f251d82f39718f550dc1e65a5d0b405fc9052896a751f5c8e1bbf782c813f5525f488933f57878e3c3184847c280b4c082deae01d212c8e7c9af863a6db59edd4059b78ba3d00792392e5a94e64a90ca4de554f78c36000a267969e6b0c685302afa7bd3d1e283cd42ecfb935d9cc6e60dc9d3dfb470356020bffbfdc7481f67c12a45e75c649787ea889aab8e2fbc53a724e505a039618a33890d9a8d95bea8eec8dda249c836993b9b09dc5eef45b3846bc8f5e7b4112257c16bd9efa76f3e03b75da630a963cb172bcf1cba9dd9cdec394e613466b17e947b0bb9f041125ac1792053db4ee82a9291c7cbd944664a9f0188acfe921967adfe803026b0e2e4f807885dd825e5f16a1603f6e6d63486a4cf7e192a4fb620e5377bd5cf0d161bb8cb64639be18935c0c3fe3e5ba4fb98e4e764769219c4cffaf5adcc81330ecf76847685e282c5699bedbb725386535655b8742eecfe09701e02c9ebc41199dd4d1cbd06b380af451757254f7d3f07a05fa706000254dcb781b1d90d7366c3181b84e5e6cfa93da9c6d63a5355dca4f22b9a273e67e08734080cdb48be0e1707c57f52cab14aca0393dbd67625888f86812375d970fa6a382da62c609aaffd11b404164b025e34ab0da54948ce42b373fbe80de4c18c4a34ce7cb337b14bc0436c0c3f26bbe7621f4fcf282da468b4ef44fa8cfaca61bb881bd467dd2e2da229f2e8f7b04277d11de791cb921d472e74337aaa89623ec2f5b375d2028c38bd599b5255ffc1440a62b0759e169d5e47ac13f4cc31f50305e95f5ac744ec5d13cd668a773ee1af20ec3ceaccde9800f0f2e21e729371115d7042c49b9ebb40c26bf1a460c827630378c82292607ec4e09645c6aec67d083edcd7537add001e838756a402ca36b9838cf8030926400aed248767d8f3fa3bc4256da968ae3290daedf82073a32e09c88ffe327a58eeb1fdcf32d7a453a850faa3d6fd5f10c7ff3c90161f351034253d1f0c3631e91988d18f55c178f4c689a0c6e51871bc9e5cbf5c952d4eb7aa57c768c0743d12248451efbab1b4e5536cd480a23364a53f6025e22a03b369da13fa50f31b40bebc1f085ce5e6e1ee38ce29f3d22166d4d3b3b63c8cee55353cecc45b0e18b2f15b0c695290312ea98f19e863b2e72e00027b76fd701d0c4b9127c680df4fd068323f6e13e1adc98a0f4cbcc4215d98c97ce7be6b774c93fff2263774f28ad9e9e5445f707119cafb60cc38e1d9df03a38725bf0f0c630013c85de5823c266b995026ebca29d0d3ed0d084fe6cb3d6536f048556228652714b1efd08cf7b29221aa076976adedae99567b93f6fd11a1c77d8aea68793c86c475da999c7484dddcee9e18f64c82110de236271f09ce0ff4cff96c359fa1deda9f9b034d55b91c36d4a175d026359c15a7a8e3884ffac3e76a27783788794b3205a63a94b05ce0dabe3548eb1d098063c694e66c99d2682ef7ac443640e222e1f9bcefa4bc03fefd31e4be15fbc6911ba841c5d981010d250e0eba92ff802ba639fe340be6cfdd16a8c5633ce11eeb6d9ce48b5efbb395391c6cdb455542f6def0ae49d3c5d53710cf86f4493ddb731b0aab9a4c2927c16ad74ffaac3c926c9bce24dd0b3d9456d24dbdacd35698123d7b77b4f1754032bdc78cf56e6f7bebe96c0ae177a4a504a4bd3e587f64335615246a1d940c512ed4a50f07d6dc84487aa4505cd76d524393fe1b988ea3efde702436029472282ba9a22804275b3790dfb30e51f8f25d1f1ca335f316312c84a5345f39223ee374e3f435b8fedf5dd717d01b63e7cb9aeb815526870220e5d2a85d7d377ea48317f1599ca94938d58ed4eb87f1caa2feadca89712f879654b634e27a12a2282011cb1c13aba75f80e74e9f80cf225c23a748aff9224ff175a291a397b230de3e6ce53f9dbb5f3c48ca4a14971d5e40ccfd84aca5fbd686e318d2dcc0f20dfff45cef2f8f1b806b159c4cb3421d50813eefb4ff22c52f43284792b74485ced93fa157c8b05445ddc734dcca8a88fd4edc62125c12083cf982df9289b15f0ab0c14a24eea145522ef2109425275bc49994208bd4b635e42fca26f09693f998f381509f9a4ccb7afcaec1773bcf9abdc2ff2b4c4be0a814eecd2760339838595c4d1b629700fdc5d2bee15dca41bf197040c95d16546feae2bd5e762a5389c1ac5b0980f58d8ac7f9f7632241fd7f04fb2ca71e09ef35e538c24085ebc6891d3bba637b384e311b46ebe3511740aee96b714a3921476e7ef95e79d917b0a86058719bc423dc77ffa1ed8554aff7719dfbe26024b1b03bb1e3edc61a6e48ed75478fbc9c0a7d02366c8e85c4847ebeada441b78eac3bbd69c70f853f94191ee035bdc78cb1367ee87aeda66ef0504ffaa1a93d517914fc3ff7d3559fab09ba742ff32bf01700a0a843abba4abf657e0e2b72603efa0e61964fd2c06023a09ebdaca1310e1c64ba208373dca822440b87f6f4bfd2feb2786bacb0275d4ad81c5f00edb8b266177e1f9f0dcc0cb94289ad5028ab2907ada0434537f956f77464b9f7fddc20aeecaffa5027ebc99d02362b7db73f789a68c3406f4a34ae77c570969032ff3c9dddbe080a01c212c9f8149e05795336a27ccc71ff36f2359d4ce833dd5ba92daac3865539fced562e38bc02cec303edebd0e3b482b300aed2b9b469add5628d1e2ce20ce599187374a32575fc9805b1e1fd77db8c1fffd0ba203c8c6bc0f922b7e0d4fbd1e06a02573decf6a0eb420325cc7405e3add578c78412bd869e799c69f58feae45535e22f97bff557381dbdb975b2c12ca40a7f665969013e0962caea659f80f42d410da0e713c03fd35c96c364e34c2973bf49da9aa7e1313dc1cf6dc399c1e9485c84dbcc130930a60bfa570304b1596679a3284a867f70cf4064811cea2e76f80c80b857215400746fc49d1875e906f1df8a8fd4fbc22fcdbfdb69993c1fcc681c3154750ffc58ad77cae95d217aaca42cb6253843c035ed18784d05e576533f891282a8e371b6c8f630ee33feb7acb4d65a32c1010d8830e5ef16fc340d3f8dd2c81981bfe8587cc1757e8b40187d316e4c3e8ec607703f93294225aa2b1fa4b30b919e5d73eefa43ed941577d16f19a9b206361498ce41e81a9857d1d2c0b727f862ee805b307ee913556f755a5d011023bf5b1daff56249fd5c76d9d4fedd6168404f5ec6a7d74ef83851e5189078c6c264fb941b8b732b6e007deff2813a6ba84f2c09de3cf4498482daf87f70e6dd285edca23f967e6c8c4d8bc37b427c9ade675d24f31c5ca00956a1ea5dc77e995b77e154db54ec325dc0c957aaf034dad897b3d6db1889b6181303b77f2dcd727b4f87dc9ec84f3608aa28de56ae42fbc52ad763f8846b06f7a1a07db013022ff54907863b1c7744dc02375551a55077f69c0c423c9a419412c78cc61e44376e7f72bc545d7840dd956be3d48d5577b4871e65e5fc79f51d934aa1959322d1c6387c283f7a32c8d8a32d01beb661751007a61a11ece72432804e02bace3c7f242895fef016edd9ecb241ad93568ca6d52c45f2293c8f208323efa54a43311ce2fa256f161504767ed5bf0f080eabd4e5923adca982197bad730ab3c525158a7eff8840776bb0315ed51fc636e4be2469386371b0b80fe400543bca8ac82af0a75329ed74c1e72f7485d16701088401b5971ab742414ca70de9a4554e1c22415fc415c5eb1ed466b505dc8371128080f1d385106d9d8ff6fc2817f8afc4ea2785d25648756a8d585b51141deda6593a88e4427fd7b355e5c88aeed919a7f68a0357c2add6f1b06fcd98cbf080825942e97bf6802002933ee9bdd3028d10e0dbc2d02fe8e72bc805a1731bf1e9d30570e01e59631185f7e325b46a16dececf3a851290d434038922a43ea0390499ffb3e589b33ac199de5e286431bd50d31c45cbcd6905397354d934f2ff0b9f31060a2eb009a835cf1dd3908d5bca8dc4cc74dbb94ff5ab598a96b7c1d8f13a2866e723c4339e4ef8a71bd7d30e567e2244d9ee52bcae30ba3d343863eaf69ea44efc4ce3efb0e7fd0051062fe288b997a2dada75c1a66a5cbac17ad86dbce1f1a9992e64b6510cdaa3ca8e644ac00a12cc085e3b6f1e75cd63dbd19bfe047ec2cab30c750a84f97d400cd37ff5bf7e984f386c4612011e1ffa8a0489cca8699bf82d5cbe4ae3f0cff5b881a280d64f7bf689f8c1855c6d12d398d3e28e3505120e2379cb2fd3bea7ab9c68b138dcb21462a55ec031997609e141f53d6f5cb88934ef9119e56bef8aff306ef5fcb8165d388860874a5006ac228f4043d12f10e8ee975469c5851fc6d9165224899d3fd12e984232c66cc3216f8be4f232dc484f8e3c97ccf931e1318ffe0cd460413e5ccad9aa2a3275b7083d9363f3de390b971693f6833575edadceb70e103b746ed5351539ed0c9c21430b1ab51ccdb90318533c759d6f4852930f1fbb799af3831599b71dcb6997cd93b61ed95b4ab3ca2dbb8c242cd50149cd2e7a818f39fb42afdad15f8edcf928ae8f2023a3400ba008d3fb87ff58356d03b78ef60f4517f99567fb95fc87b3d6cf2127fc46f517025f4d599f5e3fa73cb8b4edbf5322a1d9223dd63f6142e674f0f49a4fc349f1333a0b69081d4fd243b60a91ae416f2cd087547bbd6a354950cb4090b655dd30b87efe42de64c3ef17fdc01272f4505ae9ab334586568b0063d8e17170b19fa2f41e97aee52c23230cb984f0f0feccd200f8333ed3b792a5cf4b1f2701b947535f10fe7e2e984e350f14dfc6f77895d38b2ac7379a8e2344ab982decc59786a2674c651e365f7c53d862cb79cfd7c5f8d001243c3f5e96e0589382be92dbdcdd10e948ba29b5e2ae695fdc7dc62d4149c39d7ce3f9f669db7d85ad987b48e5a4a0d8c8f3bc925feed7b601a86d31e0003e2e46adae4b81bd36e71a377fdfa10cd76ee8a1bbbe9ec102ed065a40de57f3620b7ed9b9971ed8fbc87c334da8c9ee68be15b21439999b3ec617b6cb267fcec4abe513995838850469a7702f0a301e6894377a1b648d9d07db82bc56d05ce53aefe31a256b969f9e458fee87862a678af497ea474f9adb547f0e5e509f387e957a6b3daeb980d60fe3ad0f09b58bdd4be06c13be3ab3246eb126b750b0734dad5d793f3ef89520389d729a90146095dfb281a071c4ea0098527424fba91485ed1da5863b7ebf375fe2196fa08e9ea65bbe152e9769c9e6ea6eb032e6353c77b73b865562cfacdc0bf81ee7b01016b99df43674269c4cc1dd064be173ca939d72a50e53a37e17bb8a321692575dd1be7acb254caabd1d9e55ca4ba37a4dd7ca35cfb075eaeaaf6a823667c9cc585f010d7948ed1af18ff2152350826127e798cde277978052ec0e0f527f3ec3221114b188a1cb9589b5bf9200534a35cbafe0cfceaddeea956bf426cb9abd447aafc372859b3febf00bcb189b2cb90250645f77880096975ecf77e049aceb72b8bafb2a1850ce4962cb001209126acb49e49e633d96b7cc6e1d95edfa9ef7b6bbd12a84cddb83b0378389fd6e0a6ced7cc8ce3eb70c6dd727cf4462ffb3e3ea33e13af837bdc67f6ddeb10f3e98ba6429ab4e977a1ac12b9486c043e648632b897f85de3b792907be8a95a39c5312a67d395a8ed9d2aadbdaee2dc7caca3069caedf2c3b647e7ee6de25c92cf8d30ee1ef76926eccb27fda2caba0c418acc827a729ca34007cc4e4d6e1846912a57946725578a2b10e93152f8149fab27f72d9e2b5fb1ede59ed37a110d3d46b8bdd37821f9ec8c5b727b84714bd55ba84680200806f25564b81af0c95b748b1f6c6a44f33bcfaccf017709e70a9294377d72323767bcdfd2680efdaedfe6ac6a8119f1e0a7f631cb953a0823a5c5960c21f0c13601f15664f3dcd733f9cdebaf9eae80f9962f3bba3d537db206e2c3f37ed1a4533f1a9c266a40872fcb2a43901b6386932e9f2ccd0bdd2b9022c727094e1ba1b3a2ec7f5248cf07df2c7e32b963c074a8241490f386a047031bdc666486f587fb246a5b23605f912b5787fa1e28417fb60646eb6ea79102d9f5e6e80dd79e94f0f68a3be56543508c6ce2e70c6bc3c11c9accbef660239b27cff495532777ff7154683db3dd9d9a081a235f8177d84a400ea40d062e7947cb049010900d52f3cefdc8d2918c0322f2599a1092ff7af3781d30aaf8175d228b0f5ef58e86ebbf0065ead3af6490314a722ba97a4927a5f1ff87a1ff4a6f60308eef9ef055fd4861bf8a215f96786a9f67a84e572054e22fbd5a7ec3eea893a8f3bd347c81ae51ba6085af11a9b759794ec12fbd784b5c901705661f6c62e52f4b42b8a1193744c7efd2b40f6a74511d26d85b6f281680fe63ce0dabb95e6f9d4b61a5ffd2b35dc44da259686ffe3984b6f42f205a9e2f967b55bb64a5bbdacc27b9647a7e922e16467632a549b09e9c7187fb9c98476ad43c62bc506827b8114236329cf779558acbfe5a86ad74517285badaf1de10e3cc3e039840e82dc043f2da0a0c1ac0e5b83aee00ec5ee0fadf2631f4db65d9bb9631fdf223d6bac693562308fb71a4107f6470931fe33f64baf0e81d7b1c1002780042b82075628e16ff9f3cc58f1e438576cf798c5e99893b2ff0679b846551bfbf1e3f64162f730ebee01e41a8857b8257da800f25a90fb193b0988e7ed87bbf1a2fa94a08f54c4bbd2250fa2ed7b456bc5acecc898bbc3bfac6554dbf2c85d9083b5966311ce32bf2de6260375e0fb308f42430e0cf1adb85ae9617064e6cc7e338a1f5eae2a4ae87ada64d2e572b0678c3c4a8a165a0e480a693d928cfc180119ed18e543efac109fe59744580401c8a49a5951ef34ed4e06d6d8986090262c8904bb01fcb98f2e23656772be82f0af25ff696b35b1e40b03894865d78b2b08fa4566e5a215402ecb2022386535577c240db9bed19bb6b9a71f64c8a99a9e4e23fc16035c6751fa89e6e3dd7cf96169136eb90e3ccaee7a28586a59f5cc9a46a344616d90fb0f5849e6907a30324a70cb8c81657e574a9ff91e7625d5a00e58edabe25cb08f371dfb22e6b8172a3b2698adcd86d3973de93d71afa0231c86d100f2b2ec61518007965b1ccc6a81922e54b23ca8ea1128d2fca46376b666cd26df5dc80229a80c9a8d515f60154a9ec2d865cd6459c68cd90cfc1fe21560db631731453ae9204377fecd2a12ed78543ce01fef0ad1cb2068aa0c13a8dc5bfb5aa7a0a8d4d2a7610c77ff0ab1e90a70a0fec5e5baff4930f48f4068f498c6db344e2c00aa7b59c928d7a00d7d6b21f814fe45719ad254b67582e1111b6133e36ed773854ccde954e3da3a6399661dca181e29e6403e4bd435a353e4b5eb0ac30f6cd4a66c3ae7ac23d93cdcc56b931bddbab92d8085ff3ff50f7328fb98154515ec5a37bd4251d45f5a6c144fbfc4fea0a318e4c96decd87c253db9a46b9c43dc51035d262583adc86757ff11804a88fd39d303215fabb4b3f467e2385ca603add3b2d6bb0bd326bd7a04cd0cfc9111ac648407d0aab5fdf573765f13a821e7bcc63f38d44a0d6bf5b546b3a3623fab3d4275c7aa7d349a0c3fba9857b2e9152b49e0536d44d61648f2dcaaf4e00411c90e15366bafcacae8d9ab8c54ae089347d83b227f879c545851f420b9fc9043595c500920acf195ac4c63b72ab4fbc7e3f8cad72da524791bb306e6324dc4568fdd9f70a39568fc5b150c527f6b9dea90daac5068b27da48b7a9509ed5d20e38f1b90fa83848db0122a30f052e1686c0930e4beddd27ba70e7d777506096b6ea799aa1c8413fc156b0f1989c33cc9c14d0e74640d1319c2d25357a04a40e24b1f2169a8691cfa7a1646f1da9356e19d1d0a7ccb10836e080978b04c853f25ebb687c08e98bceb73b7302e13a00753773938f67e05cad7feeafb47a4e10274be98f011ccb624fae0922115c16b51ed75b10f44981ade6bf7aee406ac7c43e2ee28d4ea15546d6ae2a3db5df2a4785d58b3c90ec6bff417db36b25e36039d08d5d5b8d504846e93292dcfe4b38d86f96275dc99a118b964f5e0ed1a00bb5348da7044844948adffbafc26964a31ff5f0015abdfeff821356563b4136f92c171793b017edeb1627d1b31ae1f866465cf42e5c36d17775382d488495ecf86f2e0a461cf2f08dbb426076ce189a52d122363513bab3a64cfe7ad26d54c1657487dc8c4399291006e4b68d59a5c73c7c4636afbdf0cbd6ae312156814bde7a6d16dcc93f5c5e0a1b2e7be40de08a60f0e55c2970d0cbe520487dc702bae11c07d0e7a21e2592e2874dde000ba15548c229d96f1ec01f6818d709bb1f29494dfbbe45c90c75fd4e3d915ef3171c1eef3a8770cd1d78cda21852d8218e6f431f8c4e5d3c7a899b5bccf2e35b5ed88eb690d99b4a03f4a58a61079d2a5d6be92fa4327be6a42cf77e77b33031f726e43b06b0e8ad460d37b2ee4d86966c1fff013c63f6f3ac4615ecef6e9f2a761af77b2658ad210f3cc7b5f3def4a3713e2040fcfadc69e290b6f94046898ccd716f7d8bc26f43f50f30bb66c94ea0f7889b7f3b568167e4bad6f8ac59fa38bbf5b9df8c83d2cfe64b21bd8e14da72db8edc4998a1acb079d02ecb98a0fd8ea36675795874bcfc250171fc4c86b934187ffee49f47c0ae1d51e68a8da4f1a0644f6bfef0c261da22c2f08012525eaec03ea1215cd07ed4a6236522b04ba450c034076819c544770f27161a20beb7bc41460b64775f6d913071cb200b42510f87ec86736a6c22a2df02bce1ea0dc8e40f9d449d57eb17aa2806d0023e11872275e75b9f1f175f0ec590f214af2c7bd24b9815b53970b7377364d21af6a7b20a54905b933173a3d22be3268ab7354f3c74f60f4bc21433fd7b9134b557e380677f41ddb73110dabd8d7a0dadc55769c797e081fa4e385bd5c1cfbe779175f6fc3940b8d861ff659ca0b9d48568b17d17e573ba93dcf24266bb9ae7c0998a06bfe2eafc9bcfbf7386ba288748a53444d4597480552b7887017c086b95463ebb7328af6ecaf0d05e98aae1a53ce026b7de48dc80d48894776c5ce31be58d1c92a55f514a875572a0a7b8a504e4b91c2d88588830007d12032193f64ac3e04770ba00bcc0e99ff90988e536cb200b1e300d06d51428214d6f7397f22cd2a949fc6b6e78447bdd1958aec3490dd5a74749f7d8c649ac7c97a68e4b81bec4d291201af37d650dc4f8a6b7b644541fa81fb4c2dd0735294b4fcaa8f1f4ce68e2f775030e84f21bc72d5a0ba888d1056101e82ae7dc689f43cc99f61facb4520fefb1729ba2e5509d7d5182ad4b40af85ba206c2be10f58ee9583ca03becf560e49aea52d919d6b6a95e073bb6b5c5f8c59b6b2b636508eba7aba1c993114cd6520696bf3b3da5ead3d7f88e546be2416394371b6c2612e1a97af914c101ebab8d23633d8364b2cb1a358da9c645e90d2809dbf265126f347e61a2e2b9d256b38c57013cd56d886d3384f4af4482cd4a48e452a2e88f396baf084144131fdf574169163394ff17a10d64d7c31e59de088df5b1fcfa3ff56459ebf7c6cdd93432629744d0d64ae9547e8b06fe0963aeec28b14110115b04080dd4314b85a6db6b990cc5bb3c681ecca49478da6c4495a7a85cb41b415c4942f7a8478f433e97d49065902decbac47f89f973bed9b8591da1b9f4ea5337bf565168c1eca5dde972e09a5621c7c1d75b873ddf0674be50f399f84dca28cf7f8d0f117b34a8c44fb0022b065b6d223e164f91a1a4bc6b1c5d25965ad20696bb9228e8b2d5e8a94346f43ad8da18cbb4cd0c92567f76c1bf4679d43d59aa5a9402861f5ecb2b295463fad8c5cdadc05c875a32b13933c0ac77c33f231c232b5df6f9044fa145ba323ba1bd29ea39c6d15ebf7df591f29200a12fcaf673a8cf3a1dcc1644cc58251d9f2decb1ef6bae631c96f59fdb851b41d2808fa378c327c72ee31aa93661708cf9c7de96a4d0525a86ff2633595488d7f9e4080a4679dabc82a66140292368a75cd7f1550505cbeb911c768cc1de1b07d8a214e0cdd052592d9b0dbec69d0f5249b8bf0286cdbff799dfec55364a34f3c3c3dcc59bbce42d0426b3b16cf61a95f75535e619ab946351e9e6c1425c4f6255f10461841eeb6accc6996619e6f5c6505d694cd15827d26615916409f55444a108f44343bea24bd826cb7a211b96f0a2a23cd782a3fa5a015de313d983ef9ccef234b5b06ca38071c9d6aed5f4383b5470be2a54715f3c40afa7c5f6c2d3b17c9ac155a48c2e632fed9c85b717900ec6a6e36964305471986d6e443cda5a82fe1749c3b64c8ed614c7d7acb19bcefea7dfc87400606eca53d51c205b22d1e7fee8c810ebd12d738924872b16d58de2dbebfbab1a3e6f64c0f78afde704d69de13cd956e021ef3a15f23b6ecc0e17585efe54d7501588fa99091c6b1f0059c178e1d3f886bb6b2f8311bfba75dc0305f0f503fe9333e1bdaeaff98e25fdfb5cf85c241c23b419657546513c98eb03207f2940e6a23f63a1fe6a3740b25f772a7624477ec8850126542d7eadc3c02bd6eca449ce9b9c92a65ae62ea1793e9c933f651743541ed26a7f0f15b29aa84aa42eef674f83fa93475a23d35ca72061075e1d793a1d6a3f57b9f56088e2608d5e40c2c1e3ee5e2d766f744f98ca573bec523ae117a4c61a5878e50b0de218e08243d8f4f911c798629bea320ce5f6937ba07de6d649a2798f94e1f7b47491478228149cffa1ff53bb924e838340be45856d2abfc6bf02ad26dbdcfa52f031362d7c6ae898dae31aa9be2b0b5dc5b3ad87ad557ad459f3d83b446c35a15471f91f71d4e787ca3f5e0b1bbb010c1f4814b2b22edfca16c1f3845f2d156486c8f6a518217cf19657506131f6b141aa3db97b7fc6832d3b1c862c2ff1b03ac55652f9b0b300b599dcc3f74aac0d8bbb00c6e1df6edb0739f871de95a0fcb9d7bbb54149acbcca943566a234c96701b76e6f9f9922ed1223869502962655e972179e6377b745b42797e5226c30dc3b1e8926ec302b42a170551980bbe49e5e551193cc415db1c6ec8638a228b6940a73787e3e5fc30a82c4968bb26903fbc0acbd03439a9234de0f9cbe18c55f271821e40dc87c9a2c05c8fa6f19e5e2ee40c03c1b02aaace4b29f55f1985af9ba46da557590e3ab34dd005cb546d1d01694579e4b88924c97f024609dc91b4ed753a5b1b776b6fb1bcec553536959bc61adb20bc692191c60a306b0dcac423ccfff94e3b15e485184436285760f95ec76be6eaeb183996736c6fe19560bcfc0ff413adc210f88eb0c3f0fdcecb85fdb6a0e487a325d3240109b3963abaea246acc50cf39285f6464e1d7a3296eab5bda3fd91d4a7a034eb213b116b21d851701c9da0804844c6bc841fe210e4f5dea90b064630d298b61662712550269d1abf1259a2ff98c4707e1d7e341e3a852861855f779b197a027f499846aea9d0b98756b3a9e3c52b19f7514557e266d8fea2eefce6515f55e029dd77f47ce08676b3758b8f6556e81e7412f19b87056b937d020677a2f1673fae3e848343f961c4a944ec8a3397c2e476429b9c1b20133a90fd2f53a931806a3bef6628394186304f6fb2678894b4c3efcc16dd63a65eed64fee7bf99978812f8f2265e4119220e9c20f5e7622657cee825022f7c1192b92939778cc35629e4606239ab039dca6117575606ee038751bf0eedd6210d8903f77015878cba91229f44cb80976e72be0146b87d868d53ea053ea643f436cba192c4aac67c0ddad01743b6873f88a1c5cc4442e543e2830bbf18033ac13b2d625afd6881c6d5fe1326f6a3bcc9978133067affc10bb8e79865dd2e123688e0c7022ff133ac39afe99b502c0a5a95df4af2e8558b266e39234e67f246cef30e736fc93e06638e63fc66ef3f1f7db8223af34e3ea5a94f409372082f6c99f4c26875c6d315377d582032c383708c455eeb75d679b6131ec282fae0fdefd5212f7ce5359c4deaaae5864bf6bc6cc0dac04d40c3147e15d1dfdec0573723d472df5b182d09cc7f41124ba83955b02db24a819a6f66354f846200c127c5459c7ac4e1f3d9b0626ec67bf2b3a327850790c55370439727cec1fca0de96d6464bc524cd18bbac7032ff30501c130224176392d038dd5598141b75e161c8f98516ae5549713fbd68a9c3546622c83e27ae2780d5816bf03fc4415b342bf541e6f85fd143ef73820487fcb5082b707da3ea5ea95e8b796652215c738910b97ced500379d309e08f4cdf48c6fcf365dd7e51254297483599f8076623bc983f971a8f48c7d2f09551b45090a5896a856d958d29394b2667f4dc2f319bd674d570398a4e1066086b264f5a655d9319fc4a36b51f467b060fe7d3db834261f56b360073df7a5ce2371b08ee7cd4dddd17bd3f7f80941b2db9886ff91aae16ed2d7981a6a04a95d20f5add2f5953efb9213d58f9f5604de2246f781a588098e6ad40b06e0d130d26120bbb6d1a5f44975177573117029da53a5cbe30feb29755f106a64a3db0759214c1f61826c4bcd7daf8702b93976a6bdeee2c61587dc980df7b1ae63d118a192520792997fea13581b887acd8cc382bf95af93640c2d21dbecbfbfc028246955a6569f47f4cb7eef91defc2c31598b7a4813b5087870870fdaf7c4d3f860a9aab4cd77a15001bde06c164461f9b737999366c61a4564584793364f47b9e419029dfb82411f39cbe91b1c67eb2fa61a4632933cef5aecf7a38193079f516beb9bfd2344542d0026e7be96ef5c88ca3f045771874375e60cbd02376281b4cc0fe70d4ac30e97462fe8dc8e5163f23c6c0ad9085b002e4e345ac2764f8aaec034ab92784294d0c236eba56099dcbffddd60dd4e0af2557d35ea53195385bee55f6fdfa58b59906d886b2d1013973afcf599fb1f2a6bcce51e5db0df51c714acecb29f250edf04e822bf2849681dc54ea968ae0aa9bf3cbcd59feba6b5e7ce453ed5fc81b4c74cdcb071288b977387be16344badd6728f092efcfdf84594f96930644b450b69eb9eaf80dd8554c7a2557913f9be1d66f090a41af7bbfdbdbd78a25d6fa4d6b89c1985444a6e52afb540687906c1f44edc5bc2e0797c5596bb34f5003e1ac7cbf73172ca2f8d656c558e15d4e18bb257d438d4b3412fb24326f4b922501aa9ea138dd0a998daa20193efaee3ea268a6180bc83f0fd0ec244ed288c2444f333be934df9b2a2ed6dde9558dcea8c83782c4f048b097067f33c3acce66a93821ba7a8278f39518ee5a7fd4c01cff02dbb374a234c87aec2174ca6f0b3339c2a133647d3be6e8bb915b117f93ebcccef8645d3ca44b742bd29bcd38346ead35af31720c11ec8ccf2b3823291856821117ea958fb7b34f86271bc596722782ad72ca85bb9d3c2fae8188fb0bf93eef9fa3f080424ef928527785facb161119b96f525ab18598ddecebe8ec4d6970b52765a56393f224742845386d84af549b2ffc1f3195bacf3dcc5e24350a01a7fc05b92375a5abd5da994786a2ab3bf9bb3648513096a0ca60d6bdc55131959763a2c24e8eda98d0dc9d41f9455326f391b38a7d4d8165466206af7610078a75a489b11751baea13e751fe8a39950bc32101b4027731fc089a312c700014c14a646a60ac010b989f19df94ce1e3ed781915619d0074a8fe77e3796d7edc58ef9155c34b0f8364294fae4068ca92e1fc397a3f956010d8c6975ab85ef9865167faf4247a34d84a10e686ae924d0337fbe0c53b89cfd85214d9dfb647ea6b46cfeb0478f68eb71215fc653b7b8c24cf0378e8ff03d8be5067e4f8af87ef8eb68078d61e99b427dd8d962a2a482af2d35e0942217ae5191845c10f5db0936c400f0efc77469320e1d362853ebf238ddd3c227d00dfc102ffafffdee6f98cf8b29564209f7d40f98e4d2c9fdb71104d47fbda786649fe64c5e66da3ccdd3e929b443d130fe65986f7b2c24a31ada592b196ec87db436c483343683b353919bd2379bead8aa65a0754e25d43c66ed073863976a9c5b1d36fdfd4b9a9a88011c6f236a0736ee56074bae7465b2aa91455b92a8872d723ac198f93047395ba4f84d6ace82f13a28faaf54c4d1ebcd1c9070b0f036ea5c676e17e70b85002fddccbb7981889030972686ff62a6dac7bf9fe23b96f65f892b71e6d01072fe1c44e22b5467ff644fa418353936a5ad095ced630c8ed71827235137f9c77efa7cb9b7308da7f1dce99e14c7ebb4c557b32d5bf8f5f2592cee0b9332d79c7f0df5773a088e12c657533bf27fe7c2fe60df716a975d2bea8720b4a649270f7e1ea70ddaf86e3568dfb1ceace393e551df9e447bdc708aa148f3ac74843b4462b4df91b41e3bacc686577e5e75e1feb58094e4434c293ec8158e63e208341ac37eaffde77272eefe587d4c5083a523bdffeff480ce42aacf0fe5eebca3ec8ed97726d25593f58ac75a6021dd1983b218550748869332d3d4ed048c456906439c4589be3a2851ba9f1aea03ecf7e95646ff24320a323a52d35b03a1af748671e7074f1c7b842c895b63d973ccc363351598a3721da2f053ffc08ad4ec4ce31dd06f920dc9f2aaa41e7ccace42bec731f5cb496f13f98dcc1afb33d47c6e3b5febf3915fab98961ea54ad6fd34ba1fbc1f99bd9f4c6d26875169af1619adf549f16092f1faf7d2811623fedf86529e5784a870ad4dee15480c4f4adefdd58a5c8d7ab82e5a39e9d59d37a4f288f2ccdba35ffeb5bb1177211f526452dce9a20012be1edf8d27764ef8821ab4160f11b2ee6f2817debeab7e3044bbcec07ec1892ecb9093b644055b1593b19f98d5f5b1abb70d6a1a79a720b7ced5bec67f37780fcb7048f8f6637ad15026e44c53823974d664db8e63ac0a0f3209660d3964ce17a094619b55f55c2c1e71a984247b6d6f7bab8257b701ffa69034a9c919bde4b6a042a70dffc30e5f29c93efb7550c49da337d15f9e8ccb3a2bcb7216a66a0254e01dd49c850dfc8eae24d00f3eac8f57e48d33483bc108441f6456e4e2ca55a4ea0c766361ab03ebcd1376d0d3894852e331ded7b6d504e95d18573710e51e5213fe02bcb8a3339ae053da911444c97ee8ddbf00bafe798c1063bb2a8957d12d4af95f2208525a980d171c4e588c9fe0ca6d4259b9875a8ca99e6d3f925874596ae3bba45ad5eadfe1c8fba1c7d866e7d8a5fadb6aed5306732c4c6a8ca91879e25cdbb0895514b3db9c751434fca05483fe941d60aab2bb0e2ed3a51111a3d6d70465f7d4cdaeff99d7f28d5f8c56c8e68cb3db03cb84d05cc756b84f042ce47ddb80aa93d1dd8f0214533b62e730a4d333f56d5806f47e76bd1b6c5da8e70a07b9c373ae2dd4c5637df6b07ed5b7c7ce124237a81e9e8fefa76308e10adb05a10ab37852ce9a5647404e428c6260422212756a985d7d4c2eff44ab51c7350d2b23ef0c904739000141e738669c731e7b8b40639b43c527aa506e2c6efde20c5a2efd998ad3a848bb502818d4e5dc15e4eca03c6f2153ffc26f59005615236a3cf4864d23259027a8befb54be5a86f63af70804ad2b53a57926b1540f446438b0a9acbebcdca962ddd45713a63e8acbd0dcbbc4922d5277a429706dd8e2fb0660061eced4aef161766cbb4da283f1b64e292fe4b5278d9af39e0b24b4f82396678701d6af24de6f15f2cec1a00a84f0075e6a59b6faba9bc8009bb6a7055d09c368b6f8e3dad5da365d3d85fe08ff3231e18127eb6c4d821fecfbac2548b9df2f4180dccec584b3c34c6630776143cfcae5752db33d0a31820576ccef177482856c71c054e0fc4b0d2557038c43652da148176e93dca6017233264342b8d781ec00591d13a6de4d43ebfc3b16b83357753d6d325aeaca4f90e9183c66be9b75ee64ac75a658c3f714e5518d2f0a6df0ad98ba12043a734a13dfb262692032a57dc844f41c671dd24d9f56ed4d4856277f17150ac06aa335132a704cd436bceb8996d7f1e44369e188525b8bba99a1d6d8bc4271b10b0cf314f1aa0c6ccd7db12aa726e39a60d741f5bfb04bc8650d6065d1571c938185b8f9c6feeeacfb1bd317f35655ecf2279ae64c65304455e54c99b3b60267d6c8f30b6f36b253b3a515d7030f85f02a6530c7535d1e053fbd2c3be45ea404909c0d9238c016f84b825091503e1f740bf0e8d3cd94cce75f14ea801bc2052ac378e7f31ba1e531f7c8bb4484de1bda91872696a8ccf9e4b57a67afc26d88f54aa41fa56f24c90901411d1d4b65f1dc10870e697fe84354c674084b1f9891336ce54c42605253d47d888a31e227ec0af2d415043a18a29062e0d4cc52c856fc9cd104a0edbaac54a4b4b0b61b51a78171115e6c1db49e334f1c171a46f4739c347c05d305c1789baae5c5acc2f3b29aec43fc5013a571242e4c9384a9730b9dd2c45634f506d869b84244581958df8b82027e6e0ddb03e409a36fb636f93d70f6fef905f1138b9424bcb4d41f9f9279940ab0df4ecfacd617fa72b3913fe904a7549640eb1bfc7a410b841d0aceee26b445873eed07d244cf79f63307dfa8aee0c2c3c1a404525b8284f36ae5660367715444966bc62bfd21389d27fb58bfe493dd978f40c5423794222d6a2155dcd4472f18bb836dd11e0ce6746458dd50679dcb134e62712f9af7921220dfc95ddce85d5f49a26ee5fe738787e2fde9831fc1244eae9d7fca095452439647aca2419ac21f93edc69c6977d4a02e8477de06ee373955249aad6a59d0142a6463d6b3bbf7e2fd411c2e561715cb3d62d7689173114a38998107c6b08010eac31c1b47b4f0a413c6363abdf8cf840c31d41d0f404e089c029f8683973c13c584f309b6a1a53640687c9cbd86f00e3ab1947aa5523983f2f943e9d0dc85e0acc8124b3c6d1e73d76c353b529bdbc369c8a821bf95216243298e28712e9659712a210870098f5d1284688f5d62796a40232ec8c21848ba883e1c70accd06042aca4e8a6c7803a441ed8c52b1d9ba5a002c173dafe05d3abb1c6885e21a50191f068d92aa5ca2bd4b7d83222aacbad19933f262acef4d45d5367c43bc07f102ba90c0c8d469551de9fbb5c8ce91e7fd39fe188a2f2b570453dc94da5907b79d1991f99611654cdb9b70bb41b787d5d58661a82f6ccbe3d9d9a3b40a5af197c928043824ed3fc2039942d501215eec7f2b9a10c55985d2138e7d5d7d5a29f97173adbb7c0ba58a931662fc5ea46dbfd7dfd639cbc0b5c4f1b39231feb22d26d1086cc8bd32f0d4791d6985b4b9839c2568ee288e6324ee561d6dd5b6bfd647c0a95208b2f671fe97129274a7cb37f26aa13d031aee1af6039314df560a063e36d0e3f0bb8e2ac532769a3df8f295f764404a36b3508c7abe5be04a8b5b7da0e5630d64b8f61bd2b9c6e7e2a55310b0c0123a53edd5af45557b8c69a1d82b275377db8c9cbe493f1f1f3e0ad2bd9146bd5a74eadb8201da265237bf5f9e1aeadc9abee444a4f115d5d2b9e2dc2d62c6e8c03e1171e1cd8a370694d0ae7f0f7835083f6295b64bc0731ad1129c972f2ec975b6180c5c4d41097fc92dacd1eafd686ffc27bb9fd96ad1f625272f6137e62c9780b91f1d5ec30340adcae64b8498409487d82fc4f549aa6d9a825e78ae870bf1bc08c9e7c3a35f4c555c716b036f878d09ba54532f40d3ee7d518f3e6ca53860f2bccbb0a71cf1630300374b8eef77e65f8d5ad274d4a5fff0c01ae8210e23f38f6cd11fa3535ba6e1c7a5b56ff78282530b11f3d2e4e60e9878897b790c5ad3fc719eb54c4c688ff15a6f71383928923c6e9ea8da0a3ccdc3277428cff8f5f0d48dc658b8a39b6865d7593af304c84215abdd06d411a1f7f08ccaa2690061ed4407ae0e73f3f3d2e2f9334678c646b002117526fc6736ccb6ad3f054cc38d12f830328be82638d759e0d809496b2db3b8a412cdfd7040fa0155502aa10aa71447493f827c887273b3c36d4cf6d8e6180c726ee3c4b4b4183a1872a3a33bd0c04585fbf513a1d717b7f2a84df2d79d65e44c0d8595a5fc10bbef5b9b69768d78479661acd88dc2c4a0393473758a12f7280c3444dc6f8eceac89bbe4e9eedc9bc1a3628262e05655bb4471d8aa6212dc3454bf651770baf0249faa3b6081a38996cc36548c75901dd4d6736ca377a3f2bf378c8a959194d4a3c97747822b15b2fecca27857d50632663721ce82732d96340ff6086317b290e35faa15c7f61c3f5554511f1f8b0ed0e5e830abcc7c6585f96f81ce57147fe6c849b173d821ecd0f15573579892d37f3603a4ce6fa9af43cf7de483c61da6c697fb7b16a22ee30b68ad03deff679c8e1317baceff9ae0aa046062668c9823ac8d925834ea5d4d5e7d2db87ac950cecf7ca108a9341a92c2fb90e5209d17bf1e5573d44351d9acf8fb74a5faf1c508e27e906f69d2b5ac16c30eb2c4ae9ae62f9b0f9378b9c07f64a56ff7e7d6bd988f8547d9e41a26d38442b737870ca710422ce11a74846145244c108b6782c223c3c9730133f2a968c878636ccb59a9e4ee01679b8cf311c616018135891965dad3905fadfee8db23b7b69d2a4008d9f7864352e1b9a7582d7c0d6e8d039de22c0c3b70b1509ec3dc462adb528462cf9de255bbe6225010f272eadbb4e3f659515295808a30ea1c05349c7796133573b9825434ca5d7910c4e75708f1182c488c8b3c5f5b5f246964b8a3bda73b6b4774c18e81146a000614e03aa8c0bfe241a49b8c966a782617910aed6724ab8b52119db7d7f7665dc8f880d9ccc300e6ae1077fcd89d781847da66449695b2c7df12b21350e251fab234253c3bf0901916e245af366d6ec015a91819da4b0e3fc16561c7912d85effa5c8106087121f2d678f69ddb593182556601f2445be269da4d19af5f52ca5f07b93d62e596c40afa6aef1feddf7b64716fbd761dc4f662059a3ce87a91a84d5a844c074df8ecb1ea692c90700ddc1d36ff8df31c6dba4d9c0265188f2716aea7820c7d510b0caf2528f147a1c236f9cfb3200c06dc64406cdc485ea3baf3f1153142bd99b83ba033f343bd7a831e668c680211102b0786f7020a4bebe760c4b5a72a76ebda2cfe22dc9b5b9009df45aef455cc4447611d22479ef379f4699afd3e58c18a5b043c3fc2caa463e39fa69c7641ab7a4b61f611d673fe02111067aeec26f9835fea575a570df7aba08584340c52059d8ca35ecbedda2a1700debb3829c3bf8d5f2f895bcbc86e5eccce3c86fd1984d16a0b5a84976971dcef6345888e7ba59ed10e24b715dabd8747aface11cb1475f589cf39be7c8de3c0534d1c95e4c74f29e8285e343922387fe05a1f9f87e9d39f3b1dfbb313a993cb5552a16e95e3e25462bbdf9c5595588ec22e51e17df4be834dab7e6b6a1d30108115d6dfa0b70c84d6cdd5dd6bc05b625b1692dae7fd2dd76caeff330a50086519ac9eb45e0c21972aa4a16da413b8506ff2b10eb0c8e6816016ea6983c2f3d795e72fa6969b8ef618791ba0c64443abd94c93433f48fb2ecd72995db64463f0fdde99210d2c7529137c1c65974eb2f57ebda52b1104301d43d33adcc91e30d9a2541fbe61f4cb93eb19b56b0ea6e21f210191eefa7bedc742259b6a74a5da0f11a7e0858b5302074b02a1a7509bc5815e7cbfb908beee09b9ce35e0c0f4e67ba8f8cdebbbbcef5f7ac9a95ff46e88b5a2c2f003a7500eccf59c89188fa0e7958ba86aa160ae0a4efd6486c6b9d6dafab06e0ea982bd3c8f3b919200e5876f2b14fbd97b7c8b3f1b382071857a1df17917f3baecc001d9a4884ab47d8812f66632233b4fd154b8c9b01e7801dbd20486307fff5a60626f3d1953e1136ccbf14c7035342c83a755fb2f5320a4d4dc898590b92e02a40ed5f9750087cd8d8fc67b99a7de77d927ac14b13e41cd24fa52bf44bb4b65359c6e1e15956c1abcc54c2fcba58c0f666e6551d7a301963cd3796181a52f873db298d578645ca37b36c7d8472ec8737bf5d42990611d95e259c8b3f3508560f2ec12e1a3a59d2cf969357a98f51658d9ff632d0af3ec3ee6ff2be92a0f31219d366973faba15eb4c392ec3a5a542418a49e34a54cc9dea8e0b831832e48dbcc60339c0f7fe0e0978827c8a3849b6dc3509346c13bbe898e97a986d4af3343e708f07ba1095bdea172453d185129a6d396264eea749e55ecaee95cc7367669e6e6aa3d32ba4ec83b349272b9bff4808c4c6afb6aee3444cfeefe4d507d49cb61ec1fa707c2d2f460b4ee65a3e45a1242d1128da633b1d1ac95363a6b290374603bb7d247ce39eca0909fbc4280f364a2840f3d11ebb590ccc2f75030d5f34a4ec33a97359fd05cc007ecb6a001627678db99d6f397e6142ab856e506fedba8e06633ed3504ddd7e2a97dcde03728123fa86b3d694c8c6422d7c0b64a90a1680edf0071ffc937e7c88d7c3cd552bf5b4e69b491cd9275cdb8334d6f0ac9944d15f22880afec3a61720d3f0bd8d793f1dd1932856eb4098eb46aaa243801900e19beb1500d725894f96f69f7ec47e70d366932898bff7f242894fa42bd8a04e61b00468937a24e4044bc69285d2e954ff6c7a4e3280b912f7e74ae72792cd2e52bb48879d4df20002f75875a0fbde5e22538928db3d5e3cf7977c2962916a8de8121ebf76a2522a655dcdc816682471a1d6a9202256b15f9b20baf05cf077dbdae98fb91105550e0756ae415bd6fb847bbb7e6cdb7c86c484b004575f41de6f6e036851fafb4c730fd32c9c140146c76bacec3f14744f3ff8383b1b1b9457da3321d21f14fc080f1be70795a32adbf04af902bf575cfb1c08b7be4373e5c69bf06a66f216163647d9a01e880f6397d1b40817da7c2f03c05407b1e54c7813b2ceccd8e4481d5f052af873d55a6eb7c432c512a7aa392175538c68c425386b69d632d11ccc06a90a7f649d62316e7d505b6781576f4de9728fc2da4ee410783cf882008f23a8c2c28b97e2368acdf98f63c81974c593e02153a8a52773c7551d7713bbd71e8dc47fd54efb6fb9d72feb7df900b6f9f168678a7f669520e8efbd08d301a6fb997bff3955dbeac98f447680a0b9c80800d345290ba408aba8323ba8e90f977c6146504406068748a522fe9d503ea36d45733cb10a5dfb0d01f5bfced976176fba4ebfbcfac71194f446b623f1105c288d545a5c1b4e59124142bd01c9c2af2ec37e99b4ea6b3acb36ff8d4f6dadd402f56b9edd13e230fe1e9a99277bc40fba2ef11af93d9920d6367ba8881d322b04cb2d6fcb8e7ac0942c9c33cf2b49ec321219198eab2b93b64fe05edd1275fe3c38397312821d56763f525c349197d7dfc4516f859f98b9e7c8223213d142539561cdb7800cb9b53f6798f4f73e4c1487f117c13a573645b8b16ecf2dcc4698a360fa1e2391a9b97c1d19f0b54f2047ad37027f1026a74b685b3188b756ea38e1bc921e4de45194303c4412ad7bb6e676001203360f790af87f50bf3d60907e43c6718b36bdae6d8d60c63e2a52a856ffd05bde10dc556b19f4da994cd02bca98dd2a49336cc218d37d15c03ed6671d0fda63d4af347058cd0d9d9971c579fe5bb96c0ba3a0e06d2c1012a350e77f8cea74dd0e745485e815d0c446edc45b85a4cfb3c3f1973f8c63c014d1e38c4dd10c4c41488327d73381bbe33ace8a1d03ee07282fa2fe133e436401a52a3dbc6e9d1b73ca55d34d00ff4c8eedef82fdcf4dad4231c33d10760dee8cd4a09d437a61f3a78ece03355435c0de6d2be8170ef530d5e9ae11d5a5931afa57826c1e8827e7beb6930a0fc751abab27a0d2624da93564bd5823511500b1335a1da3189ab5d7c3acfcc5134a4c491723ac0b5ffcbfcc6f4624c7d8fa6dea15b9d991efb119fa93b21edabdb80f4fbb3a7299db7f83233a4daeb950e6bf118fe1b849a5b2df4f8fb1fef6f01280d116bdd42083f406fba9a1b6df62a01ff0e6d98042321b18cbc9125e6b1391d6982dbedfabff2779839b257ab2c66b636565491f41a553f817e89c19eddce11f00e053a1137840ecf22e582065d32431ef29e3b0d362c65605fe62d033fa3c4f8dffc5df4f4f7e87017e37f205629e06e2578a69ff29f7b7fb5fc8dcaaaca12ca91028999ef4ae2755d2f71360d6b92834199eeb965e0c49e232d411acb16ea63314f95be648042d290d61f88ab4a9ad852b0dd7dc2d415bda32752fc421e42724960c97f36ac2e27979eedddfcb731b8515bd6f59b790122534dbecf745ef8b176b8f84ed804157424ae8893710f2607be79f002245e11451dc4dd3e8353e3426ab2463edcfa6e5c9d7c0d64f7a2fe0a7185f22f1552e6abe4c09d4d1535013f496de651f4aa965b969899cee51e95b54d400ac79e823c7795faf360656266677df02cbd5fa34717b0babb9c8459d1eebb709068499ef1846108a0c63d1d06ed92d339b43a9f7ac660a302ce8e17556d98dd0b0fee1473e4dbcbc3d9b966ebca20de6652b1d2314c309aadb385f5cee82b0284c63d3587b3c39ff902e5dcb7c1803dbdee2da6c8552911f5da46f1ec85630ce85e2853a918ae4ab63132c7afd277845659b95b94b48fd41f8d635eefded54a5dc7c9bc2811a5a7e77815841240c3fd0e878454d7fde7c0a54174689cc1e0fd9deda6ae56747192cc43fc9330d61f791993f9c33cfeaf0c19732ec218274ec9d8cbded9331036cf2ee30b34679a45b9f6cce7d7c74227ec8e9752b3be55e4da667de6349d8ce07855a5d1a709fe672b3baadbaf74efc7bc945694fce10496ff86a75a99a8f5a6c1f296de8c4e4429365a8db87a312204d7f9376f1afbd468c2d334addd82647430c70375674962855106e81711c7c89950f502e25f88ee28e4fd027b7d6b38e43209be4cce96e965472e6c55a553a4d1490e6563a9946d47d13e238144f45c2fc44eeac3788e2326ef96b41329ec0bbdcc4936b90d654c03cc4ddcb43fa3ffbaa6195e872609d40a69a428c035a0566d92147c77c6508965c4617e6b89b7670f1e3b778e9478711983f50e82b1ce631f2bd43b0eceb76e0e0919e3d443821b5c9020225309c47677c0f21a3cfc4a5a67a30cdf5b80212241dece28fd1d40e3794828d1018ff543f2d731899a9d875434727faebbf8a8621cab9daa47eeacb254a53f994582788bd594160c8eaf352a19d47d200c651c9b0e5c8984a88f7cbca0a2ad52febdae7dec8d1295273260ae2661930183d134aa72b9f5b42987f1f005e78ed90ccedbdca6ae5315aee4b4a7b9e1132d7164b8823a1b3df5d43659872e4285d5405b99ba2077a7ecc384c29a5140f4816814faad883cd48df916a6d6e5ffe0880d3980ecd17cfc5206099c2c4c8a0e5ace77688e4162a5f031aeb82c0acb92054de478abb2985c2fd70c98281d6b1672be2aca1e616f257c54e1a0814c7334264cad842e958290deffd41ada0a6520ed8da99a2afc8c8757c08b453feb00c1d11e9565c4b4ac702fadea8fcdcb141aa062324477f4de13948f871e9cf42c8350a7df6dd51c9e4a8f9537eb92018c350c90e44220126d5ec0f003a1d85a8bf93a322d007c8822912d564825c71ec1c9da62ad101a6d93b852be47688ea63159d3b39b94d5afa577e83984e535ed59a92cb0bea318e3da8d16fdfebbb50700581736e01e950d88b1d590194b155f1e709a8e00000169de135fb56c3b2d4ea40aedaef7d4cc323f4728c89c438d8a25e2876aaab8a538c35cb670294e358ec12f4b648d073e382bc84f8aa9cee550cee5d3620569dcf70fd3eb9c87346cff8ffa2cc90c58543da4cbc0b9c91fbc78b7c329ade74fbdf25473f27df320a478ae6618d09ec04a0d5b60d119bc560ad5259e4498d2e03179ed37150eb0aba22d820cc524420c75b66239ca6c232b3013f24e432c49c4b94de583f1d3642738d716ba6bd89f54717534cdc3823d8c6572afebcf9dfb5eb3d637c9582661ed3f01c6495d8133f0ad22dc4fd8afb4c1e9da5b67a221233d3d98073316af831fe31559e867563f3aeb0fd2374395d8c76805fd7da0d1f401733b9d8eb4bda6b2bca0cea86dea49869669d2c247040237e9747718f449ba1c0e353fe469dec239d9ee7c92fa816288b9058c1fb2fb973b162088f2a004121f9400d50ac153a6298e1dfc028a4891b69bb82c34dc07c3a5384da2abe42ee8b2f16a78e4c98d5f50df4e583db21cd37088b6b7084f8b9b16d00451a0fa89f31c4c5b6c8ee837719564808f22e0af28d862af153b1dfc44d40f2798f8dc11c9235f6940414e0d25433f14b5c3efccf169b18db1fe146fbdea3f74bd2bf558f0b47ea38290b9bcd1ebf111f8f005062277911b3399d5a038a1a21da940af3c273a4ba533c7097ea8c21ccc12c1f57a7af56c1e6dbe31fa77f8b611518601459598dc165ee54bc20eef857d130fa77fb9ddc37c50ccf0796ae34966eba26ddc86a3f0260e03875f4943df7f151f48144766391ca16fb14f4c6a88ab1e987a62579f2ad0f4380566f2e5365435fc2cdc098930ca3165404c12bf09ea26cf263ab6fdc335629b11f2225d5fe73b6617d9a2659963646991268bb2e3a01eda81f998073620efb63ee96558137bfbbdab7aae1ae1a1d4011ed9323ae502605a952f485ce1b35d0db8e585c32011f4e6a41204de494733b0805add01439c3f43e22f9497ca5f15913b0ac5c49d9fb110000ea1bc5ded8c209a16094efcd8625a9b3113c35818534679e35cce338a5845e1a735bdea1a7892c7207071ce7e76c7a59d82312ec8851494662a14c534e9795fc0594a35deeded10660dedf6e24cd6286dfc41a0f3b3e553cdafd67761a0e667ba2daa281beb900f9ad987b1c48afa9ffb1d764b69c46faf0371331c00b622e2587841b9760665f7228a6124a9dcf861acfa0c0ffb5030c3a9a369d5b68ea257aa8c241d9152e913c246125eecf1e41a7a186209e7d9b48db8796bad013659887ae642c0439534202e8aa650dbb01248e896f88bec9cb4b463bbb5a170eddd2abcf903133947b86777de6deb408ad72dcf93db08033eb068030bd79790bbac94583eb8c5634ab9c9152f650829f3a65dc6f86073c11df04de05168f11efae1be0137bce1bc2d2200627af36a5778a913afecfc16c1f735024577ab057b779cb2462e75d346f7eeb9dd3ca8648d4aa730b67784a509c9339bf3b1fcb64dc26b248660a8000ab9fa5386f73c4f6f8ed74da3df61082a2cb088dfc491450a30d635511ff887189360d25fedeca675a0c302d91c5f1d44c19ed53b9cd7378bb8da977da1a252739b022b7fb2f14941272c6b629af23e84a3190f66aae7af12a4b0a62294292a1fff4eb8f998900959eabc02c56138f986aae1ddeb2038740f8ab1051efd752fc2717b6cc17a679366f63cc3672b9a9c9b8c1073fd2168706883f292f37b9a0f0fe10f0ef220a79b718417a982df9cbad43756f3da2f8b2faf7ec12d54807c2ba9775c126213a55468b2a0421a37f32aac4932274ba21f1a6cfb2c447cadfe4c36eb55493619a5964953b669d92aecc14b969821274c3c6806cff84db7958cb5103ad2dcda0d6cad801be47a5e753ceb5e04a991c38bf6ffeccd721dcd23568b6498956b9af5689786dab6a9bf180c94999392dffe5d1e7b18cea1d6bd5f52f4bacc3829e8570beb0f57c0f00f916499fe0f8066fa6a19354070bc7831091a28b348117e98215fa5007c33bb4aab9fd7f6bc9a639264b65596284a6a0c9f086d6459afefbc222d5a101e3eb43fd743790ec14c5b859d19d884a2fe59224d18298bc81edad05e336ab58ed83c8876ada1304edad5c26682619ba2cd27b847604a881030641d5cd64afb6c8f17878cae0f70ed9d65dd3f10a2a840a6b07823e3b8e4166d12e812a1ab2e715e063abccd8dd2c4f666de745be1f0ce07a61fb7ff5b85e1572c563705eb28ac6084ff99b076d47a96c2bead5d5e1022ac10aa8aece9470701fab439465558c8e0eb073bb74e1283b1fc7f9054efe9a6a5eed6f4bf7a24b51f333f130dcc6758928907166c7c674ba602bebb01f965e143e546ecdd85ca4e93d41c61fb03004f1e4b4548fa722efcf44035e431da192d03231347317f22fecf204bf8015afced4af18aaee50785ad7d12f42c2f9002e43721b35d1ec8a9b495cd176ceaf5a9861d057121efc615d2d8e596548b04f29c5cbc472582503640d87ee3a76a72ea0d09c79d16ca7f04141dc72ff43492e63d6ca981a7a446a9f65454581e1a92c921c7a5d5150b730d997673be5217850d88cffb6a2eb94e188e46aa287c3e2bd399dc3580903053f6f449ea08b90dcbbb98bf667fc24c65a147cee822897bb214e2996bddef30c7ffd6a138b055c68c97e2c8d17c19689a6f11bd944183601ba447f06884422b6c3bf6966733154ee7877d922439331e4e14d81d280b8a6611a46e04f7b0f62800814328ebe7026f95ff1d198d0ff3b653de12a27ea3e312a9325baceb22b75d92f53d46d0e8b40a8f410c478eaa201746153a58e0242760d041f82f19df4ab6e4cb74e4f85c8c97f8cb1686da6aaf317fd5dd6c91c16b81d953cb16397b1dfc88e813d2c2ef28da629707a45797ccea81d3ac5eadbd2c11f03645c43541428fde264ad88b4b872d8627589eb20f3b76b200a37dba3f74d97d25844b9ad5ff55b34f78710c258e584c6d46cb89a3c714cce82bbb7472f95109768a3ff7744b4769cd0ca16415c1a405e2287aeaa490ca6da607dc570427234bcd4f610c73654952f6a888b7dbbda71c911b99dd63eae75e6a9ba95c6e1009f5ddb93845c5ee1c00d3108e2592faf61639afe460371c622787f58916a2f2ecf68bbf9387dee0b2b0d31244ae9d049a8f82eef549f275229886434f81c3743cbef6488c018f1bef87a5395665d7f245f3291df60a90232d691bc7554f6d12aa55c995bfef083a6321900106ee87afe11227d883da379bb9f50a9400f2780b5ebd7ba7056e039ebf135f6df36769bac50dd252c99f04c606cef3fdb8eb21d3b25469ce217c699e4e17606e913023c871efe66abfe975dc7a49bfe0769c27ca4e14c49e83a11178845397b96c67333e5e1289811556571d2e05fd660f4b12852fc9730937111d4f532adac28f0a121743759097d9b484cbe7265cf3d69a9f9fbe25020034a64c67770974925e9b3e979b9e33fd316eb154f9796a5b1ee4f35e44c8ab20f26a1e07a8d77ebd75a9e5dec742ccc6acf5bcdc81e01938c92b9f94fe97055eda0260f7dc49afea33d81263dfbca3d09091c345e55adf634f6e83cda3218b2f3dccf52f53d348d7040db205b81d4f344ef9787e59470417a2a758829f6c35db95558a3fdabea6326c3dc367cbc493816d47f471e396550b9dc36ad59594f12adaa7ec10369a0b77223f0f12a7cd827ba7458ca7b5ce4d85cf9aa154e421953829a2ed1ae170a28e26c0975ed28b49964c1ecf02d65cd16b4ef82931e59745248a48bb2409b35662d5715ea0643c7a9af0ba9727141ddfe759cdb644239f4e174fbbc91d126d3520e55b29ea073007288c51628c010e48bf9c924830febad4d68e147a8ad1364e64f9d4edd80e005d0b0fceed230e9b8fe7951052619efa0a7007d442ca701a6c9181dfc50c606a52b54eaaa9d9fff7f8333faec6e0cec5e3af21b2c187313fb1b8adef7b182c667092f18c5ea93b79692dbf04d8a51c0af2cfe5df040755c46f6e6c753f54fc9596761369851f6ad999abdf7cb7eb65e62470dbc28900bc172632416a9521226178b44f84318d0e2178b5deb0f84d4c7122fe8c0933f087a578293a26dde6dbc909c5a2f49378e1e6005285300cf9c65954a15eb81d0c1ecbae98726963fa172a92001d8b5e5c018a70e03c52235a8efb956b3c5027b4c3086ac2a4b8df6f203816ba1ece57fedf86819e0cc26b068ae12cc45836b879efea4dc6b0742eb0fd986ac5cfdb76dc6dbb8b43a8334be23aacb5216caa93505c8c96b9ed3f53302b2c74f565fd29b04b9df0666b8bc9b5d8eba4b40ff4dd53ad5f3b177daac2057185c04613403a8688b95b16c215076200c0a4f6ec6c70f091ce9fb7131ee4a7b194f7d00778ff19d40c4527ce0884c9d6d4d90f86157154726e63baedc0fdccb959b89db2051ea5cb5351d6582468832b44aaec9f9c338dc04abce24763d4804a5ce396fc383db5e6306bb7978ab4b5ce5d76656a26645a957b0486016063c030a56cdb142376646001c4a0c33a655259784c2688fe1dbd6113dd0c49f6cc4e57e276e1e6cbadb8263a76d263f04d9a3f76ae56edd1eb7a4a11000a40efd1d4125297cce7f8e248b6e2ab1a2f55b956a510423644e483b2c4a004f54ae6a118b82585a3cc5913644836b548332cdc1e933ee71ec6ab77116e651bec5c2f25f25e60434dc0430bab4017fcf79fa7e64f50a585ff252581bc873f7a2bd360d6740aec287ef5cb2a343b2702d5ce820a080b9d477f04d99f79b415778e43862ca6f37ded8fdcb8031c06ff882c3cfe1875504b2bbc05eae927030792d253b0f16adda59e8dcb30b0115d4bcd675b1fc8855a8c2ab6ddc05e71989aed9f3810dbc3c3efd14489b728aa2532c1a5de379913525572e31d91b34b3fbd468dc42c5a14cc27c803a6136f2c47b2a5d7ee587793d8b52824ecd607488f98041e05dad2c313d1aa61f052c6bd0cbd943fb103b003129a6c9393e977b60e6013905c92db82c9bc8f033f9e505ce0f1124a839c6bc2770c996caa86acd9db617ff64b8e1acb14d001ededc17a5b2da40d46c11e1e3775511db7ab9b1ea7205df42a9ac8204384dd581ff5856d31e6691551fb0c2cdc6bd0760c1bb36f3b8677db27880962a59037c4d768fe9170abccdbc203086f6e5c01829be3011933b970b384ae9c1f7aca5a3dbaeca7c50c6376c671675e76cc7eb8f40b8c3b4928080a7709b584be9d263e0a583fbe1a633b4ec629493b7ec6723817d7abe56c38c2ed8407fd9b6743b1092c8e88578f91ec7394dd54d1e9dce2df744f8ee28fa18b0f1f53ecd0eacc3a21ac0f5206e0f6d90280adc82ca1d30da200daffdb9dedaebbb6344ff72d3bc4a9e0a8e5cf0fc6da3b0c5dbcf56001850525781c4cd606cfc941340eac1ab7dbfae6baab973c38ca67c791ea82f27c4eb2f2c918866d7ec733fab25764e761d0737a737c9595b8add3cc402b32f42938c9ae6c888fcc84ed6f7d1912b24e4f52d175bb66b98d9cb25011511d9db44bee4e20b0569cc1481bd10c9a5071ff395cc13a74876c861b5c7ffa6ec62170e99b1440d24bfeabc14957e72253b87bfeb5fa58dfd1de9757ede5bdb962af1cf7e58ea0bea238f966ac7da8ba190cab2ec59955f32adf69727665583390d9b5aeece99a4a1099498c480a79faa3646eb5e437e3cefc12055cb0841c9c159c12b24ce66cc96f66e0f0c2a9dba877ca66103e64e0f7b0e8a37d262ad3104331a66a06be4ac68354fdf97a029ab9f894fdf3f7aac2398966dbed3e0fd74024e57df30c84d16538ef2275d5481dd59a7bb4140acd44f56eb1e3ccfaa4f57e2182211d5e1c55931fce21208f1c71c513fbdab69ad368cfbb36c5c7f1108b4bad9114aec409d338857e075c738d766102927c55bc5fe24272c048f2aa10cc9545960b9b85ae9635fa96c2a6f5b721efb0c9a858c734e9514086dba228909ba63c8a613ac2c5b0814c0a68f307fba231b4d8d5970033e23db6c2b64f3a91bd481aaff524ce74d34f6fbc62a347465ad5bb861dffcfdcd9cc47ccbf72b41c3c4a8b762b09ea634f822c37aab937ea5e7c2e553d79db2c8f02556aee638c262f923a6fc61bdee9ac47cfff758877744c4910ce0ff6a52ea7042e881181b916242c802e6cecaaa54ac87361127dc0c40be01b0b91259863bb64725059b3271db59fca3cfcef30e14f34d12056b2c55b80d99905b3d44768af094eb44c53f95a73ec04bab785d02f81f580235cc78616c5c5187fb55245f0ee8bc0eea9b165566122e95767a2dca8c9b522a09f2fb8857b909131d5a8bee0644073628f64726449074c4a3d0cf1f16950eda988b919aec3f07aee87ebe4261e16f86fd622f182c167cc940df1fab4d799a1edf3c52efa1c6f8f8aab0a2d0291ed6093878a7b1239f8d02778786f0b170993d6c96b746af05d592ff8b103ffd420f4be13a5e40f61a9d71767a02a5d042bddea182f875ec221f61a1b39c1ef08e0a554f7686ba2255522e6dcf42969243d54a9ec2840ef88b195d24416283fadd7ea322bea51f14e48bca5f4c6fb9b769167b978fae105c3a985664c5352b5563c94ceffffc7ee7803209c19bee5d601e40a36051c0e96f5d600f36c3aba457470b0b094d9cfbd4c54f56e66411169f703373db2e29f05dc99b8ac755b0d768ae58afec6e1969da1d534948b26cb46c218bb9218c29d4010113c7df6ac945c8b214df597231f027ed1234d360bc50d70eda401f27391b9f8ee8aecec0e08e7852bb992f70586df6455f76ad00efa5456d093808bf3e584c8228106066d906a13f7b4767586ff6dd8977aa3957090027754f0c6e5f70980897598ca3aeb187a82424ea81c550be7e348f1bc540202e5158ffc039542f0be2cdaff18232dbcf39c9277882ef8dd3fd1868126ec880807690b0fa3e309559a96c31e5db817e55ed4a7d51d722b6840c5452d3015b3cc6fd09b19ca26d24833704eaacc2338484e9ad1a538d71d9b8fb933f5a200b5a6664c5515d3c7b5272719a3f0acce025e82d68c7a5d0f8a4300889d5bdd0ffa0871b331f8bd33752a15276165cd7b9433928483e33d6b42753d5cea7023c605f5cc61c419bdde041318d4f8228482215feeadc2f8a881fb46553bc6cb9d42c055a09e19e2cd397c5c43a52505929e04733672c37e217c175ca95d9e40536de17f27a2d920cb5f27bc5358fe267098a755c20f26683b90d306a20652b53dd776fd3ab291749f5054a57ad10e431343aa97dc63413c65c6e111f45ff917a8fe3e8d02260e4e2fcd31ee408989158249e63d822d425b287f3db296728170685532cbf307377749902b6ccf26b862e78cf3ebb483345acfba5d93ecab9cea370cb72e5cb282572a109dcbf808fdc8d128f6771ac4ff18e21bf2648c932fcd2046a5c8ad59b6342a2c4561f3397bd9e0d06e8a366a7ecdb6b0974b4b92d9a70fe929bc5edc8f0a313e541463b13711847c3867a16b371e4cb9a2a0e657a304451e8895b8cd57b9837772ecbab64fe557e0939dc8ebea4558f492384570fb80ac7745319ef39d533d9651d43e6ad2894ea521915f90038e42b39fdabc70774014854e2ac4bf71014143aab6891105fde1a255451cdaf2fb2628160ae995589eda7a268bc59a037dc25646da7ebdacf5d41484758ddab1ebd2533b2f4fc9f4d9966a7c934f3140f5b3ccb43851180c45148206769265b48cc32aef8cd7222a121692cda80ac96c4b941153daad3415b8b2857e005f4c4588678edfad23720ec91e24d24945abb5141273e174f67ea78493a0bef7f9a6be997e25818b4030ec11bafc624da2e797884abdfd9d467862479a9121effd427b26f7ea8762ac7a30412b4c3280358378cbad32ae52c34d3d73fb8c8ed42e9a5602635b58f56606e78e0b356413e6deb79c072096d1c787b7a5aed6ebacf204aa78532df7056ab67c385d333526edfac5a4afac105ee6e0d0d32cc1aee393cb14a23465d7d0c10d59798d422c4cfc8a79046a26598f51e397209cb46c5ce48ba9d3cbc75f37c754335d44bc661a6c2865efab2233de7cca12343c3b84406462518071d731ef3c4c6785a8658f72f7c3f644296738dd163447944771cfdc566d5dc635f9c3a2b49272a3fa4450308e939c25ff87e4000316ab7b2a3b2a89e8f6dd7202ae34869b3c29dc470c699059c9d7213e9cf35e4e41c3a15fa4e84344864bb8e24fbbc30f99b10485d36fbf0a1064b6ae4d6cc5628529940e1405e49edb3f19c3079dac36f13b699edb73c5e2cdbe5d77172dd3266f0fe187562bd6f89b78cab7078fb6d18396ef7d9db5377b358f922df14e26991bd8f376de3a30066810b6caa78cdc14f9d807b58d58ec1fffe183a23906d3671378a8379cab89934ed12aefe1490e3f934307a85178d87dd701167b26ef92417e883895aa83110d7a0fd77a3ec4f227e198bc071fd2d6db0e4d9292c08167f0fc7514e431d889a37014cf4f80eca4d8357907ad5fcf67b2322cf945825d98f55b3bcf34835100234e5023df4587f2d0d87350e83e7064ce13594ed7d508b64fb407b4f2a4ad72baf07eeec7448a0d4982788eb5f135089e2f1abb21a4eeea98814ce7ffd838f9e907cb9c7a1eb6580e85c6bd3b3404c68c3f6de36032d6fd631f539b2862a9c7abaafa5c37f06491d32278e26a57a49d9b3c41bca349151772f1e50a8963e82797a4ca0de984c0ec55c85f1f9a7af61bb6e025c199ab25bc5a55f5bb42852c3649b24e49112055fe93cdbbbaaa59c3ef448db7ab81f4e1e0cbe1abf063cfa3191d7a97e42e0a5ac5ff83dbed38ad70c9694b3a6042a161c69a53c869293000ca32f08ba195b460ad41adf372b5aa006940104cbb5730e531f13a3d8ac53c8b05c6d5908fc7efa1d5657ef444f26ea214ebf8b40be6fe34a1f317ec91b939b872e41b5c749d65f3bf2841adc8ebd86d4dcf6dbf3739c641208a9f2343663982ed51bc910e1597caff04de35c0dbbf939e93a708c42fcf778a90220fcb6d4cd898be1a8a85afbda8f5d3e355d8e5855d9dc669917c2a22c24213cd203fbc3ab5012d06f6f9a5708266d74e38d0715d3db36928c8e1ed93b2cbf37210197d647f53e995cbd89e3f26944b25420c984d8e6d66c915ab92eae0d79e83e29902a25e19606151379ae8c90708ac986966b8780f4d2c8150e4249d3bfc3208fd16180ea8408596f51e6eed2d786543b5eda8b4c81845a93c53b8eec472c90d60e5c9720076a5940573157fbdf8038f5a76281041b882634699614dfd47113291b0438504d687a728cf77b010bcc9fc84bae1be3a3f80a3fa083c4be94142ba4016713be4a7ca5077f44c11570484045f58cba295e8a69db25e4cb622e682557e1aa9bf7a0a40e7a484c10420376af91510aad5895b3f029980c332412992b8aa09c083812bb7633c43a9bf6049185f661156cbe4eb6ef9a62ef1ed0bd8b414647bb48b0945bed73e719a5ab467071254045146da34e1e2a9d12b542738c8afe6fe85450182acddf99813df7ae6f750ed390470492938686ebb933b45fa7ce3d5178ce975fbf9a97d9e6294ad35b6081b12874c602c40af5209d7457adc7758274e91d5155d9d6dc0b50e8e29ef976e779729778e56416dfd237eef62875e3a13b04a4ecf8a69c089b1b165f003b1f86f88e61686afddebf92b7a7fcccbeca4e15e1c651dedc27cb8fe5798489515a5a1c2b1af351955855be7dc7342763df73a83e516dcafd7ccdc56a9e84e03eeea207099ec32f38022f54f0fb374caf5b56ae040da5766a33978aea7c33a265d9f95bf707c7a3fcc47a5d20344b119fa34f7e80b4c128771fdcf43f7bb45681c0095b523801fb1662ddbe16b051c9faeca9c98a83d1893dd70fdc12ec312c44ce60d9e3dc0c91fffc5e3ecdb40b3b68da2ff5052559cc519ac139f645798733d1fa55a1b16020c002a728d661f80eaf3684fd68da26383b035f150c9144d5526395ed5b3f5ca33faf601131b9f9911b0fd0cbfe0b5172130d8ed77ab1c809a0818df691e8ab2cb17537eabfe7e552ab4da056de72591c487afe47018b6e45067505fd3c1268c1eecec31a36c34bef07c273841f8de33edd4c73f838ee8d28510cdb510d7f21af3bffe1be92760609f797ed21ae329625fd67c36af5a4f1ec916591d8d3a300a9c1ff5f932d8de94e478bb9d6956e47c6f2ec435cc8cb878fc4fde9960412843b388ca12f4cfa2390030d12e4d036aba1e59c08d59dcf30dcb1762f66098ee67992b1b68f7143fc3c4dc5c535fcfc8879f3e97bda72629edba01d5912a86aa17f328597976a7e7b43632ceaf5aa66b28645123da0c4e5fb7d35618f8cf46ec4a50491bb7220071b5b45755fe97e7347417ffbf17042049cf768ec4a1d52829143136612bb2366e2cfe8a74f8d1c39e2e8ea0caaf553462fc0a78afe2b49e1bc82c95e081f346fe1b730cb26f6fa6c588d89f9d012562a333552636230b2959c0fcbf3a0c565be14bdc710750302fe78c0d4d12ace850d8e319986a12171daf5b1ae0c5e2d0749705cc6d9c0d19b683cd060e1c33a775e556580e052ec476fb573934c2d6da713f89f7c15f280474824f98a8ac985b8baab1615aceb9535a5a2cb84874eadbab265f0b790ed7df4311d0b752d95fb1c1fce443a9b1eac5400a0fb882eb9fab04f38c1f655ca2a3fd2aa9810e2ecf12c381cd3baa3cac20eff289c56f532d2f941db66ac4f0884278aabd125d0ffd261d5d029bf910ff23255883358e455230d8d23d7ed2dc271651795777d9a6ec0b029b5e304a25ad8bec184d05a0a93605c0ee3e7e1f0b85bef3fa7a8ccbedaeb28cd5bdebd4be33dc8ce4941ef96373ca5e7337020e3e692215c344b4bf0518ad3b93e3d78ead1616a1eafb9d3dc6adbb65d32477c9554e22adb7f4be74ebd0785fd8ab512f1836613ca9cd8115d7981e92c5ece2738d2c106a6bdd008212783debccf392aa4c172ebd2d060fca7dbd9e09079502c5d8cd85670979449a558fdd1b68e20ae1d7a06a3f565dafa52e1f69b95882e89ec798d863541e8e03d9957404ecb8cbc63ebe8cb1fe4ab900137b3091764f735b8ac28c605b8051279d2a93395364473150838cd10a8f8f228b5d81e0de5c90959932adc404d6e0625cb80f65cfe5ab784de09a4965ae17ed8a2bea885ffca14274c857b7a8cdcc1e3c9b9d0006a2a70 FROM : lintstar.top , Author: 离沫凌天๓相关推荐: MacOS Big Sur 配置及使用记录作为近几年以来变化最大的 macOS 更新,macOS Big Sur 对内置应用的图标、应用的设计语言、桌面的程序坞和菜单栏等方面都进行了重新设计,拟物化的风格深得人心。 虽说 “BugSur” 的名号不是白来的,但是在我近半年的使用体验来看,暂时没有遇到过实在无法解决的问题,所以还是很推荐有 “余力” 的 Mac 升级 BigSur 的,拥抱新事物总会有令人开心的地方 ~ 本文会不断记录使用过程中遇到的各种问题,以及能提升幸福感的 macOS 配置。 Mac 配置 系统快捷键 剪切、拷贝、粘贴和其他常用快捷键 Command + X 剪切所选项并拷贝到剪贴板 Command + C 将所选项拷贝到剪贴板。这同样适用于“访达”中的文件 Command + V 将剪贴板的内容粘贴到当前文稿或 App 中。这同样适用于“访达”中的文件 Command + Z 撤销上一个命令。随后您可以按 Shift + Command + Z 来重做,从而反向执行撤销命令。在某些 App 中,您可以撤销和重做多个命令 Command + A 全选各项 Command + F 查找文稿中的项目或打开“查找”窗口 Command + G 再次查找:查找之前所找到项目出现的下一个位置。要查找出现的上一个位置,请按 Shift + Command + G Command + H 隐藏最前面的 App 的窗口。要查看最前面的 App 但隐藏所有其他 App,请按 Option + Command + H Command + M 将最前面的窗口最小化至“程序坞”。要最小化最前面的 App 的所有窗口,请按 Option...
阅读全文
MacOS Big Sur 配置及使用记录 安全博客

MacOS Big Sur 配置及使用记录

作为近几年以来变化最大的 macOS 更新,macOS Big Sur 对内置应用的图标、应用的设计语言、桌面的程序坞和菜单栏等方面都进行了重新设计,拟物化的风格深得人心。 虽说 “BugSur” 的名号不是白来的,但是在我近半年的使用体验来看,暂时没有遇到过实在无法解决的问题,所以还是很推荐有 “余力” 的 Mac 升级 BigSur 的,拥抱新事物总会有令人开心的地方 ~ 本文会不断记录使用过程中遇到的各种问题,以及能提升幸福感的 macOS 配置。 Mac 配置 系统快捷键 剪切、拷贝、粘贴和其他常用快捷键 Command + X 剪切所选项并拷贝到剪贴板 Command + C 将所选项拷贝到剪贴板。这同样适用于“访达”中的文件 Command + V 将剪贴板的内容粘贴到当前文稿或 App 中。这同样适用于“访达”中的文件 Command + Z 撤销上一个命令。随后您可以按 Shift + Command + Z 来重做,从而反向执行撤销命令。在某些 App 中,您可以撤销和重做多个命令 Command + A 全选各项 Command + F 查找文稿中的项目或打开“查找”窗口 Command + G 再次查找:查找之前所找到项目出现的下一个位置。要查找出现的上一个位置,请按 Shift + Command + G Command + H 隐藏最前面的 App 的窗口。要查看最前面的 App 但隐藏所有其他 App,请按 Option + Command + H Command + M 将最前面的窗口最小化至“程序坞”。要最小化最前面的 App 的所有窗口,请按 Option + Command + M Command + O 打开所选项,或打开一个对话框以选择要打开的文件 Command + P 打印当前文稿 Command...
阅读全文
【渗透实战系列】|15-博彩网站(APP)渗透的常见切入点 安全文章

【渗透实战系列】|15-博彩网站(APP)渗透的常见切入点

涉及知识点:app抓包,寻找注入点主站注入点,thinkphp框架博彩后台站、库分离主域名前加参数,发现n多,管理页面后台管理登录、寻找上传点做了不少qp(棋牌),BC渗透了,通宵了2个晚上干了几个盘子,简略的说下过程,做一下总结。首先说一下qp, 以我的渗透成功案例来说的话首先信息收集必不可少的,qp的特点是什么呢?他的后台会在服务器域名的后面以不同的端口形式架设 如图:关于端口可以发现,基础东西你们都懂。切入点:在app里面抓包,查找邮箱,充值,的地方寻找sql注入或者意见反馈的位置XSS有一种情况是抓包显示127.0.0.1的 抓不到包的情况,这种情况多于大盘子,它不一定走的是TCP UDP协议。可以参考 T-ice 表哥说的 Proxifier全局代理有了后台之后可以目录fuzz一下,有些管理员会有备份的习惯没准能有新发现。相对来说qp还是挺简单的。  那么来说说BC吧,看个昨晚的渗透的案例。基本上大型的BC盘子都是各种防护+cdn 标配,毕竟别人赚了那么多钱也不在乎这点设备钱。。。。注册了个号 发现没地方能打XSS的。。。。。作罢因为这种大盘子服务一般是挺到位的,牌面这块方方面面给你整的很高大上,什么导航啊,什么积分商城啊。。乱七八糟的应有具有,在他主站一个VIP查询页面确定了一处sql注入,而且是thinkphp的框架thinkphp3.2.3的 ,因为有CDN不知道真实IP,所以后台是个很麻烦的事情,本想着看看数据库里面的log有没有啥发现没啥鸟用。。尝试读取日志文件,没有。最后读取配置文件确定了一个很脑残的事情。。。可能通宵了之后人的脑子有点僵。我给忘了这种BC后台肯定都是分离的。。。。嗨。少熬夜。于是。。我就以以往的经验手动的在主域名前面加上了一些可能的参数。。admin.XXXX.com   agdw.xxxxx.com   ag.xxxxx.com   嗯。。。如图:这套程序的盘子大概100多个吧,几乎都是一模一样的,随便找了几个后台有个地方任意上传。结果。。被杀了还是咋回事。。做个总结:像这类盘子都是包网的,大多数都是java开发的。那么BC盘子的切入点是哪些呢以我渗透成功的案例来总结:1. XSS2.注入3.历史遗留的资产主要还是信息收集,和耐心。其实现在注入还是挺多的,只是很难发现和识别了。同时还需要和各种防护对抗,有时候其实是个注入只是被防护拦了不确定的情况下很多人就放弃。这种菠菜类的网站, 大多数服务器都是防范级别很高的, 都是包网 资产很多 而且前后端都是分离的 有时候 ,没有思路的时候 可以从运维方面下手 ,有的运维安全意识不是很高 ,还可以从C段入手 ,因为有的菠菜资产分布在几个C段 主站上面 肯定很少漏洞, 基本上可以说没有  ,还有就是从游戏接口入手 或者游戏逻辑入手, 个人一点点粗见。除过上述作者总结的几点,其他常见的切入点包括弱口令、代码审计。作者:极安带头大哥来源:https://bbs.secgeeker.net推荐阅读:渗透实战系列▶【渗透实战系列】|14-对诈骗(杀猪盘)网站的渗透测试▶【渗透实战系列】|13-waf绕过拿下赌博网站▶【渗透实战系列】|12 -渗透实战, 被骗4000花呗背后的骗局▶【渗透实战系列】|11 - 赌博站人人得而诛之▶【渗透实战系列】|10 - 记某色X商城支付逻辑漏洞的白嫖(修改价格提交订单)▶【渗透实战系列】|9-对境外网站开展的一次web渗透实战测试(非常详细,适合打战练手)▶【渗透实战系列】|8-记一次渗透测试从XSS到Getshell过程(详细到无语)▶【渗透实战系列】|7-记一次理财杀猪盘渗透测试案例▶【渗透实战系列】|6- BC杀猪盘渗透一条龙(文末附【渗透实战系列】其他文章链接)▶【渗透实战系列】|5-记一次内衣网站渗透测试▶【渗透实战系列】|4-看我如何拿下BC站的服务器▶【渗透实战系列】|3-一次简单的渗透▶【渗透实战系列】|2-记一次后门爆破到提权实战案例▶【渗透实战系列】|1一次对跨境赌博类APP的渗透实战(getshell并获得全部数据)长按-识别-关注Hacking黑白红一个专注信息安全技术的学习平台点分享点收藏点点赞点在看 本文始发于微信公众号(Hacking黑白红):【渗透实战系列】|15-博彩网站(APP)渗透的常见切入点
阅读全文
巧用APP历史版本对APP登录signature分析 移动安全

巧用APP历史版本对APP登录signature分析

前言 之前在火线zone看到利用app历史版本来进行app的逆向分析,可以降低一下分析难度,比较老版本的安全防护做的不是很到位。正好最近有一个app,尝试利用一下老版本进行分析登录签名,没想到效果非常好。 算法分析对于最新版本的app进行了抓取流量包的操作,对于登录包,发现校验非常多,而且也没有明显的校验文本。并且该app加固比较全面,采用常规分析手法,需要先脱壳,然后过各种防护。比较麻烦,因此我就尝试了一下利用他的历史版本的方法。该app最新版为2021年7月发布。我下载的历史版本为2020年6月份版本,没有加壳。首先也是对历史版本的app进行抓包,发现登录包参数十分简单明了。sign参数,和包名以及密码类型(此处我采用的是验证码登录),还有时间戳。之后对app进行反编译一下,看一下java层代码。搜索siganture后发现一处比较符合条件的地方。跟进去看一下加密方式。显然这是HmacSHA1标准加密,其实在最新版也是采用这个,但是写进了so层,这个以后再说。那加密的参数也就是显而易见。是由pGrantType+clientID+authorisation.source + timestamp拼接而成,而clientSecret就是密钥。此时测试一下查看结果是否正确。结果正确。在这之后,我对于新版也分析了一下。发现密钥没有改变,字符串拼接也没有改变。。。其中某个校验采用的是so层标准hmacsha1加密,密钥是dd49a835-56e7-4a0f-95b5-efd51ea5397fsetImmediate(function() {Java.perform(function() {var targetClass='com.xxx.android.cloudid.CloudIDHelper';var methodName='encrypt';var gclass = Java.use(targetClass);gclass.overload('java.lang.String','java.lang.String','java.lang.String','java.lang.String','java.lang.String','java.lang.String','java.lang.String').implementation = function(arg0,arg1,arg2,arg3,arg4,arg5,arg6) {console.log('n'+'ntarg0 = '+arg0+'ntarg1 = '+arg1+'ntarg2 = '+arg2+'ntarg3 = '+arg3+'ntarg4 = '+arg4+'ntarg5 = '+arg5+'ntarg6 = '+arg6);var i=thismethodName;console.log('treturn '+i);return i;}})})总结 该app也算是一个比较大众的app,从这里可以看出,他们在一步步的加固防御方式做的越来越出色,然而对于原本的关键数据还是没有做一些处理。这也就给了一些可乘之机。这对开发者来说是一个需要注意的点,对于分析人员来说更是一个需要注意的分析点。【火线短视频精选】【周度激励】2021.8.2 ~ 2021.8.8公告【相关精选文章】vip业务权限漏洞挖掘入门姿势实战洞态IAST Python探针内测版发布火线Zone是运营的封闭式社区,社区成员必须在提交有效漏洞才能申请免费加入,符合要求的白帽子可联系加入。我们不希望出现劣币驱逐良币的结果,我们不希望一个技术社区变成一个水区!欢迎具备分享精神的白帽子加入火线Zone,共建一个有技术氛围的优质社区! 本文始发于微信公众号(火线Zone):巧用APP历史版本对APP登录signature分析
阅读全文
APK分析基础工具 安全工具

APK分析基础工具

引 言随着移动互联网的发展,越来越多犯罪分子通过移动端APP来进行技术性违法犯罪行为,其中包括赌博类、色情类、诈骗类等APP。而由于Android 系统生态开放性,APP可以不经过审核,不上架应用市场,也可以通过渠道进行安装和使用,犯罪分子往往通过网址链接、二维码等方式诱导受害人下载APK文件并发送到手机上进行安装。工欲善其事,必先利其器,针对涉案APK,如何快速提取APK以及通过相关工具对APK进行后续的相关分析显得尤为重要,本文分享一些开源小工具以供大家不时之需。一、APK分析所需的JAVA环境配置首先需要下载JDK并进行安装,JDK 全名 Java SE Development Kit。下载地址:https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe。进行安装后对JAVA环境进行配置,具体环境配置可参考以下网址进行操作:https://www.jianshu.com/p/976ff5394fe7。二、基本信息获取工具APK MessagerAPK Messenger是一款非常实用的apk文件信息查看软件,使用这款软件可以轻松查看任何apk软件信息,apk的所有信息都可以显示出来,包括文件名称、包名,版本名,版本号,文件MD。还可以查看并提取apk文件的签名信息,包括证书MD5,证书SHA信息等信息。同时还有apk全限查看和提取功能,可以轻松提取apk的应用权限,同时会给出权限的注释。三、反编译三件套为了方便进行反编译,我们一般将下载好的3个工具统一放到一个文件夹中,然后分别【dex2jar-2.0.zip】和【jd-gui-windows-1.3.0.zip】分别解压到当前文件夹。Apktool   作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看dex2jar    作用:将apk反编译成java源码(classes.dex转化成jar文件)jd-gui      作用:查看APK中classes.dex转化成出的jar文件,即源码文件3.1 使用apktool反编译apk得到图片、XML配置、语言资源等文件在该目录下运行cmd命令反编译成功后,会在当前目录下生成一个VPN文件夹,打开VPN里面就有反编译后生成的文件。3.2 使用dex2jar反编译apk得到Java源代码将要进行反编译的APK后缀名改为.rar或者 .zip,并解压,得到其中的classes.dex文件(它就是java文件编译再通过dx工具打包而成的)将获取到的classes.dex放到之前解压出来的工具【dex2jar-2.0】文件夹内在命令行下定位到dex2jar.bat所在目录,输入"d2j-dex2jar classes.dex"命令执行完成之后,在当前目录下就可以看到生成的jar文件3.3 jd-gui工具将class文件反编译成java源代码反编译classes.dex得到classes-dex2jar.jar文件之后,就可以使用jd-gui工具将class文件反编译成java源代码了四、jadx-gui反编译工具jadx-gui是一款安卓反编译工具,安装后可以用来查看apk源码,支持zip、dex、jar、apk、class文件,可以算得上一键反编译,使用非常方便。如通过加载apk文件可便于查看AndroidManifest.xml应用清单文件,可以了解应用程序的版本号、包名、权限、第三方公司的标识ID等内容。五、Android 逆向助手Android逆向助手是一款针对安卓平台的强大逆向辅助软件,功能涵盖apk反编译打包签名;dex/jar互转替换提取修复;so反编译;xml、txt加密;字符串编码等。六、Android killerAndroid Killer 是一款可视化的安卓应用逆向工具,集Apk反编译、Apk打包、Apk签名,编码互转,ADB通信(应用安装-卸载-运行-设备文件管理)等特色功能于一身。6.1 首先需要配置JDK环境6.2 通过该工具我们可运行Apk反编译、Apk打包、Apk签名,编码互转等相关功能。以上即为本次介绍的几款针对APK分析的小工具,通过掌握以上基础工具及相关环境配置,对以后遇到的各类涉案APK自主手动分析相信会有所帮助。“盘古石”团队是奇安信科技集团股份有限公司旗下专注于电子数据取证技术研发的团队,由来自国内最早从事电子数据取证的成员组成。盘古石团队以“安全为先,洞鉴未来”为使命,以“漏洞思维”解决电子数据取证难题,以“数据驱动安全”为技术思想,以安全赋能取证,研发新一代电子数据取证产品,产品涵盖计算机取证、移动终端取证、网络空间取证、IoT取证、取证数据分析平台等电子数据取证全领域产品和解决方案,为包括公安执法、党政机关、司法机关以及行政执法部门等提供全面专业的支持与服务。 原文始发于微信公众号(盘古石取证):APK分析基础工具
阅读全文
对印度某电子商务公司从LFI到数据库获取的渗透测试过程 安全文章

对印度某电子商务公司从LFI到数据库获取的渗透测试过程

本文分享的是作者在渗透测试过程中,通过不同漏洞的组合利用,最终拿下印度某大型电子商务公司数据库权限。(文章已经相关公司许可发布)从LFI漏洞入手本次渗透测试的目标比较确定,最初我偏向去发现其中的本地文件包含漏洞(LFI),所以我着重对其中的文件交互功能和特性进行了深入的测试分析,很巧的是,我发现了该公司一个针对不同移动设备显示 “Android Google play” 和 “iPhone App store” 的自身APP下载页面,如下:当我点击页面中 “Android Google play” 和 “iPhone App store”任意一个按钮,之后就会跳到如下的页面:http://www.xxxx.com/downloadcallback/null:接着,就会马上重定向到相应的APP下载引用页面(Referrer Page)。当我在浏览器隐身模式下把引用页面去掉,想看看有什么反应时,请求服务端后返回了一个“404 Page not found” 的响应,很明显,它查询了某些条件或请求参数,可能遵循了某种简单的if/else逻辑。为了详细查看是否有其它参数遗漏,我看到了页面中的以下HTML源码:以上代码中的逻辑已经很明显了,有意思的是,在红框标注内可以发现有一个名为“download_handler.php”的PHP文件,在点击首次跳转时出现的URL中 – http://www.xxxx.com/downloadcallback/null,这个PHP文件是不存在的,然而这个PHP文件请求的是一个“path”的路径参数,其路径URL如代码中描述的finaldownloadlink,其“name” 名称为nameURL。所以,去掉引用页面后,最终也就返回了“404 Page not found”没东西下载的响应了。如果按照上述HTML代码的规定,那么其final URL应该是这种样子的:downloadcallback/download_handler.php?path=于是,在该处我偶然地尝试了一下目录遍历攻击,path=../../../../etc/passwd,哇,竟然有读写权限,除了/etc/passwd,还能读取到其它服务端敏感文件:而且,我还可以读取到各种Linux系统文件、配置文件和访问日志信息,这样一来,还能深入获取到用户的access token、参数和其它更敏感的信息,这一切的罪魁祸首就是“download_handler.php”这个文件:转化为SSRF攻击可知,这个PHP文件只是简单地执行用户请求输入,然后把输入请求的响应返回,这种模式也很容易存在SSRF漏洞,比如:这里,读取/etc/password的方式,还能用file:/// 方式(打开对应的本地系统文件):发现AWS ElasticBeanstalk实例另外,当我用这种LFI和SSRF方式测试时,在读取服务器端/etc/motd文件(系统布告信息栏)时,我发现这个Linux系统部署了AWS ElasticBeanstalk:这个线索让我有了深入渗透的决心,我们可以用上述SSRF方式来具体找找一些AWS实例,如MetaData或User Data:利用上述SSRF方式,从“ http://169.254.169.254/latest/dynamic/instance-identity/document”的系统服务API中,还可获取到一些AWS账号ID和云服务区域信息,如下:在我检查系统的AWS Elastic Beanstalk部署环境时,还发现了一个API调用,用它可以获取到AWS Access Key、Secret Access Key和Token等重要的验证信息,这个API是:http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanstalk-ec2-role直接用上述的SSRF方式,加上这个API调用,在响应信息中就能返回AWS Access Key、Secret Access Key和Token,结合之前发现的账户ID,现在的情况是越来越严重了:接下来,我们可以来验证一下这些AWS账户了,只要密码不过期,就可以在aws-cli命令行界面中来进行操作了,如下:也可以列出相关信息或下载S3 bucket数据到本地系统中,如下:获取数据库当细细查看S3 bucket数据时,我发现了一些很敏感的文件,如database.js、config.js、app.js、payment.config,果不其然,这些文件中包含了支付相关的哈希键值、加盐值、数据库存密码凭据、内部使用工具名称和密码信息等等。而且,我还发现了一个正在运行的MongoDB实例,其密码就存在于明文的配置文件中,我连接上之后,在其中发现了一些客户数据,如下图所示:尽管它没有包含所有的用户详细信息,但这些信息涉及10000多名客户。之后,我向上报了该漏洞,他们非常重视,给予了及时的漏洞修复,并轮换了所有受影响的密钥和凭据。最终,这次从LFI到SSRF,再到Elastic Beanstalk实例,最后再到S3 bucket数据库权限获取的操作,导致了上万名目标公司客户的敏感密钥凭据信息泄露。 本文始发于微信公众号(疯猫网络):对印度某电子商务公司从LFI到数据库获取的渗透测试过程
阅读全文
一次对跨境赌博类APP的渗透实战(getshell并获得全部数据) 移动安全

一次对跨境赌博类APP的渗透实战(getshell并获得全部数据)

本次渗透实战主要知识点:1.app抓包,寻找后台地址2.上传绕过,上传shell3.回shell地址的分析4.中国蚁剑工具的运用目录▶0x01 准备工具▶0x02 信息搜集▶0x03 渗透过程▶0x04 挖洞方法总结0x01 准备工具  此次渗透实战主要针对安卓APP,赌博APP后台服务器在境外,平台包含多款非法涉赌小游戏。1、雷电安卓模拟器,用于运行赌博网站的安装程序。2、抓包工具Fiddler(或burpsuite、 wireshark),用于流量抓包找到网站后台服务器地址。3、Sublist3r、中国蚁剑等常规渗透工具。 0x02 信息搜集1、寻找服务器地址。流量抓包分析网络赌博APP的服务器地址。利用Fiddler抓取安卓模拟器流量,通过分析获取APP后台网站地址:http://****.com。抓包也可以用bp或者wireshark工具,网上教程比较多。对抓包发现的域名“****.com”进行查询,发现目标服务器IP地址:x.x.x.x,并进一步对服务器IP在“站长之家”网站查询,确认服务器在境外。2、获取子域名。用Sublist3r.py 工具搜集域名,python Sublist3r.py -d xxx.com -o 1.txt发现一些子域名,测试未发现突破口 0x03 渗透过程1、注册登录,发现HTML5页面。App页面注册登录,抓取地址,把抓取到地址拿到浏览器登录,发现APP页面是纯HTML5页面,这就更方便在浏览器里操作了。2、尝试前台账号注入失败,利用测试号码注册然后Bp抓包改包,寻找注入点,但注入失败。3、登录注册用户,发现上传漏洞。浏览用户功能,在个人中心处存在身份审核功能,需上传身份资料以核验用户信息,推断此上传功能可以隐藏木马上传点。4、经上传fuzz测试,后端程序仅对mime和文件头内容进行校验。修改文件类型的绕过方法,直接上传图片马并修改mime类型,成功上传得到shell地址。5、是利用“中国蚁剑”成功连接木马,在服务器网站源码里分析找到数据库配置文件,成功连接数据库。6、使用中国蚁剑连接数据库成功,得到账号以及密码的哈希值。7、通过文件目录结构分析,后台为单入口文件,参数s=admin成功跳转后台,通过数据库解密后台账户的hash值,成功登陆后台。通过获取管理员后台权限,掌握网站当天注册用户数231户,发生赌博单数86但,资金流水54.2万元。在管理员登陆日志方面,主要登录ip分布在菲律宾、香港、广西、越南等地。用户登录日志记录,数据包含用户的id、登录ip、手机号、登录时间等信息。用户投注记录,数据包含会员id、投注金额、累计等级礼金等。0x04 挖洞方法总结1、查找注入,注意数据库用户权限和站库是否同服务器。2、查找XSS,目的是进入后台以进一步攻击。3、查找上传,一些能上传的页面,比如申请友链、会员头像、和一些敏感页面等等,查看验证方式是否能绕过,结合服务器的解析特性。4、查找下载,在网站的下载栏目,或者文章后面的附件下载链接,测试是否存在未授权的文件下载。5、查找编辑器,比较典型的ewebeditor、fckeditor等6、查找可能的后台管理程序,可以尝试弱口令。往期精彩回顾▶2021护网公布的漏洞清单▶2021护网结束,谈谈收入-短暂的体验了一下年薪百万的感觉▶2021护网日记(十六)- 4/22 hw结束,xdm,明年再见!▶2021护网日记(十五)- 4/21 蓝队如何后期逆袭加分▶2021护网日记(十四)- 4/20 一次成功的溯源▶2021护网日记(十三 )-  4/19 “阵地”还在,我们依然坚挺▶2021护网日记(十二)- 4/18 两台服务器失疑似失守,这次“狼”真的来了▶2021护网日记(十一)- 4/17 有告警,我不报,哎 ,就是玩儿▶2021护网日记(十)-4/16 HW的夜太长▶2021护网日记(九)-4/15 带你走进真实的2021护网现场▶2021护网日记(八)-4/14 “主机不出网,任你0day也枉然”▶2021护网日记(七)-4/13 HW漫漫,看好革命的本钱?▶2021护网日记(六)-4/12 InScan是个阴谋么?▶2021护网日记(五)-4/11 今天的HW报告怎么写?▶2021护网日记(四)- 护网第三天,你要的段子这里有▶2021护网日记(三)-护网工程如何解决误报、提高沟通效率问题▶2021HVV段子-夜班值守加点“料”▶2021护网日记(二)-活捉“韩毅”▶2021护网日记(一)-护网前一天最后一次演练▶2021护网来了,关于合同,你需要知道的6点知识▶2021护网来了,关于薪酬,你需要知道的6点知识▶2021护网各厂商面试题汇总(3.24版,持续更新。。此处提供的所有工具仅供授权状态下使用,如发生刑事案件,非授权攻击行为与本人无关.望大家熟知《网络安全法》.未经授权,不得转载。长按-识别-关注Hacking黑白红一个专注信息安全技术的学习平台点分享点收藏点点赞点在看 本文始发于微信公众号(Hacking黑白红):一次对跨境赌博类APP的渗透实战(getshell并获得全部数据)
阅读全文
百步穿杨-看我如何在APP中getshell 安全文章

百步穿杨-看我如何在APP中getshell

这是 酒仙桥六号部队 的第 10 篇文章。全文共计3354个字,预计阅读时长10分钟。前言说起APP上的渗透测试,很多朋友在拿到一个APP的时候,往往会将客户端的检测与服务端的检测分得很开,越来越多的测试人员客户端检测仅仅局限于静态工具扫描,不注重客户端审计与服务端渗透的结合,以至于APP的安全审计报告中服务端的漏洞占比较少。 我们接下来会通过一次网安渗透测试项目,来跟大家聊聊怎么样通过APP与服务端的结合,getshell。希望通过这个案例,能给大家在app渗透测试过程中起到一个抛砖引玉的作用,见招拆招,百步穿扬。由于客户给了我们明确的测试范围,且重点要求获取服务网权限,所以我们前期做了各种信息收集。其中有一点较为重要,就是发现了内部员工使用的一个邮件类的app,我们也希望以此为突破口,最终拿到服务器的权限。流程分析1绕过SSL Pinning抓包拿到这个APP后,我们首先做出了一个大胆的假设:其内部使用的客户端在安全防护上是否较弱呢?  于是我们当机立断,打算直接使用Burp抓包,找到利用点后攻击服务端,利用相关漏洞一步到位,Get Shell。然而,经过尝试发现,客户端对证书进行了校验,burp竟然没法抓包。起步就遇到了阻碍,所以,我们先得解决抓包问题。证书验证主要有两种方式,分别为双向校验、单向校验。而双向校验一般存在于银行、金融等app中,所以为了提高攻击效率,我们假定其为单向校验,并尝试绕过。该案例我们借助了JustTrustMe,非常幸运的是通过该插件,我们绕过了证书校验。但是在这里又遇到一个问题:我们抓到的包都是加密的。如下:由于请求和响应数据包都进行了加密,并且使用同样的数据进行请求的时候,每次密文都不一样,很显然,数据加密密钥是动态变化的。此处的阻碍让我有点方了。 如果客户端实现了OTP加密原理的话,客户端是需要存有非对称算法如RSA 的公钥的。服务端存有非对称算法的私钥,客户端采用自身生成的对称加密密钥如AES来加密信息内容,然后将此对称密钥用服务端的公开密钥来加密之后,将它和加密后的信息一起发送给服务端。服务端先用相应的私有密钥打开数字信封,得到对称密钥,然后使用对称密钥解开加密信息。但是,抓包过程中发现,它首先有一个从服务端获取密钥的过程。发现每次请求前,客户端都要向服务端发送请求,获取Key。从加密数据本身看,貌似是RSA。由此推测它的一次一密不是数字信封的方式。那么接下来,破解它的加密逻辑就迫在眉睫了。以上步骤是绕过证书校验进行数据抓包。我们可是站在正义的角度看看客户端客户端证书校验威胁噢。Tips:如果客户端在与服务端通信的过程中没有对传输的数据进行保护与完整性校验,并且未做任何的证书校验,这将直接导致中间人攻击,可重复发送截取到的请求报文,并观察和分析服务端的反应,实现进一步的攻击。常用的工具有Wireshark、Burpsuite、Fiddler和Charles等。2反编译分析加密逻辑我们通过反编译APK文件,尝试去定位加密函数,看能否破解上述网络请求中的加解密逻辑。 但是我们反编译后发现APK被加了壳。那么我们见招拆招,使用FRIDA-DEXDump进行脱壳,且成功的拿到dex文件。通过对脱壳拿到的dex文件进行反编译,定位getkey请求进行分析对应的加密逻辑。分析定位加密到函数如下:    经过缜密分析,发现这个APK加密逻辑是这样的:客户端先发送请求获取对称算法AES密钥,但是AES密钥使用服务端的RSA私钥进行加密了,客户端通过RSA公钥解密后得到AES密钥。对交互数据进行加密。并且,从解密包数据看,没有签名如sign字段,传输没有进行签名校验,这让人觉得有些欣喜。通过上述代码,我们找到了RSA加密使用的公钥,发现有公钥解密的函数,这个时候,我们可以通过尝试调用公钥解密函数,编写对应的解密脚本。得到AES密钥与向量。我们通过脱壳、反编译,拿到了java core代码,成功破解了数据包加解密逻辑。接下来可以进行漏洞挖掘。但是在客户端安全方面,上述过程还可能会遇到反调试、反HOOK、完整性校验、重签名检测等威胁。Tips:应用通信数据加密加签:为了防止数据被篡改,客户端和服务端一般对交互数据进行加密。常见的加密方式为,非对称加密、如使用RSA。对称加密如,DES、AES等等。但是单纯的对称和非对称都存在一定的安全风险,所以在对加密算法的运用中,一般采用对称加密结合非对称加密结合的方式,也就是数字信封进行数据传递。保证了数据传输的安全。并且在传递过程中,对数据使用非对称算法进行签名验签,避免数据在传输过程中被篡改。应用调试:在应用逆向分析的过程中是静态分析与动态调试相结合的,其中静态分析就是上面所说的代码反编译。应用调试就是动态分析的一种重要的方式,这里主要是基于无源码进行调试,这里分为SO调试与smali调试,其中SO调试主要使用的是GDB、LLDB、IDA pro等工具,调试smali使用的是IDEA、AndroidStudio等配合Smalidea插件进行调试。HOOK:主要是基于动态分析与静态分析后,找到应用的关键代码位置,通过HOOK插件拦截关键代码调用,获取参数信息或篡改函数调用等。hook的工具主要有Xposed、Cydia、Frida等,其中自己编写native hook代码,配合注入的方式进行实现。代码反编译:代码反编译就是将APK中包含的各个文件,根据其固定的格式,从二进制反编译成可查看的代码,与正向开发是相反的操作,反编译的主要工具有apktool、Androidkiller、jeb、jadx、smali/baksmali、IDA pro等等。二次打包:每一个Android应用程序都会有一个数字签名信息,在Android系统安装应用的时候会对数字签名信息进行校验,如果应用没有对其签名进行校验,那么就存在二次打包的问题,造成应用被篡改,植入木马等。签名工具主要有jarsigner、apksigner 等。3发现注入点由于该客户端是内部人员使用,尝试注册账户,没有注册成功,发现需要管理员审核通过才能登陆。爆破无果,经过抓包解密,修改数据包进一步测试,再次解密返回数据包,发现登录处存在SQL注入漏洞,而且是报错型注入。 经过手工注入,Payload如下: Request: 获取密钥:解密密钥:登录请求包:登录响应包:Response: 解密登录响应包:Tips:中间人攻击:数据传输方面主要是在应用与服务端进行数据交互时产生的安全隐患,可能存在信息泄露、传输数据篡改、请求重放攻击等。如果应用在与服务端交互传输数据的过程中,未对数据进行加签、完整性校验,传输数据就容易被篡改,在结合OWASP Mobile TOP10中的漏洞就可以对服务端进行攻击。例如通过文件上传漏洞,sql注入漏洞等获取服务端的数据,甚至于拿到服务端的shell。后面的实例就是通过篡改传输数据,结合安全漏洞获取的shell。4dump用户数据经过手工注入,多次构造sql语句,获取部分用户的账户和密码:Request 请求:响应包解密:解密:用注入出来的数据成功登录APP。5上传Get Shell获取到用户数据后,我使用了其中某员工的账号密码,直接登陆app。发现该app功能包括通讯录查询、数据同步、excle文件上传、头像上传、文件下载以及查询功能,且发现上传下载均未进行黑白名单过滤。可利用的点较多。虽然此处有N种方式可以利用。但是我们在不破坏委托方正常业务的的情况下,选择了头像上传,直接上传jsp拿到shell。后端没有校验直接上传文件成功。成功响应加密包。解密响应包。Shell执行成功。至此,Get Shell。我们此次测试的目标以及达成。Tips:SQL注入:在应用运行期间避免不了在服务端实现数据持久化,这可能就会操作到数据库,而在操作数据库的过程中未对参数进行校验,导致数据库存在注入问题,造成数据信息泄露,严重的可写shell,获取服务器权限。总结一些APP在运行期间都会存在上传图片的操作,但是由于未对文件进行校验,导致可以上传非图片格式文件。如果上传的是一个包含了木马程序的文件,可能导致服务器数据泄露,严重可获取shell。 此外,服务端还有很多的风险是不可忽略的,攻击者有非常多的手段,利用单个漏洞或者组合漏洞对服务端进行攻击。实际上在APP应用安全方面还有很多的风险点,它们会对应用整体的安全造成严重的威胁。一个安全的应用也不仅仅是通过使用某一技术来实现的,而是建立在一个完善的安全架构、安全开发过程、安全测试、安全运维、安全管理的整个流程的基础上的,缺一不可。 我们所做的安全对抗,正如同没有硝烟的战争。战争的结果除了输赢之分,还有正义与非正义之别。 我们在平时对于APP的渗透中,时常扮演一个攻击者的角色,而我们在攻击的过程中,会使用一切灵活应变的手段,唯一的区别就是我们要时刻站在正义的视角,探索了其漏洞原理,却不因此对其造成损害。 以上。附:本文中用到的环境如下,供君参考:JustTrustMe:https://github.com/Fuzion24/JustTrustMe Burp:https://portswigger.net/burpCharles:https://www.charlesproxy.com/Idea::https://www.jetbrains.com/ jadx:https://github.com/skylot/jadx Xposed:https://github.com/rovo89/Xposed 本文始发于微信公众号(谢公子学安全):百步穿杨-看我如何在APP中getshell
阅读全文
【移动安全】Android App—HTTPS证书校验绕过 移动安全

【移动安全】Android App—HTTPS证书校验绕过

文章来源:https://www.cnblogs.com/bigben0123/articles/14486701.html前言:Android渗透过程中,会经常遇见https证书校验,不能抓取数据包。就比如我手机无法Root,每次都要用到模拟器,但是有些App它会检查是否在模拟器中运行,从而闪退无法正常使用。于是,这篇文章诞生了。基础学习:APP是HTTPS的服务提供方自己开发的客户端,开发者可以先将自己服务器的证书打包内置到自己的APP中,或者将证书签名内置到APP中,当客户端在请求服务器建立连接期间收到服务器证书后,先使用内置的证书信息校验一下服务器证书是否合法,如果不合法,直接断开当APP是HTTPS时,单纯的使用Burpsuite无法抓取数据包,原因是APP启用了SSL Pinning(又叫做“SSL证书绑定”)如果这里不懂的话,可以了解以下https的建立过程: 抓包原理:几乎所有网络数据的抓包都是采用中间人的方式(MITM),包括大家常用的Fiddler、Charles等知名抓包工具不论是使用burpsuite还是fiddler,当前的抓包工具基本原理都是采用的中间人的方式。原理就是这些工具作为中间人,对客户端伪装成服务端,对服务端伪装成客户端Android App 抓包有三种情况(https):情况1,客户端不存在证书校验,服务器也不存在证书校验。情况2,客户端存在校验服务端证书,服务器也不存在证书校验,单项校验。情况3、客户端存在证书校验,服务器也存在证书校验,双向校验。1、使用jd-gui进行反编译后,全局搜索:checkClientTrusted 或者checkServerTrusted 字符串,如下图:情况1:apk程序客户端与服务端都没有存在证书校验 设置代理,伪造证书,即可成功抓取数据包情况2:存在检测服务器端证书(SSL pinning):由于服务器并不会校验Client(绝大部分情况),所以这个问题一般不会存在。比如Server一般不会关心Client到底是Chrome浏览器还是IE浏览器,是Android App还是iOS App,比如谷歌浏览器就能够模拟移动端。当然,Server也是可以校验Client的,这个后面分析。 在无法root的设备上抓包: SSL pinning:SSL Pinning是一种防止中间人攻击的技术,主要机制是在客户端发起请求–>收到服务器发来的证书进行校验,如果收到的证书不被客户端信任,就直接断开连接不继续求情。可以发现中间人攻击的要点的伪造了一个假的服务端证书给了客户端,客户端误以为真。解决思路就是,客户端也预置一份服务端的证书,比较一下就知道真假了。SSL-pinning有两种方式:证书锁定(Certificate Pinning) 和公钥锁定( Public Key Pinning)证书锁定:需要在客户端代码内置仅接受指定域名的证书,而不接受操作系统或浏览器内置的CA根证书对应的任何证书,通过这种授权方式,保障了APP与服务端通信的唯一性和安全性,因此客户端与服务端(例如API网关)之间的通信是可以保证绝对安全。但是CA签发证书都存在有效期问题,缺点是在证书续期后需要将证书重新内置到APP中公钥锁定:提取证书中的公钥并内置到客户端中,通过与服务器对比公钥值来验证连接的正确性。制作证书密钥时,公钥在证书的续期前后都可以保持不变(即密钥对不变),所以可以避免证书有效期问题,一般推荐这种做法。https需要CA证书,我们之前说的中间人需要对客户端伪装成真正的服务端,要求就是当客户端向我们发送网络请求时,我们必须能够给指定域名签发公钥证书,且公钥证书能够通过系统的安全校验。对于我们是不是真正的客户端,通常来说服务器是不太会关心的,他是不会去关心你是谷歌浏览器还是百度浏览器,当然了也会有例外。接下来要说的双向验证就是如此绕过方案一:burpsuite CA证书安装绕过:在已经root的设备上安装CA证书,然后直接抓包即可,在本机无法取得root的情况下,通过模拟器也可抓到https数据包绕过方案二(无需root,通用):思路:反编译apk,找到校验证书方法,将校验部分删除,从而变成情况1,再编译apk,成功抓取数据包利用条件:客户端程序没有对自身完整性进行校验应用完整性校检利用Androidkiller.exe反编译apk文件,找到checkServerTrusted方法的smali代码: 对齐进行适量删改后: 反编译apk文件再查看其代码: 安装apk至Android设备,尝试抓包:  绕过思路3(需root):Xposed框架+JustTrustMe 绕过:Xposed框架是一款开源框架,其功能是可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。Xposed 就好比是 Google 模块化手机的主体,只是一个框架的存在,在添加其他功能模块(Modules)之前,发挥不了什么作用,但是没了它也不行。也正因为如此,Xposed 具有比较高的可定制化程度。Moto X 用户可定制手机的外观、壁纸、开机动画等,Xposed 则允许用户自选模块对手机功能进行自定义扩充。JustTrustMe:https://github.com/Fuzion24/JustTrustMe/releasesJustTrustMe 一个用来禁用、绕过 SSL 证书检查的基于 Xposed 模块。简单来说,JustTrustMe 是将 APK 中所有用于校验 SSL 证书的 API 都进行了 Hook,从而绕过证书检查在夜神模拟器上就可以直接下载安装: 注意:使用Xposed时需注意,尽可能安装至模拟器中,不然手机可能变砖。 将JustTrustMe.apk 拖入模拟器中,然后进入Xposed激活并重启 绕过方案四(需root) :Frida绕过,详情参考如下:Frida详细安装教程https://github.com/WooyunDota/DroidDrops/blob/master/2018/Frida.Android.Practice.md情况三:双向认证当服务器启用了证书双向认证之后,除了客户端去验证服务器端的证书外,服务器也同时需要验证客户端的证书,也就是会要求客户端提供自己的证书,如果没有通过验证,则会拒绝连接,如果通过验证,服务器获得用户的公钥详细过程:(1)客户端发起HTTPS请求,将SSL协议版本的信息发送给服务端。(2)服务端去CA机构申请来一份CA证书,在前面提过,证书里面有服务端公钥和签名。将CA证书发送给客户端(3)客户端读取CA证书的明文信息,采用相同的hash散列函数计算得到信息摘要(hash目的:验证防止内容被修改),然后用操作系统带的CA的公钥去解密签名(因为签名是用CA的私钥加密的),对比证书中的信息摘要。如果一致,则证明证书是可信的,然后取出了服务端公钥(4)客户端发送自己的客户端证书给服务端,证书里面有客户端的公钥:C_公钥(5)客户端发送支持的对称加密方案给服务端,供其选择(6)服务端选择完加密方案后,用刚才得到的C_公钥去加密选好的加密方案(7)客户端用自己的C_私钥去解密选好的加密方案,客户端生成一个随机数(密钥F),用刚才等到的服务端B_公钥去加密这个随机数形成密文,发送给服务端。(8)服务端和客户端在后续通讯过程中就使用这个密钥F进行通信了。和之前的非对称加密不同,这里开始就是一种对称加密的方式双向认证需要Server支持,Client必须内置一套公钥证书 + 私钥。在SSL/TLS握手过程中,Server端会向Client端请求证书,Client端必须将内置的公钥证书发给Server,Server验证公钥证书的真实性双向认证内置的公钥证书+私钥是额外的一套,不同于证书固定内置的公钥证书用于双向认证的公钥证书和私钥代表了Client端身份,所以其是隐秘的,一般都是用.p12或者.bks文件+密钥进行存放。由于是内置在Client中,存储的密钥一般也是写死在Client代码中,有些App为了防反编译会将密钥写到so库中,比如S匿名社交App,但是只要存在于Client端中都是有办法提取出来的这里我们以Soul举例:该app直接封装了客户端的证书,相比于单项认证,多了一个服务器端验证客户端证书的过程,而在以往的用代理工具如burp这类工具,抓取https的包时,除了浏览器获取的是代理工具的证书外,默认是不发送证书给服务器端的。burp在抓取https报文的过程中也提供了双向认证的证书发送,但是是使用了burp提供的证书文件,也就是CA证书。app的服务端不认证这个burp提供的CA证书,那么我们就需要拿到匹配的证书,以其对服务端进行匹配首先,解压APK,提取出.p12/.pfx或者.bks文件,二进制的文件一般存放都在raw或者assets目录 由于双向认证的公钥证书和私钥是受密钥保护的,所以需要输入密码app解密的代码逻辑:客户端发送数据包以后,需要去从app中读取这个证书文件,密码是以硬编码形式放在了代码中,利用这个代码中的密码字段去解密证书文件,从中读取以后,再进行解密并回传给服务器端进行确认。由此推断,寻找证书名称应该就可以拿到安装密码利用搜索来找client.p12的值(或者关键字PKCS12,这是通常读取证书需要用到的关键字)一般通过逆向可以从APK中提取出密钥,怪我太菜java完全不会,Android渗透刚刚接触,这里先略过,以后再来填坑…… 详情可以参考:APP 如何进行HTTPS双向认证抓包APP无法抓包解决方案 安卓单向/双向认证找到之后可以通过burp添加客户端证书:host填写app服务端的主域名: 选择app客户端内的client.p12证书文件,并输入安装密码 证书成功导入后,勾选即可使用双向验证与SSL pinning的区别:SSL pinning实际上是客户端锁定服务器端的证书, 在要与服务器进行交互的时候, 服务器端会将CA证书发送给客户端, 客户端会调用函数对服务器端的证书进行校验, 与本地的服务器端证书(存放在.asset目录或resraw下)进行比对。而双向认证是添加了客户端向服务器发送CA证书, 服务器端对客户端的证书进行校验的部分。在app上,https双向认证的方案也可以防止中间人劫持,但这种双向认证开销较大,且安全性与SSL pinning一致,目前大多数app都采用SSL Pinning这种方案CA证书:抓包应用内置的CA证书要洗白,必须安装到系统中。而Android系统将CA证书又分为两种:用户CA证书和系统CA证书。顾明思议,用户CA证书是由用户自行安装的,系统CA证书是由系统内置的,很明显后者更加真实有效系统CA证书存放在/etc/security/cacerts/目录下,名称是CA证书subjectDN的Md5值前四位移位取或,后缀名是.0,比如00673b5b.0。考虑到安全原因,系统CA证书需要有Root权限才能进行添加和删除。对于非Root的Android设备,用户只能安装用户CA证书。使用限制:Android从7.0开始系统不再信任用户CA证书(应用targetSdkVersion >= 24时生效,如果targetSdkVersion < 24即使系统是7.0+依然会信任)。也就是说即使安装了用户CA证书,在Android 7.0+的机器上,targetSdkVersion >= 24的应用的HTTPS包就抓不到了绕过方案一:配置networkSecurityConfig1、在AndroidManifest中配置networkSecurityConfig形如:<?xml version="1.0" encoding="utf-8"?><manifest ... > <application android:networkSecurityConfig="@xml/network_security_config" ... > ... </application></manifest>2、在项目res目录下新增一个文件夹,命名xml,并且新建一个xml文件,命名为network_security_config.xml,命名名称跟上面匹配。<?xml version="1.0" encoding="utf-8"?><network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> <certificates src="user" /> </trust-anchors> </base-config></network-security-config>这样即表示,App信任用户CA证书,让系统对用户CA证书的校验给予通过详情请参考:https://developer.android.com/training/articles/security-config最开始直接通过adb安装,发现无法抓到包 =成功抓到包:  绕过方案二:调低targetSdkVersion < 24如果想抓一个App的包,可以找个历史版本,只需要其targetSdkVersion < 24即可。然而,随着GooglePlay开始限制targetSdkVersion,现在要求其必须>=26,2019年8月1日后必须>=28,国内应用市场也开始逐步响应这种限制。然后目前绝大多数App的targetSdkVersion都大于24绕过方案三:平行空间抓包:如果我们希望抓targetSdkVersion >= 24的应用的包,那又该怎么办呢?我们可以使用平行空间或者VirtualApp来曲线救国。平行空间和VirtualApp这种多开应用可以作为宿主系统来运行其它应用,如果平行空间和VirtualApp的targetSdkVersion < 24,那么问题也就解决了。绕过方案四:安装到系统CA证书目录(需root)非Http协议抓包:如果确认了以上几点,仍然抓包失败,那么极有可能使用的并非是HTTP协议。比如像微信聊天,视频直播等,使用的就不是HTTP协议,这种情况需要使用其它的抓包工具,比如Packet Capture这种直接解析TCP/UDP协议的,但是往往非HTTP协议的数据包即使抓到了也无法解析出来,因为大概率都是二进制而非文本格式的。补充:所有https能抓到包的前天是基于https证书校验不严格,如果证书校验严格的话是抓不到的【往期推荐】【内网渗透】内网信息收集命令汇总【内网渗透】域内信息收集命令汇总【超详细 | Python】CS免杀-Shellcode Loader原理(python)【超详细 | Python】CS免杀-分离+混淆免杀思路【超详细 | 钟馗之眼】ZoomEye-python命令行的使用【超详细 |...
阅读全文
五、小程序|App抓包-Drony配合Burp实现App定向抓包 安全文章

五、小程序|App抓包-Drony配合Burp实现App定向抓包

小程序|App抓包Drony配合Burp实现App定向抓包一、建议google市场下载安装包下载并安装到安卓手机上,繁体版 https://apps.evozi.com/apk-downloader/?id=org.sandroproxy.drony二、配置打开Drony,并右滑至SETTING标签页,选择Networks,点击当前在用的wifi名,进入Network details设置页选取电脑和手机链接的无线网络:手机连接wifi:burp设置代理中间有部分抓不到包情况多次尝试:Drony设置代理点击Filter default value(过滤器),选择Direct all(全部允许)点击Rules,进入Rules详情页,点击右上角的加号,进入Add filter rule,action选择Local proxy chain,Application选择需要抓包的应用,然后保存,返回主页配置特定app定向:保存就OK:左滑到LOG标签页,点击底部到OFF按钮,启用Drony,同时确保Drony进程在后台不会被杀掉定向抓取到app的流量:演示视频: 参考:https://www.yuque.com/m1tang/itccm5/guh5gm注意:⚠️免责声明:本站提供安全工具、程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!如果本文内容侵权或者对贵公司业务或者其他有影响,请联系作者删除。转载声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。订阅查看更多复现文章、学习笔记thelostworld安全路上,与你并肩前行!!!!个人知乎:https://www.zhihu.com/people/fu-wei-43-69/columns个人简书:https://www.jianshu.com/u/bf0e38a8d400个人CSDN:https://blog.csdn.net/qq_37602797/category_10169006.html个人博客园:https://www.cnblogs.com/thelostworld/FREEBUF主页:https://www.freebuf.com/author/thelostworld?type=article语雀博客主页:https://www.yuque.com/thelostworld欢迎添加本公众号作者微信交流,添加时备注一下“公众号”----------招聘信息---------360政企安全集团-渗透测试高级工程师招聘岗位职责:职责描述:1. 主要参与渗透测试、内网渗透、大型攻防对抗等项目;2. 负责移动客户端安全测试,发现漏洞,并给出解决方案3. 负责安全技术研究,漏洞分析,及时跟进安全事件并做出响应4. 参与完善团队安全技术标准化建设,对外赋能;5. 研究攻防对抗技术、对抗技巧,完善现有攻击链,且具备一定的开发能力;6. 跟踪国内外安全动态,跟进国内外最新的攻防技术。职位要求:1. 大专及以上学历2. 对常见Web安全漏洞的原理、危害、利用方式及修复方案有较深入理解,具备独立完成渗透测试项目的能力3. 熟练掌握一种C2系列相关工具的使用,了解过C2实现原理4. 对windows/linux、横向、域、权限维持、免杀等TTPs有相关了解,或在某一方面有深入研究。5. 有客户端Android或iOS的逆向能力6. 精通Android或iOS常见安全漏洞挖掘,熟悉移动端安全产品技术架构7. 熟悉隐私合规检8. 至少掌握一门开发语言,包括但不限于C/C++/Java/Python/C#/GO9. 乐于分享,良好的沟通与团队协作能力加分项:1.具备渗透大型互联网目标、红蓝对抗或HW攻击经验2.具备0day漏洞挖掘经验3.具备安全标准化制定经验4.在个人博客、github、tools、安全客、先知等平台发布过自研工具或原创文章5.Android或iOS开发。360政企安全集团地址:北京朝阳区酒仙桥6号院2号楼(电子城国际电子总部)待遇:15-25K 15薪简历投递:[email protected]感兴趣的师傅们请投简历、欢迎帮忙转发🙏 本文始发于微信公众号(thelostworld):五、小程序|App抓包-Drony配合Burp实现App定向抓包
阅读全文
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用 移动安全

使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

看雪论坛作者ID:Avacci目标:fulao算法接口在手机上用http暴露下(提示:使用frida-net库和frida-inject) 下载安装frida-net,把frida-inject和_agent.js push到手机上。开启监听:测试脚本:环境部署完毕,接下来是找到算法接口,写入agent.js中,重编译再放入手机运行。 要找算法接口,肯定先看看请求中什么东西被加密了。先抓个包:https://api-al.vipmxmx.cn/v1/videos/long/keyword_cover/t?payload=e4FeAkyuziEcFilBjcx7qA%3D%3D.7DkvRGCe%2FDdHD6Tg0g8oM5B74pqq4vTTFmMMmrT0YHaC80BJiXYu27LxNBFzpaCQBoYiArYEmES5R68jJTc%2F1T1QnjfLTtAunn1BbCiFPVYRc0HkMbQTU1yj7PtFzYWPA1V0p0NxBUIIFTdrNxbS9mUmETeNcgnD08Sxb74knTqDjILo3aFS427jj7HEG%2BtEjywgK7LWf59pnmdXhWoFwUFzTmPuVhLw2%2FeZph9tJil8fZTdggwSbchwtqN8BtuvcLn4tinaIe7aLSPUTt55pkd%2BkphoJUhZV2yqfYXZPKX09yh0wsrR%2BrPMoCOm0QBpHost: api-al.vipmxmx.cnConnection: Keep-AliveAccept-Encoding: gzipUser-Agent: okhttp/3.12.1 返回结果被加密:打算先从url中payload的加密去定位,直接在jadx反编译的结果中搜索payload,定位到看着比较可疑的地方。用objection hook一下这个方法:点了下搜索,确实有被调用到:那就继续分析d()方法的细节。存储Payload值的变量str有两次被赋值的地方,通过this.l的值来确定如何生成。但是这里似乎jadx反编译的结果有问题,导致看起来始终用的是第二段的生成算法。 所以用GDA再反编译看下:生成payload的地方用了条件运算符,看起来更合理些。分别查看两个生成方式:ba 为随机生成的16字节数组。再将ba进行Base64编码。str初始值为”.”:Sc的初始值略微复杂:最外层的b.c方法的实现是AES算法:第一个入参为key,第二个为IV,第三个为待加密的明文。再回去看三个参数的由来。第一个参数,也就是AES加密的key,是对一个native方法返回的值进行Base64解码后的结果,应该是个固定值。这里的CipherClient类里包含了不少类似的方法,用来获取各种key。第二个参数就是前面生成的16字节随机数ba。 第三个参数,也就是AES算法的原始数据,是this.mapj变量的json格式字符串。this.mapj是一个Map对象,其中的内容为:直接hook一下前面的AES加密函数,发现不同的请求下mapj的内容有些许不同。 将上面的部分串联起来就是payload。 接下来就要定位请求返回的内容在哪里接收并处理,没想到什么好的路子,还是通过objection hook了前面生成payload的类c.c.a.j.c.j中的所有方法,发现有个方法的参数中带了response对象的信息。调用的方法为c.c.a.j.c.j.a,传入参数类型为k.r。 然后用WallBreaker查看了下一个k.r类型的对象包含的内容,发现其中_b包含了response的body。直接定位到反编译后k.r的实现:可以判断出f13822b为response body,而a()方法直接返回这个变量值。 全局搜索一下k.r.a()方法的调用,有好几处。不过感觉高亮的这处应该是一处body的解密操作。转到该调用处:先根据response对象rVar的内容获取一个值a2,会判断a2的值是否为空来决定是否需要解密response的body内容。获取a2值的具体实现为判断response header中是否带有X-App-Name字段,且X-App-Name字段值是否为app。如果是的话对header中的X-VTag字段值进行md5哈希,再从第九个字符开始取到第24个字符(16个)。这里直接假设a2不为空,进行body解密:最外层的super.a方法是揭秘完后对不同结构类型的返回字符串进行后续处理。所以解密函数就只有内部的b.a方法,其实现仍为AES。第一个参数为key(需要先md5),第二个为IV,第三个参数为需要解密的密文。对应传入的实参,第一个为CipherClient.decodeKey(),hook一下得到值为fe34dd6bbd3020c2fb69abe73b5b973c。第二个就是前面生成的a2。第三个就是请求返回的内容。 直接hook该函数:这里直接打印解密后的返回值也可以,但这里用CyberChef确认了下解密流程没有问题。 跟请求参数加密和响应内容解密相关的流程大致是这样,那么用到的跟加解密算法有关的类主要有两个:一个是包含AES、MD5等算法调用的EncodeUtility类,混淆后的类名为com.ilulutv.fulao2.other.i.b。还有一个是获取加解密时用到的key和IV等参数的CipherClient类。前面那个感觉暴露出来不太好调用,先就尝试下暴露CipherClient类的各个调用接口。修改frida-net项目下的agent.js,然后重新编译,推到手机中。用frida-inject执行脚本,然后尝试让他输出几个加密参数。 看雪ID:Avaccihttps://bbs.pediy.com/user-home-879855.htm  *本文由看雪论坛 Avacci 原创,转载请注明来自看雪社区# 往期推荐Android 11 手动root笔记Android App漏洞入门学习小记office病毒分析资料整理Windows初始化过程菜鸟学飞之frida整合怪一次上当受骗的样本分析经验公众号ID:ikanxue官方微博:看雪安全商务合作:[email protected]球分享球点赞球在看点击“阅读原文”,了解更多! 本文始发于微信公众号(看雪学院):使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用
阅读全文
下载流氓软件有危害吗? 安全闲碎

下载流氓软件有危害吗?

​大家可以读下面的一篇文章,而这件事是真实的案例发生的!本文章发出来,是提醒大家小心一点。本下面文章:前两天我一个朋友突然有个很漂亮的小姐姐加他,然后他就同意了,再然后他们就开始愉快聊起来了,接下来小姐姐就诱惑他说可以视频玩一点刺激的,说可以玩一些18禁东西,你们懂得。结果可就是被他们敲诈了一千多大洋,然后今天他找到我说能不能让我帮帮他,我花了一个多小时成功干翻他们的服务器,正好乘这个机会给他家出一期教程。哪有人就要问了,他们是怎么诈骗的呢接下来我们就简单的聊下他们试试诈骗的全过程吧。首先会有一个小姐姐通过社交软件加你,只要你同意了他们就成功三分之一了,然后小姐姐就开始各种引诱你下载一个app然后说可以在app上玩一些少儿不宜的东西,这个app可不是什么善茬,这个app其实是一个流氓软件,只要你安装了以后他就可以将你手机里面的通讯录、短信、定位等记录上传到指定的服务器上,接下来只要你和他们玩了那些少儿不宜的东西以后他们就开始录屏,最后拿这些视屏来敲诈你。在这里奉劝大家一句色字头上一把刀呀,陌生的软件千万不要装否则后患无穷。本期文章就到这,希望大家点赞收藏转发!关注公众号:自由的ZOR! 投稿邮箱:3262735821​​​@qq.com邮箱②:[email protected] 本文始发于微信公众号(自由的ZOR):下载流氓软件有危害吗?
阅读全文