Что нового

Как бороться с ошибкой обфускации: Warning for line:Call

Suppir

Продвинутый
Сообщения
967
Репутация
62
Подскажите, как лучше бороться с такими ошибками обфускации:

Код:
-### Obfuscation Error: Found Call() statement using unsolvable Func, which will/could lead to problems running your obfuscated script.
>### current Func: __RichCom_Object_GetNewStorage
C:\Program Files (x86)\AutoIt3\include\GuiRichEdit.au3(5713,1) Warning for line:Call("MemoryFuncCall" & "", "long", $lpReleaseFunc, "ptr", $lpLockBytes) 

-### Obfuscation Error: Found DllCallbackRegister() statement using unsolvable Func, which will/could lead to problems running your obfuscated script.
>### current Func: _Timer_SetTimer
C:\Program Files (x86)\AutoIt3\include\Timers.au3(275,1) Warning for line:$hCallBack = DllCallbackRegister($sTimerFunc, "none", "hwnd;int;uint_ptr;dword")

Вырезать эти функции из начальных UDF не могу, т.к. они используются в скрипте.


Добавлено:
Сообщение автоматически объединено:

Функции из скрипта, которые используют GuiRickEdit и Timers, перестают работать после обфускации.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Suppir,
Попробуйте не обфусцировать эти функции (Русская справка - Функции пользователей
- Приложение - Obfuscator)
Код:
$var=1 
#Obfuscator_Off 
$text=2 ; этот участок кода не обфуцируется 
#Obfuscator_On 
$var=3
Или
Код:
#Obfuscator_Ignore_Funcs=_FuncName, _UserFuncName
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Попробовал сделать так:

1) скопировал библиотеки Timers.au3 и GuiRichEdit.au3 в одну директорию со скриптом.
2) в этих библиотеках проблемные строчки окружил:
#Obfuscator_Off и #Obfuscator_On
3) в самом скрипт поменял #include <Timers.au3> на #include "Timers.au3" (чтобы использовался файл из нашей директории)
4) запустил обфускатор

Теперь прежних ошибок нет, но выдало много других ошибок:
Код:
WARNING: $lpReleaseFunc: possibly used before declaration.
Call("MemoryFuncCall" & "", "long", $lpReleaseFunc,

WARNING: $lpLockBytes: possibly used before declaration.
Call("MemoryFuncCall" & "", "long", $lpReleaseFunc, "ptr", $lpLockBytes)

WARNING: $sTimerFunc: possibly used before declaration.
$hCallBack = DllCallbackRegister($sTimerFunc,

 WARNING: $sCall_FuncName: possibly used before declaration.
Call($sCall_FuncName,

WARNING: $i: possibly used before declaration.
Call($sCall_FuncName, $aIni[$i]

 ERROR: $lpReleaseFunc: undeclared global variable.
Call("MemoryFuncCall" & "", "long", $lpReleaseFunc,

ERROR: $lpLockBytes: undeclared global variable.
Call("MemoryFuncCall" & "", "long", $lpReleaseFunc, "ptr", $lpLockBytes)
 

AZJIO

Меценат
Меценат
Сообщения
2,878
Репутация
1,194
Suppir
#Obfuscator_Off и #Obfuscator_On применяются если функция независима, а если содержит глобальные переменные, то естественно они разойдутся в именах. Нужно указать игнор имён функций и переменных.

А судя по Call("MemoryFuncCall" вы реальную MemoryFuncCall переименовываете обфускацией, а в текстовой строке так и остаётся MemoryFuncCall, она будет вызывать функцию которой больше нет. Делайте игнор на имя функции.
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
AZJIO [?]
Делайте игнор на имя функции.

Как сделать игнор на имя функции?


Добавлено:
Сообщение автоматически объединено:

Я поставил параметр /cf 0
(0=No Func rename (1=default))

По идее имена функций не должны меняться. Но все равно ошибки выдает.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Пример:
Код:
#Obfuscator_Ignore_Funcs=__EnumWindowsProc,__Wnd_Hook,__Wnd_Proc,__Ctrl_Proc


И после этого можете игнорировать ошибки, скрипт все равно обфусцируется.
 
Верх