Удаление комментариев из кода
Представляю вашему вниманию скрипт для удаления комментариев - апострофа (символа " ' "), пробелов, табуляций из файлов исходного кода на VB.
Скрипт создает новый файл с префиксом "New-". Работает в графическом и консольном режиме. Использует регулярные выражения, поэтому довольно шустрый.
Скачать можно здесь: http://da440dil.narod.ru/download.html
Представляю вашему вниманию скрипт для удаления комментариев - апострофа (символа " ' "), пробелов, табуляций из файлов исходного кода на VB.
Скрипт создает новый файл с префиксом "New-". Работает в графическом и консольном режиме. Использует регулярные выражения, поэтому довольно шустрый.
Скачать можно здесь: http://da440dil.narod.ru/download.html
Можно вопрос? А нафига? Чтобы когда сваливаешь с текущего места работы - превращать все исходники в жуткое месиво?))
И для этого тоже, почему нет? ;)
Регулярные выражения - сила :) Файл: [ATTACH]5062[/ATTACH]
On Error Resume Next
Dim mesaga 'сообщение
Dim res 'значение, возвращаемое функцией
'проверяем аргументы
If WScript.Arguments.Count = 0 Then'если нет аргументов
mesaga = InputBox("Пожалуйста, введите имя файла", "Удаление комментариев","")
If mesaga <> "" Then
res = RemComm(mesaga)
Else: WScript.Quit
End If
Else: res = RemComm(WScript.Arguments(0))
End If
ResChk(res) 'вызываем процедуру проверки
'проверка на ошибки
Sub ResChk(res)
If res = True Then
MsgBox "Удаление комментариев завершено",vbInformation
Else: MsgBox "В процессе удаления произошла ошибка",vbExclamation
End If
End Sub
Function RemComm(fName)
Dim replPatrn 'щаблон для замены комментов для RexExp
Dim codeFileName 'имя файла с кодом для удаления комментов
Dim codeFilePath 'полный путь к файлу с кодом - должен быть в том же каталоге
Dim codeFilePathNew 'полное имя нового файла (с префиксом)
Dim codeFile 'файл с кодом
Dim codeFileNew 'новый файл
Dim i 'счетчик
Dim strArr() 'массив для файла с кодом
Dim wshShell 'оболочка
Dim fso 'файловая система
Dim regEx ' переменная для RegExp
Const newNamePref = "New-" 'префикс нового файла
replPatrn = "'[^" & Chr(34) & "]*$|\t" 'собираем шаблон - комменты или символы табуляции
codeFileName = fName
Set wshShell = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
codeFilePath = wshShell.CurrentDirectory & "\" & codeFileName
codeFilePathNew = wshShell.CurrentDirectory & "\" & newNamePref & codeFileName
Set codeFile = fso.OpenTextFile(codeFilePath,1) 'открываем файл для чтения
i = 0
Do While codeFile.AtEndOfStream <> True 'читаем файл до конца
ReDim Preserve strArr(i) 'перебиваем размерность массива
strArr(i) = Trim(codeFile.ReadLine) 'закидываем строки в массив, удаляем пробелы
i = i + 1
Loop
codeFile.Close
Set codeFileNew = fso.CreateTextFile(codeFilePathNew,True) 'создаем файл, если существует - заменим
Set regEx = New RegExp 'создаем регулярное выражение.
With regEx
.Pattern = replPatrn 'определяем шаблон
.Global = True 'устанавливаем глобальность применения
.IgnoreCase = True 'устанавливаем нечувствительность к регистру
End With
For i = 0 To UBound(strArr)
strArr(i) = regEx.Replace(strArr(i),"") 'удаляем комменты
If strArr(i) <> vbNullString Then codeFileNew.WriteLine strArr(i) 'пишем в файл, пропускаем пустые строки
Next
codeFileNew.Close
Set regEx = Nothing
Set codeFileNew = Nothing
Set codeFile = Nothing
Set fso = Nothing
Set wshShell = Nothing
If err = 0 Then
RemComm = True
Else: RemComm = False
End If
End Function
- работает в графическом и консольном режиме (на случай отсутствия библиотеки, необходимой для вызова диалогового окна)
- в графическом режиме предлагает выбрать файлы в диалоге
- в консольном режиме принимает в качестве аргументов полные, относительные пути или только имена файлов
- создает новые файлы с префиксом "New-"
- в завершение работы отображает сообщение с отчетом об удалении комментариев из каждого файла
- подробно закомментирован, при желании разберутся все :)
Непросто. В лучшем случае придется выбирать язык при запуске. Для себя скрипт писал, C/PHP и пр. не моя тема.
В следующей реинкарнации возможно реализую переименование явно объявленных переменных. В мясо :)
Такой вот VB-обфускатор получается :)
в лучшем случае его выбирать не придется. но я только предложил.
Я имел в виду различия в синтаксисе. Лучше при запуске скрипта выбирать, по расширению по-моему не совсем правильно.
Кроме того, допилить для других языков не готов, не плаваю в них.
по-моему - тоже, поэтому можно еще определять по ключевым словам уникальным для языка. поддерживаю дискуссию.
Можно, но для этого нужно быть хорошо знакомым с целевым языком. Поясню на примере настоящего скрипта.
Сналача, когда деревья были большими :), удалял все после апострофа. Потом напрягся на подобном коде:
& DevID & "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition")
Косяк очевиден. Решил вопрос через RegEx, вроде неплохо.
А сколько подобных подводных камней в других языках?
RegEx - это класс или просто "регулярные выражения"? и как сама среда воспринимает такой код?
Алсо, писал лексический парсер для .doc на VBA. деревьев и регулярок использовать не пришлось. что за хитрая система там у тебя?
чтобы ровнее было :), некоторые вместо табуляции пробелы могут использовать
просто "регулярные выражения", объект, экземпляр класса RegExp, про среду не понял - все работает
ничего хитрого, быстрее работает, вся "хитрость" в этой строке:
не понял, что Вы имели в виду под "форматированием кода"
а чем пробелы не угодили? они же в начале и в конце строки удаляются, код живой остается
Dim strPrice As String
Dim strYear As String
' this button just spits out a count of how many records the latest dyno query returned
Private Sub Command1_Click()
MsgBox Adodc1.Recordset.RecordCount, vbOKOnly, "# of Records Returned"
End Sub
' this button will step through the records one by one and save their ids in a string,
' which is then displayed in a message box.
Private Sub Command2_Click()
Dim duh As String
duh = ""
With Adodc1.Recordset
' move to the first record, top o' the list
.MoveFirst
While Not .EOF ' this saves the value in the ID field of the current record. Hint: you can
' do the same thing for any other column in the db / record / whatever
' (so .Recordset!YearBuilt would return that number for the current record)
duh = duh & " " & !ID
.MoveNext
Wend
End With
MsgBox duh, vbOKOnly, "IDs of Records Returned"
End Sub
было
Dim strPrice As String
Dim strYear As String
Private Sub Command1_Click()
MsgBox Adodc1.Recordset.RecordCount, vbOKOnly, "# of Records Returned"
End Sub
Private Sub Command2_Click()
Dim duh As String
duh = ""
With Adodc1.Recordset
.MoveFirst
While Not .EOF
duh = duh & " " & !ID
.MoveNext
Wend
End With
MsgBox duh, vbOKOnly, "IDs of Records Returned"
End Sub
Т.е. отступы грамотно расставляло.
Возможности:
- удаление комментариев, пробелов, табуляций, переноса строк
- переименование функций, процедур, классов, свойств, методов, явно объявленных переменных, констант (только VBS)
В графическом режиме позволяет выбрать несколько файлов.
В консольном режиме принимает в качестве аргументов абсолютные, относительные пути или только имена файлов.
От рисования интерфейса отказался. Наверняка разработчикам красота ни к чему.
В секции объявления переменных можно изменить:
- максимальную длину нового случайного имени в символах
- процент символов алфавита в новом случайном имени
- необходимость переименования переменных и пр.
- необходимость создания файла журнала переименования
- префикс нового имени файла
- суффикс имени файла лога
Скрипт создает в каталоге с файлом исходного кода новый файл с указанным префиксом, а также, в случае необходимости, CSV-файл с отчетом о переименованных переменных и пр., в завершение работы отображает сообщение с отчетом о результате работы с каждым файлом.
Более 10000 символов нельзя, поэтому кому интересно - качаем здесь или смотрим вложение.
Так выглядит скрипт после обработки собственного исходного кода.
Исходный код можно посмотреть здесь или здесь.
Удачи разработчикам :)
Делает код еще более нечитабельным, но значительно увеличивает размер файла.
Во вложении - оба варианта скрипта - с кодом до трансформации и после.
Не понял,и в чём тут плюс?Ни код читабельнее не станет,ни файл меньше…
только вопрос , а как потом работать с этим кодом и будет код вообще работать после обфускации
Похоже да.
только вопрос , а как потом работать с этим кодом и будет код вообще работать после обфускации
Код работать будет, а работать с этим кодом ни к чему. Автору не мешало бы исходники оставлять себе, и работать с ними :).
Кстати, когда искал что-то похожее, нашел вот это, был потрясен - просят 279 бакинских :).
Если просто удалить комментарии - Const bStir = False, Const bTransChr = False - файл станет меньше.
Ну если ТС нормально сделал - то будет работать, разумеется. :) Единственное - не знаю, насколько это нужно было в принципе, обфускация чаще применяется для скриптовых языков с открытым кодом, типа PHP или JS. Какой смысл это делать для VB?
Я делал это для VBS.
Вы работали с IDA(+ пару троек прог) так они пробивает всЁ и всЯ. А всё остальное для просТых пользователей КП, типа умею вкл/выкл. 256 bit ключи , RAR с паролем если очень надо за больЩое бабло ломают.