Pull to refresh
159
0
Александр (Rouse_) Багель @Rouse

Инженер — программист

Send message
В смысле виртуалки с винды?
У меня в принципе iMac27 стоит, но жена не пускает за машину (бо либо эта машина её, либо ешь пельмени :), поэтому жду своего родного девайса.
Статья отличная, для новичков в ios, на вроде меня — самое то, отдельный респект за видеовставки, коротко и со вкусом, но о главном :)
Сам пока что изучаю Swift по эпловскому букварю: «The SWIFT programming language», все никак не дождусь когда мой макбук приедет, чтобы начать вживую это все щупать :)
Ну что значит на Delphi? :)
Я веду проекты помимо Delphi как на сях, так и целиком писанные на ассемблере, включая драйверы уровня ядра :)
Язык не панацея, он не может показать уровень подготовки разработчика — это просто инструмент :)
Добавил небольшое изменение кода для совместимости с Windows 8.
Если грубо, то в семерке сообщение WM_TOUCH отправляются окну через PostMessage:

CallStack
uSimple.TdlgSimpleTouchDemo.WmTouch((1637852, 5993380, 1637852, 42717168, 29604, 91, (), 64988, 24, (), 53232, 651, ()))
Vcl.Controls.TControl.WndProc((1637852, 42717168, 0, 1637676, 53232, 651, (), 0, 0, (), 64812, 24, ()))
Vcl.Controls.TWinControl.WndProc((576, 1, 252772352, 0, 1, 0, (), 0, 3857, (), 0, 0, ()))
Vcl.Forms.TCustomForm.WndProc((576, 1, 252772352, 0, 1, 0, (), 0, 3857, (), 0, 0, ()))
Vcl.Controls.TWinControl.MainWndProc(???)
System.Classes.StdWndProc(3936444,576,1,252772352)
:766a62fa; C:\Windows\syswow64\USER32.dll
:766a6d3a USER32.GetThreadDesktop + 0xd7
:766a77c4; C:\Windows\syswow64\USER32.dll
:766a788a USER32.DispatchMessageW + 0xf
Vcl.Forms.TApplication.ProcessMessage(???)
:005ac2e0 TApplication.ProcessMessage + $F8

а в восьмерке работает какой-то свой хук, мешающий нашему:

CallStack
uSimple.TdlgSimpleTouchDemo.WmTouch((1635260, 5993356, 1635260, 42979312, 29580, 91, (), 62396, 24, (), 53232, 655, ()))
Vcl.Controls.TControl.WndProc((1635260, 42979312, 267911168, 1635084, 53232, 655, (), 0, 4088, (), 62220, 24, ()))
Vcl.Controls.TWinControl.WndProc((576, 1, 267911168, 0, 1, 0, (), 0, 4088, (), 0, 0, ()))
Vcl.Forms.TCustomForm.WndProc((576, 1, 267911168, 0, 1, 0, (), 0, 4088, (), 0, 0, ()))
Vcl.Controls.TWinControl.MainWndProc(???)
System.Classes.StdWndProc(986744,576,1,267911168)
:77c77834 user32.CallNextHookEx + 0x97
:77c77a9a; C:\WINDOWS\SysWOW64\user32.dll
:77c77bed; C:\WINDOWS\SysWOW64\user32.dll
:77cccc33; C:\WINDOWS\SysWOW64\user32.dll
:77ecc692 ntdll.KiUserCallbackDispatcher + 0x2e
:77ce629c; C:\WINDOWS\SysWOW64\user32.dll
:77c7d2c7; C:\WINDOWS\SysWOW64\user32.dll
:77c7d400; C:\WINDOWS\SysWOW64\user32.dll
:77cc5bf6; C:\WINDOWS\SysWOW64\user32.dll
:609b5207; C:\WINDOWS\SysWOW64\Ninput.dll
:609aeb76; C:\WINDOWS\SysWOW64\Ninput.dll
:609aed0f; C:\WINDOWS\SysWOW64\Ninput.dll
:609a0b37; C:\WINDOWS\SysWOW64\Ninput.dll
:609a0d33; C:\WINDOWS\SysWOW64\Ninput.dll
:609ae8e2; C:\WINDOWS\SysWOW64\Ninput.dll
:6099ef78; C:\WINDOWS\SysWOW64\Ninput.dll
:6099e7a8; C:\WINDOWS\SysWOW64\Ninput.dll
:6099e9b2; C:\WINDOWS\SysWOW64\Ninput.dll
:6099f460; C:\WINDOWS\SysWOW64\Ninput.dll
:60987220; C:\WINDOWS\SysWOW64\Ninput.dll
:77ca3ffa; C:\WINDOWS\SysWOW64\user32.dll
:77ca925e; C:\WINDOWS\SysWOW64\user32.dll
:77c791e8; C:\WINDOWS\SysWOW64\user32.dll
:77c77834 user32.CallNextHookEx + 0x97
:77c77a9a; C:\WINDOWS\SysWOW64\user32.dll
:77c7ce71 user32.CallWindowProcW + 0x8b
Vcl.Controls.TWinControl.DefaultHandler(???)
:005207e3 TWinControl.DefaultHandler + $EB
:005206d2 TWinControl.WndProc + $5CA
:005a2c3a TCustomForm.WndProc + $612
:0051fd13 TWinControl.MainWndProc + $2F
:004c4e92 StdWndProc + $16
:77c77834 user32.CallNextHookEx + 0x97
:77c7930f; C:\WINDOWS\SysWOW64\user32.dll
:77c7988e; C:\WINDOWS\SysWOW64\user32.dll
:77c798f1 user32.DispatchMessageW + 0x10


