PDA

Просмотр полной версии : [Function] Защита от DeAMX (new)



Daniel_Cortez
14.04.2014, 20:52
Всем привет.

Ещё в прошлом году написал защиту от декомпилятора, которой сейчас хотел бы с вами поделиться.

Для использования просто вставьте данную функцию в самое начало мода:


@___If_u_can_read_this_u_r_nerd(); // 10 different ways to crash DeAMX
@___If_u_can_read_this_u_r_nerd() // and also a nice tag for exported functions table in the AMX file
{ // by Daniel_Cortez \\ pro-pawn.ru
#emit stack 0x7FFFFFFF // wtf (1) (stack over... overf*ck!?)
#emit inc.s cellmax // wtf (2) (this one should probably make DeAMX allocate all available memory and lag forever)
static const ___[][] = {"pro-pawn", ".ru"}; // pretty old anti-deamx trick
#emit retn
#emit load.s.pri ___ // wtf (3) (opcode outside of function?)
#emit proc // wtf (4) (if DeAMX hasn't crashed already, it would think it is a new function)
#emit proc // wtf (5) (a function inside of another function!?)
#emit fill cellmax // wtf (6) (fill random memory block with 0xFFFFFFFF)
#emit proc
#emit stack 1 // wtf (7) (compiler usually allocates 4 bytes or 4*N for arrays of N elements)
#emit stor.alt ___ // wtf (8) (...)
#emit strb.i 2 // wtf (9)
#emit switch 0
#emit retn // wtf (10) (no "casetbl" opcodes before retn - invalid switch statement?)
L1:
#emit jump L1 // avoid compiler crash from "#emit switch"
#emit zero cellmin // wtf (11) (nonexistent address)
}


P.S.: Не рекомендую удалять комментарии как по моральным (ИМХО, стирать комментарии об авторстве - это практически как воровство работы и неуважение к её автору), так и по практическим (объяснение работы для каждой из "ловушек") причинам.


Автор: Daniel_Cortez (http://pro-pawn.ru/member.php?100-Daniel_Cortez)

Специально для Pro-Pawn.ru (http://www.pro-pawn.ru)
Копирование данной статьи на других ресурсах без разрешения автора запрещено!

.Kos
14.04.2014, 20:55
Не плохо, ща в коде разбираться буду :D

DmX
14.04.2014, 23:07
Спасибо взял)

Seregamil
15.04.2014, 05:48
Это касается только деамх, все остальное хакает амх так же)

DeimoS
15.04.2014, 13:43
Это касается только деамх, все остальное хакает амх так же)

Название темы как бэ камекаэ...

Seregamil
15.04.2014, 14:46
Название темы как бэ камекаэ...

это для тех, кто уже решил, что их код не вскроют.

Salvacore
16.04.2014, 11:29
это для тех, кто уже решил, что их код не вскроют.
Я не видел больше программ которые вскрывают .amx

Seregamil
16.04.2014, 11:47
Я не видел больше программ которые вскрывают .amx

Если не видел ты, это не означает, что их нету.

Daniel_Cortez
09.10.2015, 23:01
Внимание: опасайтесь подделок!


http://ihost.pro-pawn.ru/image.php?di=STAE
http://ihost.pro-pawn.ru/image.php?di=93Y3
http://ihost.pro-pawn.ru/image.php?di=HB48

[ForD]
09.10.2015, 23:13
Внимание: опасайтесь подделок!


http://ihost.pro-pawn.ru/image.php?di=STAE
http://ihost.pro-pawn.ru/image.php?di=93Y3
http://ihost.pro-pawn.ru/image.php?di=HB48


поржал.. =D

gangzone.ini
10.10.2015, 12:12
Внимание: опасайтесь подделок!


http://ihost.pro-pawn.ru/image.php?di=STAE
http://ihost.pro-pawn.ru/image.php?di=93Y3
http://ihost.pro-pawn.ru/image.php?di=HB48


Много где пишут,что это их защита)

