Russian Qt Forum
Апрель 27, 2024, 12:10 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 2 3 [4] 5 6 ... 122
46  Qt / Пользовательский интерфейс (GUI) / [РЕШЕНО] Одновременное выделение в двух QPlainTextEdit/QTextEdit : Август 14, 2017, 14:04
Есть два редактора, нужно чтобы при выделении текста в одном, выделялся так же в другом
Через курсоры в принципе сделал, но выглядит неудобно -- пока выделяешь в одном редакторе, фокус в нем остается, поэтому выделение в другом почти не видно (см скриншот), а нужно чтобы одинаково хорошо было видно в обоих

// Пример выделения первых 4 символов
Код
C++ (Qt)
cursor_output = self.text_edit_output.textCursor()
cursor_output.setPosition(0)
cursor_output.movePosition(QTextCursor.Right, QTextCursor.KeepAnchor, 4)
 
self.text_edit_output.setTextCursor(cursor_output)
self.text_edit_output.setFocus()
 

Я делал что-то подобное, но с QSyntaxHighlighter, но это немного другое, и там свои заморочки, с которыми не хотелось возиться

Подскажите, как легко и непринужденно сделать выделение в обоих редакторах?
47  Qt / Вопросы новичков / Re: цикл for после закрытия приложения : Август 11, 2017, 11:23
Закрывайте приложение через
Код
C++ (Qt)
QApplication::quit()
48  Qt / Вопросы новичков / Re: Ошибка 0xc000001d при запуске приложения : Август 08, 2017, 14:44
А может просто у вас проблема в коде?
49  Qt / Вопросы новичков / Re: Обработка нажатия мыши на item в QTreeView : Август 07, 2017, 19:34
http://doc.qt.io/qt-4.8/qabstractitemview.html#signals
50  Qt / 2D и 3D графика / Re: Не преобразуется QImage в QPixmap (QPixmap::fromImage Qt 4.8) : Август 04, 2017, 10:21
Проблем не было:
51  Программирование / С/C++ / Re: Что за тип шифрования? : Август 01, 2017, 18:49
Я что-то найти не могу.


Я через Firefox смотрю -- мне удобнее Улыбающийся


UPD.
Посмотрел статью, это хорошо, но немного другое хотелось -- отловить какой код и где выполняется при клике Улыбающийся
52  Программирование / С/C++ / Re: Что за тип шифрования? : Август 01, 2017, 18:13
Подскажи, как через инспектор можно просматривать как в дебагере?
Я пытаюсь найти это место в странице и не могу, пытаюсь через инспектор, не могу понять как отловить событие нажатия по кнопке... Непонимающий

хз, я смотрел у элементов их класс или id и искал их на страницу или в скриптах Улыбающийся
так то неплохо было узнать как событие клика ловить, расскажете если узнаете? Улыбающийся
53  Программирование / С/C++ / Re: Что за тип шифрования? : Август 01, 2017, 16:26
а что вы можете посоветовать с таким вариатом
http://evende.ua/obyavlenie-nikopol-dnepropetrovskaya-obl/yaponskiy-khin-vyazka-ksu-fci-MTc1NjQw.html

Я открыл в инспекторе, и вижу эти номера, захожу на страницу и не вижу, как так? Они что находятся на отдельной странице, не могу понять...

Конечно, раз запроса не было, ищите на самой странице или в загружаемых скриптах. Вот что в увидел в каком-то из скриптов того сайта:
Код
Javascript
// Расшифровка телефонов -----------------------------------------------
$(".info_block span[for]").before(function() {
var ok = $(this).closest('.goode').length,
num = evCore.fn.base.dec(ok ? $(this).html() : $('.goode span[for]').html());
num = ('0'+num).substr(-10,10);
if(ok) this.innerHTML = num.replace(/(\d{3})(\d{3})(\d{2})(\d{2})/,'($1) $2 $3 $4');
num = num.match(/\d/);
return "<span class='tel38'>"+(num && num[0] == 9 ? "+7" : "+38")+"</span>";
});
 


Цитировать
И я вот думаю как его рассшифровать после получения пикселей?))
Когда я писал библиотеку для написания парсеров и по ней разные парсеры, то для авито писал парсер картинки с номером телефона (в той ссылке он есть), правда уже потом я случайно узнал, что если зайти в мобильную версию авито, то с сервера буду приходить не картинки с телефоном, а такой конкретный текст -- чтобы можно было с телефона тыкнуть на номер и позвонить
54  Программирование / С/C++ / Re: Что за тип шифрования? : Июль 26, 2017, 19:06
Ну, у меня 2 новости, хорошая и плохая:
Хорошая: я разобрался в их коде и как они шифруют все это
Плохая: написал это на питоне и не буду переписывать после

Пример:
Код
Python
def _ph_dec(g, r, k):
   from base64 import b64decode
   decode_base64 = b64decode(g).decode('utf-8')
 
   import re
   g = re.sub(r'%([a-fA-F0-9]{2})', lambda m: chr(int(m.group(1), 16)), decode_base64)
 
   n = len(r)
   d = len(g)
   c = ''
   f = 0
 
   while f < d:
       q = g[f: f + 1]
       p = r[f % n: f % n + 1]
 
       if k == 1:
           q = ord(q[0]) - ord(p[0])
       else:
           if k == 2:
               q = ord(q[0]) - ord(p[0]) + 14
           else:
               q = ord(q[0]) ^ ord(p[0])
 
       c = c + chr(q)
       f += 1
 
   return c
 
 
def gpzd(data, key):
   key = int(key)
 
   key = key * 6 - 47289 + 517
   return _ph_dec(data, str(key), 2)
 
 
def get_phone(cmd):
   cmd = cmd.split('\t')
   for i in cmd:
       data = i.split('|')
 
       b = gpzd(data[1], data[2])
       phone = _ph_dec(b, 'K0dbVwzGrpLa-wRs2', 2)
       print(phone)
 
   print()
 
 
cmd = '1|JTg0JTkxbyU5NnVqJTdDJThGc2drWnR6JTkxWA==|22481814 2|JTg1JTk3cCU5NHZscyU5NHloeVlyJTdCJTk0aXIlN0UlOEUlNjAlODQlOTElN0MlNUR1aWclNjA=|31950540 3|JTg1JTk0cCU5NnVmJTg0JTk2dWhuJTVCdHolOEQlNjA=|44314626'
get_phone(cmd)
 
 
cmd = '1|JTg3JTkyJTdDJTk2dmZxJTk2c2hwWHQlN0IlOEVmdHglOEUlNUIlODQlN0QlN0NXciVBMWElNjA=|23649509 2|JThBJTk1JTdEJTk0dGtvJTk3cWx3WnJ6bCU5QnV2JTkyJTVFJTg2a3olNUN0bF9k|95446977 3|JTg1JTkybyU5N3pvJTgzJTkycWhsWnUlN0YlOTZf|40841102'
get_phone(cmd)
 

Консоль:
Цитировать
-00-00
11-822-14
-00-00

94-711-03
54-829-39
-00-00



А теперь как так вышло:

Самое интересное на сайте находится по ссылке: https://i.doska.ru/w_inc/js/main.mobile.ru.doska.js?v=400 (или https://i.doska.ru/w_inc/js/main.ru.doska.js?v=400)
Там куча обфусцированного кода (ссылка на читаемый код https://pastebin.com/0HAYPHzT)

Для обработки строк вида "JTg3JTkyJTdDJTk2dmZxJTk2c2hwWHQlN0IlOEVmdHglOEUlNUIlODQlN0QlN0NXciVBMWElNjA=|23649509" вам нужно будет найти там функцию gpzd, но эта функция спрятана в этом куске кода:
Код
Javascript
eval(function (n, b, r, f, g, q) {
 g = function (d) {
   return d.toString(36)
 };
 if (!''.replace(/^/, String)) {
   while (r--) {
     q[r.toString(b)] = f[r] || r.toString(b)
   }
   f = [
     function (c) {
       return q[c]
     }
   ];
   g = function () {
     return '\\w+'
   };
   r = 1
 }
 while (r--) {
   if (f[r]) {
     n = n.replace(new RegExp('\\b' + g(r) + '\\b', 'g'), f[r])
   }
 }
 return n
}('4 7(1,0){0=0*6-3+5;9 8(1,b a(0),2)}', 12, 12, 'key|data||47289|function|517||gpzd|_ph_dec|return|String|new'.split('|'), 0, {
}));
 

Я понял что тут ее спрятали и пытался понять что же здесь творится, в итоге открыл инспектора браузера и выполнил в консоли эту функцию, добавив перед "return n" команду "console.log(n)" и получил строку "function gpzd(data,key){key=key*6-47289+517;return _ph_dec(data,new String(key),2)}"

После в том же файле нашел функцию _ph_dec и переписал ее

В моем варианте код внутри функции get_phone это в js функция_send_phone_ajax, в которой было:
Код
Javascript
   cmd = b.responseText;
   if (cmd) {
     cmd = cmd.split('\t');
     if (cmd[0] == 'w' && cmd[1]) {
       _alert(JS_GLOBAL_DATA['w' + cmd[1]]);
       return
     } else {
       if (cmd[0] == 'phone_code') {
         show_phone_code_form(0, cmd[1]);
         return
       } else {
         if (cmd[0] == 'show_phone_code_form') {
           show_phone_code_form(1, cmd[1])
         }
       }
     }
     for (i in cmd) {
       data = cmd[i].split('|');
       print_phone(gpzd(data[1], data[2]), data[0], MOBILE)
     }
     _show_phone(2)
   }
 

Видно знакомые split'ы? Улыбающийся

После нашел функцию print_phone:
Код
Javascript
function print_phone(c, g) {
 var f;
 if (!c || !(f = el('ph_td_' + g))) {
   return
 }
 var d = p2 = _js_decode(c);
 if (MOBILE) {
   var b = el('ptd2_' + g);
   if (b) {
     b = b.innerHTML;
     b = b.split('>');
     b = b[1];
     b = b.split('<');
     b = b[0];
     b = b.replace('(', '');
     b = b.replace(')', '');
     p2 = d.replace('-', '');
     p2 = p2.replace('-', '');
     p2 = p2.replace('-', '');
     p2 = b + '' + p2
   }
   f.innerHTML = '<a href="tel:' + p2 + '">' + d + '</a>'
 } else {
   f.innerHTML = d
 }
 f.style.visibility = 'visible'
}
 

В ней больше всего заинтересовала функция _js_decode, кст, второй параметр print_phone это числа от 1, 2, 3 в тех закодированных кусках
Код
Javascript
function _js_decode(b) {
 return _ph_dec(b, 'K0dbVwzGrpLa-wRs2', 2)
}


Кст, если заинтересовало как после расшифровки того куска текста и получении 3 телефонов скрипт узнает какой номер заполнить.
Когда внутри _send_phone_ajax скрипт получает команды, прогоняет их через gpzd и начинает вызывать print_phone, то в print_phone передаются номера, которое в el('ph_td_' + g) используются для поиска элементов с id=ph_td_1, id=ph_td_2, id=ph_td_2. И если какой-то из элементов нашелся, то в него через f.innerHTML прописывается номер.


Еще заметил что для объявлений с одним телефоном почему-то обычно вторая команда имеет номер телефона, а также что на странице элементы с номером имеют следующее отношение:
#ph_td_1 -> "Телефон"
#ph_td_2 -> "Тел. моб."

А т.к. обычно указывают номер в "Тел. моб.", то и получаются команды вида ["-00-00", "11-822-14", "-00-00"] Улыбающийся




Немного сумбурно написал, т.к. после работы сразу засел за это и порядком устал и заколебался Улыбающийся
doska.ru хорошо защитили номера, во-первых, запутали их очень хорошо, во вторых нужно капчу отправить чтобы их получить

Если будут вопросы, задавайте, только не просите код за вас написать Улыбающийся
55  Программирование / С/C++ / Re: Что за тип шифрования? : Июль 26, 2017, 10:15
Я вечером посмотрю на тот сайт, интересно стало Улыбающийся
Расшифровка значит происходит в скриптах сайта, на клиенте, т.е. в браузере

Можно бы посмотреть через инспектора какие там  скрипты и куда попадают эти зашифрованные данные
кст, а по той строке пришло 3 телефона?

Насчет инспектора в браузере и поиск в скриптах я как то подробно описывал на стеке
56  Программирование / С/C++ / Re: Что за тип шифрования? : Июль 26, 2017, 09:29
"JTg3JTkyJTdDJTk2dmZxJTk2c2hwWHQlN0IlOEVmdHglOEUlNUIlODQlN0QlN0NXciVBMWElNjA=" похоже на base64

А при его декодировании получилось: "%87%92%7C%96vfq%96shpXt%7B%8Eftx%8E%5B%84%7D%7CWr%A1a%60"

Получившаяся строка похожа на "URL encoding": https://en.wikipedia.org/wiki/Percent-encoding
Попытался декодировать ее, но получилось не очень: "\x87\x92|\x96vfq\x96shpXt{\x8eftx\x8e[\x84}|Wr\xa1a`"


Откуда у вас та строчка? Случаем не с какого-нибудь сайта с видео?
57  Qt / Общие вопросы / Re: Обновление данных виджета : Июль 21, 2017, 11:53
Распишите подробнее для чего виджет тот нужен
Виджет выводит информацию, которая поступает к нему

Да вы просто перефразировали первое сообщение Улыбающийся

Ну ладно, какой вопрос, такой и ответ:
заведите у виджета слот, который будет брать всю нужную информацию и размещать ее внутри виджета

При каком-то событии (например: сигнал таймера, клик на кнопку и т.п.) вызывайте у виджета тот слот
58  Qt / Общие вопросы / Re: Обновление данных виджета : Июль 20, 2017, 18:35
Распишите подробнее для чего виджет тот нужен
59  Qt / Многопоточное программирование, процессы / Re: Необъяснимое поведение QMediaPlayer в QThread : Июль 14, 2017, 13:09
Спасибо, а то я уже просто отчаялся.

Кст, Yoann Lopes пишет что:
Цитировать
QMediaPlayer is neither thread-safe nor reentrant. It is not intended to be used from another thread, it already runs in its own thread on Windows.
т.е. QMediaPlayer уже в своем потоке запущен
60  Qt / Вопросы новичков / Re: Парсинг QRegExp не работает : Июль 07, 2017, 20:50
1. А нафига "[^>]+"? Что это конструкция должна было сделать?
Попробуйте
Код
C++ (Qt)
QRegExp re("\"message_id\":([0-9]+),");
// кст, [0-9] заменяется на \d

2. Та строчка явно относится к json, поэтому лучше ее было разобрать парсером json, а не регуляркой
// но раз регулярка уже есть, и вытащить нужно только одно значение, то почему бы и нет?
Страниц: 1 2 3 [4] 5 6 ... 122

Страница сгенерирована за 0.148 секунд. Запросов: 24.