Привычка :)
К сожалению, не могу ответить. Я работаю только в XE4. Судя по описаниям, должно присутствовать, но… не щупал :)
Отличная новость, особенно для тех, кто участвует в опенсорсе, скажем так: «в одно лицо», т.е. двигает только свой продукт. Появился дополнительный стимул допилить один из своих проектов и дополнить его подписью. Спасибо :)
Ну в принципе да, как вариант можно добавить такой функционал в дальнейшем.
Спасибо, я боялся что будет наоборот, слишком не понятно из-за обилия кода :)
Статья хороша — есть над чем поразмышлять :)
+1
Кстати вот так можно еще проще:

Возвращает True если передано MZ или ZM
function Check_IsMZorZM(A, B: Byte): Boolean;
asm
  and eax, $FF
  and edx, $FF
  mov ecx, eax
  xor ecx, edx
  sub ecx, $17
  imul edx
  lea ecx, [eax + ecx - $1B12]
  cmp ecx, 0
  setz al
end;

Ну и сразу пример вызова данной функции:

var
  A, B: Integer;
begin
  for A := 0 to 255 do
    for B := 0 to 255 do
      if not Check_IsNotMZorZM(A, B) then
        Writeln(IntToHex(A, 2), IntToHex(B, 2));
  Readln;
end.


Выводимый результат:

4D5A
5A4D
Либо можно прятать ответ под спойлер (ели не охота возиться с Base64 декодированием).

К примеру вот так :)
function Check_IsNotMZorZM(A, B: Byte): Boolean;
asm
  // al - первый байт
  // dl - второй байт
  // ecx - накопительный буфер для результата (0 - если все условия прошли)
  movzx ecx, al
  movzx edx, dl
  xor ecx, ecx
  push eax
  push edx
  // первое условие - ((A * B) - $1B12) = 0
  imul edx
  sub eax, $1B12
  mov ecx, eax
  // второе условие - (A + B - $A7) = 0
  mov eax, [esp]
  add eax, [esp + 4]
  sub eax, $a7
  add ecx, eax
  // третье условие - ((A xor $AA) + (B xor $AA) - $1D7) = 0
  mov eax, [esp]
  xor eax, $AA
  mov edx, [esp + 4]
  xor edx, $AA
  add eax, edx
  sub eax, $1D7
  add ecx, eax
  // результат из буфера в eax (0 - если все проверки успешны)
  xor eax, eax
  add al, cl
  or al, ch
  shr ecx, 16
  or al, cl
  or al, ch
  // правим стек
  add esp, 8