lexjusto
21.10.2015, 01:22
В моём скрипте авторство на ваш скрипт было изменено не конкретно на ваш скрипт, а на мой скрипт, так как ваш скрипт я поместил в шапку. Сейчас исправил, на гитхабе обновил код, добавил ваше авторство. Извиняйте если для вас это так важно.

Daniel_Cortez
22.10.2015, 14:47
В моём скрипте авторство на ваш скрипт было изменено не конкретно на ваш скрипт, а на мой скрипт, так как ваш скрипт я поместил в шапку.
Что, простите? "Авторство на скрипт"?
Я выложил отдельную функцию. Вы же убрали в ней все комментарии (в т.ч. и упоминание об авторстве) и вписали свой ник, а теперь ещё и утверждаете, что это не плагиат? Серьёзно?



Извиняйте если для вас это так важно.
Вау. Вы это так говорите, как будто мне должно быть вообще всё равно, когда кто-то присваивает себе чужую работу.



Сейчас исправил, на гитхабе обновил код, добавил ваше авторство.
"Исправлением" это можно назвать только в кавычках. Вместо того, чтобы вернуть функцию к первоначальному виду, вы просто добавили какое-то глупое упоминание на ломаном английском (https://github.com/lexjusto/SA-MP-0.3.7-Simple-Gamemode/commit/8916f7fe314c21fd974f6fcb21d0063be2328815?diff=split#diff-bbfda5cacc133ba4d3e1f3d1ea47d5b0R8).
От вас всего лишь требовалось использовать функцию в исходном виде, в котором она была здесь выложена. Неужели это так трудно?
(В крайнем случае допускается изменение функции, если в ней будет оставлен оригинальный комментарий с упоминанием об авторстве.)
Это во-первых.

Во-вторых, мод вы выложили ещё несколько месяцев назад, по сути выдавая мою функцию за свою, и она обсуждалась отдельно на sa-mp.com (http://forum.sa-mp.com/showthread.php?p=3519190#post3519190) и в VK.
Поэтому, даже если вы втихаря исправили что-то в новой версии своего мода, факт плагиата в той теме с релизом всё ещё остаётся. Если только вы не напишете там о своём *кхм* "недоразумении" (боюсь представить, как вы об этом "напишете", учитывая ваши "познания" в области английского языка, особенно, в том "исправлении" на GitHub).

Впрочем, я очень сомневаюсь, что вы сделаете хоть что-то из вышеперечисленного, учитывая, что вы до сих пор не смогли разобраться, что к чему, и не можете даже отличить функцию от целого скрипта.

lexjusto
25.10.2015, 14:21
Во-вторых, мод вы выложили ещё несколько месяцев назад, по сути выдавая мою функцию за свою, и она обсуждалась отдельно на sa-mp.com и в VK.
Поэтому, даже если вы втихаря исправили что-то в новой версии своего мода, факт плагиата в той теме с релизом всё ещё остаётся.

Нигде и никому я не писал прямым текстом что я автор данного куска кода. Когда я сменил авторство обратно на ваше в исходниках скрипта, то я сменил везде где оно было указано в моих сообщениях, так как везде где выложен мой скрипт везде была ссылка на сорцы GitHub.

Daniel_Cortez
25.10.2015, 15:11
Нигде и никому я не писал прямым текстом что я автор данного куска кода.
А это, по-вашему, что такое?
http://ihost.pro-pawn.ru/image.php?di=STAE
Вы могли не писать об авторстве над той функцией в теме с релизом и в прочих постах в явном виде, но это абсолютно ничего не меняет.
В функции было удалено оригинальное упоминание об авторстве и вставлен ваш ник. Для тех, кто в танке: это равноценно провозглашению авторства над чужим кодом, т.е. его присвоением.



Когда я сменил авторство обратно на ваше в исходниках скрипта, то я сменил везде где оно было указано в моих сообщениях, так как везде где выложен мой скрипт везде была ссылка на сорцы GitHub.
В своих да, но что можете сказать по поводу чужих?
http://forum.sa-mp.com/showthread.php?p=3519190#post3519190
В общем, как я уже говорил в своём предыдущем посте,

даже если вы втихаря исправили что-то в новой версии своего мода, факт плагиата в той теме с релизом всё ещё остаётся. Если только вы не напишете там о своём *кхм* "недоразумении" (боюсь представить, как вы об этом "напишете", учитывая ваши "познания" в области английского языка, особенно, в том "исправлении" на GitHub).

Osetin
12.11.2015, 00:57
http://ihost.pro-pawn.ru/image.php?di=VDN6

В паблик модах, пытаются всё переделать под себя. Где только уже не увидишь данный код, и везде разный автор.

Seregamil
13.01.2016, 19:46
Кек)0)
http://i.imgur.com/RJJA7Ek.png

