-
Notifications
You must be signed in to change notification settings - Fork 32
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How can the issue with false positive be solved? #4
Comments
@tinyBigGAMES, write to Microsoft’s technical support about false positive. I use fork of other Pascal compiler (BTPC) and one time wrote to technical support of Kaspersky antivirus. |
@vtereshkov, на сколько я себе представляю, антивирусы ругаются на BTPC из-за того, что в исполнимом файле только одна секция, и она одновременно исполнимая и доступная для записи. По хорошему, нужно сделать секцию кода read only и executable и секцию данных, доступную для записи и без прав на исполнение. Но мне категорически лень этим заниматься. Студенты одну лабу терпят. Тем более, что доступен форк для Linux, которым они с удовольствием пользуются. Ну, кроме макинтошников, которым по любому приходится ставить виртуалку. А, кстати, это задача на курсовую. Надо написать студентам, тем, кто ещё не выбрал тему курсовой. Может, кто возьмётся перенести на Макось. Если у Вас только одна секция с кодом и правами на запись, то подумайте, чтобы это исправить. |
@tinyBigGAMES I just add the compiler folder to the exclusions of Windows Defender and then recompile everything I need. As for the AVG antivirus, I have reported the false positive result to the vendor. I don't know what and when they have done, but now I observe no problems with it. |
@Mazdaywik Увы, это было бы слишком просто. У меня отдельные секции кода, данных и импорта. Секция кода для чтения и исполнения, секция данных для чтения и записи. |
@tinyBigGAMES Anyway I have just reported false positive results to Microsoft. |
@vtereshkov, @Mazdaywik coolness. Thanks. |
Спасибо за пояснения. Стало быть, переделывать компилятор, чтобы он использовал две секции, или, хотя бы, одну но константную секцию кода, смысла мало. Ну тогда ладно. Всё равно у нас большинство студентов пользуется Линуксом, а те, кто пользуется Windows’ом, добавят в исключения. У меня однажды репозиторий с форком Btpc GitHub забанил. Пришлось им написать, что это ложноположительное срабатывание. Разбанили. |
@Mazdaywik С BeRo у меня вообще сейчас большие проблемы: McAfee остервенело съедает всё немедленно после скачивания, не позволяя добавить в исключения. А с недавних пор в Google Chrome появился какой-то собственный антивирус, так что архив BeRo я уже не могу даже скачать с GitHub. |
У меня тоже оказались проблемы с BeRo: не удаётся скачать с https://bmstu-iu9.github.io/compiler-labs/. Спасибо за наблюдение! А совет собрать начальную версию при помощи Free Pascal и выложить её — хороший. Ближе к началу следующего семестра так и сделаю. Сейчас лень. |
@tinyBigGAMES Could you please try again with the latest compiler version and the latest Windows Defender definitions (https://www.microsoft.com/en-us/wdsi/defenderupdates)? It seems that Microsoft has fixed something. The most interesting case is to compile not only the compiler and samples, but also some other programs (e.g. modified samples or something completely new). Of course, clear the Windows Defender exclusions list before you try. |
@Mazdaywik А начальный курс информатики в Бауманке до сих пор основан на Паскале? Поэтому и первую лабу вы строите на Паскале? Или просто внутренности компилятора Паскаля выглядят понятнее, чем компилятора C? |
@vtereshkov YES. Something has changed now. The only thing that Defender grabbed was the inserr.pas example for some reason. Otherwise, everything else worked for me. Before nothing would last for over a second, then it would be gobbled up. So progress, yes. Good stuff.
{$L libs} During compilation, the compiler will search those paths for example, if it can not find it by default. Should not be too hard to add, right?
|
Hmm... I modified the source to compile under Delphi 10.3.2, now any EXE produced will be gobbled up by Defender, sigh. |
|
@tinyBigGAMES By the way, the submission results (https://www.microsoft.com/en-us/wdsi/submission/0ea89577-5aec-4b37-a733-6b075b30d4fa) show that even inserr.exe (compiled by the default XDPW version) is "not malware". Are you sure you have updated all the definitions? |
Changes I made. Maybe I messed something up. |
@tinyBigGAMES Unfortunately I don't have Delphi 10 at hand. It is better to compare binaries produced by the two versions of XDPW: the default one and the one compiled by Delphi 10. For example, are the sort.exe's identical or not? If identical, then the Windows Defender behavior must also be identical when running both versions of sort.exe. |
@vtereshkov Зависит от кафедры. Я учился на машиностроительной специальности (СМ5) и у нас был Паскаль (Delphi). Как сейчас у машиностроительных специальностей, я не знаю. На кафедре, где я преподаю, (ИУ9) Паскаль вообще не изучается. Изучаются Scheme и Си (первый семестр первого курса), Go, C++ и Java (второй семестр первого курса), ещё на третьем курсе изучается Scala. Первая лабораторная по компиляторам посвящена Паскалю, потому что есть сравнительно простые самоприменимые компиляторы Паскаля: P5 и BeRo. На первой лекции рассказываются основные определения, T-диаграммы и в том числе раскрутка компилятора. Т.е. фактически материала для практических занятий ещё не прочитано. Поэтому автор курса, он же лектор, Скоробогатов придумал дать лабораторную работу на модификацию достаточно простого компилятора. Такими компиляторами оказались компиляторы Паскаля. Тем более, что с Паскалем многие знакомы, а то не знаком — легко разбирается. Можешь посмотреть задания к первой лабораторной и исходники P5 и Btpc (его, наверное, ты смотрел): https://bmstu-iu9.github.io/compiler-labs/ За две пары студенты легко справляются с этими заданиями. |
@Mazdaywik Да, задания посмотрел: многие из них даже не на уровне синтаксиса, а на уровне лексики. И наконец-то прочитал записку к проекту по портированию BeRo на Linux. Внутренности BeRo оказались ещё страшнее, чем мне казалось. Кстати, там я почерпнул ещё одну идею утихомирить Windows Defender - сделать полностью корректную DOS-заглушку. Увы, и это не помогло. |
А ещё в BeRo знаки Ещё у меня один студент оптимизировал компилятор P5. Ну где-то раза в три оптимизировал. Потом поищу записку и пришлю, если не забуду. |
@tinyBigGAMES After having submitted several subsequent versions of xdpw.exe to Microsoft for analysis, I for the first time observe that a minor change to the executable file does not cause a new conflict with Windows Defender. This hopefully means that the Defender's exclusions are now based on some more general code patterns than just a bit-by-bit copy of the file, so that future modifications of the compiler will not require resubmitting it. Currently the Defender's definitions are at version 1.303.479.0. |
@vtereshkov Ok, cool. Will check it out. Many thanks! |
The latest version of xdpw.exe again causes a false alarm, but now with another sort of "trojan". Microsoft claims that their Windows Defender "uses artificial intelligence (AI) to identify new and emerging malware". As such, there is no other way than just submitting as many examples as we can to help their AI learn the code patterns. |
@vtereshkov How can I contact you privately? I want to send you some src that from it we may be able to figure this out. |
@tinyBigGAMES please contact me at [email protected] |
@vtereshkov Great, thanks. Check your email. |
Happy to report that now ALL the samples compile and run without issue on Windows 10:
Windows Defender:
I see you added some more stuff to the header. NICE! |
@tinyBigGAMES Yes, the probability of false alarms has decreased, but it's not the end of the story. I still observe false alarms with AVG and sometimes with Acronis and Avast. Now I'm working on the import section structure. |
@vtereshkov Ahh ok understand. Ok, so I got the code to compile under Delphi 2009+, and the generated EXEs all work for me also. I use conditional defines in Common.inc, which xdpw does not yet support so that compilation will stop at line 43, unfortunately. If you know of another way to handle lines 42-50 in common.inc so all three compilers can work from a single source, let me know. |
@tinyBigGAMES probably you can add new definitions to system.inc:
and then remove the |
Have delph (or freepascal) and xdpw compile this program {$APPTYPE CONSOLE} compare the differences. I still think by having a full and complete win32 EXE header will make some difference (whatever sections Delphi creates, for example) make sure xdpw has it too and see what happens. Here you can see how an empty exe compare. If Delphi/freepascal version does not trigger the virus scanner, this becomes your baseline to work from. |
After having modified the code generator, I observe that the false alarm probability gets even lower. |
NICE! |
It is curious that professional compilers also suffer from the false alarm problem: https://golang.org/doc/faq#virus |
@tinyBigGAMES I have tried your GamePascal. Great work! But anyway, it is not free from the false alarm problems. Windows Defender behaves differently in different environments:
|
Every compile for me, Windows defender chews on the EXE and removes it. How is this fixed? Do you have to update the generated EXE header or submit to the antivirus companies as false positive?
The text was updated successfully, but these errors were encountered: