Русское сообщество по скриптингу

Декомпиляция плагинов (из .amxx в .sma) на основе amxxdump

Статьи или фрагменты кода для новичков и уже опытных скриптеров по AMXX.

Модератор: Chuvi

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только обучающему материалу по AMX Mod X.

Re: Декомпиляция плагинов (из .amxx в .sma) на основе amxxdump

Сообщение rangel » 30 сен 2009, 15:04

Код: Выделить всё
0x64E8                     PROC              ; public plus_sec(id)
                                             ; new player
0x64F4                    STACK  0xFFFFFFFC  ; allocate 1 cells
0x64FC               LOAD.S.pri  0xC         ; id
0x6504                    ADD.C  0xFFF173F1  ; signed:  -953359
0x650C               STOR.S.pri  0xFFFFFFFC  ; player
0x6518                CONST.alt  0x3A34      ; StoreSec[33]=0x0 (0.00000)
0x6520               LOAD.S.pri  0xFFFFFFFC  ; player
0x6528                   BOUNDS  0x20       
0x6530                  IDXADDR
0x6534                 PUSH.pri
0x6538                   LOAD.I
0x653C                    ADD.C  0x1         ; signed:  1
0x6544                  POP.alt
0x6548                   STOR.I
0x654C                    STACK  0x4         ; free 1 cells
0x6554                 ZERO.pri
0x6558                     RETN

как сформировать функцию из этого? просто поточнее..
Аватара пользователя
rangel
 
Сообщения: 140
Зарегистрирован: 28 сен 2009, 18:52
Благодарил (а): 40 раз.
Поблагодарили: 26 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Декомпиляция плагинов (из .amxx в .sma) на основе amxxdump

Сообщение Lt.RAT » 30 сен 2009, 20:47

Иногда не требуется декомпилировать весь плагин, а только внести изменения в существующий код, без наличия исходников... И даже таких программ на сей день нету...
Возможная разработка: распаковщик на два amx файла с последующим их ручным изменением и упаковкой обратно... Так же можно отметить, что при такой упаковке, просто добваляя/уменьшая кол-во "нулей" записанных в файле, можно добиться более компактной упаковки без побочных эффектов :) может быть фичей :)
Аватара пользователя
Lt.RAT
 
Сообщения: 301
Зарегистрирован: 30 сен 2009, 01:44
Благодарил (а): 4 раз.
Поблагодарили: 151 раз.
Языки программирования: Counter-Strike 1.6

Re: Декомпиляция плагинов (из .amxx в .sma) на основе amxxdump

Сообщение rangel » 15 окт 2009, 21:01

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

к примеру есть код

Код: Выделить всё
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Test De Assembler"
#define VERSION "1.0"
#define AUTHOR "IIyCTou"

new integ1
new integ2 0
new integ3 1
new integ4 12
new string1[]
new 
string2[5]
new 
string3[32]
new 
string4[5] = "ololoo"

public plugin_init() {
    
register_plugin(PLUGINVERSIONAUTHOR)
    
register_clcmd("Tes1","Test")
    
register_clcmd("Tes2","Test",8)
    
register_clcmd("Tes3","Test2",8,"")
}

public 
Test()
{
    if (
integ1==integ2)
    {
        if (
integ3!=integ4)
        {
            
string3="ololo"    
        
}
    }
}

public 
Test2()
{
    new 
odin
    odin
=2
    
if (odin)
    {
    
integ2=0xF2     
    
}
    if (!
odin)
    {
    
integ2=0xF2     
    
}
    if (
odin==integ3)
    {
    
integ2=0xF2     
    
}
    if (
odin!=integ3)
    {
    
integ2=0xF2     
    
}
    if (
odin==5)
    {
    
integ2=0xF2     
    
}
    if (
odin!=5)
    {
    
integ2=0xF2     
    
}
    if (
integ4!=odin)
    {
    
integ2=0xF2     
    
}
    if (
integ4==odin)
    {
    
integ2=0xF2     
    
}
    
//if (!integ1)
    //{
    //    string3="ggggg"    
    //    integ2=0xF1 
    //}
    
if (integ1>=5)
    {
        
string3="ggggg"    
        
integ2=0xF1 
    
}
    if (
integ1<=6)
    {
        
string3="ggggg"    
        
integ2=0xF1 
    
}
    if (
integ1>7)
    {
        
string3="ggggg"    
        
integ2=0xF1 
    
}
    if (
integ1<8)
    {
        
string3="ggggg"    
        
integ2=0xF1 
    
}
    
integ4=is_user_alive(1)
    
    
}
 

в данный момент дизассемблит так вот
Код: Выделить всё
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <chatcolor>
new integ1
new integ2
new integ3
new integ4
new string3[32]

public 
plugin_init()
{
register_plugin("Test De Assembler","1.0","IIyCTou")


register_clcmd("Tes1","Test",-1,"")

register_clcmd("Tes2","Test",8,"")

register_clcmd("Tes3","Test2",8,"")
}
public 
Test()
{
if (
integ1 == integ2)
{
if (
integ3 != integ4)
{
string3 "ololo"
}
}
}
public 
Test2()
{
new 
odin
odin 
0x2        
if (odin)
{
integ2 0xF2       
}
if (!
odin)
{
integ2 0xF2       
}
if (
odin == integ3)
{
integ2 0xF2       
}
if (
odin != integ3)
{
integ2 0xF2       
}
if (
odin == 0x5        )
{
integ2 0xF2       
}
if (
odin != 0x5        )
{
integ2 0xF2       
}
if (
integ4 != odin)
{
integ2 0xF2       
}
if (
integ4 == odin)
{
integ2 0xF2       
}
if (
integ1 >= 0x5        )
{
string3 "ggggg"
integ2 0xF1       
}
if (
integ1 <= 0x6        )
{
string3 "ggggg"
integ2 0xF1       
}
if (
integ1 0x7        )
{
string3 "ggggg"
integ2 0xF1       
}
if (
integ1 0x8        )
{
string3 "ggggg"
integ2 0xF1       
}
integ4 is_user_alive(1)
}

 
Аватара пользователя
rangel
 
Сообщения: 140
Зарегистрирован: 28 сен 2009, 18:52
Благодарил (а): 40 раз.
Поблагодарили: 26 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Декомпиляция плагинов (из .amxx в .sma) на основе amxxdump

Сообщение DJ_WEST » 16 окт 2009, 11:50

rangel, давай, посмотрим, что выйдет. Если есть сложности, можешь исходники amxxdump посмотреть.
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
DJ_WEST
Администратор
 
Сообщения: 3641
Зарегистрирован: 22 авг 2009, 00:38
Благодарил (а): 48 раз.
Поблагодарили: 2209 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Left 4 Dead
Left 4 Dead 2

Re: Декомпиляция плагинов (из .amxx в .sma) на основе amxxdump

Сообщение rangel » 16 окт 2009, 13:46

