<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[QUIK -> DDE &mdash; Автологин в QUIK при двухфакторной авторизации по СМС (на Lua)]]></title>
	<link rel="self" href="https://quik2dde.ru/extern.php?action=feed&amp;tid=341&amp;type=atom" />
	<updated>2021-03-27T08:32:43Z</updated>
	<generator>PunBB</generator>
	<id>https://quik2dde.ru/viewtopic.php?id=341</id>
		<entry>
			<title type="html"><![CDATA[Re: Автологин в QUIK при двухфакторной авторизации по СМС (на Lua)]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3054#p3054" />
			<content type="html"><![CDATA[<p>Круто!!</p><p>function dos2win(s)<br />Надо будет в w32 библиотеку такое добавить, в принципе эти функции есть в WinAPI, так что даже логично будет.</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2021-03-27T08:32:43Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3054#p3054</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Автологин в QUIK при двухфакторной авторизации по СМС (на Lua)]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3053#p3053" />
			<content type="html"><![CDATA[<p>Не стал заводить новую тему, так как тема относится к автолигину.</p><p>Периодически из-за двухфакторной авторизации автологин не получался, требовался PIN из SMS, а я не всегда около компьютера.<br />В общем, для себя реализовал автоматизацию двухфакторной авторизации.</p><p>Что для этого требуется.</p><p>1) USB-модем.<br />Я взял ZTE MF833R<br />По умолчанию модем работает в режиме сетевой карты+роутера, нам это не подходит. Надо заставить модем работать в режиме COM-портов.<br />Для ZTE-модемов есть утилита SCSI.exe (хз почему такое название), которая сбрасывает модем в диагностический режим, в котором модем как раз работает в режиме com-портов. Далее подсовываем драйвера. Первый этап закончен.<br />Можно подключиться к com-порту модема через терминал, чтобы убедиться что он работает.<br />Инфу по модемам хорошо искать на форуме 4pda, там много чего интересного.<br /><strong>Предупреждение, неправильными действиями можно легко модем убить, все на свой страх и риск.<br /></strong></p><p>2) Получаем SMS с usb-модема<br />Хотел написать на LUA, но не нашел нормальной библиотеки для работы с COM-портами, поэтому взял на просторах интернета программу nhsms, гуглится по первой же ссылке. Плюсы в том что умеет работать как сервис, настраивается как через гуи так и через конфиг, для наших нужд она будет бесплатна.<br />Ставим, настраиваем на свой модем, убеждаемся что она работает и принимает sms.<br />После чего делаем скрипт обработки входящих sms, у меня такой<br /></p><div class="codebox"><pre><code>@echo off
rem Обрабатываем только входящие СМС
if not &quot;%sms_type%&quot; == &quot;SMS-DELIVER&quot; exit /b 0
rem Сохранение в файлы по отправителям
If Not Exist &quot;%DIR%\%sms_sender%&quot; mkdir &quot;%DIR%\%sms_sender%&quot;
echo %sms_readtime% &quot;%sms_messagetext%&quot;&gt;&gt; %DIR%\%sms_sender%\all.txt
echo %sms_readtime_year%%sms_readtime_month%%sms_readtime_day%%sms_readtime_hour%%sms_readtime_min%%sms_readtime_sec%&gt; %DIR%\%sms_sender%\last.txt
echo %sms_messagetext%&gt;&gt; %DIR%\%sms_sender%\last.txt</code></pre></div><p>В результате, под каждого отправителя, создается папка, в которой два файла, all.txt и last.txt<br />В моем случае, для авторизации потребуется файл C:\SMS\OpenQUIK\last.txt в рем всегда будет лежать датавремя и текст последней SMS от брокера кодом авторизации.</p><p>3) Выдергиваем из файла с последней sms от брокера pin-код и отправляем его в quik<br />Тут просто в скрипт автологина добавил несколько функций<br /></p><div class="codebox"><pre><code>function Quik2FA() -- Ищем окно двухфакторной авторизации и вводим PIN для 
  local hWnd=GetWindowHandle(&quot;#32770&quot;,&quot;Двухфакторная аутентификация&quot;) -- Получить дескриптор окна Двухфакторной аутентификации
  if hWnd==0 then return end                           -- Дескриптор не найден, выход
  local hPIN=w32.FindWindowEx(hWnd,0,&quot;Edit&quot;,&quot;&quot;)        -- PIN
  local PINCode=GetPINCode()
  if(PINCode~=nil)then
    w32.SetWindowText(hPIN,PINCode)
    w32.PostMessage(hWnd,w32.WM_COMMAND,IDOK,0)
  else
    w32.PostMessage(hWnd,w32.WM_COMMAND,IDCANCEL,0)
  end
end
function GetPINCode() -- Ждем актуальную SMS от брокера и выдергиваем PIN
  local now=string.format(&quot;%04d%02d%02d%02d%02d%02d&quot;,dt.year,dt.month,dt.day,dt.hour,dt.min,dt.sec)
  local filename=&quot;C:\\SMS\\OpenQUIK\\last.txt&quot;
  local n=120 -- Ждем SMS 2 минуты
  message(&quot;Ждем SMS с PIN-кодом...&quot;)
  while (n&gt;0) do
    local f=io.open(filename,&quot;r&quot;)
    if f~=nil then
      local smsdate=tonumber(f:read(&quot;*l&quot;))
      local smstext=tostring(f:read(&quot;*l&quot;))
      f:close()
      if(smsdate&gt;=now)then
        smstext=dos2win(smstext)
        message(&quot;Получена SMS:&quot;..tostring(smstext))
        local pin=string.match(smstext,&quot;%d%d%d%d%d&quot;)
        message(&quot;Найден PIN:&quot;..tostring(pin))
        return pin
      end
    end
    sleep(1000)
    n=n-1
  end
  message(&quot;SMS не получена&quot;)
  return nil
end
function dos2win(s) -- Перекодируем SMS из кодировки cp866 в cp1252
  local str=&quot;&quot;
  for i=1,string.len(s) do
    byte=string.byte(s,i)
    char=string.char(byte)
    if(byte&gt;=128)and(byte&lt;=175)then char=string.char(byte+64) end
    if(byte&gt;=224)and(byte&lt;=239)then char=string.char(byte+16) end
    if(byte==240)              then char=string.char(168) end
    if(byte==241)              then char=string.char(184) end
    str=str..char
  end
  return str
end</code></pre></div>]]></content>
			<author>
				<name><![CDATA[BlaZed]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3233</uri>
			</author>
			<updated>2021-03-27T08:28:18Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3053#p3053</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Автологин в QUIK при двухфакторной авторизации по СМС (на Lua)]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3052#p3052" />
			<content type="html"><![CDATA[<p><strong>BlaZed</strong>, я всё же вынесу эту тему отдельным топиком, т.к. она сама по себе может иметь своё параллельное развитие.</p><p>В дополнение к теме [url=https://quik2dde.ru/viewtopic.php?id=80]автологина QUIK[/url]<br />[url]https://quik2dde.ru/viewtopic.php?id=80[/url]</p><p>Что делать в случае двухфакторной авторизации по SMS ?</p>]]></content>
			<author>
				<name><![CDATA[admin]]></name>
				<uri>https://quik2dde.ru/profile.php?id=2</uri>
			</author>
			<updated>2021-03-27T08:26:09Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3052#p3052</id>
		</entry>
</feed>