Daniel_Cortez
13.01.2016, 20:03
Кек)0)
http://i.imgur.com/RJJA7Ek.png

Как я уже писал ранее, это защита от декомпиляции, а не от дизассемблирования.

ziggi
13.01.2016, 20:12
А разве нельзя заставить декомпилятор просто пропускать каллбэк @___If_u_can_read_this_u_r_nerd?

Daniel_Cortez
13.01.2016, 20:31
А разве нельзя заставить декомпилятор просто пропускать каллбэк @___If_u_can_read_this_u_r_nerd?
Если кто-то сделает декомпилятор, который просто добавит мою функцию в исключения, можно переименовать функцию и поменять последовательность опкодов. Если снова занесут в исключения - опять изменить функцию, и так сколько угодно раз. В крайнем случае можно подставить содержимое функции в другую функцию из скрипта.

newbie01
24.07.2016, 08:58
Почему при запуске сервера с этой защитой и с плагином jit сервер крашит периодически.




--------------------------

SA-MP Server: 0.3.7-R2



Exception At Address: 0x6513DA94 Module: (jit.DLL)



Registers:

EAX: 0x0012FCFC EBX: 0x00000000 ECX: 0x0012FCD4 EDX: 0x01D26A38

ESI: 0x0012FCD4 EDI: 0x03372D18 EBP: 0x0012FCA8 ESP: 0x0012FC78

EFLAGS: 0x00010246



Stack:

+0000: 0x6515E950 0x01D4EC80 0x00000000 0x00000000

+0010: 0x0000000F 0x0012FCD4 0x6513D405 0x0172FBA8

+0020: 0x0000005C 0x0012FCFC 0x651597F8 0xFFFFFFFF

+0030: 0x0000000F 0x6513E7A9 0x0172FBA8 0x03372D18

+0040: 0x01D4EC80 0x00000000 0x0000000F 0x00000000

+0050: 0x00000000 0x0172FBA8 0x00000064 0x00000000

+0060: 0x00000000 0x00000000 0x00000000 0x0000005C

+0070: 0x00000081 0x01D4DF18 0x01D4DF1C 0x01D4DF1C

+0080: 0x00000000 0x0012FD98 0x65159820 0x00000000

+0090: 0x651397C7 0x0172FBA8 0x0012FE00 0x01D21648

+00A0: 0x0012FDE4 0x0172FBA8 0x0012FD38 0x6515D99C

+00B0: 0x0012FD0C 0x00000000 0x00000001 0x00000014

+00C0: 0x01D21660 0x00000011 0x00000014 0x6A6D7361

+00D0: 0x64007469 0x00000014 0x00000006 0x00000006

+00E0: 0x0000000F 0x0012FD80 0x76726500 0x632E7265

+00F0: 0x00006766 0x00000004 0x00000000 0x0000000F

+0100: 0x0172FBA8 0x5F74696A 0x6B636162 0x00646E65

+0110: 0x0172FBA8 0x0000000B 0x0000000F 0x0012FE00

+0120: 0x0012FE24 0x6515955E 0x00000008 0x65139971

+0130: 0x0172FBA8 0x00000004 0x6513B301 0x0012FE00



--------------------------



Loaded Modules:

samp-server.exe A: 0x00400000 - 0x00519000 (C:\Users\ADMIN\Desktop\Server\samp-server.exe)

ntdll.dll A: 0x777E0000 - 0x7791C000 (C:\Windows\SYSTEM32\ntdll.dll)

kernel32.dll A: 0x75C30000 - 0x75D04000 (C:\Windows\system32\kernel32.dll)

KERNELBASE.dll A: 0x75B80000 - 0x75BCA000 (C:\Windows\system32\KERNELBASE.dll)

SHELL32.dll A: 0x75ED0000 - 0x76B1A000 (C:\Windows\system32\SHELL32.dll)

msvcrt.dll A: 0x75D10000 - 0x75DBC000 (C:\Windows\system32\msvcrt.dll)

SHLWAPI.dll A: 0x77350000 - 0x773A7000 (C:\Windows\system32\SHLWAPI.dll)

GDI32.dll A: 0x76FA0000 - 0x76FEE000 (C:\Windows\system32\GDI32.dll)

USER32.dll A: 0x76D20000 - 0x76DE9000 (C:\Windows\system32\USER32.dll)

LPK.dll A: 0x75E60000 - 0x75E6A000 (C:\Windows\system32\LPK.dll)

USP10.dll A: 0x770C0000 - 0x7715D000 (C:\Windows\system32\USP10.dll)

WSOCK32.dll A: 0x71360000 - 0x71367000 (C:\Windows\system32\WSOCK32.dll)

WS2_32.dll A: 0x75E70000 - 0x75EA5000 (C:\Windows\system32\WS2_32.dll)

RPCRT4.dll A: 0x773B0000 - 0x77451000 (C:\Windows\system32\RPCRT4.dll)

NSI.dll A: 0x77940000 - 0x77946000 (C:\Windows\system32\NSI.dll)

WINMM.dll A: 0x73750000 - 0x73782000 (C:\Windows\system32\WINMM.dll)

IMM32.DLL A: 0x77920000 - 0x7793F000 (C:\Windows\system32\IMM32.DLL)

MSCTF.dll A: 0x76FF0000 - 0x770BC000 (C:\Windows\system32\MSCTF.dll)

jit.DLL A: 0x65130000 - 0x65172000 (C:\Users\ADMIN\Desktop\Server\plugins\jit.DLL)

MSVCP100.dll A: 0x65060000 - 0x650C9000 (C:\Windows\system32\MSVCP100.dll)

MSVCR100.dll A: 0x64FA0000 - 0x6505F000 (C:\Windows\system32\MSVCR100.dll)

mysql.DLL A: 0x65180000 - 0x651C4000 (C:\Users\ADMIN\Desktop\Server\plugins\mysql.DLL)

libmysql.dll A: 0x62CA0000 - 0x631AD000 (C:\Users\ADMIN\Desktop\Server\libmysql.dll)

Secur32.dll A: 0x757E0000 - 0x757E8000 (C:\Windows\system32\Secur32.dll)

SSPICLI.DLL A: 0x75810000 - 0x7582B000 (C:\Windows\system32\SSPICLI.DLL)

ADVAPI32.dll A: 0x77640000 - 0x776E0000 (C:\Windows\system32\ADVAPI32.dll)

sechost.dll A: 0x75EB0000 - 0x75EC9000 (C:\Windows\SYSTEM32\sechost.dll)

MSVCP140.dll A: 0x64F30000 - 0x64F9D000 (C:\Windows\system32\MSVCP140.dll)

VCRUNTIME140.dll A: 0x74550000 - 0x74565000 (C:\Windows\system32\VCRUNTIME140.dll)

api-ms-win-crt-runtime-l1-1-0.dll A: 0x70960000 - 0x70964000 (C:\Windows\system32\api-ms-win-crt-runtime-l1-1-0.dll)

ucrtbase.DLL A: 0x64E50000 - 0x64F28000 (C:\Windows\system32\ucrtbase.DLL)

api-ms-win-core-timezone-l1-1-0.dll A: 0x708B0000 - 0x708B3000 (C:\Windows\system32\api-ms-win-core-timezone-l1-1-0.dll)

api-ms-win-core-file-l2-1-0.dll A: 0x6F5B0000 - 0x6F5B3000 (C:\Windows\system32\api-ms-win-core-file-l2-1-0.dll)

api-ms-win-core-localization-l1-2-0.dll A: 0x6C5C0000 - 0x6C5C3000 (C:\Windows\system32\api-ms-win-core-localization-l1-2-0.dll)

api-ms-win-core-synch-l1-2-0.dll A: 0x6C4F0000 - 0x6C4F3000 (C:\Windows\system32\api-ms-win-core-synch-l1-2-0.dll)

api-ms-win-core-processthreads-l1-1-1.dll A: 0x6C4E0000 - 0x6C4E3000 (C:\Windows\system32\api-ms-win-core-processthreads-l1-1-1.dll)

api-ms-win-core-file-l1-2-0.dll A: 0x6C4D0000 - 0x6C4D3000 (C:\Windows\system32\api-ms-win-core-file-l1-2-0.dll)

api-ms-win-crt-string-l1-1-0.dll A: 0x6C490000 - 0x6C494000 (C:\Windows\system32\api-ms-win-crt-string-l1-1-0.dll)

api-ms-win-crt-heap-l1-1-0.dll A: 0x6C480000 - 0x6C483000 (C:\Windows\system32\api-ms-win-crt-heap-l1-1-0.dll)

api-ms-win-crt-stdio-l1-1-0.dll A: 0x6C470000 - 0x6C474000 (C:\Windows\system32\api-ms-win-crt-stdio-l1-1-0.dll)

api-ms-win-crt-convert-l1-1-0.dll A: 0x6C3F0000 - 0x6C3F4000 (C:\Windows\system32\api-ms-win-crt-convert-l1-1-0.dll)

api-ms-win-crt-locale-l1-1-0.dll A: 0x6C3E0000 - 0x6C3E3000 (C:\Windows\system32\api-ms-win-crt-locale-l1-1-0.dll)

api-ms-win-crt-math-l1-1-0.dll A: 0x6C3D0000 - 0x6C3D5000 (C:\Windows\system32\api-ms-win-crt-math-l1-1-0.dll)

api-ms-win-crt-multibyte-l1-1-0.dll A: 0x6C3C0000 - 0x6C3C5000 (C:\Windows\system32\api-ms-win-crt-multibyte-l1-1-0.dll)

api-ms-win-crt-time-l1-1-0.dll A: 0x65120000 - 0x65123000 (C:\Windows\system32\api-ms-win-crt-time-l1-1-0.dll)

api-ms-win-crt-filesystem-l1-1-0.dll A: 0x65110000 - 0x65113000 (C:\Windows\system32\api-ms-win-crt-filesystem-l1-1-0.dll)

api-ms-win-crt-environment-l1-1-0.dll A: 0x65100000 - 0x65103000 (C:\Windows\system32\api-ms-win-crt-environment-l1-1-0.dll)

api-ms-win-crt-utility-l1-1-0.dll A: 0x650F0000 - 0x650F3000 (C:\Windows\system32\api-ms-win-crt-utility-l1-1-0.dll)

NLAapi.dll A: 0x73E40000 - 0x73E50000 (C:\Windows\system32\NLAapi.dll)

napinsp.dll A: 0x6FE90000 - 0x6FEA0000 (C:\Windows\system32\napinsp.dll)

pnrpnsp.dll A: 0x6FB30000 - 0x6FB42000 (C:\Windows\system32\pnrpnsp.dll)

mswsock.dll A: 0x75360000 - 0x7539C000 (C:\Windows\System32\mswsock.dll)

DNSAPI.dll A: 0x75230000 - 0x75274000 (C:\Windows\system32\DNSAPI.dll)

winrnr.dll A: 0x6FB20000 - 0x6FB28000 (C:\Windows\System32\winrnr.dll)

rasadhlp.dll A: 0x6FE80000 - 0x6FE86000 (C:\Windows\system32\rasadhlp.dll)

streamer.DLL A: 0x64DB0000 - 0x64DFC000 (C:\Users\ADMIN\Desktop\Server\plugins\streamer.DLL)

dc_cmd.DLL A: 0x10000000 - 0x10007000 (C:\Users\ADMIN\Desktop\Server\plugins\dc_cmd.DLL)

MSVCP110.dll A: 0x64D20000 - 0x64DA5000 (C:\Windows\system32\MSVCP110.dll)

MSVCR110.dll A: 0x64AD0000 - 0x64BA6000 (C:\Windows\system32\MSVCR110.dll)

wshtcpip.dll A: 0x74E10000 - 0x74E15000 (C:\Windows\System32\wshtcpip.dll)

IPHLPAPI.DLL A: 0x72790000 - 0x727AC000 (C:\Windows\system32\IPHLPAPI.DLL)

WINNSI.DLL A: 0x72780000 - 0x72787000 (C:\Windows\system32\WINNSI.DLL)





----------
Loaded log file: "server_log.txt".
----------

SA-MP Dedicated Server
----------------------
v0.3.7-R2, (C)2005-2015 SA-MP Team

[12:10:58]
[12:10:58] Server Plugins
[12:10:58] --------------
[12:10:58] Loading plugin: jit
[12:10:58] JIT plugin v2.0.4 is OK.
[12:10:58] Loaded.
[12:10:58] Loading plugin: mysql
[12:10:58] >> plugin.mysql: R39-5 successfully loaded.
[12:10:58] Loaded.
[12:10:58] Loading plugin: streamer
[12:10:58]

*** Streamer Plugin v2.8.2 by Incognito loaded ***

[12:10:58] Loaded.
[12:10:58] Loading plugin: dc_cmd
[12:10:58] Daniel's CMD plugin v2.8
[12:10:58] (c) 2014 Daniel_Cortez
[12:10:58] www.pro-pawn.ru
[12:10:58] Loaded.
[12:10:58] Loaded 4 plugins.

[12:10:58]
[12:10:58] Filterscripts
[12:10:58] ---------------
[12:10:58] Loaded 0 filterscripts.

123
25.07.2016, 18:56
Потому что не нужно заниматься ерундой, и добавлять подобную ересь. На сегодняшней день НЕТ инструмента, который сможет декомпилировать хоть что-нибудь полезное...

Daniel_Cortez
25.07.2016, 19:12
Почему при запуске сервера с этой защитой и с плагином jit сервер крашит периодически.
Возможно, потому, что вы вызываете её из OnGameModeInit. Если да, то этого не нужно делать.
Я бы добавил опкод retn в начало функции, но для декомпилятора (если в будущем сделают что-нибудь более-менее стоящее) это может быть знаком того, что нужно игнорировать последующие опкоды от retn и до следующего proc.

vovandolg
18.09.2016, 23:17
Возможно, потому, что вы вызываете её из OnGameModeInit.

Такая же ерунда с серваком)
Добавил сей код в инклуд dc_antideamx.inc, далее заметил вот что


#include <a_samp>
#include <dc_antideamx>
#include <foreach>
...
//Сервер крашнуло




#include <a_samp>
#include <foreach>
#include <dc_antideamx>
...
//Сервер нормально запустился =)

Перед другим инклудами он себя норм вёл, что же такого в foreach что они вместе крашут мод -_-

UPD: На винде данный метод работает спокойно, на Linux сервере не запустится!

ziggi
15.02.2019, 02:10
Проблема с jit решается заменой switch 4 на switch 0.
https://github.com/Zeex/samp-plugin-jit/pull/59