end;


Тут просто вас просят не давать ответ в открытом виде, чтобы он небыл подсказкой для тех, кто хочет самостоятельно решить данную задачу и прятать тело ответа в виде покрытого через Base64 блока данных, например вот так:

ZnVuY3Rpb24gQ2hlY2tfSXNOb3RNWm90Wk0oQSwgQjogQnl0ZSk6IEJvb2xlYW47CmFzbQogIC8vIGFsIC0g0L/QtdGA0LLRi9C5INCx0LDQudGCCiAgLy8gZGwgLSDQstGC0L7RgNC+0Lkg0LHQsNC50YIKICAvLyBlY3ggLSDQvdCw0LrQvtC/0LjRgtC10LvRjNC90YvQuSDQsdGD0YTQtdGAINC00LvRjyDRgNC10LfRg9C70YzRgtCw0YLQsCAoMCAtINC10YHQu9C4INCy0YHQtSDRg9GB0LvQvtCy0LjRjyDQv9GA0L7RiNC70LgpCiAgbW92enggZWN4LCBhbAogIG1vdnp4IGVkeCwgZGwKICB4b3IgZWN4LCBlY3gKICBwdXNoIGVheAogIHB1c2ggZWR4CiAgLy8g0L/QtdGA0LLQvtC1INGD0YHQu9C+0LLQuNC1IC0gKChBICogQikgLSAkMUIxMikgPSAwCiAgaW11bCBlZHgKICBzdWIgZWF4LCAkMUIxMgogIG1vdiBlY3gsIGVheAogIC8vINCy0YLQvtGA0L7QtSDRg9GB0LvQvtCy0LjQtSAtIChBICsgQiAtICRBNykgPSAwCiAgbW92IGVheCwgW2VzcF0KICBhZGQgZWF4LCBbZXNwICsgNF0KICBzdWIgZWF4LCAkYTcKICBhZGQgZWN4LCBlYXgKICAvLyDRgtGA0LXRgtGM0LUg0YPRgdC70L7QstC40LUgLSAoKEEgeG9yICRBQSkgKyAoQiB4b3IgJEFBKSAtICQxRDcpID0gMAogIG1vdiBlYXgsIFtlc3BdCiAgeG9yIGVheCwgJEFBCiAgbW92IGVkeCwgW2VzcCArIDRdCiAgeG9yIGVkeCwgJEFBCiAgYWRkIGVheCwgZWR4CiAgc3ViIGVheCwgJDFENwogIGFkZCBlY3gsIGVheAogIC8vINGA0LXQt9GD0LvRjNGC0LDRgiDQuNC3INCx0YPRhNC10YDQsCDQsiBlYXggKDAgLSDQtdGB0LvQuCDQstGB0LUg0L/RgNC+0LLQtdGA0LrQuCDRg9GB0L/QtdGI0L3RiykKICB4b3IgZWF4LCBlYXgKICBhZGQgYWwsIGNsCiAgb3IgYWwsIGNoCiAgc2hyIGVjeCwgMTYKICBvciBhbCwgY2wKICBvciBhbCwgY2gKICAvLyDQv9GA0LDQstC40Lwg0YHRgtC10LoKICBhZGQgZXNwLCA4CmVuZDs=

Это кстати и есть ответ на эту задачу, без использования JXX, посмотреть декодированный текст можно преобразовав его обратно при помощи вот такого сервиса: base64.ru/
Я просто примерно такой-же вариант первым делом рассматривал :)

И у тебя тут явно ошибка, ибо вот это даст ноль в любом случае:

mov bx, ax
xor ax,bx
Ну с наружи то всеравно кто-то должен проверить результат? Тем более про это в условиях задачи не упоминалось.
Я попробовал сделать без jxx используя маску ксора 0х1717 (примерно так, как в варинате от EvilsInterrupt чуть ниже), но там оч много коллизий…
Проверил на всем диапазоне от 0 до 0xFFFF? ;)
Софт защищается разный, оправдано. А по поводу невзломанного софта без хардварных ключей — мне такие экземпляры не известны.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity