tag:blogger.com,1999:blog-88979947666545154612024-02-07T19:40:30.630+03:00VANS SOFTVanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.comBlogger114125tag:blogger.com,1999:blog-8897994766654515461.post-55668391330017003352021-01-24T18:55:00.004+03:002021-01-24T18:55:28.799+03:00У меня новая телега<p> Так получилось что потерял доступ к старой телеге, слетела на всех устройствах.</p><div style="text-align: left;"><span style="font-size: large;">Вот новая: <a href="https://t.me/vanscoder" rel="nofollow" target="_blank">@vanscoder</a></span><br /></div>VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com1tag:blogger.com,1999:blog-8897994766654515461.post-45225761578094834402020-04-24T06:54:00.000+03:002020-04-24T06:56:49.588+03:00Что этот AlphaSkins себе позволяет?<div dir="ltr" style="text-align: left;" trbidi="on">
На днях решил начать эволюционировать и в рамках этого сменил версию Delphi на 10.3 Rio, поставил туда альфаскин и получил сообщение со следующим содержанием:<br />
<br />
<div style="text-align: center;">
<b>Trial version of the AlphaControls package has been used</b></div>
<div style="text-align: center;">
<b>For purchasing the fully functional version visit www.alphaskins.com, please</b></div>
<div style="text-align: center;">
<b>Thank you!</b></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
Из сообщения понятно что этот альфаскин опять бросил нам вызов! Я так и не понял в чём именно эта версия урезана так как на сайте ничего про это не сказано, следовательно можно пока что перехватить это окно. Ну и как его регистрировать я тоже не понял, куда там что вводить не ясно, по этому пока что без кейгена.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
</div>
<a name='more'></a><br />
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Что бы перехватить сообщение нужно выяснить какая функция отвечает за его вывод, по строкам в <b>x64dbg</b> находим место</div>
<div style="text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2y57tNRS4YMxtXqcKvz5q-ujsr8IV-oC4SO9bvlBF8aIPXaE4cjy9CZGNfsoalbjsEtzUtg0nGOjCfT5QAHsKmI0LGUvknWDoIO4Xn6v_mCsiXTv0wOwruxR8dU57VDQzAm-aPgCLFQi2/s1600/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="304" data-original-width="1076" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2y57tNRS4YMxtXqcKvz5q-ujsr8IV-oC4SO9bvlBF8aIPXaE4cjy9CZGNfsoalbjsEtzUtg0nGOjCfT5QAHsKmI0LGUvknWDoIO4Xn6v_mCsiXTv0wOwruxR8dU57VDQzAm-aPgCLFQi2/s400/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png" width="400" /></a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Я выделил переход, если его пропатчить то сообщения не будет. Тут альфаскин проверяет под отладчиком мы или нет, если нет то выводит сообщение. Я через F7 и F8 дошёл до функции которая использует API вызов <b>MessageBoxIndirectW</b> который нам нужно перехватить.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Код для перехвата буду использовать старый, а описание этой функции нам подскажет Delphi, а если быть точнее то модуль <b>Winapi.Windows</b></div>
<div style="text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2HyKl9McBtP6DsU8TGb4xKBpnyzCj6dp-plX-JO2DaVYah0mgH80NlKO2sgVz77aemXcr-Vmpe7fMhmIPWFz6TJhoSrQ8VxlFJSqJkD-Di1V3H1MkqniM55M29q8yceLWvwe1zHhoyyt8/s1600/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B92.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="195" data-original-width="1116" height="68" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2HyKl9McBtP6DsU8TGb4xKBpnyzCj6dp-plX-JO2DaVYah0mgH80NlKO2sgVz77aemXcr-Vmpe7fMhmIPWFz6TJhoSrQ8VxlFJSqJkD-Di1V3H1MkqniM55M29q8yceLWvwe1zHhoyyt8/s400/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B92.png" width="400" /></a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Копируем отсюда нужную нам функцию и модифицируем прошлый перехватчик. Я сделал это за вас, скачать его можно тут: <a href="https://pastebin.com/LUQLb7MW" target="_blank">https://pastebin.com/LUQLb7MW</a> </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Код выше вставлять в *.dpr файл. Если обнаружите закрытие программы через какое то время или прочие проявления триальности - милости прошу в комментарии.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<b>P.S.</b> Йо-хо-хо и репак с торрента. Пираты опять победили. </div>
</div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com5tag:blogger.com,1999:blog-8897994766654515461.post-40092005834739948742019-01-18T02:24:00.002+03:002019-01-18T02:24:53.020+03:00Реверс IOS приложения VK<div dir="ltr" style="text-align: left;" trbidi="on">
Очень давно я публиковал свой компонент для VK который имеет кучу плюсов и один большой минус - работа через неофициальное приложение. Что плохого в этом? Ну например нельзя получить список музыки, куча каптчи (привет спамерам) и моментальные баны аккаунтов. Что бы это исправить я решил сделать работу своего компонента через официальные приложения, такие как iPhone, iPad и Android.<br />
<br />
<br />
Сразу обрадую читателей - покупать iPhone за 80 тысяч деревянных не нужно! Вообще ни одно устройство Apple нам не понадобится.<br />
<br />
<br />
<a name='more'></a>Для начала нужно раздобыть приложение, если у вас есть iTunes (тунец) то качаем приложение с AppStore и находим его в папке с бэкапом, если же нет - топаем на 4pda и качаем оттуда:<br />
<br />
<a href="http://4pda.ru/forum/index.php?showtopic=384847" rel="nofollow" target="_blank">http://4pda.ru/forum/index.php?showtopic=384847 </a><br />
<br />
Если вы не смогли достать приложение - реверс не ваше призвание. А если смогли - мои поздравления, можно двигаться дальше и открывать файлик с расширением .ipa обычным 7-zip архиватором:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxCAoEc3o0EHfh4QFR3a7z0eEyftpTy6wCyDOFUwi8kUQn400j6BAhJ2g01ZSn5ZyKiRJz0xUmTEnLrgOAtuedkSuMDbe3mjH0-kPZd4PEq88128PmmZ6A16s708CgHPY_HsP_n75GIbxJ/s1600/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="153" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxCAoEc3o0EHfh4QFR3a7z0eEyftpTy6wCyDOFUwi8kUQn400j6BAhJ2g01ZSn5ZyKiRJz0xUmTEnLrgOAtuedkSuMDbe3mjH0-kPZd4PEq88128PmmZ6A16s708CgHPY_HsP_n75GIbxJ/s400/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png" width="400" /></a></div>
<br />
<br />
Ищем папочку <b>PAYLOAD</b> в которой будет примерно следующее:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiejpFr9cQQFQSpmnORfxkrDnouPkvK7sVNLyRSAGf0c4vPn1N2o4qCC6ca0gtf730PQMKCbMAk8aZ3zDA3DWLrCUDGAXuIt3UPv9jZz5zobC0Tbu_exD7XfFG28KfFN14J8cJe2Ac-J9E/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiejpFr9cQQFQSpmnORfxkrDnouPkvK7sVNLyRSAGf0c4vPn1N2o4qCC6ca0gtf730PQMKCbMAk8aZ3zDA3DWLrCUDGAXuIt3UPv9jZz5zobC0Tbu_exD7XfFG28KfFN14J8cJe2Ac-J9E/s400/2.png" width="323" /></a></div>
<br />
Тут нас интересуют только 2 файла:<br />
<b>Info.plist</b> - информация о приложение, не столь важна, понадобится позже;<br />
<b>vkclient</b> - архив который содержит код под разные архитектуры, обычно выделяется размером, внутри два файла:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA3Qiwr3qfc9cNz_M1r8hT4u2HJKsv-IH0JYF6B_Hq26tK8f1obJeF5NzweIpv-MZAxVjEgYYdR0kqBAdJ9Z7H9JaZ14PnMKaIdkPPP8Q2HtAlUWiOVDkl7KUfrAOKTomT4qWkLNN0E79Q/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA3Qiwr3qfc9cNz_M1r8hT4u2HJKsv-IH0JYF6B_Hq26tK8f1obJeF5NzweIpv-MZAxVjEgYYdR0kqBAdJ9Z7H9JaZ14PnMKaIdkPPP8Q2HtAlUWiOVDkl7KUfrAOKTomT4qWkLNN0E79Q/s1600/3.png" /></a></div>
<br />
Для лучшего понимания я буду анализировать файл <b>vkclient~.arm-9</b><br />
<br />
<br />
Загоняем его в тётушку IDA и пока наше приложение дизасемблируется - составим список того, что нам нужно достать:<br />
<br />
<blockquote class="tr_bq">
1. ID приложения<br />
2. Секретный ключ<br />
3. UserAgent<br />
4. Версию приложения</blockquote>
<br />
Ну с первым всё понятно, это можно сделать так: заходим в раздел _vk.com/settings?act=apps и на шестерёнке жмём "исследовать элемент", далее откроется такое окно:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvXxcOf0uyxl9SnzIYhXh8aocXOJ65KesrUFDhXFy-J53UiFQN5MeQl3iKRAtarX_fW2SPHsTsvnckLPsrENwFSs3MzKJFtHbJVL394ttS3dQqVYBEKMvfA4-secq38v-PNM9GkFAolv-6/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvXxcOf0uyxl9SnzIYhXh8aocXOJ65KesrUFDhXFy-J53UiFQN5MeQl3iKRAtarX_fW2SPHsTsvnckLPsrENwFSs3MzKJFtHbJVL394ttS3dQqVYBEKMvfA4-secq38v-PNM9GkFAolv-6/s320/4.png" width="320" /></a></div>
<br />
Вот таким нехитрым способом можно узнать ID любого приложения. Так же можно узнать ID при помощи IDA, но это требует больше времени.<br />
<br />
Со вторым пунктом посложнее, по этому самое время открыть тётушку IDA и вбить в поиск по тексту ID приложения, в результате найдём такой момент:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIfbhwaqmOYaEGZOed38XSTks8oash7klYuuH12JvOP3pUbIBmXS3N3_M8aIi9-L8SZ_eoFRXnfObL6a-n0wuG5TJSzsu2WxuhzkLEpcSTUGPrv2saYyEsBg881acr_mxTBdtFD6IPCizH/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIfbhwaqmOYaEGZOed38XSTks8oash7klYuuH12JvOP3pUbIBmXS3N3_M8aIi9-L8SZ_eoFRXnfObL6a-n0wuG5TJSzsu2WxuhzkLEpcSTUGPrv2saYyEsBg881acr_mxTBdtFD6IPCizH/s1600/5.png" /></a></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
</div>
<div style="text-align: center;">
<b>ID приложения:</b> 3140623</div>
<div style="text-align: center;">
<b>Ключ приложения:</b><br />VeWdmVclDCtn6ihuP1nt</div>
<br />
Это было не сложно, по этому переходим к следующему пункту.<br />
<br />
Юзерагент находится сложнее:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzuQpekadsuNs5RJg7QfV8wT198AG5R3u3d_QRZYw8O8NnFHkRMlQx2rqpus6pb9jLwV4m6vox0pfCuPMXtPpY35dxpdQ2SkstoLROEXEHwYlczEEnavKm2vLoFGxiybZk0Dv4lKAIgxrw/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="313" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzuQpekadsuNs5RJg7QfV8wT198AG5R3u3d_QRZYw8O8NnFHkRMlQx2rqpus6pb9jLwV4m6vox0pfCuPMXtPpY35dxpdQ2SkstoLROEXEHwYlczEEnavKm2vLoFGxiybZk0Dv4lKAIgxrw/s400/6.png" width="400" /></a></div>
<br />
Что то нет желания реверсить его генерацию, по этому просто отснифаю и получу его в готовом виде:<br />
<br />
com.vk.vkclient/43 (unknown, iPhone OS 10.2.1, iPhone, Scale/2.000000)<br />
<br />
Осталось получить версию приложения, посмотрим откуда она берётся:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifX09zqb1rVyRnwVvAdaSOxv5y-AM-oxR6-yfQangGNwqstf9OH1gs4YUrFCfuBM11UYRDHx0w46jZFkThyphenhyphenssvrXix64zQ-UXoqR6Cl2tuXjOVcqUxpsVia2c8IpIdpTCd5hVGxu-srDod/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="166" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifX09zqb1rVyRnwVvAdaSOxv5y-AM-oxR6-yfQangGNwqstf9OH1gs4YUrFCfuBM11UYRDHx0w46jZFkThyphenhyphenssvrXix64zQ-UXoqR6Cl2tuXjOVcqUxpsVia2c8IpIdpTCd5hVGxu-srDod/s400/7.png" width="400" /></a></div>
<br />
Выше я упоминал файл <b>Info.plist </b>в котором, собственно, и расположено значение данного параметра:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb3siRlse3d-uHYkRaoK6mSIN_0By_PSJlZs7NMBwDy3oxdU0_Z-ldN2xduZqKLggWNr_yYq8zn8X_DMaPuqTtyXJwt3uanOWDASUVZGY3_k9OSerHpHM1PYbQH63XyWYpTwn45pM0tGcT/s1600/8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb3siRlse3d-uHYkRaoK6mSIN_0By_PSJlZs7NMBwDy3oxdU0_Z-ldN2xduZqKLggWNr_yYq8zn8X_DMaPuqTtyXJwt3uanOWDASUVZGY3_k9OSerHpHM1PYbQH63XyWYpTwn45pM0tGcT/s1600/8.png" /></a></div>
<br />
Это вам не приложение инстаграма...<br />
<br />
<h2 style="text-align: center;">
Заключение</h2>
<div style="text-align: left;">
Поддержка не одобряет работу через официальное приложение, по их мнению это очень плохо, за это надо как минимум линчевать на площади и откусывать голову. Зачем вам выкачивать музыку, лучше идите и вирусы пишите.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjoLjvD2wCARkg7b95D_koaku8oVxRaGliuXLcaHymuFlW4pz50B6LBiQGerlV8PqGpPQKv2NBz8b4XhXp39W6BexYubzw3N2ju_H108aKinedxBtmf09ngg9xSDEEHprgxMTEO3BNrYd3/s1600/9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="769" data-original-width="776" height="396" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjoLjvD2wCARkg7b95D_koaku8oVxRaGliuXLcaHymuFlW4pz50B6LBiQGerlV8PqGpPQKv2NBz8b4XhXp39W6BexYubzw3N2ju_H108aKinedxBtmf09ngg9xSDEEHprgxMTEO3BNrYd3/s400/9.png" width="400" /></a></div>
<br />
На этом всё, ну а я пошёл искать другую степь для развития, например доделаю модуль VKAPI на который уже год не могу выделить время что бы довести его до ума.</div>
</div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com2tag:blogger.com,1999:blog-8897994766654515461.post-12501432769375103292017-07-07T18:49:00.001+03:002017-07-07T18:53:41.828+03:00Steam Login Checker<div dir="ltr" style="text-align: left;" trbidi="on">
Прошло много времени с момента последней публикации в бложике, но я исправляюсь и представляю новый, БЕСПЛАТНЫЙ и полезный чекер почтовых ящиков на доступность к регистрации в steam.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwXvPzrG09vdJ2f8b_oIrs4EB59QbNZD-4WUJ75kGcUlYOvXvsJJc5Xz3B-TqrWE6u6D270wAy8b9-O6VgQuHUuSJbRbNJYZC9noo192RvrAX31GVTTnHw2s1f8ueQhSV40HfCnG4X9W-S/s1600/soft.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="563" data-original-width="790" height="285" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwXvPzrG09vdJ2f8b_oIrs4EB59QbNZD-4WUJ75kGcUlYOvXvsJJc5Xz3B-TqrWE6u6D270wAy8b9-O6VgQuHUuSJbRbNJYZC9noo192RvrAX31GVTTnHw2s1f8ueQhSV40HfCnG4X9W-S/s400/soft.png" width="400" /></a></div>
<br />
<a name='more'></a><br />
Кто не в курсе - есть новая тема по восстановлению старых аккаунтов через Steam Big Picture и этот чекер почт (email) просто создан под данную тему. А ещё он бесплатный как в старые добрые времена!<br />
<br />
Софт имеет довольно широкий функционал:<br />
<ul style="text-align: left;">
<li>Поддержка HTTPS/SOCKS5 прокси</li>
<li>Многопоточность (к сожалению не более 10.000 потоков)</li>
<li>Ручной ввод каптчи для евреев и крестьян</li>
<li>Распознавание каптчи через антикаптчу/рукаптчу для бояр</li>
<li>Ручное распознавание каптчи в многопотоке</li>
<li>Автоматическая установка и настройка при первом запуске</li>
</ul>
И лухури дизайн конечно же! Это первая версия софта, если он будет популярен - прикручу программное распознавание каптчи и никаких затрат на антигейт или ручной работы. Но сделать программное распознавание каптчи не так просто, на это нужно время которого у меня очень мало.<br />
<br />
Для работы нужно много прокси, после 10-15 проверок наступает бан. Чекер детектит бан и будет писать кучу ошибок. Аккаунты которые попали в ошибки сохраняются в отдельный файл который можно потом перечекать. Разбан прокси происходит через 1-2 часа.<br />
<br />
Сразу отвечу на вопрос почему тут каптча. Старая версия работала через проверку логина при регистрации, но там ввели странный бан который практически не возможно детектить ибо сайт начинает тупо писать что логин свободен. В связи с этим проверка идёт через восстановление пароля, а там каптча. Надеюсь на понимание.<br />
<br />
Скачать можно тут: <a href="https://mega.nz/#!sUsxWZba!z5bTSqX0zDRNbFTqChXZgIbNz_WAMjwLhCvzsWje6Fg" rel="nofollow" target="_blank">MEGA</a></div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com33tag:blogger.com,1999:blog-8897994766654515461.post-19249113597294204092017-03-02T22:06:00.001+03:002017-03-02T22:07:21.903+03:00HTTP hostname and TLS SNI hostname mismatch<div dir="ltr" style="text-align: left;" trbidi="on">
При использование компонента Synapse в Delphi может возникать ошибка "<b>Error 1013 HTTP hostname and TLS SNI hostname mismatch</b>" которая говорит нам о том, что хост в HTTP заголовке и заголовке SSL соединения не сходятся.<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJD-fhR8x4FLL89XjN_UrBHn-gROQv0vh7w2InwyoMXqDobVhLQ-x_40uC8_XGLt0D802hFKkL60zHg-I_DtMToBXLyeGmOpoEhw5cUeHvlMgg8G5ATfRzugIKmk86I2HojWsNoHH2nvHQ/s1600/231993815_4d9559434c1a79398d909258129b50fb_800.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="164" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJD-fhR8x4FLL89XjN_UrBHn-gROQv0vh7w2InwyoMXqDobVhLQ-x_40uC8_XGLt0D802hFKkL60zHg-I_DtMToBXLyeGmOpoEhw5cUeHvlMgg8G5ATfRzugIKmk86I2HojWsNoHH2nvHQ/s400/231993815_4d9559434c1a79398d909258129b50fb_800.png" width="400" /></a></div>
<a name='more'></a><br />
<br />
<br />
Решение данной ошибки достаточно простое:<br />
<br />
1. Топаем сюда: <b><a href="https://github.com/marado/synapse/commit/8d90e55335b94d7490a91d1c02b86546cb76b42a" rel="nofollow" target="_blank">GITHUB</a></b> и обновляем модули Synapse.<br />
2. Качаем DLL файлы <b>libeay32.dll</b> и <b>ssleay32.dll</b> отсюда: <b><a href="https://mega.nz/#!AYdUCZ5Q!MEg4qSgVRX6EeUOfRkDVOtoHITZhfq4U53FeGyfDt3o" rel="nofollow" target="_blank">MEGA</a></b><br />
3. Обновляем функцию работы с сетью:<br />
<br />
<blockquote class="tr_bq">
function HTTPGet(url: string): string;<br />
var HTTP:THTTPSend; rez:TStringList;<br />
begin<br />
HTTP:=THTTPSend.Create;<br />
<b>HTTP.Sock.SSL.SSLType:=LT_TLSv1_2;</b><br />
HTTP.AddPortNumberToHost:=false;<br />
HTTP.UserAgent:='Mozilla/5.0';<br />
HTTP.Protocol:='1.1';<br />
HTTP.HTTPMethod('GET', url);<br />
rez:=TStringList.Create;<br />
rez.LoadFromStream(HTTP.Document);<br />
result:=rez.Text;<br />
rez.Free;<br />
HTTP.Free;<br />
end;</blockquote>
<br />
Теперь мы без проблем можем подключаться к сайтам с защитой от CloudFlare.</div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com2tag:blogger.com,1999:blog-8897994766654515461.post-73281232261053333172017-01-19T15:34:00.000+03:002017-01-19T15:38:51.931+03:00Обход шифрования в программах<div dir="ltr" style="text-align: left;" trbidi="on">
Часто бывает что строки в программе чем то зашифрованы, обычно это base64 и подобные, однако мне всё чаще попадаются программы где шифрование самодельное (ох уж этот xor) и порой реверсить это дело не хочется! В этой статье я опишу как убрать шифрование и подсовывать программе строки в нормальном виде.<br />
<br />
Наш подопытный на сегодня - это бот для одного из тысячи сайтов по обмену лайками, он бесплатный, автор молодец и наверное на этом можно было бы закончить статью если бы не одно но! Бот сливает % лайков разработчику, многие негодуют по этому поводу и пишут мне с просьбой вписать рефку, ну и приходиться вписывать, тем более 500р за 5-10 минут совсем не плохо.<br />
<br />
<br />
<a name='more'></a><br />
<br />
Начнём с поиска зашифрованной строки, далеко ходить не надо - в FormCreate находим:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEharBojtT2jYaDq4UxMmxzl2Ogp7_GoIKXGpifTbYekh_IF2TB0R08c3HC-Ln3GVNcDVT-LdhxOuWMWq_SltTnjXe6ucyCTa0oXNzEX0K102U9CDWT7l1SmaG-QPKt_w7npRaxseW_wvd6M/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="326" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEharBojtT2jYaDq4UxMmxzl2Ogp7_GoIKXGpifTbYekh_IF2TB0R08c3HC-Ln3GVNcDVT-LdhxOuWMWq_SltTnjXe6ucyCTa0oXNzEX0K102U9CDWT7l1SmaG-QPKt_w7npRaxseW_wvd6M/s400/1.png" width="400" /></a></div>
<br />
<b>Минутка криптоанализа: </b><br />
Мы имеем строку, из прошлых версий нам известно, что там 2 ссылки на _goo.gl через запятую, значит разделим эту строку на 2 части которые сразу заметно:<br />
<br />
dxx|6##kcc"k`#];cfa:<br />
dxx|6##kcc"k`#H;JOI=<br />
<br />
По этим данным мы можем сделать вывод, что используется посимвольное нахождение исходного текста путём математических вычислений, и уже имея это на руках легко подобрать алгоритм! Попробуем представить буквы ASCII кодами:<br />
<br />
ASCII(d) = 100; надо получить h (104)<br />
ASCII(x) = 120; надо получить t (116)<br />
<br />
Как можно заметить - цифры отличаются и в большую и в меньшую сторону, значит тут замешан <b>XOR</b>! Можно подобрать XOR-байт и это будет самое простое решение, но я пойду другим путём...<br />
<br />
С шифрованием разобрались, теперь давайте локализуем место расшифровки ссылок, делается это при помощи сниффера и отладчика, т.е. отлаживаем и смотрим на каком этапе отправляется запрос. У меня запрос рефки отправился тут:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNmnALG7zXscVJyUQUoMJNQ_WXcnMDHWsLCRBtQLpF7uYUTZD2Xbxe_Xom0Hj2rx-Z9JjBOY6RwJiuAIMmgj4_lL8nHeDerSlDNTC_nktWP8xjjgRdmEqjCo6Cig-niLUIKoSkDXB_N5j2/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNmnALG7zXscVJyUQUoMJNQ_WXcnMDHWsLCRBtQLpF7uYUTZD2Xbxe_Xom0Hj2rx-Z9JjBOY6RwJiuAIMmgj4_lL8nHeDerSlDNTC_nktWP8xjjgRdmEqjCo6Cig-niLUIKoSkDXB_N5j2/s400/2.png" width="388" /></a></div>
<br />
Топаем в эту функцию и сразу же бросается в глаза:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixubHRyeSTjfe7yNx_20SJe0qPpCZTsur3IabMSA1tt-euxBuVNFymUfCUJyzC8awjV0vAhwL-esiCncDRHsEdRn794xfcW6jbAR4ezk50eDXJe7eAbBDinECxjjC7Rf-RD-S9M1kbAPTT/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixubHRyeSTjfe7yNx_20SJe0qPpCZTsur3IabMSA1tt-euxBuVNFymUfCUJyzC8awjV0vAhwL-esiCncDRHsEdRn794xfcW6jbAR4ezk50eDXJe7eAbBDinECxjjC7Rf-RD-S9M1kbAPTT/s400/3.png" width="326" /></a></div>
А тут вот что:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinljDoOm4RVY6Ou9MKy1xXzCDjt0nt5VQKTlgqECwCfzmeN10nDsLNmc7Uyl0jGm9531m8CVOrKEt7j1uH8HrOCjUyN6OMlGzuWqlhn57ngOyS1jkEhe77z2q8rv85li9UHQywCQMrBxWK/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="376" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinljDoOm4RVY6Ou9MKy1xXzCDjt0nt5VQKTlgqECwCfzmeN10nDsLNmc7Uyl0jGm9531m8CVOrKEt7j1uH8HrOCjUyN6OMlGzuWqlhn57ngOyS1jkEhe77z2q8rv85li9UHQywCQMrBxWK/s400/4.png" width="400" /></a></div>
<br />
Судя по всему выделенная на скриншоте выше функция отвечает за расшифровку, проверим так ли это:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPF7Ocz0k_GNkN1m-CtIGOCgN-3s96nbHw9nczGTmaTgnhBkM5xRZF2tDvN_OaNexUEr-fHAksRMV1Jj3V4G_KXKNs2WBdzMAFmbnCbOgt0ySyVkLmHg2KvgsW859g3TpbeWquE6iNQyTk/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPF7Ocz0k_GNkN1m-CtIGOCgN-3s96nbHw9nczGTmaTgnhBkM5xRZF2tDvN_OaNexUEr-fHAksRMV1Jj3V4G_KXKNs2WBdzMAFmbnCbOgt0ySyVkLmHg2KvgsW859g3TpbeWquE6iNQyTk/s1600/5.png" /></a></div>
<br />
А вот и функция, которая как и предполагалось отвечает за расшифровку ссылок! Тут мы можем пойти двумя путями:<br />
<br />
1. Глазами отреверсить этот "мэгоалгоритмтрудешифрования"<br />
2. Выпилить его отсюда что бы не огорчал криптоаналитиков.<br />
<br />
Я пойду по второму пути и сделаю так, что бы алгоритм расшифровки пропускался:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilj7fLBIHajf_mDuhhpMBqoaY2n7TkvVUBbzcHmWvnYg8X5HW7W3-9Yv4BO3RtOsTMuknhT8_MYYXNwgchfrDrbK_iNakJfH4ExL5OzrMW39g7qd9E-4_A1Qw_w0Ar4-bKmhdO0k0_OoZY/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilj7fLBIHajf_mDuhhpMBqoaY2n7TkvVUBbzcHmWvnYg8X5HW7W3-9Yv4BO3RtOsTMuknhT8_MYYXNwgchfrDrbK_iNakJfH4ExL5OzrMW39g7qd9E-4_A1Qw_w0Ar4-bKmhdO0k0_OoZY/s1600/6.png" /></a></div>
<br />
Так как программа расшифровывает ссылку в туже переменную - мы просто делаем прыжок в конец цикла расшифровки и текст остаётся неизменным, в результате функция вернёт тот же самый текст который приняла.<br />
<br />
Ну а дальше пропишем ссылку в программу по адресу <b>51FE4C</b> и получим:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS__4-R6XTzNEaVtQTDfasNjPx_Bc1GV8Z2w9MbEpWhBPObjiOynTp3Jg5Xtn_jl2SOTyaBUNnPEBDq0waR_zPeLeD6kC9xlhuhkRwm_vfODCGATvz-XEPymvtfLR9Xn6nO4qibGUuBtoh/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS__4-R6XTzNEaVtQTDfasNjPx_Bc1GV8Z2w9MbEpWhBPObjiOynTp3Jg5Xtn_jl2SOTyaBUNnPEBDq0waR_zPeLeD6kC9xlhuhkRwm_vfODCGATvz-XEPymvtfLR9Xn6nO4qibGUuBtoh/s400/7.png" width="400" /></a></div>
<br />
Проснифаем что получилось - всё работает!<br />
<br />
К сожалению статья писалась давно и исследуемой программы у меня не осталось, но надеюсь всё было понятно и вы без труда сможете воспользоваться этим приёмом на другом софте. Как всегда если что то не понятно - задавайте вопросы в комментариях, постараюсь ответить на все.</div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com2tag:blogger.com,1999:blog-8897994766654515461.post-42366462270918275462017-01-17T19:46:00.002+03:002017-01-17T19:46:40.726+03:00Delphi: Сохранение всех настроек<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
Когда программа содержит больше 50 чекбоксов/полей/радиобатонов/etc - сохранять их все довольно утомительное занятие, приходиться прописывать каждую настройку руками, придумывая при этом уникальные имена. Для ускорения написания софта я сделал пару функций, которыми решил поделиться с читателями моего бложика.</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2iet9JVD6hcTkBx8Ttnjf5ZT9yuBoixmkfPQ9e4eN_-TWHrjjCsCwJ71bIKqybsoBEU-Mgjmq4w-72q6Ruwlm3_E_LHH-JdKlBoTOL0mT_QyWZAIEUf1ZWgcu7a0Hn0qehefUnbOk9eY1/s1600/set.png" /></div>
<br />
<br />
<a name='more'></a><br />
<div style="text-align: justify;">
Функции сохраняют все поля используя рекурсивный поиск по компонентам, можно указать в качестве источника FormN и тогда будут сохранены абсолютно все поля которые есть на форме. Сохранение работает для компонентов из пакета AlphaSkins, но по
примеру вы без труда сможете переделать их под стандартные или самописные. </div>
<br />
<b>Пример использования:</b><br />
<br />
<blockquote class="tr_bq">
SaveFields(sTabSheet1); //для вкладок<br />
SaveFields(Form1); //для всех компонентов на форме<br />
SaveFields(sPanel1); //только компоненты с панели 1</blockquote>
<br />
Функция <b>LoadFields</b> работает по аналогичному принципу.<br />
<br />
Для удобства можно объявить переменную <b>ini:TIniFile;</b> как глобальную, не забыв при этом добавить в <b>USES</b> модуль <b>IniFiles</b>.<br />
<br />
Сами функции опубликовал тут: <b><a href="http://pastebin.com/dwW8B1F9" target="_blank">PASTEBIN</a></b></div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com0tag:blogger.com,1999:blog-8897994766654515461.post-26271731571976381272016-12-20T23:13:00.000+03:002016-12-20T23:17:04.980+03:00Модуль для anti-captcha и rucaptcha<div dir="ltr" style="text-align: left;" trbidi="on">
Йо-хо-хо! Решил сделать подарок кодерам - модуль для разгадывания обычной и гугл каптчи сразу через 2 сервиса: anti-captcha.com и rucaptcha.com на основе синапса!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjywaWwVIYWDt1-ATxpCm9ErtBDvfbpVFJNQJkWG3Cq9KE_L0ktU98JEBGb5zhJID_i5g19_gODUbiDORk9t8XIIc7GtMye3x7Sdl7RU2p0JaKcWwEq5yQewYE-EZDgspmPIItDDcbJYiV_/s1600/50129575.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjywaWwVIYWDt1-ATxpCm9ErtBDvfbpVFJNQJkWG3Cq9KE_L0ktU98JEBGb5zhJID_i5g19_gODUbiDORk9t8XIIc7GtMye3x7Sdl7RU2p0JaKcWwEq5yQewYE-EZDgspmPIItDDcbJYiV_/s400/50129575.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<a name='more'></a><br />
Последний параметр в обеих функциях отвечает за сервис, если <b>TRUE</b> то рукаптча, если <b>FALSE </b>то антикаптча.<br />
<br />
<b>Пример для рекаптчи вк:</b><br />
<br />
Result:=RecognizeRC('6Le00B8TAAAAACHiybbHy8tMOiJhM5vh88JVtP4c', 'http://vk.com/', 'ваш_API_ключ', TRUE);<br />
<b><br /></b>
<b>Пример для обычной каптчи вк:</b><br />
<br />
procedure Captcha(sid: string; var Answer: string);<br />
var fm:TmemoryStream; HTTP:THTTPSend;<br />
begin<br />
fm:=TMemoryStream.Create;<br />
HTTP:=THTTPSend.Create;<br />
HTTP.AddPortNumberToHost:=false;<br />
HTTP.UserAgent:='Mozilla/5.0 (Windows NT 5.1; rv:28.0) Gecko/20100101 Firefox/58.0';<br />
HTTP.Protocol:='1.1';<br />
HTTP.HTTPMethod('GET', 'https://vk.com/captcha.php?sid='+sid);<br />
fm.LoadFromStream(HTTP.Document);<br />
fm.Position:=0;<br />
Answer:=Recognize(fm, 'ваш_API_ключ', TRUE);<br />
HTTP.Free;<br />
fm.Free;<br />
end;<br />
<br />
Кстати, код выше используется в моём модуле для ВК, который я опубликую после исправления всех багов.<br />
<br />
Исходный код модуля: <a href="http://pastebin.com/kxE54LYU">http://pastebin.com/kxE54LYU</a><br />
Старая версия: <a href="http://vans-soft.blogspot.com/2012/01/antigatecom.html" target="_blank">тут</a> <br />
<br />
Если будут вопросы - задавайте в комментариях, постараюсь ответить.</div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com5tag:blogger.com,1999:blog-8897994766654515461.post-1892357752446840142016-12-01T00:24:00.003+03:002016-12-01T00:39:32.116+03:00Сканер и брут роутеров + исходник<div dir="ltr" style="text-align: left;" trbidi="on">
Давненько я не радовал читателей своего блога хорошим софтом в связи с отсутствием времени, но теперь я постараюсь исправиться! По этому представляю сканер и брут роутеров в одной программе:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGoO5rXEblPVHPuUfZYuf-5Vbix9cuS37Eitzya9s68LJ9h_03Veo4ZrkEQB5sgj-j-EnG7xfCElHmnXH16R4Oa_SagxafKH2zQbtaaPym8MLQDS-EwMz5puTakfFa7YZohLqFEGN4BYJk/s1600/0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="311" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGoO5rXEblPVHPuUfZYuf-5Vbix9cuS37Eitzya9s68LJ9h_03Veo4ZrkEQB5sgj-j-EnG7xfCElHmnXH16R4Oa_SagxafKH2zQbtaaPym8MLQDS-EwMz5puTakfFa7YZohLqFEGN4BYJk/s400/0.png" width="400" /></a></div>
<br />
<br />
<a name='more'></a><br />
<br />
При создание ботнета из роутеров нужно много роутеров - это логично, по этому я решил написать софт который будет добывать их в огромном количестве. Самая главная фишка софта: моментальная отправка IP роутеров в брут!<br />
<br />
<h3 style="text-align: center;">
Функции</h3>
<ol style="text-align: left;">
<li>Брут роутеров</li>
<li>Сканер роутеров</li>
<li>Возможность отправлять IP сразу в брут</li>
<li>Ведение лога (вкл/выкл). Очистка лога клавишей DEL</li>
</ol>
<br />
<h3 style="text-align: center;">
</h3>
<h3 style="text-align: center;">
Техническая сторона</h3>
<br />
Брут использует дайджест аутентификацию нового стандарта <b><a class="external mw-magiclink-rfc" href="https://tools.ietf.org/html/rfc2617" rel="nofollow">RFC 2617</a></b>, но по мимо этого так же поддерживает и старый стандарт <b><a class="external mw-magiclink-rfc" href="https://tools.ietf.org/html/rfc2069" rel="nofollow">RFC 2069</a></b>. Разница между этими стандартами заключается в усиление защиты.<br />
<br />
Сторонние модули используемые в софте: <b>DCPCrypt, Synapse, AlphaSkins</b><br />
<br />
Среда разработки: <b>Delphi 2010</b> <br />
<br />
Софт имеет 2 класса TThread, первый сканирует не зависимо от второго, а второй брутит не зависимо от первого.<br />
<br />
<br />
<h3 style="text-align: center;">
Что НЕ надо делать с набрученными роутерами</h3>
<h3 style="text-align: center;">
</h3>
<ol style="text-align: justify;">
<li>Собирать свою прошивку-винлокер с требованием выкупа для разблокировки интернета или роутера. Друг (тот самый который занимается плохими вещами) рассказывал, что можно требовать от 500 до 1000 рублей спокойно.</li>
<li>Собирать прошивку которая будет требовать пополнить интернет при помощи кредитной карты и грузить такую прошивку на забугорные роутеры (погуглите страны которые больше всего подвержены кардингу). Всё тот же друг рассказывал, что попадаются жирные карты с балансом $1-5к.</li>
<li>Собирать прошивку-сниффер с MITM которая будет перехватывать все запросы пользователя. При неосторожных действиях можно украсть пароли и персональную информацию. Друг таким не занимался ибо не эффективно.</li>
<li>Так же не стоит делать прошивку которая будет предлагать загрузить разную малварь, ведь загрузить можно дудос бота или банковский троян и тем самым будет украдена информация о кредитных картах.</li>
<li>Прокси из роутеров.</li>
<li>Менять DNS сервера для перенаправления пользователя на фейки социалок и платёжных систем.</li>
</ol>
<br />
Ну вы поняли что я не рекомендую это делать, но кто будет меня слушать? После винлокера на роутере нужно либо прошивать такой роутер, либо покупать новый, имейте это в виду. Если вы запороли свой роутер, то вот <a href="https://www.youtube.com/watch?v=fz7czOB0rnM" target="_blank">видео с матюками</a> в которым доходчиво объясняется как восстановить прошивку.<br />
<br />
<h3 style="text-align: center;">
Настройка сканера</h3>
<h3 style="text-align: center;">
</h3>
<ol style="text-align: justify;">
<li>Указываем диапазоны IP адресов (можно загрузить, можно скопировать)</li>
<li>Указываем количество потоков <b>на диапазон!!! </b>Если у вас 7 диапов и 10 потоков, то в результате будет 70 потоков. Проще говоря, потоки указываются для одного диапазона, а не в общем.</li>
<li>Если поставить галочку "отправлять сразу в брут" - нужно настроить брут.</li>
<li>Жмём старт и наблюдаем за работой. </li>
</ol>
<h3 style="text-align: center;">
</h3>
<h3 style="text-align: center;">
Настройка брута</h3>
<h3 style="text-align: center;">
</h3>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQgOS1B_zIj2ceuqZr_gIvq_ZvQcLcpkC4Hv1gpNTC0WHbP_attsEF4QWmp18VwUgp7tQ0_zp51gS19IaCg0oPXSGOBECPsDsFnNNLcXkguRfeDWrBWgrPZ6VWswC3Oie9gmwpurIphz_b/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="311" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQgOS1B_zIj2ceuqZr_gIvq_ZvQcLcpkC4Hv1gpNTC0WHbP_attsEF4QWmp18VwUgp7tQ0_zp51gS19IaCg0oPXSGOBECPsDsFnNNLcXkguRfeDWrBWgrPZ6VWswC3Oie9gmwpurIphz_b/s400/2.png" width="400" /></a></div>
<ol style="text-align: left;">
<li> Указываем список IP</li>
<li>Указываем список логинов</li>
<li>Указываем список паролей</li>
<li>Указываем число потоков. Если указать 10, то одновременно софт будет брутить 10 роутеров. Как только закончит с первой партией - перейдёт на вторую.</li>
<li>Жмём старт и наблюдаем за работой. </li>
</ol>
<br />
<br />
<div style="text-align: justify;">
Единственной проблемой является невозможность брута кастомной авторизации (в основном тплинк и днолинк), именно по этому я прикладываю исходники. Может быть найдётся доброволец который допилит софт и выложит свой форк в сеть. Кстати, если собираетесь публиковать свой форк - не выпиливайте пожалуйста мой ник, уважайте чужой труд.</div>
<br />
Скачать софт и исходники можно тут: <a href="https://mega.nz/#!0VVVjCTY!cJu7OxgI54Fxf6Rzrzf90uz-tjmnihQctXe-rPnKl5U" target="_blank"><b>MEGA</b></a><br />
<br />
<br /></div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com15tag:blogger.com,1999:blog-8897994766654515461.post-40187205256655258482016-05-08T10:49:00.000+03:002016-05-08T19:20:12.000+03:00Кейгеним LinkReader + распаковка AsPack<div dir="ltr" style="text-align: left;" trbidi="on">
В этой статье я опишу процесс создания кейгена для такой замечательной программы как LinkReader. Эта программа служит для облегчения выполнения заданий (копирования ссылок из браузера). Так же я расскажу про новые инструменты которые могут использоваться для анализа различного рода программ, ведь не olly едины. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPhDlcI_uCfUZ_bvwopIurUGH-43QlGDP2mRCxcyRTiGoNwDC4ihIxBjQZI5TbnKHEbwq3-m0fH2y5EHAlL-iTvJvTXDvGKd5vCU5u12uB7oV1N7OjUvX6yVD2U6kSlSF6c1i4eb-UuRju/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPhDlcI_uCfUZ_bvwopIurUGH-43QlGDP2mRCxcyRTiGoNwDC4ihIxBjQZI5TbnKHEbwq3-m0fH2y5EHAlL-iTvJvTXDvGKd5vCU5u12uB7oV1N7OjUvX6yVD2U6kSlSF6c1i4eb-UuRju/s320/1.png" width="295" /></a></div>
<br />
<br />
<a name='more'></a><br />
<div style="text-align: justify;">
Вот кстати по поводу таких "лицензионных соглашений", на самом деле это просто текст и никакой юридической силы не имеет. Если вы будете распространять программу без уведомления автора - он не побежит судиться с каждым школьником, ведь я уверен, что Delphi у него зарегано при помощи кейгена или чужого ключа, а следовательно его самого загребут первым делом. Но даже если Delphi всё же куплено - доказывать свои права автор будет долго и упорно.</div>
<br />
<h2 style="text-align: center;">
Инструментарий</h2>
Инструмент сегодня будет новый:<br />
<br />
<ol style="text-align: left;">
<li>Отладчик: <i>x64dbg.com</i></li>
<li>Восстановление импорта: <i>Scylla Imports Reconstruction</i></li>
<li>IDR - без него никак.<i><br /></i></li>
</ol>
<br />
<h2 style="text-align: center;">
Распаковка ASPack 2.12</h2>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTbRZOOmH85At_y3awSkC-ECUcBq08SyfBtXK5PoZrQHOuulCmmJhMO7oAstlYvCoMoAecNvls01XK9aVyvc6F-QcA_6HJYIGFxjPMOdqmbtebtOCRWCT0aMsX9Wzl1Bu8wW9PZCxsbbJi/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTbRZOOmH85At_y3awSkC-ECUcBq08SyfBtXK5PoZrQHOuulCmmJhMO7oAstlYvCoMoAecNvls01XK9aVyvc6F-QcA_6HJYIGFxjPMOdqmbtebtOCRWCT0aMsX9Wzl1Bu8wW9PZCxsbbJi/s1600/2.png" /></a></div>
<br />
Как обычно загрузим наш файл в отладчик для 32-х битных приложений:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRyFrnBVzckCF7xr8_u7RrWqnxNMZducohBZncH22MkVqqhKAL0r56mnxFGntGSWITQX7-A3vFJW42iy6syIp4C1uVySQ_Cb83c86lxlW9LnmhhkNq62Irr3uxGC9Xu3SRKISF0zRU57vh/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="367" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRyFrnBVzckCF7xr8_u7RrWqnxNMZducohBZncH22MkVqqhKAL0r56mnxFGntGSWITQX7-A3vFJW42iy6syIp4C1uVySQ_Cb83c86lxlW9LnmhhkNq62Irr3uxGC9Xu3SRKISF0zRU57vh/s400/3.png" width="400" /></a></div>
<br />
<div style="text-align: justify;">
Если вы оказались в модуле ntdll то просто жмёте <b>F9</b> и попадаете в главный модуль. В главном модуле (на скрине выше) нужно сделать шаг при помощи клавиши <b>F8</b>. Когда выполнение программы остановлено на адресе <b>005ED002</b> выбираем:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJmZpdSsIUDjaxstF7t3SnD6Naxr0IhYNh-zrxgaazm7EK9STLuCIJYNvvJqt4MgOhKWt1-bOCZZanw_-1XbpbMTGLPSMcN5Pa4NmxaaBHbO9H_SMcIiD-elXKCTu9zja-Q0zLA_ijiCeO/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJmZpdSsIUDjaxstF7t3SnD6Naxr0IhYNh-zrxgaazm7EK9STLuCIJYNvvJqt4MgOhKWt1-bOCZZanw_-1XbpbMTGLPSMcN5Pa4NmxaaBHbO9H_SMcIiD-elXKCTu9zja-Q0zLA_ijiCeO/s1600/4.png" /></a></div>
<br />
Попадаем сюда:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0DXi9coWfk_MlGndt7KN7ypoxcpj2nWAZ_clkNEULfgyT_eMBHfJVldLArLF6MXUayZJ2XnHAv0ESwT0BgtMZyCeNVjzmdDtr3VY3BSin8VJoehNxmF1kcvJPPmFyTqOXw7FdpgWTn7KS/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="321" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0DXi9coWfk_MlGndt7KN7ypoxcpj2nWAZ_clkNEULfgyT_eMBHfJVldLArLF6MXUayZJ2XnHAv0ESwT0BgtMZyCeNVjzmdDtr3VY3BSin8VJoehNxmF1kcvJPPmFyTqOXw7FdpgWTn7KS/s400/5.png" width="400" /></a></div>
<br />
Ставим хардварный брекпойнт и стартуем программу клавишей <b>F9</b>. Спустя пару секунд брякаемся где то тут:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYkt4xzLhKCqS7BtG3GCNOcb5zYknYD6CR74qlFKzoPg53K07v_K7q_nG6ithHUtgcyf7Wy6_ZLR6wb-wpuXNWld0XFLS7fVHU-7edbbEhgsfFOfLBfsrUu1HPyaaEkk-bMw2ywwWrfyLU/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYkt4xzLhKCqS7BtG3GCNOcb5zYknYD6CR74qlFKzoPg53K07v_K7q_nG6ithHUtgcyf7Wy6_ZLR6wb-wpuXNWld0XFLS7fVHU-7edbbEhgsfFOfLBfsrUu1HPyaaEkk-bMw2ywwWrfyLU/s1600/6.png" /></a></div>
<br />
Команда по адресу <b>005ED420</b> явно намекает нам что <b>OEP</b> где то тут: <b>4FD6D0</b>. Давайте проверим, для этого клавишей F8 дойдём до нужного места:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwdeCo_-g96P3n6lh8SVFdJesAgdhFtCBIHgWTcFUd2A1Vnw01AygAkZQU4oTQCzVRa1eOloiAaFLDD9cHdEsokShmLJLEGQjio8UcBVq2zQu0lqK_dKj7P_pimFIqPwriKwdUlLel1Yb9/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="368" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwdeCo_-g96P3n6lh8SVFdJesAgdhFtCBIHgWTcFUd2A1Vnw01AygAkZQU4oTQCzVRa1eOloiAaFLDD9cHdEsokShmLJLEGQjio8UcBVq2zQu0lqK_dKj7P_pimFIqPwriKwdUlLel1Yb9/s400/7.png" width="400" /></a></div>
<br />
Вот и OEP нашлось, ничего сложного.<br />
<br />
<div style="text-align: justify;">
Для понимания того что произошло объясню: В начале вы наверное заметили команду <b>PUSHAD</b>, это говорит о том, что будет выполнена и обратная команда <b>POPAD</b>, почти все упаковщики восстанавливают стек перед прыжком на OEP, этой особенностью мы и воспользовались для нахождения оригинальной точки входа.</div>
<br />
Теперь сдампим нашу программку:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXungVil60sB92M9G1phoAe6_uo_6wijLl1xke8q7PuvVPdhgwQM2Ucsuvzclnmtx9LPY6qk1dH5NWCrvn52BwNc23dVpon9BcRrXW50yQx0sEiR515O_LuSHYeuZu5poZkGDY0aXc5ljp/s1600/8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="370" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXungVil60sB92M9G1phoAe6_uo_6wijLl1xke8q7PuvVPdhgwQM2Ucsuvzclnmtx9LPY6qk1dH5NWCrvn52BwNc23dVpon9BcRrXW50yQx0sEiR515O_LuSHYeuZu5poZkGDY0aXc5ljp/s400/8.png" width="400" /></a></div>
<br />
Запомните адрес, он понадобится нам для восстановления импорта:<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIfopLL44m0xZpTAcKNhufUbB2J4bx9_JaABix-o6BGRz-Ido9gpD9I4c-Q5X2EKfLwfz-LTiQp8AxgX3Axvwma_BYhdGYqtBXpM5WtI_k-5Inguzq-rajRaUl0Gjp1Fe2zqlD3qbib3q8/s1600/9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIfopLL44m0xZpTAcKNhufUbB2J4bx9_JaABix-o6BGRz-Ido9gpD9I4c-Q5X2EKfLwfz-LTiQp8AxgX3Axvwma_BYhdGYqtBXpM5WtI_k-5Inguzq-rajRaUl0Gjp1Fe2zqlD3qbib3q8/s400/9.png" width="368" /></a></div>
<br />
<ol style="text-align: left;">
<li>Запускаем программу и выбираем её процесс</li>
<li>Вводим OEP и жмём IAT Auto Search</li>
<li>Если на шаге 2 всё сделали правильно, то должны заполниться поля VA и Size, если это сделалось то жмём Get Imports</li>
<li>Если все импорты валидные - фиксим дамп соответствующей кнопкой.</li>
</ol>
Проверяем программу - если всё работает то переходим к следующей части.<br />
<br />
<br />
<h2 style="text-align: center;">
Анализ программы</h2>
<br />
Загружаем программу в IDR и тапаем по кнопке проверки лицензии (bActivateClick):<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibrlh06nmHoPXJz2AhqwD6zQOd844lqCebLVywPQPTNWomR2j_CLxgwe6rmgl41FeDr3n1V_k15PSWpXU7fenO8aCiExkDG8Qi45W_my5ApbCPTaYfrpGJtsT92UONbv__z_TirQVc53Qw/s1600/10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibrlh06nmHoPXJz2AhqwD6zQOd844lqCebLVywPQPTNWomR2j_CLxgwe6rmgl41FeDr3n1V_k15PSWpXU7fenO8aCiExkDG8Qi45W_my5ApbCPTaYfrpGJtsT92UONbv__z_TirQVc53Qw/s400/10.png" width="387" /></a></div>
<br />
Хорошо, теперь мы знаем какая функция отвечает за проверку и генерацию лицензии! Настало время отладки, загружаю я значит программу и опана, она завершается! Непорядок...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsXdaf7PQSYBTbw1x4iKNS5UGC_nAcKzkkcODKaQm3R7SGK7av0JWgkcaEdeVOdmAtAtbO974u9k1sw2fqRNARLZX01PGs1BmfKlPrP0j2qZBtF4s3oLGuoNBGxkXTT9seyu9YRsSxTzxt/s1600/11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="62" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsXdaf7PQSYBTbw1x4iKNS5UGC_nAcKzkkcODKaQm3R7SGK7av0JWgkcaEdeVOdmAtAtbO974u9k1sw2fqRNARLZX01PGs1BmfKlPrP0j2qZBtF4s3oLGuoNBGxkXTT9seyu9YRsSxTzxt/s400/11.png" width="400" /></a></div>
<br />
Оправдания "это защита от школьников" не катят, ибо навешан был не UPX.<br />
<br />
Предположим у вас нет плагина для скрытия отладчика, по этому мы пойдём более... хм... я бы не назвал этот путь проще относительно установки плагина, ну да ладно.<br />
<br />
Для начала занопим всё что не нужно:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjl6hZfM3g1UMshHdQ3SJflcI5YCMmvpDpn8OZwMP3SV-HW12WQTcMJuXa2Xob6Z8Kr1A8oWlqCBsIkWh2G0QgRsE1y_IFHDX0UYztpHPXLR019PBD59PFyosMnxmBffBeQGZH6ItXtitUB/s1600/12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjl6hZfM3g1UMshHdQ3SJflcI5YCMmvpDpn8OZwMP3SV-HW12WQTcMJuXa2Xob6Z8Kr1A8oWlqCBsIkWh2G0QgRsE1y_IFHDX0UYztpHPXLR019PBD59PFyosMnxmBffBeQGZH6ItXtitUB/s1600/12.png" /></a></div>
<br />
Ого сколько места! Сюда должен влезть следующий код:<br />
<br />
<blockquote class="tr_bq">
<b>mov eax,dword ptr fs:[18]<br />mov eax,dword ptr ds:[eax+30]<br />mov byte ptr ds:[eax+2],0</b></blockquote>
<br />
<div style="text-align: justify;">
Этот код устанавливает флаг отладки в false тем самым говоря функции <b>isDebuggerPresent</b> (которая находиться на более высоком уровне) что никакого отладчика нет и всё спокойно. Даже если автор додумался поставить проверку этой функции на модификацию/бряки и прочие непотребства - оно ему поможет чуть меньше чем никак.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqVV64Kt05wBEmSY1AK4FDaE_iFBPzcmmaxBgt_I2Zrn74kDaxH3bKxCa9Iv0wH6FC8D7tey-Nh1qYXYkzujcuVUhKWrKOfi6PVenlNKSoL1eryEavKWu9nc0DRLZR35pBty5er3sepJwq/s1600/13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="194" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqVV64Kt05wBEmSY1AK4FDaE_iFBPzcmmaxBgt_I2Zrn74kDaxH3bKxCa9Iv0wH6FC8D7tey-Nh1qYXYkzujcuVUhKWrKOfi6PVenlNKSoL1eryEavKWu9nc0DRLZR35pBty5er3sepJwq/s320/13.png" width="320" /></a></div>
<br />
Что бы сохранить изменения жмём ПКМ по выделенному коду и выбираем Patch, далее сами разберётесь. Кстати, не обязательно размещать код по центру, я это сделал для красоты.<br />
<br />
Теперь можно спокойно отлаживать программу, перейдём в функцию генерации правильного ключа и посмотрим что там происходит:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTQ9IzR2Pahnu7P4czxI4zZzURBsVX5eyQF7G4z9JNav4xJpB6lnVliY9RluifESL0-VFYNbkheVFOplXEThEDYnmSTBTqh63l53pfN2WsWxu-chpdHPCahcrzF4ME2i8zpCdf_cCt8DKz/s1600/14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="307" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTQ9IzR2Pahnu7P4czxI4zZzURBsVX5eyQF7G4z9JNav4xJpB6lnVliY9RluifESL0-VFYNbkheVFOplXEThEDYnmSTBTqh63l53pfN2WsWxu-chpdHPCahcrzF4ME2i8zpCdf_cCt8DKz/s400/14.png" width="400" /></a></div>
<br />
<div style="text-align: justify;">
Что бы было понятнее - я добавил комментарии к каждой функции. Но если у вас плохо с ассемблером - не беда! Этот отладчик может как и Hex Rays генерировать код, для этого выделяем всю функцию, жмём ПКМ и выбираем пункт "Decompile" в результате получаем следующий код имеющий синтаксис С++:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2HdS9nSP2UF9ebc2rER3hb40M6M8LR9seliopFLGyaPaB3VayRwpmdG9zJPHLvZ7MgwrKD9jSBZARAHubw44EaDheWyUX06jVcn2INE9LyYHGHpn5hKiQ6ClbLWgM2NgoERClM0MsM0Gh/s1600/15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2HdS9nSP2UF9ebc2rER3hb40M6M8LR9seliopFLGyaPaB3VayRwpmdG9zJPHLvZ7MgwrKD9jSBZARAHubw44EaDheWyUX06jVcn2INE9LyYHGHpn5hKiQ6ClbLWgM2NgoERClM0MsM0Gh/s400/15.png" width="400" /></a></div>
<br />
<div style="text-align: justify;">
Даже если вы не знаете и С++ то алгоритм будет понятен если заменить все адреса на названия функций взятые из IDR. А переменным дать нормальные имена уже во время отладки. Но если и после этого ничего не понятно то объясню алгоритм генерации ключа на пальцах, он довольно простой: </div>
<br />
<ol style="text-align: left;">
<li>Используем строку ahrtkslpbz и ключ который нужен автору: k6a0a3l0h</li>
<li>Берём через один символ начиная с первого</li>
<li>Взяли k, получили его позицию в строке: 5</li>
<li>Взяли a, получили его позицию в строке: 1</li>
<li>Взяли L, получили его позицию в строке: 7</li>
<li>Взяли h, получили его позицию в строке: 2</li>
<li>Получили 561013702</li>
<li>Используем строку dynfgxmiew и ключ 561013702</li>
<li>Если символ w то подставляем 0 (ибо он десятый)</li>
<li>Взяли символ с 6-й позиции: x</li>
<li>Взяли символ с 10-й позиции: 0</li>
<li>Взяли символ с 3-й позиции: n</li>
<li>Взяли символ с 10-й позиции: 0 </li>
<li>Получили ключ активации 5x101n702</li>
</ol>
<br />
<h2 style="text-align: center;">
Пишем кейген</h2>
<br />
<div style="text-align: justify;">
Мы же крутые крякеры, использовать Delphi для кейгена удел слабаков, мы заюзаем ассемблер (плохие парни так и делают). Для написания кейгена я использую FASM, вы можете использовать что угодно, на вкус и цвет только фломастеры.</div>
<br />
При написание кейгена я сделал не большую хитрость, а именно:<br />
<br />
<b>decode db 'ahrtkslpbz1234567890',0 </b><br />
<b>generate db '1234567890dynfgxmie0',0 </b><br />
<br />
Объясню что тут произошло: мы вместо того что бы переводить код в число сразу переводим его в код для активации затрачивая меньше процессорного времени.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiU8lhiID9ee3FFsR5o6E0aoSZI1IzNBtFLn6FA_thLhIauCLlEWfM0BuDtO261WuhbJeYlwXi5BgByWwDMaWnPK_LtfXBar5rRX2DBPLtB7idhShdZiQqbCuMgG3qWaZUGBK131iilznq7/s1600/17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiU8lhiID9ee3FFsR5o6E0aoSZI1IzNBtFLn6FA_thLhIauCLlEWfM0BuDtO261WuhbJeYlwXi5BgByWwDMaWnPK_LtfXBar5rRX2DBPLtB7idhShdZiQqbCuMgG3qWaZUGBK131iilznq7/s1600/17.png" /></a></div>
<br />
<br />
Ну вот в принципе и всё, код очень простой и выложен на <a href="http://pastebin.com/rmxTm7nr" target="_blank">PASTEBIN</a>. Да знаю что не идеал, можно было ещё кучей способов сделать но яж не каждый день пишу драйвера на асме и по этому сделал как мог.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht1xoGO4Squi00odo23KRA3VveWtEmcrc46BI4JsNS0AZ32wtGb0uq8wXJRV4pTqsJoKhxNZH5SJvCNSeIPVBI5cIi7ApgYOEmrNLJiBcWtkdQNyt0YV5OJ4Ju3-k7tbmStDurh4RHnPn9/s1600/16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht1xoGO4Squi00odo23KRA3VveWtEmcrc46BI4JsNS0AZ32wtGb0uq8wXJRV4pTqsJoKhxNZH5SJvCNSeIPVBI5cIi7ApgYOEmrNLJiBcWtkdQNyt0YV5OJ4Ju3-k7tbmStDurh4RHnPn9/s400/16.png" width="400" /></a></div>
<br />
Скачать все файлы из статьи можно тут: <a href="https://mega.nz/#!sBEjTQCa!BhdBP918ty0dr7yGN57L1aRGOCix7S0ENSK4QY3oJH0" target="_blank">MEGA</a><br />
<h2 style="text-align: center;">
</h2>
<h2 style="text-align: center;">
invoke ExitProcess</h2>
<br />
<br />
<div style="text-align: justify;">
В этой статье я постарался изложить в доступной форме весь процесс начиная с исследования программы до написания под неё кейгена. На самом деле если есть опыт то всё это делается за час, максимум два. Конечно же исследование программы может занять на много больше времени, но новые инструменты упрощают жизнь любителям сэкономить 25 рублей. И помните - взломать можно всё что запускается.</div>
<br />
<div style="text-align: right;">
<b>© VANS</b></div>
<div style="text-align: right;">
</div>
<i></i></div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com9tag:blogger.com,1999:blog-8897994766654515461.post-50081380717176341152016-05-03T00:21:00.000+03:002016-05-03T00:21:45.101+03:00Распаковка самодельного упаковщика<div dir="ltr" style="text-align: left;" trbidi="on">
Многие просили меня сделать распаковку самописного пакера/протектора/криптора, но найти что то интересное очень сложно. В этой статье я постараюсь описать распаковку программы под названием GeneratorRegedit которая служит для создания дампа реестра с настройками RMS.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz83QIwaq-crrXQQOZizF6VzAtHpXc_ZqyonXOqwkdlrXXsDW5Zp9hVG9BRqGqisVRO1lbC-P4x-Okvkm3acEFl9IDbZbH5U_VGBjJ5V8zUixpc9cl2E2kQLBFmQvc10U2e9J0FP5GfGdv/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz83QIwaq-crrXQQOZizF6VzAtHpXc_ZqyonXOqwkdlrXXsDW5Zp9hVG9BRqGqisVRO1lbC-P4x-Okvkm3acEFl9IDbZbH5U_VGBjJ5V8zUixpc9cl2E2kQLBFmQvc10U2e9J0FP5GfGdv/s1600/1.png" /></a></div>
<br />
<a name='more'></a><br /><br />
Начнём как всегда с анализа поциента:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrJC5Jj4aF88HjUzOCfNc5JVlpferpVFrKu1Jjg4RSRYhs__9fTpy_MzKf9m3V2CEGEeZE54Rz08eTHYYcHNxZuAIkehGQvoTTQNV-KVIngh7_Fw5o2ZNy4TS6kygC4JaM37_fMXQlWTPf/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrJC5Jj4aF88HjUzOCfNc5JVlpferpVFrKu1Jjg4RSRYhs__9fTpy_MzKf9m3V2CEGEeZE54Rz08eTHYYcHNxZuAIkehGQvoTTQNV-KVIngh7_Fw5o2ZNy4TS6kygC4JaM37_fMXQlWTPf/s1600/2.png" /></a></div>
<br />
Как можно заметить - файл упакован. Загрузим его в OllyDBG:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIfpLjwQbuRa74v7M_uzdGasb-vxREWShuN3dNL2gVsrkLnvw4RD7pvYpBKJwyaWx8Y5NN9a8loqcssFo871i9UogYa75uYrmDToDVyrt7VYY2uingp-FOr8XNuUTdOH95LlMroHm9vZQH/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIfpLjwQbuRa74v7M_uzdGasb-vxREWShuN3dNL2gVsrkLnvw4RD7pvYpBKJwyaWx8Y5NN9a8loqcssFo871i9UogYa75uYrmDToDVyrt7VYY2uingp-FOr8XNuUTdOH95LlMroHm9vZQH/s1600/3.png" /></a></div>
<br />
Что то мне это напоминает, ну да ладно, продолжим исследование....<br />
<br />
Теперь приступаем к поиску OEP, тут ничего сложного нет, просто жмём постоянно F8 пока не найдём нечто подобное:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhb6SFuQGOYK1l7aNC9GDkMEZNi3ZN8JSCklC_gHWGUNfitRJN9yUrFkHIfreOfPKguzPjG75nqa2vqj-XRrA3FJq_wBAZi_KZTD96XEsjkGJ1Ax0NtV0knldsQbH271llHSRfZG5apdEV2/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhb6SFuQGOYK1l7aNC9GDkMEZNi3ZN8JSCklC_gHWGUNfitRJN9yUrFkHIfreOfPKguzPjG75nqa2vqj-XRrA3FJq_wBAZi_KZTD96XEsjkGJ1Ax0NtV0knldsQbH271llHSRfZG5apdEV2/s1600/4.png" /></a></div>
<br />
<br />
Тут происходит распаковка файла, ничего интересного. Мотаем в самый низ и наблюдаем следующее:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxtIgOT6Up4ygfbJBl2YpiKqPtOLUDlKOikdXusDS0StSALlMoWCkdDjoydtFSk-qJckaqYtVIQhqQpu274VGeqAv1KoXV7Lfb74F5_bzbJPjqm4CRahBisrQNmGAd-VPg7EIYLCYkuYE9/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxtIgOT6Up4ygfbJBl2YpiKqPtOLUDlKOikdXusDS0StSALlMoWCkdDjoydtFSk-qJckaqYtVIQhqQpu274VGeqAv1KoXV7Lfb74F5_bzbJPjqm4CRahBisrQNmGAd-VPg7EIYLCYkuYE9/s1600/5.png" /></a></div>
<br />
Похоже, это переход на OEP, ставим бряк (F2) и жмём F9. Срабатывает бряк, жмём F8 и попадаем куда целились:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpLFKFWuXWD09iyGmLbfyiKtPDD2WzxWV-si8m0iT0aVXwNdEvOt_sPgT_e9aBTOkOiHN63q1GBjAk7gdYf3qcpIN4Yp7i4QkIr0d9ak-o7DInD_khr4oRUdLyMhnuK7x_rwxq_nmrVYvZ/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpLFKFWuXWD09iyGmLbfyiKtPDD2WzxWV-si8m0iT0aVXwNdEvOt_sPgT_e9aBTOkOiHN63q1GBjAk7gdYf3qcpIN4Yp7i4QkIr0d9ak-o7DInD_khr4oRUdLyMhnuK7x_rwxq_nmrVYvZ/s1600/6.png" /></a></div>
<br />
Не обращая внимания на мусор и другие непотребства делаем дамп при помощиплагина для ольки под названием OllyDump:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRbbL117LKZHQJzjWkLJazyBUgsl2BdFFVCXgclwcjhFixsa9FRKdghkVeDtcMy5Ikig8p_1i9gB2O9nxaSPiK58E4jUNgn-VHcjtQ0o2r5K5byCwCpdpG7Pxkkm08wDwHcU46mSk3ZfpS/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRbbL117LKZHQJzjWkLJazyBUgsl2BdFFVCXgclwcjhFixsa9FRKdghkVeDtcMy5Ikig8p_1i9gB2O9nxaSPiK58E4jUNgn-VHcjtQ0o2r5K5byCwCpdpG7Pxkkm08wDwHcU46mSk3ZfpS/s1600/7.png" /></a></div>
<br />
Файл прибавил в весе: 3,93 МБ<br />
<br />
Что бы программа начала запускаться нужно пофиксить импорт, делается это при помощи ImpRec всего в пару кликов мыши, для этого:<br />
<br />
1. Запускаем оригинальный exe (не распакованный)<br />
2. Запускаем ImpRec<br />
3. В ImpRec выбираем оригинальный процесс<br />
4. Вводим найденное OEP в соответствующее поле<br />
5. Нажимаем кнопку IAT AutoSearch, появится:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihFUNGXciAz2A0u0qo2xUqKMuw5JB0hRYj3-SeS7yslLXttNQX_g72840EoUFnYaCBIhyphenhyphen2kGrKzD7VQCk2S3-cmJ2CuACVs06FZIGx5wvDCDde4pu4SusOLtR1Idpl-2mrKK7XOwHiCDF0/s1600/8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihFUNGXciAz2A0u0qo2xUqKMuw5JB0hRYj3-SeS7yslLXttNQX_g72840EoUFnYaCBIhyphenhyphen2kGrKzD7VQCk2S3-cmJ2CuACVs06FZIGx5wvDCDde4pu4SusOLtR1Idpl-2mrKK7XOwHiCDF0/s1600/8.png" /></a></div>
<br />
6. Нажимаем GetImports:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4LkFqA2iYrJAfAUBbRdZruPJIvXis5mrW85Gix_6qy6Lh6uQxzEP3SYpu05ausiWjTUXAtK-6AL9XRRjRPsIL5P-Q_lZ3g03hjirH6TR7EP2gp9729QUbG48UNahzTRfNgByV32XcYry9/s1600/9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="326" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4LkFqA2iYrJAfAUBbRdZruPJIvXis5mrW85Gix_6qy6Lh6uQxzEP3SYpu05ausiWjTUXAtK-6AL9XRRjRPsIL5P-Q_lZ3g03hjirH6TR7EP2gp9729QUbG48UNahzTRfNgByV32XcYry9/s400/9.png" width="400" /></a></div>
<br />
7. Жмём "Fix Dump" и выбираем наш дамп.<br />
<br />
Если всё сделали правильно - после данных танцев с бубном программа должна запуститься. IDR спокойно загрузил распакованный exe и начал анализ:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY2O_42LREmF62nDGOeauVj8wk7GFfIYI5SrLrVbv58yGnKqhyjylvtEJzdZoU6R7nmFlK9p7v-IUEygjVVuQvSkaEDWushs6fD2BAeEmX3Or0ygDs-LTx0luAGLmYwKbCvQ8wkmXukAK_/s1600/10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY2O_42LREmF62nDGOeauVj8wk7GFfIYI5SrLrVbv58yGnKqhyjylvtEJzdZoU6R7nmFlK9p7v-IUEygjVVuQvSkaEDWushs6fD2BAeEmX3Or0ygDs-LTx0luAGLmYwKbCvQ8wkmXukAK_/s1600/10.png" /></a></div>
<br />
PEiD так же говорит что всё ок. На этом распаковка закончена!<br />
<br />
Скачать оригинал и распакованный файл можно тут: <a href="https://mega.nz/#!Ic8FFYzT!XspddR39CuzjnrykXtIE9ybHORtN30-k-o3oaq2cmuc" target="_blank">MEGA</a> <br />
<div style="text-align: right;">
<b>© VANS</b></div>
<br /></div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com3tag:blogger.com,1999:blog-8897994766654515461.post-78754704676294883932016-02-22T05:54:00.002+03:002016-02-22T06:01:46.844+03:00[Delphi] Пишем стиллер Psi+<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: justify;">
Почти каждый день появляются разнообразные стиллеры, некоторые воруют пароли, а более современные перешли на кражу Cookie с браузеров. Но стиллеры не всегда приносят вред, иногда мы просто забываем пароль и не можем вспомнить его. В этой статье мы рассмотрим алгоритм шифрования паролей в Jabber клиенте Psi+ что бы восстановить наш забытый пароль.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7QSeI1Ob-FRXIiVTgoQo9pUyLxSjZcqu4-EX2jxgB1L6R5Tc62p_ptfcAy7vnmawg6uXCKtZT71I1Yjq08aIfbilT6zL5vYD_cKf7Ng8nsvQ9KyDzfbx6TjBihHQKTjDt-TOed2jw0Sc7/s1600/jabber_logo3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="117" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7QSeI1Ob-FRXIiVTgoQo9pUyLxSjZcqu4-EX2jxgB1L6R5Tc62p_ptfcAy7vnmawg6uXCKtZT71I1Yjq08aIfbilT6zL5vYD_cKf7Ng8nsvQ9KyDzfbx6TjBihHQKTjDt-TOed2jw0Sc7/s320/jabber_logo3.jpg" width="320" /></a></div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<a name='more'></a><br />
Инструмент как всегда стандартный:<br />
<ol style="text-align: left;">
<li>IDA</li>
<li>OllyDBG </li>
<li>Delphi</li>
</ol>
Для начала необходимо найти где Psi+ хранит пароли, это сделать не сложно, достаточно побродить по файлам и мы наткнёмся на файл <b>accounts.xml</b> который содержит наш пароль:<br />
<br />
<b><password type="QString"></b><i>тут будет зашифрованный пароль</i><b></password></b><br />
<br />
Теперь посмотрим где происходит загрузка этого файла: <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimWg0QxR5VZDFfmlEsW9ZaHyP7CneEYKkhCH8L1BEiPhInnSy9frqr8P-38BVJ6VaIYGcu5l1jBtQ8GwYIGM5j29B-UnYqora20j8YlXe3PMuTUPcH051u4l8o_JIAf_Bs_PosGJBCXgQ1/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimWg0QxR5VZDFfmlEsW9ZaHyP7CneEYKkhCH8L1BEiPhInnSy9frqr8P-38BVJ6VaIYGcu5l1jBtQ8GwYIGM5j29B-UnYqora20j8YlXe3PMuTUPcH051u4l8o_JIAf_Bs_PosGJBCXgQ1/s1600/1.png" /></a></div>
<br />
Поищем переменную <b>password</b> и наткнёмся на....<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKbEGkqceFLHsHcCWv1rDnkN179SCR1vf4_ZEIUZ9S5y20hZeBRZ6Q36FNHKUALQ7mf_72veeLXVgZ8KfDKUCWbUTZ70KfnpmhHvuwIqQa4p7S8hSI2kDR3z1yagZysTvOjLQ0jFCx_YUb/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKbEGkqceFLHsHcCWv1rDnkN179SCR1vf4_ZEIUZ9S5y20hZeBRZ6Q36FNHKUALQ7mf_72veeLXVgZ8KfDKUCWbUTZ70KfnpmhHvuwIqQa4p7S8hSI2kDR3z1yagZysTvOjLQ0jFCx_YUb/s1600/2.png" /></a></div>
<br />
Очевидно что тут происходит считывание поля содержащего пароль, копаем дальше...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtPKTMjmKmJ5Sd9R8r8a9doViqlnN2BRFeY_9BuCHWQcQY99XUaf7gmTOBIBkEWA1XGirobSZx_U7Kh9eeZF0OweXk0eHI_z_PHRl4baxs6jMsVZqfC7sILhxvp_iW87te96z5YpIPpICs/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtPKTMjmKmJ5Sd9R8r8a9doViqlnN2BRFeY_9BuCHWQcQY99XUaf7gmTOBIBkEWA1XGirobSZx_U7Kh9eeZF0OweXk0eHI_z_PHRl4baxs6jMsVZqfC7sILhxvp_iW87te96z5YpIPpICs/s1600/3.png" /></a></div>
<br />
А вот и считывание логина, оно кстати нам пригодиться при расшифровке пароля!<br />
<br />
Теперь началось самое сложное - отследить где же расшифровывается пароль. Psi+ написан на Qt, реверсить это дело то ещё удовольствие... Я потратил более часа ставя точки останова на чтение памяти и в результате добился желаемого:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8r45EqLvnm0gdy7XcFoam98S1XiiH11Q38yEEVCG1APXGzv3k9i5ttxaRuphA-fqkbdNSvrIYXmMf6UsOmcqhyMFj1kCI6m2gYFXAUK-qx_w7mNtbT-vH-p4OZXsu8rdUONMv2C8GJgZU/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="273" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8r45EqLvnm0gdy7XcFoam98S1XiiH11Q38yEEVCG1APXGzv3k9i5ttxaRuphA-fqkbdNSvrIYXmMf6UsOmcqhyMFj1kCI6m2gYFXAUK-qx_w7mNtbT-vH-p4OZXsu8rdUONMv2C8GJgZU/s400/4.png" width="400" /></a></div>
<br />
А вот и зашифрованный пароль, расшифровка пароля происходит в этой же функции. Адрес функции: <b>0050F3F0</b><br />
<b><br /></b>
Теперь, когда мы знаем адрес функции которая расшифровывает пароль, можно начать отладку программы используя клавишу F8. Мне понадобилось 10 минут что бы понять алгоритм шифрования, он достаточно прост и по этому я реализовал его на Delphi:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnaFOM8_dwkd7drHUoFZ055gBYfFMCvcuWzYo9yuv4d3PclUxRu2m8uBBmPbI2To0rsLKOObU-VVhuua-i2VDDw5whyuZLzfjITvR3H9Di19iJTrP_uKbb5f4_XSiyzweCo5gWOuSdYc8H/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnaFOM8_dwkd7drHUoFZ055gBYfFMCvcuWzYo9yuv4d3PclUxRu2m8uBBmPbI2To0rsLKOObU-VVhuua-i2VDDw5whyuZLzfjITvR3H9Di19iJTrP_uKbb5f4_XSiyzweCo5gWOuSdYc8H/s1600/5.png" /></a></div>
<br />
Суть "шифрования" - обычный XOR пароля с логином.<br />
<br />
Скачать программу и исходник: <a href="https://mega.nz/#!PIJnVYzL!F3ESUF-xbrEaQDz4kpK9bAafK8tIdeOAbbeIEK11rUs" rel="nofollow" target="_blank"><b>MEGA</b></a><i><b> </b></i><br />
<br />
<div style="text-align: right;">
<i><b>© VANS</b></i></div>
<div style="text-align: right;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
</div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com0tag:blogger.com,1999:blog-8897994766654515461.post-67072289406652689362016-01-25T07:17:00.001+03:002016-01-25T07:22:45.473+03:00Реверс Android приложений<div dir="ltr" style="text-align: left;" trbidi="on">
Каждому кодеру знакома ситуация когда сделать брут, чекер и прочее для какого то сайта является проблемой. Далеко за примером ходить не надо: <b>deliveryclub</b> и <b>instagram</b>. На первом каптчу ввели, на втором вообще регистрация только через приложение. Как жить? Есть конечно же jdgui и apktool но как правило все приложения обфусцированы и эти программы помогают чуть меньше чем никак. В этой статье я расскажу как достать ключ подписи от приложения instagram.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw_xcfnEoIE6GKvDJQs_DrT1LEhUIHQtTaaOS3EIihZMU6Ia0GEfRmZqNimJnBMbB8rsW1fOxZ-MIV8WIeY7TGQIZjt3HcOBzOAGSw9XuGc-0b0eRqumNoLJ00EqexgQSL377RimHRh-X-/s1600/insta.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw_xcfnEoIE6GKvDJQs_DrT1LEhUIHQtTaaOS3EIihZMU6Ia0GEfRmZqNimJnBMbB8rsW1fOxZ-MIV8WIeY7TGQIZjt3HcOBzOAGSw9XuGc-0b0eRqumNoLJ00EqexgQSL377RimHRh-X-/s320/insta.png" width="320" /></a></div>
<br />
<br />
<br />
<a name='more'></a>Что нам потребуется для реверса ведройд приложений? Конечно же первым делом сам аппарат с ведройдом на борту! Я купил бомж версию oneplus one, выглядит это дело так:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-rLFTmnkp2o9jLW_Ut0RKGktDODojc21ki1H3iLmdOnc2IN9_4Xi6anlUWKJxsfHuoz7ukBfs_nX7eP6lBnJnUiverTqagIkbtMDQHAuv1VVvkc6VQtGf9Gp5t0uME8XNZxYmRoqIZA8f/s1600/phone.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-rLFTmnkp2o9jLW_Ut0RKGktDODojc21ki1H3iLmdOnc2IN9_4Xi6anlUWKJxsfHuoz7ukBfs_nX7eP6lBnJnUiverTqagIkbtMDQHAuv1VVvkc6VQtGf9Gp5t0uME8XNZxYmRoqIZA8f/s200/phone.jpg" width="200" /></a></div>
Стоит такое ведро 350$. Можно купить мобилу дешевле но получиться ли получить на неё ROOT права никто не скажет, именно по этому мой выбор пал на самую популярную модель смартфона. Как получить на неё рут права <a href="http://4pda.ru/forum/index.php?showtopic=582669" rel="nofollow" target="_blank">можно нагуглить за минуту</a>, для других моделей смартфонов есть приложение framaroot, kingroot. Гуглите, это не сложно.<br />
<br />
Ну если вы рутанули телефон и он ещё подаёт признаки жизни - двигаемся дальше, а если ничего не выходит - проще купить другой телефон (например iPhone 6s) и забыть ведройд как страшный сон.<br />
<br />
<h3 style="text-align: center;">
Настройка телефона </h3>
<h3 style="text-align: center;">
</h3>
Итак, нам надо поставить на <u>порутанный</u> смартфон <a href="http://gikir.com/product.php" rel="nofollow" target="_blank">GikDBG.art</a> - это инструмент отладки приложений прямо на телефоне основанный на <b>GNU Project debugger. </b>Когда будете ставить <b>gikdbg.apk</b> - не забудьте наградить его <b>root </b>правами! <br />
<br />
Следующим шагом будет включение отладки по USB, делается это так:<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA2DE7g1FDR1U6Pq29pUHJuWu9cPfI2g4V25z6Y9w5fjnNKZqTSNYtTexa_Ixwa246qkfKi9tWrh5fisevVvXNXh9H9SRpA2_dcvHwEfv4_QoLfO8MXym4KMg0RlCA0XyBLsD168KlF5dG/s1600/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="212" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA2DE7g1FDR1U6Pq29pUHJuWu9cPfI2g4V25z6Y9w5fjnNKZqTSNYtTexa_Ixwa246qkfKi9tWrh5fisevVvXNXh9H9SRpA2_dcvHwEfv4_QoLfO8MXym4KMg0RlCA0XyBLsD168KlF5dG/s400/%25D0%2591%25D0%25B5%25D0%25B7%25D1%258B%25D0%25BC%25D1%258F%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B9.png" width="400" /></a></div>
<br />
<b>Настройки </b>=> <b>Опции разработчика</b> => <b>Режим отладки</b> => <b>Ставим галочку</b> => <b>ОК</b><br />
<br />
<h3 style="text-align: center;">
Анализ приложения Instagram</h3>
<br />
Лучше всего объяснять на примере инстаграма - это самое простое что может быть. Как обычно декомпилируем <b>.apk</b> файл при помощи <b>dex2jar</b>:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAiVf9io7nH5AQbFPbjQZ7sOJI9xIWCxUJjHQYKBig1nsVojxgGAAcmppqVVjEqyVgqFZeK346J3uSAACbZblUYLz_-1Kdb4QrIqeOeiI8sua7xCRsGiFKS1mHDiSvyYFyPFkogpMiGnV7/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="201" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAiVf9io7nH5AQbFPbjQZ7sOJI9xIWCxUJjHQYKBig1nsVojxgGAAcmppqVVjEqyVgqFZeK346J3uSAACbZblUYLz_-1Kdb4QrIqeOeiI8sua7xCRsGiFKS1mHDiSvyYFyPFkogpMiGnV7/s400/1.png" width="400" /></a></div>
<br />
Полученный .jar файл загоняем в jdgui и наблюдаем такую картину:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2yr2cav2tAq8hea0BKqD4X0Qhgt2pZIsYYJlITk0NX3h3WvwTAyJomrFBKId7fxuiTiSAM_fkpaSIgOdjcItIs0gR2QPtz6qud3yuM8OUKvKu_AMbp0Dehn09jScjKAxZDQfV4QVJFpBh/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="275" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2yr2cav2tAq8hea0BKqD4X0Qhgt2pZIsYYJlITk0NX3h3WvwTAyJomrFBKId7fxuiTiSAM_fkpaSIgOdjcItIs0gR2QPtz6qud3yuM8OUKvKu_AMbp0Dehn09jScjKAxZDQfV4QVJFpBh/s400/2.png" width="400" /></a></div>
<br />
Можно сделать вывод что ключ для подписи запросов зашифрован и расшифровывается он перед самой подписью запроса. Ладно, посмотрим как он расшифровывается:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLlglnqX4FCd1ywGNrGxQ48L2DnAzqz_a0vGlZjcd5r_4Tl5AFi5AJdRWZ89k7L2NZWThAhZCbg0Q3104eGS1_rQcI4g9mOfW9_WPU2ezr19wVm23UKlaK6tTaTvul-fAnZCwIgGJ_B6du/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLlglnqX4FCd1ywGNrGxQ48L2DnAzqz_a0vGlZjcd5r_4Tl5AFi5AJdRWZ89k7L2NZWThAhZCbg0Q3104eGS1_rQcI4g9mOfW9_WPU2ezr19wVm23UKlaK6tTaTvul-fAnZCwIgGJ_B6du/s400/3.png" width="400" /></a></div>
<br />
Но не тут то было! Выделенная строка говорит нам о том, что для расшифровки строк используется нативная библиотека <b>.so</b> (в windows это называется <b>.dll</b>). Нативная библиотека уже скомпилирована и используется точно так же как и DLL файлы в windows.<br />
<br />
Что бы достать эту библиотеку для последующего анализа открываем <b>.apk</b> файл в <b>7-zip</b>'e:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkv3uTJ9eWJxZhqDWtYzz9eWsrmC_Ej5upv3eV9ldeQ6Siev4lXk__kQq5DHlN8rn3UWZLfdEaMUk1fnLkdaKnr8MrOOvh3SbneyzT3use-f45gOekbzmbGeCx2DIjVdowF9vh5Zj-6zyz/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="247" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkv3uTJ9eWJxZhqDWtYzz9eWsrmC_Ej5upv3eV9ldeQ6Siev4lXk__kQq5DHlN8rn3UWZLfdEaMUk1fnLkdaKnr8MrOOvh3SbneyzT3use-f45gOekbzmbGeCx2DIjVdowF9vh5Zj-6zyz/s400/4.png" width="400" /></a></div>
<br />
Ну и достаём её из архива для того, что бы скормить тётушке IDA:<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhpEguktJXNP4wXQrTlIFN7UyDI_GsB9EQJsWTmimvvDrUc4q4yx_dj01cjH65hX6G588-1oVIJJaU8TRnVKqKT-SGXwlBot7OGfnjNQWY57mFwwSs8k1QEPgz5q0K6pcYSM39Ow43rJqM/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhpEguktJXNP4wXQrTlIFN7UyDI_GsB9EQJsWTmimvvDrUc4q4yx_dj01cjH65hX6G588-1oVIJJaU8TRnVKqKT-SGXwlBot7OGfnjNQWY57mFwwSs8k1QEPgz5q0K6pcYSM39Ow43rJqM/s400/5.png" width="400" /></a></div>
<br />
У меня нет никакого желания заниматься реверсом алгоритма доставания строки, по этому пойдём лёгким путём и загрузим приложение под отладчиком. Теперь нам будет проще т.к. функцию которая портит нам всю малину мы успешно нашли.<br />
<br />
<h3 style="text-align: center;">
Подключение отладчика</h3>
<br />
Итак, подошли к самому главному моменту - отладке приложения! Для этого подключаем телефон к компутеру и запускаем <b>gikdbg.art</b>, затем жмём <b>ART Debug</b> => <b>Server</b> => <b>ADB Device</b> и если всё сделали правильно то появиться окошко с идентификатором вашего ведройда:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0PKJKu-CXncbThCHKKMgZyDANHcblI0YO06KFGvSXv4eGtAo0up99weEi1w-3B-G-d8EIloxsoXozEavpQCynhng3geaajY18dUYh4CkEe4qJ46Tz7_aXQOVZQ8yrfElsu8n7dQjArRHZ/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="230" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0PKJKu-CXncbThCHKKMgZyDANHcblI0YO06KFGvSXv4eGtAo0up99weEi1w-3B-G-d8EIloxsoXozEavpQCynhng3geaajY18dUYh4CkEe4qJ46Tz7_aXQOVZQ8yrfElsu8n7dQjArRHZ/s400/6.png" width="400" /></a></div>
<br />
Кликаем по идентификатору 2 раза и если всё сделали правильно - появляется окошко с командами показанное на рисунке ниже:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3FN71nmXFCv8TspQclfhiI5eKSNR1Xd5V0QhBohm4zhKSU7CCNxhFnAud9qx3Wcyu62yZ4Fh_myKsb-ESqKbUi4jI6orHT1JmVDgPBo9hmvdpVgJDP6EIUC4JHJ7tel3l0RZ4x0OZbA_4/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="207" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3FN71nmXFCv8TspQclfhiI5eKSNR1Xd5V0QhBohm4zhKSU7CCNxhFnAud9qx3Wcyu62yZ4Fh_myKsb-ESqKbUi4jI6orHT1JmVDgPBo9hmvdpVgJDP6EIUC4JHJ7tel3l0RZ4x0OZbA_4/s400/7.png" width="400" /></a></div>
<br />
Выбираем <b>ART Debug</b> => <b>File</b> => <b>Attach</b> как показано на рисунке выше и ищем в списке приложение инсты:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7ib-EWKYoxaLQ4XbYY9PFOu11JMTR_uNFICgvRzNbtnaUI3vfoOv56Lda_A2dnyMvy8_Tjc7PAMiss4L2OSJIE8PeuAM-sSIlRy7duJbMgcwdTwW2TMKxnWN1VlMisyPdheba7jFO_a83/s1600/8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="196" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7ib-EWKYoxaLQ4XbYY9PFOu11JMTR_uNFICgvRzNbtnaUI3vfoOv56Lda_A2dnyMvy8_Tjc7PAMiss4L2OSJIE8PeuAM-sSIlRy7duJbMgcwdTwW2TMKxnWN1VlMisyPdheba7jFO_a83/s400/8.png" width="400" /></a></div>
<br />
<br />
Кликаем по нему 2 раза и попадаем в основной поток, он нам не интересен, по этому жмём <b>Alt + M</b> и выбираем наш модуль <b>strings.so</b> в котором затем будем заниматься поиском функции интересующей нас функции:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXxgLWMrBAWiL3HELZeJR4_uwg2gM0kCzGQEuSJr5kH6hKnvqU4H87XOpJQfrU4W1Uwk4E1QWbw8Lx4YIpJ1knXkyFHvUY_7amVSQnSSu0jIJT76cEkZWeLbYpx-_w-zr-2z4mlNnFHTR1/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="113" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXxgLWMrBAWiL3HELZeJR4_uwg2gM0kCzGQEuSJr5kH6hKnvqU4H87XOpJQfrU4W1Uwk4E1QWbw8Lx4YIpJ1knXkyFHvUY_7amVSQnSSu0jIJT76cEkZWeLbYpx-_w-zr-2z4mlNnFHTR1/s400/7.png" width="400" /></a></div>
<br />
<br />
Но на этом этапе у вас может возникнуть подобная ошибка (взято как пример):<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh80qzDeY_V6VHPPaQaFYlEe6-k9SbLaKj9QkENIZqyqFSG-bVlPOX33EwVFHgZRzLHBQbob6oqkl7tNmJOgYfARsEkUrCI0lnjSVl4-gznhVrbnw5LyFghAafLDseDTKKCQUtCLxWp214E/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh80qzDeY_V6VHPPaQaFYlEe6-k9SbLaKj9QkENIZqyqFSG-bVlPOX33EwVFHgZRzLHBQbob6oqkl7tNmJOgYfARsEkUrCI0lnjSVl4-gznhVrbnw5LyFghAafLDseDTKKCQUtCLxWp214E/s1600/6.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Таких ошибок может быть куча. Что бы её устранить переименовываем <b>libstrings.so</b> (скорее всего именно с ним у вас возникнет проблема) как предложил отладчик и закидываем его в папку <b>"Gikdbg\artapp\293BC20E45DB0001DB5F8F8A07A49312.libstrings.so", </b>должно заработать.<br />
<br />
<h3 style="text-align: center;">
Перехват ключа </h3>
<h3 style="text-align: center;">
</h3>
На самом деле поиск ключа не такая большая проблема если вы умеете пользоваться тётушкой IDA. Мы знаем что для подписи запроса используется функция <b>getSignatureString</b>, по этому давайте изучим её более подробней:<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoOecI0JA8piT1BKcGjZvAS91G7klnG-4YNNUIGfUUJe_vo1-5z7LTKn_xEplhYCtIYxfoe-YK2j0y_c4-Bxk2Oe8ikJXefOuMdAOwpmUYWQV5aAFJg4eo42ylbjfaEmKBkV4VuuQKfj0T/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoOecI0JA8piT1BKcGjZvAS91G7klnG-4YNNUIGfUUJe_vo1-5z7LTKn_xEplhYCtIYxfoe-YK2j0y_c4-Bxk2Oe8ikJXefOuMdAOwpmUYWQV5aAFJg4eo42ylbjfaEmKBkV4VuuQKfj0T/s400/2.png" width="400" /></a></div>
<br />
Как видим в начале достаётся строка по идентификатору, затем модуль проверяет длинну этой строки и уже потом инициализирует этой строкой алгоритм шифрования. Догадались где можно перехватить ключ для подписи? Если да, то мои поздравления!<br />
<br />
Теперь осталось найти (Ctrl+F) функцию <b>getSignatureString</b> в отладчике (она почти в самом верху) и поставить бряк (F2) на <b>strlen</b> который расположен чуточку выше функции <b>crypto_auth_hmacsha256_init:</b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyvh1ezNsxnNjWEeOzHUy487FjcvLXWkQlNzrdJaEmBzrtspPIVLyjleeESRihxwc8QHNR2-wIJAyvNxUB84Fw0nFtVTZxh_jF_1QnZ3L4c1he9UI7Im7krp-MLm1uaEdetjaIl0pb0NiO/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="359" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyvh1ezNsxnNjWEeOzHUy487FjcvLXWkQlNzrdJaEmBzrtspPIVLyjleeESRihxwc8QHNR2-wIJAyvNxUB84Fw0nFtVTZxh_jF_1QnZ3L4c1he9UI7Im7krp-MLm1uaEdetjaIl0pb0NiO/s400/3.png" width="400" /></a></div>
<br />
Далее стартуем приложение на телефоне, пробуем войти и срабатывает бряк:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaY6w4kP0q_D5BVyl2zGM-Exf2MT3GRzPtOna_mZDRUfzZXjUjq9Vb_EMjuuCobWhrhdfBV52Gbl9qR33pddyfqDNzK6B0LWrotnXcBHFIdVW_DofNgwVLMRw0ZNxDHD_k4bG5I_ck_7MC/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="221" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaY6w4kP0q_D5BVyl2zGM-Exf2MT3GRzPtOna_mZDRUfzZXjUjq9Vb_EMjuuCobWhrhdfBV52Gbl9qR33pddyfqDNzK6B0LWrotnXcBHFIdVW_DofNgwVLMRw0ZNxDHD_k4bG5I_ck_7MC/s400/4.png" width="400" /></a></div>
<br />
При этом отладчик говорит что работа происходит с регистром <b>R0</b>, а следовательно там должен быть ключ! Но как его достать? Всё просто: напротив регистра расположен его адрес, достаточно кликнуть ПКМ по адресу и нажать <b>Follow in Dump</b>, в результате чего мы перейдём на участок памяти где расположен ключ:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizeJqjSsKGa7lgsoNxG3otvg-tVyPFa-uM5Px7HkkPQ4iyHgYm_qoVqcsgKKwoV0uqnCDdqtIWHvG2jUBh4WdlAcgAmBvm8iZSSfEG0fBPlmQCSSFC87CianxqyH-hMDNl1scjYwg_GHRR/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="291" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizeJqjSsKGa7lgsoNxG3otvg-tVyPFa-uM5Px7HkkPQ4iyHgYm_qoVqcsgKKwoV0uqnCDdqtIWHvG2jUBh4WdlAcgAmBvm8iZSSfEG0fBPlmQCSSFC87CianxqyH-hMDNl1scjYwg_GHRR/s400/5.png" width="400" /></a></div>
<br />
Ключ: <b>c1c7d84501d2f0df05c378f5efb9120909ecfb39dff5494aa361ec0deadb509a</b><br />
С каждой версией ключи меняются, у меня вроде бы версия <b>7.15.0</b><br />
<br />
Теперь можно написать программу которая использует данный ключ в корыстных целях (для подписи запросов), но это уже совсем другая история...<br />
<br />
<div style="text-align: right;">
<b>© VANS </b></div>
<div style="text-align: right;">
</div>
</div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com10tag:blogger.com,1999:blog-8897994766654515461.post-80109126812401232342016-01-05T07:42:00.001+03:002016-01-05T07:46:53.374+03:00Alphaskins - мой софт, мои правила.<div dir="ltr" style="text-align: left;" trbidi="on">
Как то раз мне захотелось украсить свой софт альфаскинами, выбрал я значит самый крутой скин, скомпилировал приложение и.....<br />
<br />
<div style="text-align: center;">
Unregistered skin has been loaded. </div>
<div style="text-align: center;">
If you have a key for this skin, please insert it in the KeyList.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidp2O9rdmXOipcjXzmI0sWxfQD_8qOGua3vcvdkZ7JCXBcycfD0VjtervG-2OyFN_nmhEsDZuvToYXzv2Ml70KRRWo5ByrNBFWE8PfXHwlyzJjeuF6-77tlKXHjhcXTkWAyeCJo5ylXIMI/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidp2O9rdmXOipcjXzmI0sWxfQD_8qOGua3vcvdkZ7JCXBcycfD0VjtervG-2OyFN_nmhEsDZuvToYXzv2Ml70KRRWo5ByrNBFWE8PfXHwlyzJjeuF6-77tlKXHjhcXTkWAyeCJo5ylXIMI/s1600/1.png" /></a></div>
<br />
<div style="text-align: justify;">
Я был очень раздосадован данной несправедливостью! Какой то альфаскин посмел <b>В МОЁМ</b> софте показывать всплывающие окна! Ну а т.к. я еврей и платить 20 баксов за какой то скин не намерен, то решил пойти другим путём - перехватить это сообщение вообще, и в данной статье я напишу как это сделать.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
</div>
<a name='more'></a><br />
<br />
<div style="text-align: justify;">
Плюсы Delphi по сравнению с C# и прочими си - мы можем творить всё что угодно со своим приложением! Кстати не только со своим, вообще с любыми. Можно даже модифицировать код программы на лету всего десятком строчек! И назревает вопрос - а зачем платить если можно без труда выпилить это сообщение при старте? Раз Delphi даёт нам такие возможности, то грех не воспользоваться!</div>
<br />
<div style="text-align: justify;">
Что бы перехватить это сообщение - нам нужно поправить таблицу импорта. Если кто не знает что такое таблица импорта то поясню: в программе есть модули (DLL файлы) в которых содержатся готовые функции такие как MessageBox, что бы вызвать эту функцию программе нужно знать адрес, вот как раз таблица импорта и хранит этот адрес.</div>
<div style="text-align: justify;">
Делать это нужно до того как приложение начнёт выполнение, а значит перехватывать мы будем на точке входа:</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWjt8mVs7BxPaNJBfft4IpvMXiPLp-KEdkOLkAKkT5aUDxgwCLN_1nGjWdd-xrCA12gQ_Z9pJPcHizafpTueLNOFjmGBsfa0x608IWRhHshMvkkOoZ54vflKNE9dEaIvzVcbL0uLyzOjy3/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="111" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWjt8mVs7BxPaNJBfft4IpvMXiPLp-KEdkOLkAKkT5aUDxgwCLN_1nGjWdd-xrCA12gQ_Z9pJPcHizafpTueLNOFjmGBsfa0x608IWRhHshMvkkOoZ54vflKNE9dEaIvzVcbL0uLyzOjy3/s400/2.png" width="400" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Не мудрствуя лукаво я погуглил и нашёл в интернете кучу информации по перехвату, но самым стабильным оказался метод с правкой таблицы импорта. Тут всё просто: мы создаём свою функцию которая будет выводить сообщения на экран (или не выводить в случае с альфаскином) и подменяем стандартную функцию нашей. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Всё, теперь мы восстановили контроль над своим приложением и сэкономили 20 баксов.</div>
<div style="text-align: justify;">
</div>
<h3 style="text-align: justify;">
Скачать исходник можно по <a href="http://pastebin.com/00FbHHwN" rel="nofollow" target="_blank">ссылке</a>.</h3>
<div style="text-align: justify;">
<br /></div>
</div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com14tag:blogger.com,1999:blog-8897994766654515461.post-83480953831455357732015-10-25T21:09:00.001+03:002015-10-25T21:15:26.780+03:00Лето призов - реверс Flash и кодинг<div dir="ltr" style="text-align: left;" trbidi="on">
В данной статье я буду реверсить Flash приложение от <b>PepsiCo </b>которые устроили акцию с азартными играми и <strike>куртизанками</strike> ценными призами. На этот раз всё будет на много интереснее и захватывающе.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibzSfFDaThYuBSN8eHzzOE1NrKXT_8wsofMSFs7kniQUKdI0SjCSHFP0rI-lSF9d9ewHeK3gZDkfMw-Af8f_zn9FNTwgU0tEuoT87eBwFVWxJBpdSE4Ib0bBkBGHWZpyE-tY-MR3v3jHcn/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibzSfFDaThYuBSN8eHzzOE1NrKXT_8wsofMSFs7kniQUKdI0SjCSHFP0rI-lSF9d9ewHeK3gZDkfMw-Af8f_zn9FNTwgU0tEuoT87eBwFVWxJBpdSE4Ib0bBkBGHWZpyE-tY-MR3v3jHcn/s400/1.png" width="400" /></a></div>
<br />
В данной статье я расскажу как декомпилировать Flash приложения, реверсить алгоритмы подписи запросов и подменять данные в браузере.<br />
<br />
<a name='more'></a><br />
<h3 style="text-align: center;">
Введение</h3>
<h3 style="text-align: center;">
</h3>
Да, опять я ввязался в какую то авантюру, но на этот раз более интересную чем читос. Тут всё на много сложнее. В начале акции был баг который позволял без особого труда вписать любые цифры, чем я и пользовался:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiazaiUvut0KalCXAiapD0Qa4JQKOWsDoCo_pn12li-HHeJ6_ItW3Sv5B0YeCplOBEVnpXrLJqkhZeZl-jJcEh9ycPqypksGUuq__romTZI_nkMwtgbcdFGkmrkc9Vcb7CW8V6lQoKqJ8As/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiazaiUvut0KalCXAiapD0Qa4JQKOWsDoCo_pn12li-HHeJ6_ItW3Sv5B0YeCplOBEVnpXrLJqkhZeZl-jJcEh9ycPqypksGUuq__romTZI_nkMwtgbcdFGkmrkc9Vcb7CW8V6lQoKqJ8As/s400/2.png" width="400" /></a></div>
<br />
<br />
И не только я. Но потом это прикрыли, добавив странную подпись, хотя как видно на скрине выше - меня не выкинули из топа. Ну а раз они кладут на всех и вся - можно смело пилить вычислялку <a href="https://ru.wikipedia.org/wiki/%D5%E5%F8-%F1%F3%EC%EC%E0" target="_blank">хеш-суммы</a> которая нужна для подписи запросов.<br />
<br />
<br />
<h3 style="text-align: center;">
Инструментарий </h3>
<h3 style="text-align: center;">
</h3>
<ol style="text-align: left;">
<li><b><a href="http://www.7-zip.org/" rel="nofollow" target="_blank">7-zip</a></b> с поддержкой LZMA (неожиданно?)</li>
<li>Sothink SWF Decompiler (для анализа приложения)</li>
<li><b><a href="https://addons.mozilla.org/ru/firefox/addon/tamper-data/" rel="nofollow" target="_blank">Tamper Data</a></b> для Firefox (для перехвата запросов)</li>
<li>HTTP Analyzer (для перехвата запросов)</li>
<li>Delphi (но можно и руками)</li>
<li><b><a href="https://addons.mozilla.org/ru/firefox/addon/download-flash-and-video/" rel="nofollow" target="_blank">Download Flash</a> </b>для Firefox (для скачивания игры с сайта) </li>
</ol>
Ссылки на платные софтины не даю, торренты в помощь. <br />
<br />
<br />
<h3 style="text-align: center;">
Декомпиляция</h3>
<h3 style="text-align: center;">
</h3>
Для начала необходимо скачать с сайта акции <b>newmatch3.swf </b>который весит 6,29мб и представляет собой архив! Да да, это флешка сжатая алгоритмом <a href="https://ru.wikipedia.org/wiki/LZMA" target="_blank">LZMA</a> для уменьшения веса! на самом деле эта дрянь весит аж:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihQyb5rR4QaInOkWY1V_MyFVS8tZVVNpNBq1jY-j5Y7nrOI0EChZwcPSII1LgVY-pHfCZpMUoGTd7nu58IMNSmAFbH28Ntmr-CWhGJS73DH7C-Ny7axCeZSZOx_8bB6qjCI6mEXj_m93x7/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="120" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihQyb5rR4QaInOkWY1V_MyFVS8tZVVNpNBq1jY-j5Y7nrOI0EChZwcPSII1LgVY-pHfCZpMUoGTd7nu58IMNSmAFbH28Ntmr-CWhGJS73DH7C-Ny7axCeZSZOx_8bB6qjCI6mEXj_m93x7/s400/3.png" width="400" /></a></div>
<br />
Ну ладно, спасибо что сжали. Далее извлекаем упакованную флешку и можно смело отправлять в декомпилятор:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEie1lREObMOW0aS3odlEMvC2CIIk24zS9NoQJv1otoJBRzue75TP3jXRPwyM5lAg4XWIRWp_Glc-krQk3uOM6JCJhGJKApXRlkdYXiVDLWwX_Pt-my13Bncn99tJfqsxeUhOkwxRacN69Ne/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="137" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEie1lREObMOW0aS3odlEMvC2CIIk24zS9NoQJv1otoJBRzue75TP3jXRPwyM5lAg4XWIRWp_Glc-krQk3uOM6JCJhGJKApXRlkdYXiVDLWwX_Pt-my13Bncn99tJfqsxeUhOkwxRacN69Ne/s400/4.png" width="400" /></a></div>
<br />
После не долгих поисков я нашёл модуль отвечающий за взаимодействие с сайтом. На скрине виден ключ подписи, забегая вперёд скажу, что только он не меняется, всё остальное нас не интересует т.к. это придётся получать и генерировать.<br />
<br />
<h3 style="text-align: center;">
Анализ</h3>
<h3 style="text-align: center;">
</h3>
Первым делом уходит запрос на _letoprizov.ru/api/games/start (опять API, да что же это такое!) и в результате мы получаем ответ следующего содержания:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgTzhfJ2RgoPKTUoLgoZL4zVGlJ5UlAhD0MXtGLwXf-LltZJsNu0oNOUz7qIB7l22lFI4NpL6sOxFSws4xoqVT1mgYBhjOxPu4AECiuTZP6MUUHOu9ewlwiwSqSlIA7XlGtokqSWXmy11y/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="82" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgTzhfJ2RgoPKTUoLgoZL4zVGlJ5UlAhD0MXtGLwXf-LltZJsNu0oNOUz7qIB7l22lFI4NpL6sOxFSws4xoqVT1mgYBhjOxPu4AECiuTZP6MUUHOu9ewlwiwSqSlIA7XlGtokqSWXmy11y/s400/5.png" width="400" /></a></div>
<br />
Где token - новый токен для подписи запросов, по этому старый (который прописан в игре) нам был не нужен. На рисунке ниже представлен участок кода где происходит копирование нового токена в глобальную переменную:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifVHvN-euJJIB3zX84Kw__2brweyHVW0Nb5xtcYq6FExmPDovvcln9MfqqMW1Lo9R6dqEsv-JpmiB18zCJajUnRe-CEvUHo9la9cLxlGBqGNLwbbPVl98aETmzjpgUaCoU4zz9N_Mz0fyt/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="86" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifVHvN-euJJIB3zX84Kw__2brweyHVW0Nb5xtcYq6FExmPDovvcln9MfqqMW1Lo9R6dqEsv-JpmiB18zCJajUnRe-CEvUHo9la9cLxlGBqGNLwbbPVl98aETmzjpgUaCoU4zz9N_Mz0fyt/s400/6.png" width="400" /></a></div>
<br />
Если запрос прошёл - игра передаёт управление второй функции под названием <b>OnCompleteStartGame</b>, которая парсит JSON и раскидывает параметры по соответствующим переменным, кстати, не фильтруя их (если вы понимаете о чём я).<br />
<br />
Раз мы знаем все ключи, то что нам мешает сделать подпись? Давайте разбираться:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSx9UpiK_aSk9Gcv6U_PcRYSV62iliN6XDKm6rcBMPPBCifUh5QfSvGfW4IC0FQCUURmxB9zdrSdtJHmSlnO4KW-S-vDkzE4VmpkFU6b4Ix2v4gU8EF9w9hAH_xWOfluF6fGh-2w5cb5le/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="35" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSx9UpiK_aSk9Gcv6U_PcRYSV62iliN6XDKm6rcBMPPBCifUh5QfSvGfW4IC0FQCUURmxB9zdrSdtJHmSlnO4KW-S-vDkzE4VmpkFU6b4Ix2v4gU8EF9w9hAH_xWOfluF6fGh-2w5cb5le/s400/7.png" width="400" /></a></div>
<br />
Мы знаем 4 параметра: <b>globalScore</b> (общий счёт)<b>, globalBonusPoint </b>(бонусы)<b>, skey </b>("секретный" ключ) и <b>token </b>(уникальная строка).<br />
На скриншоте выше видно, что из <b>globalScore</b> вычитается <b>globalBonusPoint</b>, затем это число переводится в строку, склеивается с <b>skey</b> и <b>token</b>, а результат всех этих телодвижений загоняется в SHA1 и передаётся дальше.<br />
А дальше хеш-сумма полученная выше склеивается с какой то хренью (между прочим, самый распространённый вид хрени). По этому поищем переменную <b>comb</b> чуть выше, и найдём следующую функцию:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXXJI6W-2QS5GJ2SIVA3dXUmYseAxGzV-EFqfRyuiE3Vyh0frNOK9-Z_lqCbN5GvaWW10XGttMCGJXT4EZy63Z5BNwpvSKNxtpt44YH43BQ3paU3Y6SA9ce8obmtICeWN-8DaI4LL2Xbsj/s1600/8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXXJI6W-2QS5GJ2SIVA3dXUmYseAxGzV-EFqfRyuiE3Vyh0frNOK9-Z_lqCbN5GvaWW10XGttMCGJXT4EZy63Z5BNwpvSKNxtpt44YH43BQ3paU3Y6SA9ce8obmtICeWN-8DaI4LL2Xbsj/s1600/8.png" /></a></div>
И на этом наши старые ниточки обрываются, зато появляется новая: <b>AddComb</b> - функция которая формирует эту строку. Давайте при помощи глобального поиска поищем где вызывается данная функция:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9wC6CiSmgc4WrOc0Xvn91hyqU30yJmg7MM5aJMR17miwVF4WcolcJIgpxOzQ4lQdHSke9iE_ijEq0iQbSxpSHcFr1xjgDJubzSlHboYKDoGTzTr5kuJErz5mdcCvTvIgXEXDB28Agc4yy/s1600/9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="376" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9wC6CiSmgc4WrOc0Xvn91hyqU30yJmg7MM5aJMR17miwVF4WcolcJIgpxOzQ4lQdHSke9iE_ijEq0iQbSxpSHcFr1xjgDJubzSlHboYKDoGTzTr5kuJErz5mdcCvTvIgXEXDB28Agc4yy/s400/9.png" width="400" /></a></div>
<br />
Сразу в трёх местах, но с разными значениями которые передаются в функцию <b>ScoreComp_SymSend_Int32</b>, давайте посмотрим эту функцию поближе:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAbOJNx4NURThy2I-AaYQUKkF2LSdG7wFFeGOmm2A40IaKJNl0jPWxSthHlrFJxPQq52UzA5FIFXJYkqOd_S5YseZ-HJh-1oBf6VsDI8_7oh2rJIDUYvvEBlWTb7JzJhP8IjcMDZcHzHvh/s1600/10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAbOJNx4NURThy2I-AaYQUKkF2LSdG7wFFeGOmm2A40IaKJNl0jPWxSthHlrFJxPQq52UzA5FIFXJYkqOd_S5YseZ-HJh-1oBf6VsDI8_7oh2rJIDUYvvEBlWTb7JzJhP8IjcMDZcHzHvh/s400/10.png" width="400" /></a></div>
<br />
А вот это уже интересно! Мы могли наблюдать в Tamper Data запрос с буквами из этих массивов, но что они значат? Давайте разберёмся:<br />
<br />
В игре есть 3 комбинации кубиков - 3, 4 и 5. В зависимости от того, сколько кубиков мы собрали вместе - игра передаёт это число функции <b>SymSend</b>, а она, при помощи конструкции <b>switch case</b>, переходит в нужную ветку. Допустим мы собрали 4 кубика вместе (это 200 очков) и переходим в ветку 4, где из массива <b>_loc_3</b> берётся рандомная буква/число которое обозначает 200 очков. Вот оно! Теперь мы знаем как генерируется эта строка и самое главное мы знаем набор букв/цифр которые обозначают количество очков 100, 200 и 300.<br />
<br />
Осталось посмотреть как завершается игра, тут всё как всегда просто:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPKnd9OGpXMnkKDVWJUIn0m_EpWNHEtVQV2FvGBAAfxcI-OZKNyfas4NsI917sk4Kbud3zw0Z3HBrI4Pl-iM036GXJ2SfSnva3Ye4RKQFR8oYvV-U6LqP1B2MCUG-cFrgMjnsf0WNhXGvC/s1600/11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="82" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPKnd9OGpXMnkKDVWJUIn0m_EpWNHEtVQV2FvGBAAfxcI-OZKNyfas4NsI917sk4Kbud3zw0Z3HBrI4Pl-iM036GXJ2SfSnva3Ye4RKQFR8oYvV-U6LqP1B2MCUG-cFrgMjnsf0WNhXGvC/s400/11.png" width="400" /></a></div>
<br />
<br />
<h3 style="text-align: center;">
Практика</h3>
<h3 style="text-align: center;">
</h3>
<br />
Вот и пришло время собрать все строки, знания и факты воедино.<br />
<br />
1. Предположим мы получили такой токен:<br />
<blockquote class="tr_bq">
Gm6iTQZOGgTOSRNqsDNkb9CLuHG7NnNL<br />
gih8wPWnGv1rQaCgD/jA3WLo0md6+O+j03UVo<br />
Hy9Jc8PIePEGCvmxw==</blockquote>
<br />
2. Придумаем количество очков, пусть будет <b>182200</b><br />
<br />
3. Возьмём "секретный" ключ из приложения:<br />
<br />
<blockquote class="tr_bq">
f18a9bb45287c96b568bc6fdf16e267b</blockquote>
<br />
4. Соберём строку из количества очков, секретного ключа и токена, в результате получим следующий результат:<br />
<br />
<blockquote class="tr_bq">
182200f18a9bb45287c96b568bc6fdf16e267bTtXd2Muwsma<br />
YiHGjOZFHOP0vLY081xBaxNgOYy32WwxXFb6w65eXc<br />
1rIFiJaAkwK0wq7Pm1IxkaluMufM49Xyg==</blockquote>
5. Получим хеш-сумму склеенной в пункте 4 строки:<br />
<br />
<blockquote class="tr_bq">
<b>SHA1:</b><span id="result-sha1">752b5dc67ece78b86cb2aec83fa8e69394c797ca</span> </blockquote>
6. Тут придётся изрядно потрудится и составить строку из символов которые соответствуют количеству вписанных очков. Затем собственноручно сгенерированную строку склеить с хешем и отправить на сайт.<br />
<br />
<br />
<h3 style="text-align: center;">
Пишем генератор</h3>
<br />
<br />
Алгоритм мы знаем, а значит нам не составит труда закодить не большую утилиту для генерации подписи. Но для начала давайте сделаем функцию проверки подписи:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3v4mFVFm9E8H4ta3ypSDhcnVsdGD3z-gUFD94zkanVs2RQyLWu4YPdMdu370BvX41bv0M69rgj9U5p7kQXdd3xSAMGn024sqcK5ToBXWVmq4yjBE4stAF5ppiiYrnvJcuzOM6fgHneUBW/s1600/12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3v4mFVFm9E8H4ta3ypSDhcnVsdGD3z-gUFD94zkanVs2RQyLWu4YPdMdu370BvX41bv0M69rgj9U5p7kQXdd3xSAMGn024sqcK5ToBXWVmq4yjBE4stAF5ppiiYrnvJcuzOM6fgHneUBW/s1600/12.png" /></a></div>
<br />
Для работы этой функции требуются 3 массива:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipECex07pJgT_hEZd_t6d6XspngpHlJEnkDmzgQTtA7cqX_Pelvs_xKJUWEsyf4F9KNi-By79f6sjZ5Ri3dKwmif72SaSbG-xCbTIXJwXzvD4IKiGoMfXVLWTcq_UH1W4XJwbZQ1cUK8v8/s1600/12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipECex07pJgT_hEZd_t6d6XspngpHlJEnkDmzgQTtA7cqX_Pelvs_xKJUWEsyf4F9KNi-By79f6sjZ5Ri3dKwmif72SaSbG-xCbTIXJwXzvD4IKiGoMfXVLWTcq_UH1W4XJwbZQ1cUK8v8/s1600/12.png" /></a></div>
<br />
Вот и всё! Далее напишем функцию которая будет склеивать введённый токен со всеми остальными значениями<b>:</b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_oIV8kot1uYeg7DTXoMOVebgUqyT2nVX_kF2mCwoqo5v71dRzImtCOiRVzHCZ2scNF7ftGNJresSd9MiJNOJo3B2erJxF4c_1P-Vb3hTN4iFQJIQOFldFY0lmfPDl9G8e4val179LvAPG/s1600/13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_oIV8kot1uYeg7DTXoMOVebgUqyT2nVX_kF2mCwoqo5v71dRzImtCOiRVzHCZ2scNF7ftGNJresSd9MiJNOJo3B2erJxF4c_1P-Vb3hTN4iFQJIQOFldFY0lmfPDl9G8e4val179LvAPG/s1600/13.png" /></a></div>
<br />
Данная функция очень умно распределяет комбинации, 100 очков всегда добавляются, 200 очков с меньшей вероятностью и 300 очков очень и очень редко потому что должно совпасть рандомное число от 50 и от 58, что происходит крайне редко - прям как в игре. Увеличивая числа - мы уменьшаем вероятность совпадения двух рандомных чисел.<br />
<br />
Что бы получить SHA1 хеш я воспользовался бесплатной библиотекой DCPCrypt2, код отвечающий за генерацию подписи представлен на рисунке ниже: <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkESxbe7XkGjFpw9u0Y4F3KZCNoYHNubZ3Q-dHbYvCxUQKkZkIlozvpkOiUlQAUO3W_fJD2XBlXJ8dqqE2PBxVH1sTkgFmrVlu8DSp4zJJ-8u_UfNtaiFyLt_9oy6n4MeaOyPSReA1bQxe/s1600/14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="116" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkESxbe7XkGjFpw9u0Y4F3KZCNoYHNubZ3Q-dHbYvCxUQKkZkIlozvpkOiUlQAUO3W_fJD2XBlXJ8dqqE2PBxVH1sTkgFmrVlu8DSp4zJJ-8u_UfNtaiFyLt_9oy6n4MeaOyPSReA1bQxe/s400/14.png" width="400" /></a></div>
<br />
Тут как писалось выше - склеивается 3 строки и вычисляется хеш.<br />
<br />
<br />
<h3 style="text-align: center;">
Подделка запросов</h3>
<br />
<br />
Для того, что бы подделать запрос, необходимо его перехватить. Для перехвата можно воспользоваться плагином Tamper Data или другим подходящим инструментом.<br />
<br />
<b>Шаг первый. </b>Запускаем любой сниффер (я использовал HTTPAnalyzer) и стартуем игру для того, что бы перехватить токен.<br />
<br />
<b>Шаг второй.</b> Запускаем Tamper Data (Alt => инструменты => перехват данных)<br />
<br />
<b>Шаг третий.</b> Вводим в программу желаемое кол-во очков и токен:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKMaGxcjaQ2LbuDzDVMKgj14wERIzCvfHxjMYqn9CCcLK51vOO6wReYMA07G6erBEJRNMeTB-6fGe_bIaFd87B1M0n8Qi2gq04rnJlhqv19U9M49fc3lZYvPsAAEtgtzUL_22qESJf8NP9/s1600/15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKMaGxcjaQ2LbuDzDVMKgj14wERIzCvfHxjMYqn9CCcLK51vOO6wReYMA07G6erBEJRNMeTB-6fGe_bIaFd87B1M0n8Qi2gq04rnJlhqv19U9M49fc3lZYvPsAAEtgtzUL_22qESJf8NP9/s400/15.png" width="400" /></a></div>
<br />
Нажимаем "Encode" и программа сгенерирует правдоподобную раскладку игры, всё это склеит и вычислит хеш сумму, останется только скопировать.<br />
<br />
<b>Шаг четвёртый.</b> Запускаем перехват и наблюдаем следующее окно:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpzBxF70ZOqIzk0fXdp-_Q93l3RQ9J4dwyTYss1zVLuOxlzPwi2Pwv9Ud7IFE2L6BlgivKIfCWFedUPhX3x3RQ6ma5kcYRlnAFIG5FtuSk1bxK0dqasNkorffMhWBSSwDZqVYXpvCgvIGt/s1600/16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpzBxF70ZOqIzk0fXdp-_Q93l3RQ9J4dwyTYss1zVLuOxlzPwi2Pwv9Ud7IFE2L6BlgivKIfCWFedUPhX3x3RQ6ma5kcYRlnAFIG5FtuSk1bxK0dqasNkorffMhWBSSwDZqVYXpvCgvIGt/s1600/16.png" /></a></div>
<br />
Снимаем галочку что бы нас не беспокоили и нажимаем "вмешаться".<br />
<br />
<b>Шаг пятый.</b> Меняем данные POST запроса на свои, которые сгенерировала программа.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_x4qbqomOVTWU28Z_km9vRBVHniPCWMVgwXvuCKeiRrRdAg8RoWpaMAaLpuUlXL0eTAurmFNNx8S6xPMo6nInqcMS-V-PipQDy4nFLgJ4gDkqYscwBRr5ALie2tMkeVT-1sxhs0_UK-X-/s1600/18.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="314" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_x4qbqomOVTWU28Z_km9vRBVHniPCWMVgwXvuCKeiRrRdAg8RoWpaMAaLpuUlXL0eTAurmFNNx8S6xPMo6nInqcMS-V-PipQDy4nFLgJ4gDkqYscwBRr5ALie2tMkeVT-1sxhs0_UK-X-/s400/18.png" width="400" /></a></div>
<br />
И нажимаем "ОК". В результате имеем довольно не плохие показатели! И самое главное - не забывайте ждать перед отправкой запроса, ведь заработать миллион очков за 5 минут не возможно и вы будете выкинуты из топа.<br />
<br />
<br />
<h3 style="text-align: center;">
Заключение</h3>
<h3 style="text-align: center;">
</h3>
Вот и закончилась акция, купоны были отданы нуждающимся... хотя кого я обманываю, все купоны которые были получены я толкнул за пол цены и получил не плохой доход. Ещё раз мы убеждаемся что нагнуть такие акционные сайты не составляет больших проблем когда есть знания flash и Delphi!<br />
<br />
Ссылки на программу и флешку не прикладываю ибо это уже не актуально.<br />
<br /></div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com5tag:blogger.com,1999:blog-8897994766654515461.post-85565426771297698432015-08-27T01:47:00.001+03:002015-08-27T01:49:12.462+03:00Пишем стиллер для SendSey<div dir="ltr" style="text-align: left;" trbidi="on">
Меня часто мучают вопросами "как написать стиллер паролей для %имяпрограммы%" и в этой статье я решил рассказать как это сделать на примере простенькой программы. Но учтите, что написать стилер доты или танков будет на много сложнее.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7M31WYi6gxw9SADdHH7UNN-TtaeEJUidMjFMo5_Q_1YsUJEER9TuBwZ_BqW07tVxxMI4o6g22yN37M279duNOw2uTNsPMwN6TCqF4qmxsNWTYQHeifmfQ3o0hjHvanW3XV2Q7wsIyudU9/s1600/hacking.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7M31WYi6gxw9SADdHH7UNN-TtaeEJUidMjFMo5_Q_1YsUJEER9TuBwZ_BqW07tVxxMI4o6g22yN37M279duNOw2uTNsPMwN6TCqF4qmxsNWTYQHeifmfQ3o0hjHvanW3XV2Q7wsIyudU9/s400/hacking.jpg" width="400" /></a></div>
<br />
<br />
<a name='more'></a><br />
<b>SendSey</b> - это программа для рассылки спама в скайпе, что само по себе не есть хорошо, так что написав стиллер вы можете не рискуя кармой воровать пароли от этой программы у бедных школьников и переводить моральный ущерб к себе на кошельки.<br />
<br />
Начнём пожалуй с инструментов, т.к. SendSey написан на Delphi, то я заюзал <b>IDR</b> о котором ни раз рассказывал в других статьях ранее, ну и традиционный дебагер <b>OllyDBG</b>.<br />
<br />
Загружаем испытуемого в IDR и после анализа ищем место где может храниться логин и пароль, такое место находится быстро:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidcvJLsq4F3NhMhmvmZ4jZ1ozgAFogapx9jss6_-09jcUHg8ubf6svIRU0ex9XG5B1yQ6hsAM0JGxwnmVeFUl5qz1GKNGVgZVBRFkjRxOirnpLUP3cidvv4AHTLKE4qBmqOpWDu_CgqfzU/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidcvJLsq4F3NhMhmvmZ4jZ1ozgAFogapx9jss6_-09jcUHg8ubf6svIRU0ex9XG5B1yQ6hsAM0JGxwnmVeFUl5qz1GKNGVgZVBRFkjRxOirnpLUP3cidvv4AHTLKE4qBmqOpWDu_CgqfzU/s1600/1.png" /></a></div>
<br />
Ну и в реестре соответственно:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhufoBcpzr1tuXP797UDy2jpTsJ8fWK8t0Mh0PzmzWiD2MYNxEbKM7aVjsUBPCss4Z4UZfnTjNWHcVovEXI7gLY6uxeAj-PqC-JlSvDLOVbPH0xE9sDaBgkaiEjqkiQ_gO65vK6mA1-9I6d/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhufoBcpzr1tuXP797UDy2jpTsJ8fWK8t0Mh0PzmzWiD2MYNxEbKM7aVjsUBPCss4Z4UZfnTjNWHcVovEXI7gLY6uxeAj-PqC-JlSvDLOVbPH0xE9sDaBgkaiEjqkiQ_gO65vK6mA1-9I6d/s1600/2.png" /></a></div>
<br />
Но вот ведь не задача, пароль зашифрован! Кто то уже поднимает белый флаг т.к. ему показалось что это md5 или самопальный алгоритм криворукого автора под спайсом, но нет, всё куда проще/сложнее:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJNuv9plBofTEW5UDRqOKwiEPz9b4jNkFaobUHu3c5kbZG8xvUxlmOBpVzNlRoBvSzgNzv8KDhaOJlv4VHrguZLYJxoTFU7cnQopTPDEeU8WUyQ3e0VuunVkFhl6NmO581KEaAtgJdvzJl/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJNuv9plBofTEW5UDRqOKwiEPz9b4jNkFaobUHu3c5kbZG8xvUxlmOBpVzNlRoBvSzgNzv8KDhaOJlv4VHrguZLYJxoTFU7cnQopTPDEeU8WUyQ3e0VuunVkFhl6NmO581KEaAtgJdvzJl/s1600/3.png" /></a></div>
<br />
Я полагаю что ТЗ было примерно такое "Короче надо написать софтину для спама по скайпу, оплата едой, время на разработку 1 вечер и что бы ещё пароль сохраняла и шифровала труалгоритмом". Ну автор решил загуглить труалгоритм шифрования и получил:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGm3KPGc9U433OKMssyb2OhzkW7oxeXbMDpeRZytVcAeBtnL2NcublJWYPbtqmeLxCFUc8f-djAjcb3j8nZ4Q9Z_BmUQvbU9UM5nkNYTka2-RBOqdRDcODoD45hc4ieBuqeFEVzHPEFuJo/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="128" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGm3KPGc9U433OKMssyb2OhzkW7oxeXbMDpeRZytVcAeBtnL2NcublJWYPbtqmeLxCFUc8f-djAjcb3j8nZ4Q9Z_BmUQvbU9UM5nkNYTka2-RBOqdRDcODoD45hc4ieBuqeFEVzHPEFuJo/s400/4.png" width="400" /></a></div>
<br />
Ну и мы тоже заюзаем его для наших целей. Скачать архив с этим модулем и остальным можно будет в конце статьи.<br />
<br />
Теперь настало время написания стилера, писать будем на Delphi 7 (идеально для малвари), по этому создаём новый консольный проект и приступаем к адаптации того сурса под Delphi7. Но зачем? Как известно Delphi 2009 и последующие стали юникодными, а у нас тут прошлый век. А ещё я использую библиотеку KOL для снижения веса и адаптировать исходник буду под неё. К тому же эти знания помогут вам при написание аналогичного стилера для софта написанном на С# или другом языке.<br />
<br />
Для начала я заменил все <b>String</b> на <b>WideString</b>, <b>ULONG</b> на <b>Cardinal</b> и <b>DWORD</b> на <b>LongWord</b>. Осталась пара функций, а именно <b>StrToInt</b> которую я заменил на <b>Hex2Int</b> и <b>IntToStr</b> которую я заменил на <b>Int2Hex</b>. А так же <b>SizeOf(Char)</b> на <b>2</b> (юникод же). Всё! Это заняло меньше минуты и мы добились снижения веса с 120 кило (!!!) до 20! Не плохо, правда? Хотя многим этого не понять...<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0dQyEfCy6qznUyjp73v5XWKfcCyRLKnCcfRt5s0_gD857X0YtYGUEPsL6eV9SOauyHeF0RaIEEFudpepMEDs9G2kVQC2w2dMSTuuA-G2Y-b-IZrPfP2CRHjN5uEJFia35eL_HKiRF384F/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0dQyEfCy6qznUyjp73v5XWKfcCyRLKnCcfRt5s0_gD857X0YtYGUEPsL6eV9SOauyHeF0RaIEEFudpepMEDs9G2kVQC2w2dMSTuuA-G2Y-b-IZrPfP2CRHjN5uEJFia35eL_HKiRF384F/s1600/6.png" /></a></div>
<br />
Осталась работа с реестром, в KOL есть пара функций: <b>RegKeyOpenRead</b> и <b>RegKeyGetStr</b> которые вызываются в соответствующем порядке и мы получаем зашифрованный пароль, который в последующем передаём в функцию Decode.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmC2OKDbwnfFvnGCqQmwb1LRc4a7RBgKl8ysBvmu9qjPuF-S9w1gmpymKdcSZ07hZuQNGoRuJYM2mnMCYltxJsUnNBFKsZxqHLhLQyaGiBoTmQ16HSA_I00Vuvqj2OZgN7F8KcpVvPxF6n/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="201" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmC2OKDbwnfFvnGCqQmwb1LRc4a7RBgKl8ysBvmu9qjPuF-S9w1gmpymKdcSZ07hZuQNGoRuJYM2mnMCYltxJsUnNBFKsZxqHLhLQyaGiBoTmQ16HSA_I00Vuvqj2OZgN7F8KcpVvPxF6n/s400/5.png" width="400" /></a></div>
<br />
Осталось только написать отправку расшифрованного пароля на гейт и стиллер готов! Отправку можно сделать на сокетах или синапсе, как говорится на вкус и цвет только фломастеры. А ещё можно сделать билдер и кучу других плюшек, но, это уже другая история.<br />
<br />
Скачать софтину, стиллер и сурсы можно по ссылке: <a href="https://mega.co.nz/#!zFhE1bAT!NJD3hgQrIy2cHcpglfGvB-EkByhruqMboJezERW0S5k" rel="nofollow" target="_blank">MEGA</a><br />
<br /></div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com7tag:blogger.com,1999:blog-8897994766654515461.post-31766987915333216002015-07-19T11:35:00.000+03:002015-07-19T11:35:53.980+03:00Кейгеним Video Repair Software<div dir="ltr" style="text-align: left;" trbidi="on">
В этой статье я расскажу как закейгенить Video Repair Software, это программа является "не простой" и отреверсить алгоритм работы достаточно не простая задача которая занимает много времени, ведь в своём составе она имеет виртуальную машину для выполнения скрипта.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsgumqs2T306WQsu2RnWTjc4mha3LjidNJwBTl6W27PCWhECAfPKEEtDySB6uJiBfYvRq9TwFrbRAC19C11pxpRue9DooI0r2Lit7D_hjN-tA9dkll4pQC-tlCTCBz4NqdFw9ZqtKmvlU6/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="340" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsgumqs2T306WQsu2RnWTjc4mha3LjidNJwBTl6W27PCWhECAfPKEEtDySB6uJiBfYvRq9TwFrbRAC19C11pxpRue9DooI0r2Lit7D_hjN-tA9dkll4pQC-tlCTCBz4NqdFw9ZqtKmvlU6/s400/1.png" width="400" /></a></div>
<br />
<a name='more'></a><br />
<a href="http://grauonline.de/cms2/?page_id=5" rel="nofollow" target="_blank"><br /></a>
<a href="http://grauonline.de/cms2/?page_id=5" rel="nofollow" target="_blank">Video Repair Software</a> - очень полезная программа для восстановления повреждённых видеороликов, для их восстановления она использует другие ролики которые не повреждены. <br />
<br />
Инструментарий:<br />
<ol style="text-align: left;">
<li>OllyDBG</li>
<li>IDA</li>
</ol>
<br />
Этот высер стоит аж 100 евреев что в рублях составляет 6200, по этому не медлим ни секунды и загоняем его в IDA:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcavqoLhyphenhyphenfBlkfOlWfCsIZaSP3OnCZ3wx18K1UzOUAH-gJFXwhnsLA7Ejp6PAtY6tk2LnnWN3ViWihekdsc-bJ_vAoyXNtsYagwpKFHgTpx1ucoLDbjdynN2A_Sm67E-Mi7SUTtuMOFLYa/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="198" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcavqoLhyphenhyphenfBlkfOlWfCsIZaSP3OnCZ3wx18K1UzOUAH-gJFXwhnsLA7Ejp6PAtY6tk2LnnWN3ViWihekdsc-bJ_vAoyXNtsYagwpKFHgTpx1ucoLDbjdynN2A_Sm67E-Mi7SUTtuMOFLYa/s400/2.png" width="400" /></a></div>
<br />
<br />
Кто не первый раз сталкивается с серьёзными протекторами или интерпретаторами - сразу заметит в этом дереве виртуальную машину. А если вы сразу не заметили - бегом гуглить что это такое для понимания сути происходящего!<br />
Но что делать дальше? Пощади клавишу F2, не надо ставить бряки на каждую функцию, ведь отладка займёт очень много времени!<br />
<br />
Давайте изучим программу получше, для этого загружаем её в OllyDBG и запускаем (клавиша F9). Как только программа запустится - сделаем дамп памяти при помощи плагина OllyDump для всем известного отладчика OllyDBG.<br />
Сделали? Идём дальше, открываем этот дамп любым текстовым редактором и быстренько пробегаемся по нему в поисках распакованного скрипта! Чуть ниже середины наблюдаем подобный код отвечающий за проверку: <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMQhbhWbZVjf7bcHXUhm6_KOgDIPBtP29JVu3dAFBEOr_YQoGfR_bllcESyXTkl6X16r9SMwec_tIzm8T875w6NVlRq271-mQ9P7BzMS43eniTi_uIRVHSHccD42rr5Zl0FkfwdzRO2X5t/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="146" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMQhbhWbZVjf7bcHXUhm6_KOgDIPBtP29JVu3dAFBEOr_YQoGfR_bllcESyXTkl6X16r9SMwec_tIzm8T875w6NVlRq271-mQ9P7BzMS43eniTi_uIRVHSHccD42rr5Zl0FkfwdzRO2X5t/s400/3.png" width="400" /></a></div>
<br />
Бинго! Спасибо разработчикам что не заставили меня изучать байткод. Давайте изучим что здесь происходит:<br />
<br />
<ol style="text-align: left;">
<li><b>g.demo = true</b> - устанавливаем деморежим</li>
<li><b>g.requestnumb</b> = requestnumber() - получаем рег. номер</li>
<li><b>local p = g.requestnumb </b>- копируем рег. номер</li>
</ol>
<br />
Далее происходит генерация правильного серийника (ответа на число-вопрос), для примера возьмём число-вопрос 1234:<br />
<br />
Берётся третий символ и вычитается из 9 => 6<br />
Берётся первый символ и вычитается из 9 => 8<br />
Берётся четвёртый символ и вычитается из 9 => 5<br />
Берётся второй символ и вычитается из 9 => 7<br />
<br />
В результате получаем ключ 6857 который используем для регистрации ПО. Основываясь на этих данных вы можете в любой среде программирования написать простенький кейген.<br />
<br />
Данный метод подходит для большинства новых "защит" которые позиционируют как панацея от декомпиляции и деобфускации, все они обходятся путём перехвата расшифрованного скрипта на выходе соответствующей функции.</div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com2tag:blogger.com,1999:blog-8897994766654515461.post-80040410096813909192015-07-07T01:47:00.003+03:002015-07-07T01:48:04.539+03:00Ох уж эти акции<div dir="ltr" style="text-align: left;" trbidi="on">
Все помнят бота для читоса, так вот, я не лох (куда смс отправить?).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC0NM-nZiOt8eX9QBkqZtVkGagodppfEUl8uxH3v-J_3PJvIyxk2Xq2-c-rIMxYDwdc-2QKewa2cLm_9jHEHB-LY6vbvGhw_2d1JekBSpT4l4cOsto32T9XvGrYrddIyl_o-V1rMGFAScu/s1600/%25D0%25BB%25D0%25BE%25D0%25BB.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="331" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC0NM-nZiOt8eX9QBkqZtVkGagodppfEUl8uxH3v-J_3PJvIyxk2Xq2-c-rIMxYDwdc-2QKewa2cLm_9jHEHB-LY6vbvGhw_2d1JekBSpT4l4cOsto32T9XvGrYrddIyl_o-V1rMGFAScu/s400/%25D0%25BB%25D0%25BE%25D0%25BB.png" width="400" /></a></div>
<br />
Я даже не могу найти слов... Выводы делайте сами.</div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com5tag:blogger.com,1999:blog-8897994766654515461.post-13192363750958876102015-06-11T14:54:00.002+03:002015-06-11T14:58:49.308+03:00Бот для чата nekto + исходники<div dir="ltr" style="text-align: left;" trbidi="on">
Бот для анонимного чата nekto.me, способен отвечать на вопросы с ошибками, переставленными словами и прочими <u>не точными совпадениями</u>! Идеально распознаёт приветственные сообщения (прив/приветик/привки).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhThjAVrxFKW_c131UyGI_mrX74BfBgj3anUoKKBnyVTm77iaixVmqvC1E45D4PpQxVsXR3gbDmjU3RcJqlhqKvS2-lSIu3QnwDL9ul_7DtiyhgRT_QkY7X_bly6qwWigcQ7LvS5awsjpzR/s1600/bot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="290" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhThjAVrxFKW_c131UyGI_mrX74BfBgj3anUoKKBnyVTm77iaixVmqvC1E45D4PpQxVsXR3gbDmjU3RcJqlhqKvS2-lSIu3QnwDL9ul_7DtiyhgRT_QkY7X_bly6qwWigcQ7LvS5awsjpzR/s400/bot.png" width="400" /></a></div>
<br />
<a name='more'></a><br />
Бот писался для дипломной работы на тему искусственного интеллекта, но это пример и никакого ИИ в нём нет (я это и сам прекрасно понимаю).<br />
Бот работает на основе шаблонов вопрос#ответ и способен за доли секунды выбирать самый релевантный благодаря массиву в который заранее заносится база.<br />
<br />
К сожалению бот не может сам задавать вопросы, что и не требовалось, по этому для поддержания беседы он через 30 секунд отправляет рандомный анекдот за разряда шуток за 300.<br />
<br />
Принцип работы программы:<br />
1. Софт в потоке запускает бесконечный цикл и каждые 2 секунды отправляет команды (команды зависят от предыдущего ответа)<br />
2. Создаётся уникальный идентификатор и чат<br />
3. Ищет собеседника<br />
4. Слушает ответы сервера<br />
5. Обрабатывает ответы сервера и выполняет соответствующее действие<br />
<br />
Скачать бота + исходник можно тут: <a href="https://mega.co.nz/#!WVw2wK4b!5zRuiWlgDGhGmOpIFledpo8_qYiBD27u0fNrAwOEFTY" rel="nofollow" target="_blank">MEGA</a></div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com5tag:blogger.com,1999:blog-8897994766654515461.post-14152526184771727932015-05-02T02:39:00.000+03:002015-07-07T01:49:59.093+03:00Акция Cheetos - лох это судьба<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="background-color: #cc0000;">UPD: Я не лох - <a href="http://www.vans-soft.ru/2015/07/blog-post.html" target="_blank">ссылка</a></span><br />
<br />
Решил я поучаствовать в акции от Cheetos, купил аж 2 коробки этих палочек, ввёл первый код и увидел игру. Играл я в неё днями и ночами, но больше 20 тысяч не набирал. Что же это такое!? Мой мозг взрывался, но я продолжал хотеть этот убогий телефон! <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLEmURRO7h2awhKqGDQCtTgL6DW7D403d7_JI8lAB_5Kdzk1FU_ZaqeDF1cPTGyQspMyW1FrHQcakXfOkN_fKlXFSguzWaQqnaKxUKqdelXOKqvvoPygHfYN7lCzPazK50O2AOY5dI7-oO/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="183" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLEmURRO7h2awhKqGDQCtTgL6DW7D403d7_JI8lAB_5Kdzk1FU_ZaqeDF1cPTGyQspMyW1FrHQcakXfOkN_fKlXFSguzWaQqnaKxUKqdelXOKqvvoPygHfYN7lCzPazK50O2AOY5dI7-oO/s1600/1.png" width="400" /></a></div>
<br />
И вот тут на помощь мне пришёл Delphi. <br />
<br />
<a name='more'></a><br />
<br />
Решил я написать бота, вариантов реализации было несколько - начиная с браузера и заканчивая поиском карт по скриншоту. Но я решил остановиться на стандартном решение - обычные HTTP запросы.<br />
Запросы никак не подписываются, нет CSRF токенов и естественно всё это дело отправляется на API что ещё больше облегчает нам задачу! Спасибо кодерам этой игры, теперь их можно уволить за криворукость и <strike>распи</strike> разгильдяйство о котором я расскажу ниже.<br />
<br />
Давайте для начала изучим их API:<br />
<br />
<div style="text-align: center;">
<h3>
Игра создаётся следующим запросом:</h3>
<h3>
</h3>
</div>
<div style="text-align: left;">
<b>GET _cheetos.ru/api/game/new</b></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
В ответ приходит: </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<b>{"level":1,"card":12,"time":45}</b></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Где:</div>
<div style="text-align: left;">
<blockquote class="tr_bq">
level - текущий уровень<br />
card - количество карт<br />
time - время в секундах </blockquote>
</div>
<div style="text-align: center;">
</div>
<h3 style="text-align: center;">
Запуск игры:</h3>
<h3 style="text-align: center;">
</h3>
<div style="text-align: left;">
<b>GET _cheetos.ru/api/users/code_is_activate</b></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
В ответ приходит статус:</div>
<div style="text-align: left;">
<br />
<b>{"activate":true}</b><br />
<br />
Если True - игра началась, в противном случае будет False.<br />
<br />
<br /></div>
<div style="text-align: center;">
<h3>
Получение карт:</h3>
<h3>
</h3>
</div>
<div style="text-align: left;">
<b>GET _cheetos.ru/api/game/card_get?number={n}</b></div>
<div style="text-align: left;">
<br />
<blockquote class="tr_bq">
Где <i>{n}</i> - номер ячейки</blockquote>
</div>
<div style="text-align: left;">
<br />
В ответ приходит:<br />
<br />
<b>{"number":1,"image":20,"success":null,"finish":false,"score":null}</b><br />
<br />
Где:<br />
<blockquote class="tr_bq">
<i>number </i>- номер выбранной карты<br />
<i>image </i>- глобальный номер карты (всего их 40)<br />
<i>success</i> - если предыдущая карта которую мы выбрали совпала с этой, значит это поле будет со значением True (пара найдена)<br />
<i>finish </i>- значение True означает конец игры<br />
<i>score</i> - общий счёт (переменная принимает значение только в конце игры).</blockquote>
<br /></div>
<div style="text-align: left;">
<h3 style="text-align: center;">
Пишем бота </h3>
<h3 style="text-align: center;">
</h3>
Как видите - ничего сложного, разработчики упростили нам задачу. Осталось написать бота, тут опять же всё просто! Для наглядности писать бота я буду в виде консольного приложения, перенести в GUI не составит особых проблем. <br />
<br />
Представляю блок схему алгоритма действий:<br />
<br />
<b>Исходный код бота: <a href="http://pastebin.com/VybRshsj">http://pastebin.com/VybRshsj</a> </b><br />
Ctrl+C => Ctrl+V => F9 и Вы мэгокрутой кодер с огромным шансом получить мобилу.<br />
<br />
<br />
<h3 style="text-align: center;">
Модифицируем бота</h3>
<br />
<br />
Бот работал медленно из-за однопоточной загрузки картинок, но сделать многопоточную загрузку невозможно, ведь надо посылать 2 запроса друг за другом что бы карты совпали. Пойдём другим путём - модифицируем алгоритм работы, будем во время загрузки проверять: есть ли текущая карта у нас в массиве или же нет. Если есть - выбираем её. <br />
<br />
<b>Исходный код модифицированного бота: <a href="http://pastebin.com/dZGuJ8Ww">http://pastebin.com/dZGuJ8Ww</a></b><br />
<br />
Но к сожалению это дало малый прирост скорости, раньше было 52 тысячи, сейчас 52800 но это можно списать на погрешность.<br />
<br />
<br />
<h3 style="text-align: center;">
Это не баг, это фича</h3>
<h3 style="text-align: center;">
</h3>
<div style="text-align: left;">
В самом начале статьи я написал про криворукость и разгильдяйство(в этом слове явно ошибка!) разработчиков, его тут много, очень много. Но я решил пойти честным путём и написал бота, работал этот бот С САМОГО НАЧАЛА АКЦИИ и я получал призы под разными аккаунтами, потом модифицировал его и уже под конец, когда я увидел как другие просекли фишку описанную ниже - решил тоже ей воспользоваться.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Как мы знаем - надо послать 2 запроса и что бы карты в них совпали. Но что будет если мы пошёлм 2 одинаковых запроса?</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Пробуем:</div>
<div style="text-align: left;">
<b>_cheetos.ru/api/game/card_get?number=0</b></div>
<div style="text-align: left;">
<b><b>_cheetos.ru/api/game/card_get?number=0</b></b></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
В ответ приходит: </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<b><b><b>{"number":0,"image":5,"success":true,"finish":false,"score":null}</b> </b></b></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
О чудо! Теперь модифицируем бота ещё разок:</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<b>Ссылка на часть кода: <a href="http://pastebin.com/QuVmcuJX">http://pastebin.com/QuVmcuJX</a></b></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Вот таким незамысловатым способом мы нагнули крупную контору и теперь можно ожидать <strike>посылку с мобильником</strike> как нагнут нас.</div>
<br />
<h3 style="text-align: center;">
Видео работы бота</h3>
<h3 style="text-align: center;">
</h3>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/VQ2bb9wV_xA/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/VQ2bb9wV_xA?feature=player_embedded" width="320"></iframe></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
(извиняюсь за качество видео)</div>
<div style="text-align: center;">
<br /></div>
<h3 style="text-align: center;">
</h3>
<h3 style="text-align: center;">
</h3>
<h3 style="text-align: center;">
Подытожим</h3>
<h3 style="text-align: center;">
</h3>
Вот и подвели итоги розыгрыша, естественно меня спалили и ничего не дали, жестоко обломав мои надежды на "мэгокрутой пацанский телефон для чётких понтов перед одноклассниками". Но моим коллегам телефоны всё таки дали, но пока они их не получили ибо акция закончилась только вчера. Не надо думать что я делал это ради собственной выгоды, мои доходы позволяют мне купить весьма не дешёвые палочки (35р однако) в количестве двух коробок, а так же этот телефон. Я делал это ради just for fun и все телефоны которые получилось бы выиграть планировал отдать.<br />
<br />
Спасибо за внимание и извиняюсь перед теми кто не смог получить свой телефон из-за моих действий. Надеюсь программистов этой игры уволят и впаяют им огромный штраф, а всем кто играл честно - отдадут их призы.</div>
</div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com1tag:blogger.com,1999:blog-8897994766654515461.post-45170509918474180082014-12-16T22:22:00.000+03:002014-12-16T22:22:09.026+03:00Ломаем бота ClickEM<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQp1PAvnGGsYKeCx1QpXa2hPQeok46Ti-GdlCNDZKfSkRpOT330wuRHRtNRAUvsRSU4sZjwmoCuS_YH2LcgCnY0gaMDd-gT9UK5X9SZU4YCSdCtYbe_7c57AsP0_UnjySYiohnntw-rY6N/s1600/%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQp1PAvnGGsYKeCx1QpXa2hPQeok46Ti-GdlCNDZKfSkRpOT330wuRHRtNRAUvsRSU4sZjwmoCuS_YH2LcgCnY0gaMDd-gT9UK5X9SZU4YCSdCtYbe_7c57AsP0_UnjySYiohnntw-rY6N/s1600/%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.png" height="227" width="400" /></a></div>
<br />
<div style="text-align: justify;">
Ну вот и дошло дело до взлома софта "<b>ClickEm Project</b>" версии <b>3.7.2</b>! Автор учёл свои ошибки, но как это обычно бывает - добавил новых! В этой статье будет описан способ нахождения и отключения антиотладки, поиск функции проверки ключа и естественно финальный процесс кряка!</div>
<br />
<a name='more'></a><br /><br />
Софт используемый в статье:<br />
<ol style="text-align: left;">
<li><b>IDA Pro - </b>для поиска и просмотра кода</li>
<li><b>OllyDBG - </b>для патчинга</li>
<li><b>IDR</b> - для более удобного просмотра кода </li>
</ol>
Не много о самом софте <b>ClickEm Project </b>и о сделанных изменениях:<br />
<br />
<div style="text-align: justify;">
Для начала автор этого прекрасного софта добавил функции антиотладки рассчитанные на школьников, меня это даже не много повеселило. Так же он родил гениальнейшую идею шифровать строки и скрывать их, что несомненно ему "помогло" учитывая открытость функций. Ну и как же я мог забыть про мусор который он добавил в разные функции, это так затрудняет отладку, я аж на 5 секунд дольше крутил колёсико мыши! </div>
<div style="text-align: left;">
<div style="text-align: justify;">
Ну что делать если не дано человеку нормально защиту спроектировать? Я ему написал об этом, но видимо занятой, нет времени простым смертным отвечать, по этому ловите инструкцию по взлому и кряк!</div>
</div>
<div style="text-align: justify;">
Первым делом надо убрать проверку на нахождение под отладчиком, в IDA Pro необходимо найти все функци <b>isDebuggerPresent</b> и пропатчить их в OllyDBG. Вот например первая функция на проверку под отладчиком:</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1WcjyF6Mj3XHe-vlZfUEqc6bzzonkn-nxchug57RMvIf69FH4xxzpuEmHqksq5Sa5CV7U2z9nnwYjFc6Q74U-t0RWzjQ4yy48N6hLzqIv5z6azt6gBHl4a1AERDiYMlRylUuZ9j19rxJY/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1WcjyF6Mj3XHe-vlZfUEqc6bzzonkn-nxchug57RMvIf69FH4xxzpuEmHqksq5Sa5CV7U2z9nnwYjFc6Q74U-t0RWzjQ4yy48N6hLzqIv5z6azt6gBHl4a1AERDiYMlRylUuZ9j19rxJY/s1600/1.png" height="400" width="271" /></a></div>
<br />
<div style="text-align: justify;">
IDA очень хорошо умеет строить графы, так что, тут всё наглядно показано. Если мы находимся под отладчиком, значит идём по красной ветке и генерируем "ошибку", в противном случае (если отладчика не обнаружено) мы пропускаем генерацию ошибки и продолжаем работу. Говорить о компетентности автора в защите я не буду, но и так понятно что не составит большого труда поменять условный переход на безусловный. </div>
<br />
Теперь необходимо найти функции <b>OutputDebugString</b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwgy6RIsCBo6WomAdkrOwuIAlEaUJfeahSZfFmUbYGecDDmxlY5wU8-uhwnwD8KfRlr1X_LEAf8seoJb6kmQ-AuaJSoKb2IMSg16l_e0I9vy17broKXxzeB65Spyy8fy3BKDb3pb4RyyGg/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwgy6RIsCBo6WomAdkrOwuIAlEaUJfeahSZfFmUbYGecDDmxlY5wU8-uhwnwD8KfRlr1X_LEAf8seoJb6kmQ-AuaJSoKb2IMSg16l_e0I9vy17broKXxzeB65Spyy8fy3BKDb3pb4RyyGg/s1600/2.png" height="320" width="256" /></a></div>
<br />
<div style="text-align: justify;">
Догадались что это и зачем оно нужно? Если нет, то объясняю: при наличие отладчика данная функция посылает строку в которой содержится %s%s%s что приводит к "поломке" OllyDBG, забегая вперёд скажу: я не стал возится с патчингом и пропустил её т.к. далее будет нопиться вызов целой ветки которая содержит в том числе и эту функцию.</div>
<br />
Листаем поиск дальше (Ctrl + T) и натыкаемся на ещё одну жалкую попытку обрушить отладчик, её придётся нопнуть:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD8Pkbo1E1T-N5vfH_2w86PdOMXyMDT0VIGWwLeZpWKUE7L2DLvah3h8VMwYKbeORsZpMJTdNv0IMu9b8adtSjUnQgvpft5e2pILMiIx7d1KKVcYqEunwwQ_a015yt9oVynq_2VDR70TH7/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD8Pkbo1E1T-N5vfH_2w86PdOMXyMDT0VIGWwLeZpWKUE7L2DLvah3h8VMwYKbeORsZpMJTdNv0IMu9b8adtSjUnQgvpft5e2pILMiIx7d1KKVcYqEunwwQ_a015yt9oVynq_2VDR70TH7/s1600/3.png" height="140" width="400" /></a></div>
<br />
Думаете всё? Не тут то было! Далее по адресу <b>008913B1</b> подобная фигня:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1rOsgo-Lf6yEJ3dCyq-Qo6KiRApQVEp1z7cS1FbvjCpP119PBOEtef1TZeErhkYkF3MrwkO-qBgplGBVAli5Vougo9cW48lV01PB8GhfBvHAwhxHGVpGpoxPmtVd90Wa9sDrNVAXow0yB/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1rOsgo-Lf6yEJ3dCyq-Qo6KiRApQVEp1z7cS1FbvjCpP119PBOEtef1TZeErhkYkF3MrwkO-qBgplGBVAli5Vougo9cW48lV01PB8GhfBvHAwhxHGVpGpoxPmtVd90Wa9sDrNVAXow0yB/s1600/4.png" height="178" width="400" /></a></div>
<br />
Вы знаете что делать!<br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Осталось убить пару вызовов не нужных веток которые приводили к ошибкам при отладке (вы ведь помните что мы пропустили одну проверку?), так что топаем на OEP (да да, ворота поставил, а забор забыл) и нопаем не нужные вызовы:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifxIvbx7HRoQilz0YfXRsaUWogx-1EXU7zsFQqUhc4ol3Gsp3xrpAtN39fXyt9ilWDLn-mv3ywvRxQgZ_SGabXpo6DsqWlkdxWnYQVcOcgvPkkDodycpk6BoMrqk_YFyT86SYufTP-3kCq/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifxIvbx7HRoQilz0YfXRsaUWogx-1EXU7zsFQqUhc4ol3Gsp3xrpAtN39fXyt9ilWDLn-mv3ywvRxQgZ_SGabXpo6DsqWlkdxWnYQVcOcgvPkkDodycpk6BoMrqk_YFyT86SYufTP-3kCq/s1600/5.png" height="400" width="312" /></a></div>
<br />
<br />
Ну ладно, с антиотладкой вроде бы разобрались, можно теперь перейти к IDR и поискать функцию проверки ключа. Далеко от OEP ходить не надо, прямо там ниже:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdVDQEGltU_I-yK_ZuAnHndPqKNMlmSsB4Y4oXxfpvtpoBuTPPtyLeBw14HDrE0L3BFl3rd06FDnV_zQGgqa8bNSD0T3SXHLGHE5Jcx6PSM3RGl423vXwKukCSNpis7YwU2B1C-zPJGSyE/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdVDQEGltU_I-yK_ZuAnHndPqKNMlmSsB4Y4oXxfpvtpoBuTPPtyLeBw14HDrE0L3BFl3rd06FDnV_zQGgqa8bNSD0T3SXHLGHE5Jcx6PSM3RGl423vXwKukCSNpis7YwU2B1C-zPJGSyE/s1600/6.png" height="326" width="400" /></a></div>
<br />
<div style="text-align: justify;">
Пугающее название содержит функцию которая собственно и производит проверку лицензии! Тут опять же содержится проверка на отладчик, я не стал рассказывать о ней в начале т.к. не хотел палить функцию проверки ключа.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDxoJ2jhnEHwZOjV7UQnZrW2ZsnTks1Cn52EmrGeJCLG_FY8pEaT1lFGVX0P5ZienUyV3GUEIVLgMw9MqHm-KDROHXdBdC94jrQBe5DYqT0En56NegbYevF7owcwNhL1lfzhF6qEgQ2-Tw/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDxoJ2jhnEHwZOjV7UQnZrW2ZsnTks1Cn52EmrGeJCLG_FY8pEaT1lFGVX0P5ZienUyV3GUEIVLgMw9MqHm-KDROHXdBdC94jrQBe5DYqT0En56NegbYevF7owcwNhL1lfzhF6qEgQ2-Tw/s1600/7.png" height="400" width="352" /></a></div>
<br />
Далее патчим эти проверки:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiu1XS2jEGBMUivDxVXfMCiDcY6G5yd_9xoKo0KZIV1Tbg1uxwfB32c9FiwPEna3RLoaDzvCfZ9r2XhzdLyRSrQNPuKtpp8J6_spc_EIVDnJRmkgI071zWUzYexIGxVerUe4CRIwbF54ykO/s1600/8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiu1XS2jEGBMUivDxVXfMCiDcY6G5yd_9xoKo0KZIV1Tbg1uxwfB32c9FiwPEna3RLoaDzvCfZ9r2XhzdLyRSrQNPuKtpp8J6_spc_EIVDnJRmkgI071zWUzYexIGxVerUe4CRIwbF54ykO/s1600/8.png" height="400" width="348" /></a></div>
<br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: left;">
Ну и самое главное - получение лицензии! Обычная лицензия типа "Registered" меня больше не устраивает, вот хочу "расширенную" лицензию и всё! </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: left;">
Не зря мы выше убирали антиотладку, ведь дальше идёт самое главное - поиск ветки отвечающей за расширенную лицензию, спустя много времени - оная найдена:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs0EvuSsm7OuCNN2jLgK2NDtv6omnGy3p4-cZ1O_3CGVM0XtH86kOPkhJcWF13k4w5fGrHTIOvzNmDT6182NPyTd6KYlpNpF1MnUHbEtIq8q6kZc2gg_yPWVDgQKaTqsIiFmv9mu2KWyeI/s1600/9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs0EvuSsm7OuCNN2jLgK2NDtv6omnGy3p4-cZ1O_3CGVM0XtH86kOPkhJcWF13k4w5fGrHTIOvzNmDT6182NPyTd6KYlpNpF1MnUHbEtIq8q6kZc2gg_yPWVDgQKaTqsIiFmv9mu2KWyeI/s1600/9.png" height="333" width="400" /></a></div>
<br />
Для отладки я использовал OllyDBG и клавишу F8 для пошагового выполнения.<br />
<br />
Это уже профикшенный вариант с безусловным переходом, тут происходит проверка ключа (вроде как автор даже изменил алгоритм) и присвоение статуса: <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxXMK85okhXJ9T1W3tGp4Pv7fGxzyCNQ0zfOS4evbS7c8HznYl7GZHYIxSJ1hm7qaJJEVVT0_bb0dqnR4Y9pplnGMlgqHGEHMBjV8yHzC_JDY8LpTmkrsXpfshj51xQbfbkjjsRiMjfFIz/s1600/10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxXMK85okhXJ9T1W3tGp4Pv7fGxzyCNQ0zfOS4evbS7c8HznYl7GZHYIxSJ1hm7qaJJEVVT0_bb0dqnR4Y9pplnGMlgqHGEHMBjV8yHzC_JDY8LpTmkrsXpfshj51xQbfbkjjsRiMjfFIz/s1600/10.png" height="172" width="400" /></a></div>
<br />
Вы тоже это видите? В стеке заветная надпись! Цель достигнута:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQp1PAvnGGsYKeCx1QpXa2hPQeok46Ti-GdlCNDZKfSkRpOT330wuRHRtNRAUvsRSU4sZjwmoCuS_YH2LcgCnY0gaMDd-gT9UK5X9SZU4YCSdCtYbe_7c57AsP0_UnjySYiohnntw-rY6N/s1600/%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQp1PAvnGGsYKeCx1QpXa2hPQeok46Ti-GdlCNDZKfSkRpOT330wuRHRtNRAUvsRSU4sZjwmoCuS_YH2LcgCnY0gaMDd-gT9UK5X9SZU4YCSdCtYbe_7c57AsP0_UnjySYiohnntw-rY6N/s1600/%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.png" height="227" width="400" /></a></div>
<br />
<br />
Скачать <strike>кнопку "бабло"</strike> кликер можно тут: <b><a href="https://mega.co.nz/#!bQZiRRhC!D5KNwwr31AD2A4unUcG7Gtl_LhKnVPFkPsgxkVSlRB0" rel="nofollow" target="_blank">MEGA</a></b><br />
<br />
<div style="text-align: justify;">
Активировать очень просто - запускаем <b>_crack.exe</b>, на вкладке "<b>О программе</b>" тыкаем по кнопке <b>"Крякнуть"</b>, перезапускаем софт и радуемся огромному списку сайтов. Ах, как же я мог забыть! Я добавил в софт огромный список честно украденных сайтов, которые автор любезно нам предоставил как элитным пользователям его высера. А так же он спалил ссылку на свой мэгоприватный форум в окне абаута, но ничего приватного я там не нашёл. </div>
<br />
Выражаю свою благодарность <a href="https://vk.com/mrleonard" rel="nofollow" target="_blank"><b>DjBlazer</b></a> за помощь.</div>
</div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com467tag:blogger.com,1999:blog-8897994766654515461.post-10534799070348695042014-12-04T21:51:00.001+03:002014-12-04T21:56:02.929+03:00Час кода<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://coderussia.blob.core.windows.net/ddd/VANS-SOFT.RU.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="280" src="https://coderussia.blob.core.windows.net/ddd/VANS-SOFT.RU.png" width="400" /></a></div>
<br />
Интересный проект "<a href="http://www.coderussia.ru/" rel="nofollow" target="_blank"><b>Час кода</b></a>" (аналог робопаскаля) где надо программно управлять персонажем и проводить его через лабиринт, на сайте доступно 10 уровней, последний, естественно, самый сложный, по этому я решил выложить своё, как мне кажется, самое простое решение для 10-го уровня!<br />
<br />
<span style="color: white;"><span style="background-color: red;">ОСТОРОЖНО! Внутри решение!</span></span><br />
<br />
<a name='more'></a><br />
<b>Ответ на 10-й вариант ниже.</b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHDG1XmR-CiG8BqtGaGvpyvm4qOLpeor7dq8MlzBAGDKepAGkvHk1JqRcOVvulkecResgWlQ09RbW3-rpxi3SvWmJNxlQ5oWf29soOZ6Ibb4X1Sfu4PE9NFHa3SrvPi8q8lUEGZYbjCrPE/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHDG1XmR-CiG8BqtGaGvpyvm4qOLpeor7dq8MlzBAGDKepAGkvHk1JqRcOVvulkecResgWlQ09RbW3-rpxi3SvWmJNxlQ5oWf29soOZ6Ibb4X1Sfu4PE9NFHa3SrvPi8q8lUEGZYbjCrPE/s1600/2.png" height="400" width="398" /></a></div>
<div style="text-align: center;">
<br /></div>
<br />
<br />
Блок схема алгоритма и решение:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDeALcTUFnra1nOz_AImXcPXnwJ2cMkyrOVFPXbeoIhJNxsWZVlhLwCOxnCoRZOeVl2794l4rv2eDtXpEZ6UnZZ2boYGU7Zx8aJUXSEqYoZkVA5BtF7vxRlM5vY54YKEoy51Q8k3OGUuDH/s1600/Untitled-Diagram.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDeALcTUFnra1nOz_AImXcPXnwJ2cMkyrOVFPXbeoIhJNxsWZVlhLwCOxnCoRZOeVl2794l4rv2eDtXpEZ6UnZZ2boYGU7Zx8aJUXSEqYoZkVA5BtF7vxRlM5vY54YKEoy51Q8k3OGUuDH/s1600/Untitled-Diagram.png" height="200" width="140" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzbaF9U5NgXHbRf7YNS6auH92O1Ityn7_fj8y7FGbSzZ-MPVynYNfRccGlBJdQNNTRkyMD8YUqEkoRMdij1AdXQdha2L3B8BsOzy71f744z1BP3yyuhMqKB-VmniCx57RbVeXJqIt5KW5o/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzbaF9U5NgXHbRf7YNS6auH92O1Ityn7_fj8y7FGbSzZ-MPVynYNfRccGlBJdQNNTRkyMD8YUqEkoRMdij1AdXQdha2L3B8BsOzy71f744z1BP3yyuhMqKB-VmniCx57RbVeXJqIt5KW5o/s1600/1.png" height="200" width="173" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Удачи в программирование! Стремись к своей цели и ты всегда её достигнешь!</div>
</div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com1tag:blogger.com,1999:blog-8897994766654515461.post-41857349385166244012014-11-15T01:17:00.001+03:002018-02-27T15:48:23.490+03:00Delphi - Загрузка изображений<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmtysTriX2jFdPKJrf_-Oa0gp0XQrCjeQ0lkJw7CMinl_d_zfE1lpxvz1cxLUQbsRuf8w0rwUTcqiCHVL_B22WIQ7JGe5K7t3lFEStlid-S-qSGTSTy8tGGrJCDvPk9oqJ8pTwpO2QfJHy/s1600/172.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="162" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmtysTriX2jFdPKJrf_-Oa0gp0XQrCjeQ0lkJw7CMinl_d_zfE1lpxvz1cxLUQbsRuf8w0rwUTcqiCHVL_B22WIQ7JGe5K7t3lFEStlid-S-qSGTSTy8tGGrJCDvPk9oqJ8pTwpO2QfJHy/s1600/172.jpg" width="400" /></a></div>
<br />
Кризис идей всё продолжается, решил написать модуль который облегчит загрузку изображений при помощи синапса. Написал его не из-за избытка свободного времени, а просто потому что нужен в куче софта который я сейчас пишу на заказ. <br />
<br />
<br />
<a name='more'></a>Модуль очень удобен в использование, пример кода для загрузки каптчи на antigate:<br />
<br />
load:=TLoader.Create;<br />
load.EncodeValue:=false; //авто кодирование строки в <br />
load.LoadImageFromFile('C:\1.jpg'); //загрузка изображения в память<br />
load.AddImage('file', '', ''); //добавление изображения в запрос<br />
load.AddField('method', 'post'); //добавление поля<br /> load.AddField('key', '12345');<br /> load.SendFormData('http://antigate.com/in.php', ''); //отправка запроса<br />
load.Free;<br />
<b><br /></b>
<b>Функционал модуля:</b><br />
<br />
<ol style="text-align: left;">
<li>Автоматическое кодирование передаваемых значений</li>
<li>Автоопределение типа изображения (если не указано)</li>
<li>Автоопределение имени (если не указано) </li>
<li>Возможность указать имя загружаемого файла</li>
<li>Проверка ответа сервера на наличие строки</li>
</ol>
<b>Из недостатков:</b><br />
<br />
<ol style="text-align: left;">
<li>Нет возможности передать куки в функцию</li>
<li>Невозможна загрузка обычных файлов</li>
</ol>
<br />
<b>Описание функций: </b><br />
<br />
<ul style="text-align: left;">
<li><b>LoadImageFromFile('полный путь до картинки')</b> - загружает изображение в память.</li>
<li><b>LoadImageFromMemory(переменная типа TMemoryStream)</b> - загружает изображение из памяти и хранит во внутренней переменной.</li>
<li><b>AddImage('имя поля', 'название картинки', 'тип')</b> - добавляет картинку в запрос.</li>
<li><b>AddValue('переменная', 'значение')</b> - добавляет новое поле в запрос</li>
<li><b>SendFormData('ссылка', 'искомое слово на странице')</b> - отправляет сформированный запрос на указанный адрес стандартом multipart/form-data. Искомое слово - после выполнения запроса софт выполнит проверку "Если указанное слово найдено" то вернёт TRUE если не найдено FALSE.</li>
</ul>
<br />
<b>Багрепорты приветствуются, исходник модуля с исчерпывающими комментариями можно скачать по ссылке: <a href="http://pastebin.com/LfcTxXDu">http://pastebin.com/LfcTxXDu</a></b><br />
<br />
P.S. При копирование исходников на свой ресурс - уважайте мой труд, оставьте ссылочку на мой скромный бложек, я на нём не зарабатываю и рекламы тут никогда не будет. Всё создано специально для людей и НЕ ради денег. Спасибо.</div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com9tag:blogger.com,1999:blog-8897994766654515461.post-14437150447319543022014-09-14T20:11:00.000+04:002014-09-14T20:42:07.910+04:00Delphi - работа с TOR<div dir="ltr" style="text-align: left;" trbidi="on">
<div>
<div>
<div style="text-align: left;">
<div class="separator" style="clear: both; text-align: center;">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEile6d0L672pyHOqaOU6b9jXCdJuWzcSrvLuW9mEovo8z3oyajMypU12Kl-JCHxWQ_LmqW6UyeTtu3AgfttLzD14IUN4Gl8sEKZMlXnsc9F8hh8IwNwVz81Y5SHHmMsdOI3XZLn1RsPSNxr/s1600/original.jpg" height="202" width="320" /></div>
<br />
Многие слышали о такой программе как TOR Browser, через неё можно анонимно сидеть в интернете. А кто не слышал - <a href="http://torproject.org/" rel="nofollow" target="_blank">добро пожаловать на сайт</a>.</div>
<div style="text-align: left;">
В этой статье мы разберёмся как подключиться при помощи Delphi к сети TOR и загружать страницы через него.</div>
<div style="text-align: left;">
</div>
<a name='more'></a><br />
1. Скачиваем и устанавливаем TOR</div>
2. Запускаем TOR и TOR Browser</div>
3. В браузере открываем настройки прокси:<br />
<div style="text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgaTzUwVUZa0BjagCzjqDmjBnTz8L_UhQJnOK5g81aZkKLDW9B2eUlB6plPryRpS5zeEG2LffIZkiaKIAMksFvmDd3C39KFPM2eGQgx01jXWBsyggpWT-1DMhmgBIN0iPzg1rEdX90ybVF/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgaTzUwVUZa0BjagCzjqDmjBnTz8L_UhQJnOK5g81aZkKLDW9B2eUlB6plPryRpS5zeEG2LffIZkiaKIAMksFvmDd3C39KFPM2eGQgx01jXWBsyggpWT-1DMhmgBIN0iPzg1rEdX90ybVF/s1600/1.png" height="240" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
... и копируем текущий прокси. (у меня он 127.0.0.1:9150)</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b>Переходим к Delphi...</b></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Я использую Synapse (но вы можете использовать любой другой компонент для работы с сетью), по этому добавляем в <b>uses</b> модули <b>HTTPSend</b> и <b>SSL_OpenSSL.</b></div>
<div class="separator" style="clear: both; text-align: left;">
<b><br /></b></div>
<div class="separator" style="clear: both; text-align: left;">
<b>Функция соединения с сетью:</b> </div>
<blockquote class="tr_bq">
<div class="separator" style="clear: both; text-align: left;">
function HTTPGet(url: string): string;</div>
var HTTP:THTTPSend; rez:TStringList;<br />
begin<br />
HTTP:=THTTPSend.Create;<br />
with HTTP do begin<br />
Protocol:='1.1';<br />
Sock.SocksIP:='127.0.0.1';<br />
Sock.SocksPort:='9150';<br />
Sock.SocksResolver:=true;<br />
HTTPMethod('GET', url);<br />
rez:=TStringList.Create;<br />
rez.LoadFromStream(Document);<br />
result:=rez.Text;<br />
rez.Free;<br />
end;<br />
HTTP.Free;<br />
end;</blockquote>
Тут ничего сложного, но давайте разберём что происходит:<br />
<br />
Sock.SocksIP:='127.0.0.1'; - устанавливаем наш прокси сервер <br />
Sock.SocksPort:='9150'; - устанавливаем порт по которому подключатся<br />
<br />
И самое главное:<br />
<br />
Sock.SocksResolver:=true;<br />
<br />
Этой строчкой мы говорим синапсу что бы запрашивал IP сайта через прокси, тем самым мы можем подключатся к *.onion доменам! Не верите? Пожалуйста:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4-J4npk7Dfy6D-zKL6P4d2kohUljvpPszEsN7nLkkHwaqUfXULQQLpQxOVxVLHDMjjwrdUvABmzeNaUzedntUHvkP6za38YSFmrMl3ZTW0v0zylKl0AdbfFyoNvOneBf9XLG1ehg4IEGx/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4-J4npk7Dfy6D-zKL6P4d2kohUljvpPszEsN7nLkkHwaqUfXULQQLpQxOVxVLHDMjjwrdUvABmzeNaUzedntUHvkP6za38YSFmrMl3ZTW0v0zylKl0AdbfFyoNvOneBf9XLG1ehg4IEGx/s1600/2.png" height="200" width="400" /></a></div>
<br />
Таким не сложным способом мы научили свою программу работать с TOR'ом! Что делать дальше с этими знаниями - решать вам, можно направить в доброе русло или же создать ботнет который будет брать задания с *.onion доменов.<br />
<br />
<b>Скачать исходники можно тут:</b> <a href="http://pastebin.com/zBhJQJer" rel="nofollow" target="_blank">pastebin.com/zBhJQJer</a><br />
<br />
<div style="text-align: right;">
<b>(С) VANS </b></div>
<div style="text-align: right;">
<br /></div>
</div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com9tag:blogger.com,1999:blog-8897994766654515461.post-21048770987654726612014-09-02T23:53:00.002+04:002014-09-02T23:53:43.588+04:00Кризис идей<div dir="ltr" style="text-align: left;" trbidi="on">
Последнее время куча народу забивает мне скайп и аську с вопросами "Ванс, ааааа, где новый софт!???". Сейчас я пишу в основном софт на заказ, для паблика ничего нету, ибо годных идей никто не скидывает. <br />
Давайте ваши идеи, не стесняйтесь, главное что бы софт был <u>полезен ВСЕМ</u>, а не только вам и вашей собаке. Так же дополнительным плюсом и стимулом к написание софта по вашей идеи служит материальная выгода с него, естественно не 6 копеек с букса, а на много больше.<br />
<br />
Возможно вас заинтересуют статьи про использование TOR'a в своих Delphi программах? Может быть будет полезна статья про работу с доменами *.onion при помощи синапса? Или же написание не убиваемого ботнета?<br />
<br />
Ваши идеи можете скидывать в комменты к этому посту, или в соответствующий раздел.</div>
VanShttp://www.blogger.com/profile/13693844147789741362noreply@blogger.com25