сложностей нету, потому что я декомпилирую amxxdump ом а потом уже то что получилось вбиваю в прогу которую пишу
сначала доделаю декомпилятор потом сделаю редирект cmd и авто декомпиляция выбранного плагина через amxxdump (так ещё пару фишек, отступы после { чтобы спрошником всё небыло)
в итоге вы просто выбираете плагин нажимаете декомпилровать и получаете код плагина
я бы не отказался от помощи, я задолбался с if ом дело в том что бывают такие вот процедуры
if (i) if (!i) if (i==50) if (i!=50)
но это всё уже сделал теперь осталось
if (i+2) if (i/2) if (!i*2) if (is_user_connected(id)+1) ну и в том же духе, ещё циклы и тп
я бы попросил помощи чтобы пока я доделываю if кто нить сделал цикл по аналогии того как у меня потому что с ним тоже поипаться придётся...

Добавлено спустя 2 минуты 11 секунд:
а где исходники посматреть и на чём написаны? потому что если кто нибудь мне их скомпилирует когда я изменю, будет вообще красота
Аватара пользователя
rangel
 
Сообщения: 140
Зарегистрирован: 28 сен 2009, 18:52
Благодарил (а): 40 раз.
Поблагодарили: 26 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Декомпиляция плагинов (из .amxx в .sma) на основе amxxdump

Сообщение rangel » 16 окт 2009, 16:02

поддерживаются в данный момент такие if
i,i1,i2:integer
x:function
прошу напридумывать как можно больше разных if-ов помимо этих
но только по порядку
Код: Выделить всё
 if (i)
 if (!
i)
 if (
i==5)
 if (
i!=5)
 if (
i1==i2)
 if (
i1!=i2)
 if (
i1>=i2)
 if (
i1<=i2)
 if (
i1>i2)
 if (
i1<i2)
 if (
i>=5)
 if (
i<=5)
 if (
i>5)
 if (
i<5)
 if (
i==x)
 if (
i!=x)
 if (
i>=x)
 if (
i<=x)
 if (
i>x)
 if (
i<x)
 if (
i+-5)
 if (
i*5)
 if (
i/5)
 if (!
i+5)
 if (!
i-5)
 if (!
i*5)
 if (!
i/5)
 if (
i+-5==5)
 if (
i+-5!=5)
 if (
i+-5>=5)
 if (
i+-5<=5)
 if (
i+-5>5)
 if (
i+-5<5)
 if (
i+-5==5)
 if (
i+-5==5)
 if (
i/5==5)
 if (
i/5!=5)
 if (
i/5>=5)
 if (
i/5<=5)
 if (
i/5>5)
 if (
i/5<5)
 if (
i*5==5)
 if (
i*5!=5)
 if (
i*5>=5)
 if (
i*5<=5)
 if (
i*5>5)
 if (
i*5<5


блин какая сволоч придумала степень в if? '^' что я ещё упустил?
Аватара пользователя
rangel
 
Сообщения: 140
Зарегистрирован: 28 сен 2009, 18:52
Благодарил (а): 40 раз.
Поблагодарили: 26 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Декомпиляция плагинов (из .amxx в .sma) на основе amxxdump

Сообщение DJ_WEST » 16 окт 2009, 17:18

блин какая сволоч придумала степень в if? '^' что я ещё упустил?

Это не степень, а логический оператор. Почитай Вы должны зарегистрироваться, чтобы видеть ссылки.. Там есть логические операторы. То есть ты упустил лог. операторы:
Код: Выделить всё

if 
(&& b)
if (|| b)
if (& b)
 

И так далее.

Добавлено спустя 2 минуты 53 секунды:
а где исходники посматреть и на чём написаны? потому что если кто нибудь мне их скомпилирует когда я изменю, будет вообще красота

Исходники идут вместе с архивом (смотри первый пост в теме).
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
DJ_WEST
Администратор
 
Сообщения: 3641
Зарегистрирован: 22 авг 2009, 00:38
Благодарил (а): 48 раз.
Поблагодарили: 2209 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Left 4 Dead
Left 4 Dead 2

Re: Декомпиляция плагинов (из .amxx в .sma) на основе amxxdump

Сообщение rangel » 17 окт 2009, 09:09

Вот бетка, циклы ещё не делал но вы можете посмотреть и сказать чего не хватает...
Аватара пользователя
rangel
 
Сообщения: 140
Зарегистрирован: 28 сен 2009, 18:52
Благодарил (а): 40 раз.
Поблагодарили: 26 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Декомпиляция плагинов (из .amxx в .sma) на основе amxxdump

Сообщение Lt.RAT » 17 окт 2009, 20:50

Начал тестить, нажал на Дампить и "Access violation at adress in module kernel32.dll"
Видать еще массивы не делал :)
А вообще из базовых вещей решил подсунуть работу с битами (в приложении, плагин логике не поддается :) ), результат комментировать не буду ^_^ А вообще - так держать :)

ЗЫ еще из примера видно, что нефига не оптимизирует компилятор :) а то я уж испугался и полез проверять, вдруг соптимизировал условие, тк "а" в условиях это константа xD
ЗЗЫ пошел писать обфускатор xD
Аватара пользователя
Lt.RAT
 
Сообщения: 301
Зарегистрирован: 30 сен 2009, 01:44
Благодарил (а): 4 раз.
Поблагодарили: 151 раз.
Языки программирования: Counter-Strike 1.6

Re: Декомпиляция плагинов (из .amxx в .sma) на основе amxxdump

Сообщение rangel » 17 окт 2009, 23:04

Lt.RAT писал(а):Начал тестить, нажал на Дампить и "Access violation at adress in module kernel32.dll"
Видать еще массивы не делал :)
А вообще из базовых вещей решил подсунуть работу с битами (в приложении, плагин логике не поддается :) ), результат комментировать не буду ^_^ А вообще - так держать :)

ЗЫ еще из примера видно, что нефига не оптимизирует компилятор :) а то я уж испугался и полез проверять, вдруг соптимизировал условие, тк "а" в условиях это константа xD
ЗЗЫ пошел писать обфускатор xD

мб тебе сорцы дать сам доделаешь?) у него такого айкью как if ( (a && (a >> 4)&OneMoveDir) || (a && (a >> 4)&OneMoveDir) )
не будет потому что мне лень будет такой код переписывать
что то мне расхотелось доделывать... :-)
Аватара пользователя
rangel
 
Сообщения: 140
Зарегистрирован: 28 сен 2009, 18:52
Благодарил (а): 40 раз.
Поблагодарили: 26 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Пред.След.

Вернуться в Статьи / фрагменты кода

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9