자유로운 개발일지/실험일지

[직링 분석] 프록시 기반 분석 2탄

그낙이 2025. 6. 15. 19:22
반응형

이전 글에서 피들러를 통한 프록시 레벨에서의 분석으로 개발자 도구 우회 방법을 소개했었습니다. 그렇다면 피들러를 더 뜯어보고 티켓 링크의 실제 동작 방식과 직링을 구한다면 어떤 과정을 거쳐야하는지에 얘기해보겠습니다.

 

⚠️ 이 글은 기술적인 호기심과 실험적인 분석을 위한 목적으로 작성되었습니다. 실제 예매 과정에서 이를 악용하거나 무단으로 활용하는 것은 서비스 약관 위반이 될 수 있으며, 법적 책임이 따를 수 있습니다. 또한, 이번 글에서는 코드 구현보다는 개념과 작동 원리에 집중하니 가볍게 읽어주시길 바랍니다.

 

프록시 레벨 분석

 

실제로 진행되는 전체 사이클입니다. 우선 저희는 43번 이후의 과정은 중요하지 않습니다. 넷퍼넬에 대해 얘기한 글에서, 넷퍼넬에 대한 직접적인 우회는 어렵다고 말씀 드렸습니다. 일반적인 과정에서 링크를 통해 넷퍼넬 키를 요청하고, 그 값을 계속해서 받아오면서 내가 0번째 사람일 때 실제 예매 페이지로 보내줍니다. 그래서 스케쥴ID를 통해서 실제로 보여주는 페이지 링크를 안다고 해도 대기열이 발생하는 시점(보통 오픈 직후겠죠)에는 그 페이지 링크로의 접속이 차단될 가능성이 매우 높습니다. 

 

43번입니다. 2개의 파라미터를 사용해서 요청을 보내고 있으며, 꽤 많은 쿠키를 같이 보내는 걸 확인할 수 있습니다. 그렇다면 저희는 2개의 파라미터(키, 밸류값)과 저 쿠키들만 있다면 바로 요청을 보낼 수 있고, 오픈 하는 순간, 대기열의 상당히 앞부분에 위치할 수 있을 것 같습니다. 

 

이제 로그인 시에 쿠키를 어디까지 받아오는 지를 확인해보도록 합시다. 개발자 도구가 막혀있는 상황이니 네트워크 탭으로 확인할 수는 없고, 피들러 응답에 Cookies 부분을 확인하거나, EditThisCookie라는 크롬 익스텐션을 활용해봅시다. 사이트에 접속한 후, 익스텐션을 클릭하면 쿠키들을 확인할 수 있습니다. 또한 직관적인 UI로 쿠키를 삭제, 추가 및 내보내기 등도 쉽게 가능합니다. 

 

EditThisCookie (V3) - Chrome 웹 스토어

EditThisCookie는 쿠키 관리자입니다. 이것을 이용하여 쿠키를 추가하고, 삭제하고, 편집하고, 찾고, 보호하거나 막을 수 있습니다!

chromewebstore.google.com

 

로그인 직후 가지고 있는 쿠키입니다. 여기서 각각의 값들을 확인할 수 있고, 단계별로 따라가는데 도움이 될 것 같습니다. 다음은 예매하기 페이지 이동 직후입니다.  

/mapi/sports/schedules?iQVxVoH=675a107dfdc7c351ff50ba25d290dabd4ba37ac0616c77... 으로 요청을 보낼 때 파라미터 값입니다. 여기서 확인할 수 있는건 실제 직링과 동일한 키값을 사용합니다. 즉 로그인 직후에 받아오는 쿠키와 세션의 어떤 값들을 통해서 파라미터의 키 값들을 만드는 것을 확인할 수 있습니다.

 

어차피 예매하기 페이지에 들어가서 파라미터의 키값들을 뽑아서 직링 키에 집어넣는다면 키 값은 필요가 없다고 생각하실 수도 있지만, 특정 시간이나 날짜 기준으로 바뀔 수도 있기 때문에 값을 뽑아내긴 해야합니다. 그렇다면 이제 로그인 과정부터 예매하기 페이지로 넘어가는 과정 사이에서 어떻게 저 키가 생성되는지 확인해봅시다. 

 

<!DOCTYPE html>
<html>
  <head>
    <script>
      var UQCt0 = {
        qIHXq:
          "e92ccd4d3ffcb08c6eb24ec7a009dbcdc1e848550513d228d5ca2728ab8b1c8ccfb71861fb67e94fffb8b8fb4eb5e715111c0d914bfcf70351c9ea4d6601996ecf790ef38924099612aba0e90b0e8d4c0c43659a90e0c4a9f96841b6341282c3b7252838b42c313ac6484d72ad9b0aba0ea49a6effeebb96987b5b4cb7f0827e7669f3b0a35ea3909445328b61362cc009b3321473c44ffc72d5730df6a3ed9e3bec5a55a0282092bc7cfef750be634b3a0ab51ee5a5f150b940539b3aa3dce64059bb0a4c7a04c3b50e2d1c5af58438b0358c11a8d94193a9346e3cf50025ca1e88b9623ae5bff1b2c46cd11216127b",
        hM51w: "/",
        eIKph: "evfw",
        F9Lu8: "",
        KbA8y: 0,
        JrGl9:
          "349446a89ac2ae936540e1953e201f79c3408dc60319eb7cc7a79dc064d26fe6acd22b9c1d389010da1524fe80a047b84fa043e1ac505417f13614244849c038ab5d34ea7b870cb5a6c4b08e0abb21e4b97b2a90d1ee07e7159db39d4f355532396d3cfe08d2629ccc50d1d35471f8a7e3712e0343420a64e0189a660a494e480bb0c308de35ff5a9b04b61fd95dbc1cc8534d7a749071b453ef3083b2293819dfdec0dbceb8f0a35131d83eb8bcecc6825be78e2d16096003a72a762e0948ef51a8eeeee6b15ea2e09f58e60062b898417e28a140083af7c7be58d9e4805df3dcd93f1618f09db8d0675bff7f910861b4e632cffef51b7171f9eb9fac47b33b2704f1e79ceefc1b9358b4980fb0507dd0279286d65ef502a57351000fede46a252af38d5cafe88b36e3bd543a16ad38196ba85525c648fd81027f54c4197ec85688652c90f46f7a4c9aea8524cf53007e52295e6c0b71b56c0dad1112e4c36aae2ff02653b7f7fecca275d2a2394822cee9f0458d290a1584e8a7d4dcc02edc26f5a9619f380f1cbe71e68146f3981bae13fc7a0e9c2405af4233ba5af811e087e1f02a3d2951cfef4820586daea6353962e90272f95093a939ce54848498a1dc2b7db55356a0b39e212cdd68be03eca16739f193fc4074f0c340c78685d14a10b8aaa04e05d87d54bf9cdabf723d8920b8777c55bfc174d99013867a163081d280a291d9107d8c56aea10c6e34a57e0d3d0fc8fe6eaff902a0821e0498c7c4bb8ce2672f1f48b6e89b401a94324b268fa6a44188aef9128ae5f5755ddbf7ccdf339bc8f7df22690df50e2803ed1da83a9b7d228856c1799ab8722158d2181efbc8ede989ccb0b08d99292e3bdde98d72dabb8561cec3b06f96b6bbdbde5c9ef5497f74763c1c3466a6dd94627ec9304749caa7444de316079228e96dbaf5524743f94f58be39f46f35e3c26e9548fa16ca7cc6797f11c401da4bc9553261e59d3a4ad20f3b7df526afdc42ed128614c809a11481c0fba9de56233a779e4daedb4d8acfcf243c7dffdb618ade25ce23e4f3d9e01d3bff99beff91fe274b779da5a4bd746aa2a1ceb2a202b8d1dd3c432b035a45a5ce5dc4d6b01f08a2a3f862642172ddb9e22ff29cea9f33a4c448e0a3672f4ab65aaf441b21cfa2a3be66e41f6191100a3923fb75fdf1431c6a4a756a41217daee371a913cd01f4fe2e1ef5924b3822fd6fcb04ee5dafcb5146d6320ab47a3a7111d9bf1d8f99060fb3d8de62efc37f45b7622fe7324c81dd92ccf5dc74d630f4390347375b36682e56d2d9eedc5ea642a73f709c7973d5303280cf73ec53841152350d3916b3339b5ca428dcbffaf0825884a6c6496e10eae340d10cdc01834b5c0ec8fa6da42273f203356b4bde5d5c05522e8a6d259d99ebe8fc36fef72642c7345c7b133a9511b6ab2a99e80325f0ea7721f898cd7731943c870a53fec9675de83d322862fe37126f6e74e01fb07312554a1824ece23d10822cbf3c6641aefc7061fce676de0249fe4445bddb96277c3e9547c22a00df1fbe941f4b6af96f7ed7b922d3a904e440fe7ab1eb2b9d9e38eb4918fb8d7f97ef31ce1a32cc001eccfadd6a2dbc2027b8f87f23ccb4f85d534edbd85cd6a4e70698a0b00739a375ff3c7066ba97bc8d92faf098d868c2e156224ed7a67f025ad9c1456bbff65518b9794218c784c61f1dfe6b609bc3fe180b2021be612555e4aad5d3ed8c33b4250bd8281b4a26eb3a97964fa598657de93476d218ea84074f26386f05fd291b8ee18b76b1112c5015b56dd16bbaf61c137d8d179b00d969a8ba8ad808f96c68d80ca62cd270777ea5b592707265c8e8010c3e95d2ca1e8d31ebb965e6686b8889e1013b3ef1972114f2380cf019745b30e7ee38052fb195e61ad4185d2fd40911210cd627bd31f077659566c4adee03613f431cb10e37394838f4d012cf628d8bb958d63e3077ff925eb01a8c286bd3a76c88497b7a20c5e14c13e6f5848e298c0ce0a9f66c2fbda9c311925149f6488856064f4482d8f92b15fea84a8f62948ec0a73cffaac3a34a2dd62cc8870e0771d536e72d27701de18bc2e4da498bbd69fca082ef053f895e967a8f4681c32ffeabc3a0f215d00b8729fb2d48d1f5a56f90d9350c608f10538626bc81e8ca957ae0dc9fe8e711670f36919cb61ff62743b0ba874ebdae59bfa0f4001d08f2063604e8b612226a0aca9077d82c6d8f70488e47a6009f515fd37258d7de9a61d25dbf75a74b54fc3c0646cfa210eb6f26dda25ae5d807760cfb9fa5ca2d0e299222f3d0cfb92feea4a3ee62618acbc0029b75500fba9a606b7f6f55a186cac527137ea03249fd5a6aa7cb7e28d17f0c1fc32301c3f6fae3a61d7f6af383d1bb254cd7d5161d6949acc947fa492bb4717e199f7f752f0a2c12025e27f38a102f497c246a4ce5dc0afbb3d33e102b742329f7bc22a4609273cb264841dc7efce60cddf83ef63a4b2375c136607b34663d22c62120beb5e9090adc8b140224c2e1c67679f3cb3fde8b16897a1f26f119ffb8d0b83897c9b6dd35e41bb60b83e88a030f9bc9a3e95200944f7bacb10172822a8b5d6b3289933ff20046f682e6c2711d12d66529e1966b8a5f171f7a0d05612251a27c7929fe3196ba617ac1c632087b61abcfb51a22e8b3d33d61eb1597420ee8c4c2c676f5af51cb4639578b5b3549bb09d7d036d9646db62aec6e8f96e64f9f386d7e177472f94cc5fe6f2bc2e8ab650430b7d62f527a46b1e5889bbbaefcafe53965225d8e8bc6348cc25733dd9916e00153305e97945561b71545bfa723d7726872d8c4381d00c239a62c0394a9aac58531176d6bb2a317b110d96a7508f8f44f8d52e73e4e7f79af9e6470e4c046d241abd701e4e75ce0cdb74844be5acaf2dd7240328b727eadd22c2ba5637bb2a9048fd271ef753221c014235d178c1d826ba46edec8e8acff1dbfcbf36f0db81f71c2babbcc11346c45f2fc93b5c193e9a202eb5ff202de147ce07db1521972c67517174d0bf4d66f5730f85d470a1aba6171b19088cc7ba9825054a0328c4ef722f0d987899604ad005a045327d027a13f634e9840e50f827898eb889c6f3d410564c6fada33812db879766bab7f6e50f6e7f8468a8458936a26fdeaabc3b6ffc80f8f13f23e3a8328e0dfb5190c3c52d4d8c6a7a6b67cde268d316eac1a4097cce489b58d147f854b7d0f5f0390c8b4e3d9ef28bedfb315401e60caff9206acb7ba6c25ddf1464a45f683d862ff3c63ebf8bb78730bed21a12dbf49a59e51fcad7169e4f65f52f671b95806f72e7d7d34c06ef0d3f4bdc71e9708924ebf2620a2b12199fea90482afe10b07c3ddaa6aaf72e7c488f0fb2eb030df198e6b4136e04d94d38a06f237a64f86cee80804819217b603b983b42b744ac15eaf4d6d5139e8e20f67524f0b7a1b1040a32bdfd625807c67cc87c8dfabaf8429f5293f6f85ce4d95ee30c3a7522b7768b2599280bbe53b42b2680401e11c979347c4e6fbbb86ef6cb7d65a52f5ed88bc5de058c649e037f5de52e3a1a1b60df75ed82f1618b297eac3cd77af8f9e252c6fe6ccecb18dc7377d1e4e96869a7a64a92ffeb4ac236c7712f98a1f8eb6be8f87892cf58755a6cc5a77aa0ce3912bffea28fd8a02b67b91ab3df8a4711df2f4a56f11d395d1b5c7042b59378652e981afaec185357eddc786a4fa88bcf62ca262765c9c69c6cad5b16b3259550edc9def4b87e4b75c11321720361e9c78356e2defb952e4bf8f17a733d73830f6081c6dc29a962f36e2f51bd06550ad9e60169861926e6e83d3d95736c41bfbc479fed3d3d1b238031281dc376c5d4053",
        Jev21: {},
        KNrIC:
          "91683cfa5716e911ad580a04f94938fddc0c43eeedf6c1a89be66fc1a9af5a73d092578982ef22542d2f58d49fa0b8c951dec17c5052073d7e6e390a8d719815d5ab79d8a423b36558352a043682c8f3c4eb9dccce11abfdd69612e358504601a6522780a961990cb48799e47847882c05fb9e690f3ef97f2bd2a8a8a7588698fd1ae63a2cf24ce124bdcb60af775d27e8f2b6d42351a5a1f40a590398cad11870e751a48d73c42e887fa1631ee9099a042dfc3a32891e2709a36b65954120ded20f48ba2cff7de2566dfc236706855e9d4fdc9e4f7a18cdbfa0f5e883c7c0cafba3ef7ae711b89757ca59c180acfd0ddc8e0dcdc0eaf2b9a4322ae5aeaa38d6a49d127a38d5d99a93cef5e50cd568b9a7f6e15ce43c9b4e90fc8765b3d7bcd308a5011290d1ec8c52dc48e2b13e3c3bb1a62bc1aff45f392d89dfb11459dcca71c0687bd83b912a9097b6502126dc262042fe002aac9c91c08f0ba83f5ed7e5910cbd122d1799cf49891aa73d3a38f22152914c035130342bde620dbe22ed3471921b92add15a48e4aa712b212e06780defc0359a14fd0de3f740950be4bd9a711b4b59306443f32762719d8e93845fb3d953157b9774b789fb203e8dbe363d5b6ea4bb930c364f662078c5d6f647a53a3eae7c9be0eac917dea80fdde93c8008aa757e99c4bcbe321fd2cc32df9cf99dbcae961dd6be8f33a3fd0ea248aa7f61d9a008af9544251a0b2815f89dbe354d1536f76aefe237a23cc9dec8d708a4b20ef1bd774e8a707ef71a7c227ac78a853100380d8738da244e6cafaf8f7e3c",
        IQ2RZ:
          "a8f10ebf2c616d010bb52ba867ad52a808c5bb2e83a9f801a42c1b6408551d6aab57e80db770ff6daed2474281cf3298ad6dab0fdff36a8471fc89534176b989e72a7ae25179cc77232bbcc848a2646e8f513bcbfe89e54189decd1a6b9a9b2f03b33fba5414a186059f20705b173d738ffa8aff2ede23d6771fa7ca10af421de339e82a2f2871b9b54792e6a35aaf97c661c41ad4f46b4374b754c99b6f935a395e453fea1e882791a246edd429fc5385871481d879e6cc04bd60ddf1061020e501a4ed5f08bea7d00a81e2d788144693e1e95d2b22586f6847ed14584e94b5de68235e15c91078633f00bbdab9d52d64dacc3b432d001bfd39c886e10a8e5d331d7a59f21feda817c2df1da17a3a153344fc214d57e393538db7e6e77a27cc1c44920c6856c17fb05c23adfd531132f5ebd9afd4f51dc495183159e65a40874241471b3754e552551ef875b7f7068aa0fa9ab8fdc2546f3c29b8be52eb66bf9b4233044a9cb25e2e88bb4418eb8cd40d2df09379ada3c9d0dc0f006839d9eb09e2b0cc9a7206a43c58d51854a405807a7570bf8543df759d96673612d8d1ddd5f2d2efee1e629e8c61f8e81f82dbfe0808851c86f4580bfbd0fe653b4feb16831b8c34218700457ab88f48af31ff969020b487157253f2403a1821092dafb20793831fb1e8e0719b20ce254d75ad10f7bf6b28318ae0335a495386650ffe3c66e72bc8539aa215a0d5e219eef35a4696d696dbe5bc6698db34221eb4998a4062e4534b02f24bf5f87cb07349580c788be08a06b3341523aec9178d71f8d647f5127310302ee3568426bf28cc825d5e27d03ec73a33b343ce212297841c6eb56803efdc5c37052a1c44ff54a739dabf5711254b2cf9aa8e2bbf6598171e1d413481b8258bc6bb355fe4bb7273c2e6b4e7d0a23bc180ab57100197a38d0b34dbe0232dc709891088419325516c40d35e9b8ca5a9abd2b7eb8f96c1187e9ffa8a11c10ea61ead7f60ecf2796d52f65417f7c682a1ed8ac111fb44a7aaa59ffa6c4672e101c9245b0585d3833e1c177110645a56b2285038802d336c5e23695ac3f7bb4f2e4a45e682e548faf59d66f7ace92d1798f99296d038daa0d03aef3044fd0ab2b91de849ae52fa441e12a4a51800e874d7133a9d8a9054cd73030677a200b1875cd9e0e7004f3556276b3a6c7d612cef4555c52dc24b480587044eb01ba437e7de06dda61d0a57b5eba9f723e41e79815d4d0ffff8832a837d3a41fd99158dde777bbc392e14327d7354c8727018c349dc1c16421f76e82e8cd5ca8569084ab1be9465241e141143f9353301d918e17bb3b0888201e582a1a07e137dfa20e0c9075fa459494ba648527b5a78a018a164067fa8d89f993e7fed2005c2caaacbdd135a36727b4109cdca734b005c487c247b48feca3ec606bf6f5ed167736ec25ae82e46f239e2b85f02fec2a04f6cddbf5091375212ca33607516383c99e704f5e37c8d2e78e114d2ac8b12d2ef78c8216b33ed9d43480485cbe186baf243fa382012418719c23acc51c6b0b722bd60f6bbf6b599833573a76745dbfcdd249fe3b6494e23b16012f9f3e7bfa4735ebaae817b837365fb711e3e97a911d25548c4212210f3c8c0671205c2ad819c40b3cdb4ac8a1e5ba0a04ac9ee3b629ebdb4f9c6f415900b10da02c9fc00cf7058e63fd564790e6c1f6983e9703157866dd894c9b409f26e2961cf4d1453ca3835615bfebca5b37f65f77c4db4cb78e35e8b84b64a7c72e9b3e02f938630c93f54ea0843dfd2f1b606408163d5ed626b6012b5222a47584f1cf0032d1bad6f0d643f4101d9568149735bf7f1a88df950af1d12a24c35e0200ffc0550a44df99e7a05675c4067479aaa24948f6701428f4ff4d568f52294bed38f53c1845bfba49efc089bb1af4779a018d5b2c86582d166324ae42b5a61e89aa03578d36fcb4e25a2ae4e2b55ed2d8e01f0712cfce5becb3da48a7f11f32186289cbc548d89b3a8ff9a47203ce6352bacc4f38d165bb21ceb8132a9cbb92572f2068e310f7345d9906cbeae1bde1eb5e2de57ef6382111871bca79330837c8ee831459c4473f63bf577e209c44e2cee5c0d4ef7f11aa0b39846ddd03a256f9d02f6024404998d93a9b752ffb9a5d61f6a54123130133b5ad53878a68749359544858b5532ae7c39e5bc60ec7f17f85bc1aa51273b998b2168a8683a7766db7c83ac9c5de810bf3ac47e322b6eef289bc87de7eb3b9514204c2490dfc86a7275367652451260d23b3853a471c7ae6b8ea2ea05ab85e7a5b9c90ce667fd751d1f252d953daee02d68e5a06a53a3c15f623fbd7c0b7bbfb230ae0f5d11b81f145acd492e44c5d26c7b51c23babd6d198c931050400460c43755619a7e36929154da3c8b6755a35af21982523d780a006a9b36eaad3e3b1654a05041dbd93f4c7b44c58ae03f356cba7bf262e36a6e072d8341e8f0f3a446d7e6b26f362bc4a4f0b998fbc2888edd2bce6a2b93864b54b9aaee179f75df2846efa30081e851f321f7539fd6877c8dfd9b518dc38d4fa35e2044a3b456809683fe5997d7141ea1d531f4557d1b7f4169ba3db6629d76dade7310293be0593ec7b4b9585236118e73f186302ed92bd940a31d1cef71dfd83b0afe40c4d873b46d039f83ff33998f08f19102078c7e25a647d783a33150530049e728202464e64f95594939f6b66c63bd5321b25a90e78d4ac2505f25af52c5246302feddfd103e130bb8a787b6aaa742a879691195f83918e34866959ff554d9f1ecd3550533855b8ca1123216a4633bb13f9d8ae8d14b6ef9de04ceb2e0cbdfb99bc6be7478b3425d50edea797b01d4a338bfb88697cf0f1afef52e31365085d56cd2a96edc0fa3b62b5d19f4af0d540a1ff343f5e25fdcf00cb1d7fb432807a6d4b8d8ea8d7dec815c53cc2d9e2c2f2dc4469d5eb3f691ea3ab9cb51a314c6c52e8427e7f54c14385e39fbbfbd8e23daee0b9529d0c548b6f397438fa264c46c4f5530524a9af99ad822c5eda9930fe2b658e5f0ebf3d8a7462db78cfade96ac05575f719c60c631b35880a6a61a1baea57a59741e902cc24e924b57635e351a100e2488006a98d59d07c640936233cd6691a5f1ba2d13738e47c972b335655d2109c36e6dabab9ee0d97147bc6f3deddfd61b09ba7a3996fb3d1645d4b113d6ad5d715477d2d66271c354d8b28376e4302c0e539f8e92056e089e74c1504d08af85add064ec8579b4bd27f72ef7560af1ca498aeada36e9be5ae96a4a3d26adfc32484f320c2416cd36c4ea6045afc6dfd61c0ee16d968a624380e7abd08e182cd80380ab333b83c4bd50e3e162ce2aa6a740c8dd36f5c6f6e92a1c8958e530134dd473f2838efe17c6962bbec28e878d4b33512eac9910a9ccdabae16842399a5f6d3d0f5669412ef3dee2a2d9e59ad4b11c5f6ae4083c0df3c4a699b03174d826c12719d087dbdff128ca0ad5f4fbc46d14a3ef2ff328f0985f690f6507ca0c2f8b2f56e4d4915edffa3fd03807e1e95b40e1927ccc0dc51f9f203340431225fbed21cea1493d3ad38d464908ab586f0547ba7be8193da46307abaead5a26c128d5a95ba7c7f04a53ec1b649b51343feda1fa5aca0c6eee67d374f88bb8c7ac183854a0f3d837cff40a3f447bf97945a539aaede4a391a4d13df17934bead7e2713166b06a23d5b685f028594b2f6b8e3d7366ada718cc05cd53761b6f429e13587df51b52f0ec3633e591457a830b47b0c110def6127ebc43bca8e4f10d83c4626ecef84b1031140ad7b48635a54de4fb8ea133e0130ce67c6feaa8aebbef9c2993cdbc8b6b78edac6129995a9f98de354c6db7bc502a554cb9e81df06751e18ae2b3d9372d122eb3c25b061b26c90fe2aa8dbbf0a4156820ca2f116c2e86b4266f2218918748ddeea422771d62c10cc551b486e9a628f6b4ae5e9ee7727d2f7db27b9a4d5195a07147ad671c89f98b7eca1d0ec7458735d465a035b80c38f2e5bda45fc80503f5af8b45f43135f635a15b7598658263f1e5e90bd596fecef73bbe1d74a118f8023f448a296fbee19ccdad6a622e29b80aba721664a4947c02c2118911fc375ebf26193c005d8cde6fff421a5035c484871da1de601bd1cbbae9aeb9e16c6623d047f83bf09fd343bd9e1be4b0d1a1ce663a16f2435631ad802b5a929533ea4477942258ec9e34743f5dbc38fb705a876fde383efc7dbec9088b2e9ce7291178d35c4706d9095b7948b022da2bc6205cc21979910601a4f172992b4e469e4925ff9936e5f894d72f8b56db4df96f6ea724c0ac6d0d736ca27ae9afb02a70d6d69ea0d0026322f50bb33a810e76b6db9933cda28af2947cc3d07c4079bffffcde4482e82ea1e8160698faf6cd68afad75a520d15ba60584f5e508c0752c6fcd041d9ef25bc5c7cfcc134213fc7aed6db241f61dd06d538e4dd03d41296775562545a7c556c06f915433e7c1e568a60f734820e97b55d9160e9d45816cf9f333360174e5d94e64ba4a87be3f811c09771f273af9b87814089ad20ac3502f3aa29fd8144fc7ac1eae2d07469a85af",
        zzTU6: { jlfHv: "l" },
        w7VxQ: { cdkhK: [], V5ApL: "", PsKLo: "", ObbFX: [], pnj15: "" },
        fhWmZ: { NKNvJ: [], RD7dS: "" },
        ZTxaa: {
          IqwZE: [
            "f_POST/^.*/api/V2/plan/occupy/schedules/.*$_W10=_10",
            "f_GET/^.*\\/api\\/V2\\/plan\\/schedules\\/[0-9]+\\/blocks\\/grades$_W10=_10",
            "f_POST/^.*\\/api\\/V2\\/plan\\/[0-9]+\\/seat-all\\/canvas\\/area$_W10=_10",
            "f_POST/^.*/api/V2/plan/\\d+/seat-soldout/area$_W10=_10",
            "f_GET/^.*/api/V2/plan/\\d+/zone/remain$_W10=_10",
            "f_GET/^.*/api/V2/plan/schedules/\\d+/grades$_W10=_10",
          ],
          aUkYq: [
            { hostName: "", contextPathList: ["/"], exceptContextPathList: [] },
          ],
          HgEf7: "du/",
          ERFUj: [],
          qcWO4: {
            "POST/^.*/api/V2/plan/occupy/schedules/.*$_W10=_10": {},
            "POST/^.*\\/api\\/V2\\/plan\\/[0-9]+\\/seat-all\\/canvas\\/area$_W10=_10":
              {},
            "GET/^.*/api/V2/plan/\\d+/zone/remain$_W10=_10": {},
            "POST/^.*/api/V2/plan/\\d+/seat-soldout/area$_W10=_10": {},
            "GET/^.*\\/api\\/V2\\/plan\\/schedules\\/[0-9]+\\/blocks\\/grades$_W10=_10":
              {},
            "GET/^.*/api/V2/plan/schedules/\\d+/grades$_W10=_10": {},
          },
          qH5s9: "dq/",
        },
        I9s7m: { YE4sL: "", P1E3D: 0, B8ECa: "", mriLu: [] },
        nIlZO: { WJnSY: "", gw9Tg: [], MPRN3: [], aas3F: "" },
      };
    </script>
    <script src="/home?evfw=sfeWJiyJk2FnCtIZ" charset="utf-8"></script>
    <script>
      window.globalThis || (window.globalThis = window);
    </script>
    <script>
      if (!wcs_add) var wcs_add = {};
      if (((wcs_add.wa = "s_765d50fa49a"), !_nasa)) var _nasa = {};
      window.wcs && (wcs.inflow(), wcs_do());
    </script>
    <script
      src="//tketlink.dn.toastoven.net/frontend/ticketlink/latest/main-DswQdeJu@2.7.2.js"
      crossorigin
      type="module"
    ></script>
    <link
      href="//tketlink.dn.toastoven.net/frontend/ticketlink/latest/@tanstack-CFcagMac@2.7.2.js"
      rel="modulepreload"
      crossorigin
    />
    <link
      href="//tketlink.dn.toastoven.net/frontend/ticketlink/latest/i18next-CClJTB55@2.7.2.js"
      rel="modulepreload"
      crossorigin
    />
    <link
      href="//tketlink.dn.toastoven.net/frontend/ticketlink/latest/vendors-2wIQ7wh6@2.7.2.js"
      rel="modulepreload"
      crossorigin
    />
    <link
      href="//tketlink.dn.toastoven.net/frontend/ticketlink/latest/axios-zzg7_j7n@2.7.2.js"
      rel="modulepreload"
      crossorigin
    />
    <link
      href="//tketlink.dn.toastoven.net/frontend/ticketlink/latest/lottie-web-CUAvlhhm@2.7.2.js"
      rel="modulepreload"
      crossorigin
    />
    <link
      href="//tketlink.dn.toastoven.net/frontend/ticketlink/latest/jotai-BWt5oo6E@2.7.2.js"
      rel="modulepreload"
      crossorigin
    />
    <link
      href="//tketlink.dn.toastoven.net/frontend/ticketlink/latest/swiper-CFngLeCa@2.7.2.js"
      rel="modulepreload"
      crossorigin
    />
    <link
      href="//tketlink.dn.toastoven.net/frontend/ticketlink/latest/react-jsbarcode-dXn85pQ4@2.7.2.js"
      rel="modulepreload"
      crossorigin
    />
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>

 

/home에서 보내는 응답입니다. 불필요한 부분은 최대한 삭제했습니다. 마지막에 div가 한개만 존재하는 걸로 봐서 SPA(Single Page Application)으로 내부에서 불러오는 형식으로 진행되는 것 같습니다. 그렇다면 저 js들을 뜯어보면 어떠한 로직들을 발견할 수 있겠네요! 

 

추가적으로 실제 동작 방식을 정리해보겠습니다. 

1. 사이트에 사용자가 로그인해서 쿠키를 받아옵니다. 

2. 그 쿠키를 바탕으로 4개의 변수 (키, 밸류 2쌍)에서 실제 직링에서 필요한 키값들을 생성합니다.

3. 예매하기 버튼 클릭 시 어떤 로직에 따라 스케쥴ID 혹은 시간대를 바탕으로 4개의 변수 중 밸류 값들을 생성합니다. 

4. 그 변수들이 합쳐져서 직링이 되고, 넷퍼넬 키 요청을 시작합니다. 

 

다시 한번, 이 글은 기술적인 호기심과 실험적인 분석을 위한 목적으로 작성되었습니다. 실제 예매 과정에서 이를 악용하거나 무단으로 활용하는 것은 서비스 약관 위반이 될 수 있으며, 법적 책임이 따를 수 있습니다. 

 

반응형