COVIL HACKER

, ! .


» COVIL HACKER » rachaduras/inversão » Artigo Engenharia Reversa para Iniciantes [Parte 2 \ -EXE-]


Artigo Engenharia Reversa para Iniciantes [Parte 2 \ -EXE-]

1 2 2

1

Olá a todos, Boas Festas a todos! , apresento a vocês a segunda parte do artigo sobre programas de pesquisa (cracking) . Este artigo discutirá em detalhes a proteção da versão atual, no momento da publicação do artigo, do programa http Logs View, versão 6.12.

https://forumupload.ru/uploads/001b/c9/09/2/t684691.jpg

Para que serve este programa: Este programa permite filtrar e analisar arquivos de log Apache/IIS/nginx (logs) . No site oficial do desenvolvedor https://www.apacheviewer.com/purchase/ é disponibilizado em três versões - gratuita (com restrições), para pessoas físicas e jurídicas. Falaremos agora sobre essas limitações, pois no artigo anterior contarei e mostrarei da forma mais simples possível para que fique clara a lógica de minhas ações.

O desenvolvedor do programa realmente não disse em seu site o que exatamente era limitado em funcionalidade, mas simplesmente notificou a todos que algumas funções foram bloqueadas e você pode desbloqueá-las com uma chave . Bem o quevamos olhar para o princípio de ativar o programa e tentar ver, para começar a determinar visualmente - o que exatamente é limitado em funcionalidade.

Baixe o programa, instale e execute. Se você olhar a guia Ajuda -> Sobre do programa, verá que as funções bloqueadas estão desativadas e acinzentadas . Isso já é bom e pelo menos já apareceu alguma clareza, agora já sabemos onde cavar.:frio:

https://forumupload.ru/uploads/001b/c9/09/2/t153110.jpg

Ou seja, todas as funções do programa estão inativas e acinzentadas, e existem algumas delas. E bem na parte inferior do programa há uma inscrição de que o programa precisa ser desbloqueado, ou seja, comprado. Bem, é claro que não faremos isso. :D

Por exemplo

https://forumupload.ru/uploads/001b/c9/09/2/t931895.jpg

De acordo com o padrão, primeiro precisamos determinar em que nosso programa está escrito (Linguagem de Programação) e se existe algum empacotador ou protetor no arquivo executável do programa. O utilitário ExeInfo PE nos ajudará com isso, selecione e arraste o arquivo executável para o nosso utilitário. E nós vemos esta foto.

https://forumupload.ru/uploads/001b/c9/09/2/t861504.jpg

Informações sobre o arquivo executável do programa: httpLogsView.exe
Bitness: Aqui, mostramos que este é um aplicativo do Windows de 64 bits (64 bits)
Linguagem de programação e se há ofuscação ou empacotamento (compressão): Eazfuscator.NET v3.3 - 5.0 [ v3.x ]
Recomendações: Para desofuscar o arquivo, o utilitário sugere o uso de de4dot
Como o programa está sob o código obfuscator (processado) - chamado Eazfuscator, será necessário desofuscar o código, trazer o código para uma forma legível (divina) para posteriormente analisar o princípio de proteção do programa. E se você deixar tudo como está, não será fácil ler o código e, em alguns casos, é simplesmente impossível. Em geral, o objetivo dos ofuscadores é simples, tornar o código ilegível renomeando, ofuscando funções e assim por diante.

Para desofuscação, usei outro programa de4dot 5.8 (Eazfuscator Support) , um assembly feito sob medida para este ofuscador . Como resultado, basta arrastar
o arquivo executável do programa sob investigação para de4dot.exe. E obtemos o resultado, por exemplo, quem não sabe o que é o quê - a coisa toda se parece com isso:

https://forumupload.ru/uploads/001b/c9/09/2/t989391.gif

Depois que o arquivo for examinado, o arquivo httpLogsView-cleaned.exe aparecerá na pasta com seu programa . Este é o arquivo no qual nosso desofuscador retornou o código (Restaurado) , para um estado mais ou menos legível.

Por exemplo, vamos comparar o resultado antes e depois do processamento (desofuscação) do programa em estudo . Para fazer isso, carregue o arquivo no depurador. E como descobrimos acima que este é um aplicativo de 64 bits (64 bits) ( Usando o utilitário ExeInfo PE ), trabalhamos com dnSpy x64 .
e veja a comparação.

Essa é a estrutura do código do nosso arquivo original sob o ofuscador , onde o código é transformado em uma espécie de mingau em forma de linhas\u0002 e \u0002\u2000 e assim por diante . E é extremamente inconveniente analisar esse código. Tudo é feito de forma que, ao analisar o inverso - um engenheiro (um cracker, chame-o de conveniente) ;) não conseguiu descobrir pelo que era responsável e não conseguiu realizar a intenção desejada - para charlatar o software , etc.:)

https://forumupload.ru/uploads/001b/c9/09/2/t79975.jpg

E esta é a estrutura do código após a desofuscação (tradução do código de difícil de ler para normal e compreensível para análise ). Aliás, vale ressaltar que nem sempre é possível restaurar 100%, devolver o código ao estado ideal . O fato é que o de4dot não pode restaurar os nomes das variáveis ​​locais após o obfuscator. Mas a estrutura do código é trazida para uma forma normal, restaurada.

Deixe-me comentar por que isso está acontecendo. O obfuscator não extrai os nomes das variáveis ​​locais, mas gera uma espécie de descompilador para elas . Mas
quanto aos argumentos da função, eles fazem parte da interface e , portanto, são armazenados. E no assembly compilado (IL), os nomes das variáveis ​​locais não são armazenados.

E, como resultado, a estrutura do código após a desofuscação fica assim.

https://forumupload.ru/uploads/001b/c9/09/2/t86017.jpg

A parte principal foi desmontada, agora você pode prosseguir para a análise da proteção do programa . Lançamos nosso arquivo httpLogsView-cleaned.exe, já limpo do mal, no dnSpy x64. E passamos ao ponto de entrada do programa em estudo. Para fazer isso, clique com o botão direito em ir para o ponto de entrada

https://forumupload.ru/uploads/001b/c9/09/2/t206225.jpg

Aqui, Application.Run(new MainForm()) , o formulário principal do programa é lançado e inicializado. Bem, agora vamos pensar logicamente (ISSO É IMPORTANTE) . Com restrições como no nosso programa de hoje. Em 99% dos casos, ao carregar o programa (janela principal), o programa verifica a chave de ativação e se estiver correta , então o programa funciona, o quê? - será desbloqueado.

E se a chave de ativação não estiver correta, eles não estarão disponíveis . Disse para lhe dar uma ideia. É lógico? Ou eu estou errado? Acho e tenho certeza que estou certo , falo sem sarcasmo, puramente humanamente!;)

Simplesmente, gosto não só de considerar a proteção de acordo com o padrão, mas também de você, partindo do bom senso - não apenas quebre, mas também mostre os prós e os contras. No nosso negócio, no meu negócio (por hábito eu digo) - Tendo experiência e lutando com diferentes sistemas de defesa - estou tentando mostrar a você como procurar falhas (buracos) na proteção, deixando minha experiência .

Com o tempo, tendo adquirido experiência , você mesmo entenderá do que estou falando, isso se aplica a iniciantes, já que usuários experientes (reversos - os engenheiros já passaram por isso) são suas atividades diárias.

https://forumupload.ru/uploads/001b/c9/09/2/t166336.jpg

Devemos continuar? Acho que todos estão interessados? . Nesse caso, vá para new MainForm() , onde as várias funções são iniciadas (Clicando com o botão esquerdo do mouse em new MainForm()) .

https://forumupload.ru/uploads/001b/c9/09/2/t427094.jpg

E nós temos essa imagem. O significado no início pode não ser claro para todos, mas no final você entenderá 100%. Nós vamos mais longe.

https://forumupload.ru/uploads/001b/c9/09/2/t642726.jpg

Com base no que eu disse, vamos procurar o código (função e um trecho de código dela) responsável pelo carregamento (lançamento do programa e restrições) e ver o que acontece lá. Obviamente MainForm_Load é responsável por carregar os componentes que são carregados quando o programa inicia, ou estou errado? . Bem, claro que sim . E vamos ver o que se passa lá dentro, é mais interessante, viu. Como prometido , vamos considerar todas as nuances.

https://forumupload.ru/uploads/001b/c9/09/2/t246360.jpg

Para um entendimento completo, aqui está a função completa:

MainForm
// Token: 0x06000125 RID: 293 RVA: 0x0001591C File Offset: 0x00013B1C
private void MainForm_Load(object sender, EventArgs e)
{
    try
    {
        if (Class95.bool_2)
        {
            Prefs.DeletePrefs();
        }
        Debug.Info("Started..");
        Prefs prefs = Prefs.Load(Prefs.Filename);
        if (string.IsNullOrEmpty(prefs.InstallID))
        {
            prefs.InstallID = Guid.NewGuid().ToString();
        }
        if (prefs.sizex > 50)
        {
            base.Width = prefs.sizex;
        }
        if (prefs.sizey > 50)
        {
            base.Height = prefs.sizey;
        }
        if (base.Width < 50)
        {
            base.Width = 957;
        }
        if (base.Height < 50)
        {
            base.Height = 595;
        }
        if (prefs.maximised)
        {
            base.WindowState = FormWindowState.Maximized;
        }
        if (prefs.x >= 0 && prefs.y >= 0)
        {
            base.Location = new Point(prefs.x, prefs.y);
        }
        this.prefs_0 = prefs;
        try
        {
            if (!string.IsNullOrEmpty(this.prefs_0.Key))
            {
                string string_ = Class1.smethod_0(this.prefs_0.Key);
                this.bool_0 = Class1.smethod_1(string_);
            }
        }
        catch (Exception)
        {
            this.bool_0 = false;
        }
        if (this.bool_0)
        {
            if (this.prefs_0.Theme == "Dark")
            {
                MainForm.bool_2 = true;
            }
            if (MainForm.bool_2)
            {
                this.tabControl1.LookAndFeel.SkinName = "Metropolis Dark";
                this.tabControl1.LookAndFeel.UseDefaultLookAndFeel = false;
                LogLine.DarkMode = MainForm.bool_2;
                this.color_0 = DarkTheme.smethod_0();
                DarkTheme.smethod_2(this);
                DarkTheme.smethod_8(this.contextMenuStripItems);
                DarkTheme.smethod_8(this.contextMenuStripNotifyIcon);
            }
        }
        if (this.prefs_0.logColumns == null || this.prefs_0.logColumns.Count <= 0)
        {
            this.prefs_0.logColumns = LogColumn.ResetLogColumns();
        }
        Debug.Info("Loading Custom Columns");
        this.prefsColumns_0 = PrefsColumns.Load(PrefsColumns.Filename);
        this.method_43();
        DummyListView.prefs = prefs;
        Debug.Info("Loading IP DB");
        this.ip2Country_0 = new IP2Country(true, this.prefs_0.useCity);
        this.parser_0 = new Parser(this.ip2Country_0);
        this.parser_0.ParseCustomColumns = this.prefs_0.parseCustomColumns;
        Statistics.int_0 = this.prefs_0.topNumber;
        try
        {
            if (prefs.monitorAuto)
            {
                Debug.Info("Opening Logs...");
                foreach (LoggerInfo loggerInfo in prefs.logsToView)
                {
                    if (loggerInfo.Highlight != null)
                    {
                        this.method_49(loggerInfo.Highlight, true);
                    }
                    try
                    {
                        this.method_6(loggerInfo);
                        if (Class95.bool_0)
                        {
                            GC.Collect();
                        }
                    }
                    catch
                    {
                    }
                }
            }
            if (Class95.list_0 != null)
            {
                foreach (string text in Class95.list_0)
                {
                    try
                    {
                        bool flag = this.parser_0.IsErrorLog(text);
                        this.method_4(text, !flag, false);
                        if (Class95.bool_0)
                        {
                            GC.Collect();
                        }
                    }
                    catch
                    {
                    }
                }
            }
        }
        catch (Exception)
        {
            MessageBox.Show(Class96.smethod_248());
        }
        if (this.prefs_0.selTab >= 0 && this.tabControl1.TabPages.Count > this.prefs_0.selTab)
        {
            this.tabControl1.SelectedTabPageIndex = this.prefs_0.selTab;
        }
        try
        {
            if (IsStoreApp.IsWindowsStoreApp)
            {
                this.bool_0 = true;
                this.bool_1 = true;
                this.method_0();
            }
        }
        catch
        {
        }
        if (!this.bool_0)
        {
            this.lbStatusStripNotify.Text = Class96.smethod_271() + " http Logs Viewer..." + Class96.smethod_68();
            this.method_2(false);
            MainForm.bool_2 = false;
        }
        else
        {
            this.lbStatusStripNotify.Text = Class96.smethod_271() + " http Logs Viewer";
            this.method_2(true);
        }
        Debug.Info("Apply L...");
        this.method_45(false);
        this.method_1();
        Debug.Info("Apply L Done");
    }
    catch (Exception ex)
    {
        Debug.Error("Error Load: " + ex.Message);
        if (this.prefs_0 == null)
        {
            this.prefs_0 = new Prefs();
        }
    }
    finally
    {
        LoadForm.smethod_1();
    }
    if (this.prefs_0.checkupdates)
    {
        new Thread(new ThreadStart(this.method_26)).Start();
    }
    if (!this.bool_1)
    {
        if (File.Exists(Prefs.Filename + ".chk"))
        {
            Debug.Info("Config Check");
            if (File.ReadAllText(Prefs.Filename + ".chk") == "0")
            {
                MessageBox.Show(this, Class96.smethod_54(), "http Logs Viewer", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                this.prefs_0.Key = string.Empty;
                this.unlockCodeToolStripMenuItem_Click(this, null);
                if (File.Exists(Prefs.Filename + ".chk") && this.bool_0)
                {
                    Application.Exit();
                }
            }
            else if (this.bool_0)
            {
                new Thread(new ThreadStart(this.method_24)).Start();
            }
        }
    }
    else if (this.bool_0)
    {
        new Thread(new ThreadStart(this.method_24)).Start();
    }
    this.timer_0.Interval = this.prefs_0.refreshtimeout * 1000;
    this.timer_0.Enabled = true;
    this.timer_0.Start();
    GC.Collect();
    if (base.Width <= 10)
    {
        base.Width = 668;
    }
    if (base.Height <= 10)
    {
        base.Height = 460;
    }
    this.menuStrip1.Visible = true;
    this.toolStripBtnScroll.CheckState = (this.prefs_0.scroll_last ? CheckState.Checked : CheckState.Unchecked);
    this.toolStripBtnRefresh.CheckState = (this.prefs_0.refreshAuto ? CheckState.Checked : CheckState.Unchecked);
    Debug.Info("Started..OK");
}

E então vamos continuar o que vemos aqui, falando sem água, para não alongar o assunto. Meu princípio é mostrar a base e dizer por que é assim e de nenhuma outra maneira . E há duas maneiras de resolver o problema (pelo menos) . Mas como sempre, vamos começar com um simples , ou seja, esse é o caso apenas se você entender pouco sobre essa função (mas pelo menos há um conhecimento mínimo da linguagem de programação).

E assim, preste atenção ao trecho de código de MainForm_Load (ou seja, para um usuário simples e comum - falando):

https://forumupload.ru/uploads/001b/c9/09/2/t280613.jpg

Temos uma condição, vou comentar o que está acontecendo aqui, partindo do fato de que - COMO SE eu fosse novo neste negócio:

//
if (!this.bool_0)
        {
        // ,
            this.lbStatusStripNotify.Text = Class96.smethod_271() + " http Logs Viewer..." + Class96.smethod_68();
            this.method_2(false);
            MainForm.bool_2 = false;
        }
        // .
        // If
        else
        {
            this.lbStatusStripNotify.Text = Class96.smethod_271() + " http Logs Viewer";
            this.method_2(true);
        }

Bem, vamos dar uma olhada em: Opção 1 (Se você não é uma pessoa experiente) e tudo é aproximadamente intuitivamente claro, digamos em termos gerais. Se formos para smethod_68(); então fica claro para nós que a chamada é inicializada aqui se a licença não for paga, não há chave, ou seja, precisamos doar $ . Naturalmente, as funções do programa são bloqueadas aqui

this.method_2(false);
MainForm.bool_2 = falso;

https://forumupload.ru/uploads/001b/c9/09/2/t993526.jpg

https://forumupload.ru/uploads/001b/c9/09/2/t618443.jpg

Vamos (clique esquerdo do mouse) para this.method_2(false); e veja o código :

private void method_2(bool bool_5)
    {
        if (bool_5)
        {
            this.toolStripStatusDonate.Text = "iannet";
            this.toolStripStatusLabel1.Visible = false;
        }
        else
        {
            this.toolStripStatusDonate.Text = Class96.smethod_264();
            this.toolStripStatusLabel1.Visible = true;
        }
        MainForm.smethod_1(this.statisticsToolStripMenuItem, bool_5, 5);
        MainForm.smethod_1(this.topToolStripMenuItem, bool_5, 1);
        MainForm.smethod_1(this.distinctToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.timeTakenToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.sizeToolStripMenuItem1, bool_5, -1);
        MainForm.smethod_1(this.botsToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.requestAnalysisToolStripMenuItem1, bool_5, -1);
        MainForm.smethod_1(this.referrerToolStripMenuItem1, bool_5, -1);
        MainForm.smethod_1(this.statusCodesToolStripMenuItem2, bool_5, -1);
        MainForm.smethod_1(this.behaviourToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.virtualHostToolStripMenuItem1, bool_5, -1);
        this.topToolStripMenuItem.Enabled = true;
        this.distinctToolStripMenuItem.Enabled = true;
        this.timeTakenToolStripMenuItem.Enabled = true;
        this.sizeToolStripMenuItem1.Enabled = true;
        this.botsToolStripMenuItem.Enabled = true;
        this.requestAnalysisToolStripMenuItem1.Enabled = true;
        this.referrerToolStripMenuItem1.Enabled = true;
        this.statusCodesToolStripMenuItem2.Enabled = true;
        this.behaviourToolStripMenuItem.Enabled = true;
        this.virtualHostToolStripMenuItem1.Enabled = true;
        MainForm.smethod_1(this.userAgentToolStripMenuItem, bool_5, 1);
        MainForm.smethod_1(this.visitsByCountryToolStripMenuItem1, bool_5, -1);
        MainForm.smethod_1(this.reportsToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.visitsToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.hitsPerHourToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.hitsPerMinuteToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.visitsUniqueHitsToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.iPV6ToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.browsersToolStripMenuItem1, bool_5, -1);
        MainForm.smethod_1(this.statusCodesToolStripMenuItem1, bool_5, -1);
        MainForm.smethod_1(this.bandwidthToolStripMenuItem1, bool_5, -1);
        MainForm.smethod_1(this.searchVisitsToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.iPToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.requestsToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.usersToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.hitsEachToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.botsToolStripMenuItem1, bool_5, -1);
        MainForm.smethod_1(this.visitsPerHourToolStripMenuItem, bool_5, -1);
        this.visitsByCountryToolStripMenuItem1.Enabled = true;
        this.userAgentToolStripMenuItem.Enabled = true;
        this.visitMonthToolStripMenuItem.Enabled = true;
        this.visitsUniqueHitsToolStripMenuItem.Enabled = true;
        this.hitsPerHourToolStripMenuItem.Enabled = true;
        this.hitsPerMinuteToolStripMenuItem.Enabled = true;
        this.visitsByCountryToolStripMenuItem2.Enabled = true;
        this.worldToolStripMenuItem.Enabled = true;
        this.visitsToolStripMenuItem.Enabled = true;
        this.iPV6ToolStripMenuItem.Enabled = true;
        this.browsersToolStripMenuItem1.Enabled = true;
        this.statusCodesToolStripMenuItem1.Enabled = true;
        this.bandwidthToolStripMenuItem1.Enabled = true;
        this.searchVisitsToolStripMenuItem.Enabled = true;
        this.iPToolStripMenuItem.Enabled = true;
        this.requestsToolStripMenuItem.Enabled = true;
        this.usersToolStripMenuItem.Enabled = true;
        this.hitsEachToolStripMenuItem.Enabled = true;
        this.botsToolStripMenuItem1.Enabled = true;
        this.visitsPerHourToolStripMenuItem.Enabled = true;
        this.statisticsSourceFilteredDataToolStripMenuItem.Enabled = true;
        this.reportSourceFilteredDataToolStripMenuItem.Enabled = true;
        MainForm.smethod_1(this.graphToolStripMenuItem, bool_5, 4);
        this.toolStripBtnAFEnabled2.Enabled = bool_5;
        this.toolStripBtnAFEnabled2.ToolTipText = Class96.smethod_39();
        if (!bool_5)
        {
            this.toolStripBtnAFEnabled2.Checked = false;
            this.toolStripBtnAFEnabled2.ToolTipText = Class96.smethod_41();
        }
        this.toolStripTBoxReferer2.Enabled = bool_5;
        this.toolStripTBoxRequest2.Enabled = bool_5;
        this.toolStripTBoxUserAgent2.Enabled = bool_5;
        this.toolStripTBoxUser2.Enabled = bool_5;
        this.toolStripTBoxVHost2.Enabled = bool_5;
        this.tsddReferer.Enabled = bool_5;
        this.tsddUser.Enabled = bool_5;
        this.tsddVHost.Enabled = bool_5;
        this.tsddRequest.Enabled = bool_5;
        this.tsddUserAgent.Enabled = bool_5;
        this.tsddDate.Enabled = bool_5;
        this.enableAllReportsToolStripMenuItem.Visible = !bool_5;
        this.enableAllReportsToolStripMenuItem.Enabled = true;
        this.enableAllStatisticsToolStripMenuItem.Visible = !bool_5;
        this.enableAllStatisticsToolStripMenuItem.Enabled = true;
        this.enableGraphToolStripMenuItem.Visible = !bool_5;
        this.enableGraphToolStripMenuItem.Enabled = true;
    }

Não te lembra nada. Você pode me dizer o que exatamente está acontecendo aqui? E tudo é simples - o parâmetro bool_5 está aqui e desempenha todo o papel, em termos simples. Ou seja (a figura abaixo mostra as dependências True e False - se a condição não for atendida).

https://forumupload.ru/uploads/001b/c9/09/2/t655482.jpg

o que fazer a seguir? Sim, tudo é muito simples. A opção mais fácil e inofensiva é simplesmente fazer com que o programa responda True para qualquer resultado. Se não é mais profissional falar (no nível de QI = 0), sim - tudo é ativado mesmo que não haja chave e tudo esteja no tambor. ;):frio:.

Ou seja,
um pedaço de código

if (!this.bool_0)
        {
            this.lbStatusStripNotify.Text = Class96.smethod_271() + " http Logs Viewer..." + Class96.smethod_68();
            this.method_2(false);
            MainForm.bool_2 = false;
        }
        else
        {
            this.lbStatusStripNotify.Text = Class96.smethod_271() + " http Logs Viewer";
            this.method_2(true);
        }

https://forumupload.ru/uploads/001b/c9/09/2/t951247.jpg

Altere para Verdadeiro. Só assim. E isso significa que não importa como a condição funcione, já do lado, o programa é ativado de qualquer maneira ;). Isso eu mostrei uma maneira de quebrar, para ser franco:

if (!this.bool_0)
        {
            this.lbStatusStripNotify.Text = Class96.smethod_271() + " http Logs Viewer";
            this.method_2(true);
        }
        else
        {
            this.lbStatusStripNotify.Text = Class96.smethod_271() + " http Logs Viewer";
            this.method_2(true);
        }

https://forumupload.ru/uploads/001b/c9/09/2/t284340.jpg
Acha que não vai dar certo? :DE eu digo que 1000% funcionará como um relógio. Vamos verificar, salvar o resultado e executar o programa. E vemos que as inscrições com um pedido para ativar, desbloquear o programa - desapareceram , em algum lugar, não entendo onde :frio:e as funções inativas ficaram ativas. Milagres e muito mais :D .

https://forumupload.ru/uploads/001b/c9/09/2/t854823.jpg

Interessante, no final.
Bem, se você seguir o método de um machado e um martelo, :D poderá seguir - um caminho banal. Voltando à função

private void method_2(bool bool_5)
    {
        if (bool_5)
        {
            this.toolStripStatusDonate.Text = "iannet";
            this.toolStripStatusLabel1.Visible = false;
        }
        else
        {
            this.toolStripStatusDonate.Text = Class96.smethod_264();
            this.toolStripStatusLabel1.Visible = true;
        }
        MainForm.smethod_1(this.statisticsToolStripMenuItem, bool_5, 5);
        MainForm.smethod_1(this.topToolStripMenuItem, bool_5, 1);
        MainForm.smethod_1(this.distinctToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.timeTakenToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.sizeToolStripMenuItem1, bool_5, -1);
        MainForm.smethod_1(this.botsToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.requestAnalysisToolStripMenuItem1, bool_5, -1);
        MainForm.smethod_1(this.referrerToolStripMenuItem1, bool_5, -1);
        MainForm.smethod_1(this.statusCodesToolStripMenuItem2, bool_5, -1);
        MainForm.smethod_1(this.behaviourToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.virtualHostToolStripMenuItem1, bool_5, -1);
        this.topToolStripMenuItem.Enabled = true;
        this.distinctToolStripMenuItem.Enabled = true;
        this.timeTakenToolStripMenuItem.Enabled = true;
        this.sizeToolStripMenuItem1.Enabled = true;
        this.botsToolStripMenuItem.Enabled = true;
        this.requestAnalysisToolStripMenuItem1.Enabled = true;
        this.referrerToolStripMenuItem1.Enabled = true;
        this.statusCodesToolStripMenuItem2.Enabled = true;
        this.behaviourToolStripMenuItem.Enabled = true;
        this.virtualHostToolStripMenuItem1.Enabled = true;
        MainForm.smethod_1(this.userAgentToolStripMenuItem, bool_5, 1);
        MainForm.smethod_1(this.visitsByCountryToolStripMenuItem1, bool_5, -1);
        MainForm.smethod_1(this.reportsToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.visitsToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.hitsPerHourToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.hitsPerMinuteToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.visitsUniqueHitsToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.iPV6ToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.browsersToolStripMenuItem1, bool_5, -1);
        MainForm.smethod_1(this.statusCodesToolStripMenuItem1, bool_5, -1);
        MainForm.smethod_1(this.bandwidthToolStripMenuItem1, bool_5, -1);
        MainForm.smethod_1(this.searchVisitsToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.iPToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.requestsToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.usersToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.hitsEachToolStripMenuItem, bool_5, -1);
        MainForm.smethod_1(this.botsToolStripMenuItem1, bool_5, -1);
        MainForm.smethod_1(this.visitsPerHourToolStripMenuItem, bool_5, -1);
        this.visitsByCountryToolStripMenuItem1.Enabled = true;
        this.userAgentToolStripMenuItem.Enabled = true;
        this.visitMonthToolStripMenuItem.Enabled = true;
        this.visitsUniqueHitsToolStripMenuItem.Enabled = true;
        this.hitsPerHourToolStripMenuItem.Enabled = true;
        this.hitsPerMinuteToolStripMenuItem.Enabled = true;
        this.visitsByCountryToolStripMenuItem2.Enabled = true;
        this.worldToolStripMenuItem.Enabled = true;
        this.visitsToolStripMenuItem.Enabled = true;
        this.iPV6ToolStripMenuItem.Enabled = true;
        this.browsersToolStripMenuItem1.Enabled = true;
        this.statusCodesToolStripMenuItem1.Enabled = true;
        this.bandwidthToolStripMenuItem1.Enabled = true;
        this.searchVisitsToolStripMenuItem.Enabled = true;
        this.iPToolStripMenuItem.Enabled = true;
        this.requestsToolStripMenuItem.Enabled = true;
        this.usersToolStripMenuItem.Enabled = true;
        this.hitsEachToolStripMenuItem.Enabled = true;
        this.botsToolStripMenuItem1.Enabled = true;
        this.visitsPerHourToolStripMenuItem.Enabled = true;
        this.statisticsSourceFilteredDataToolStripMenuItem.Enabled = true;
        this.reportSourceFilteredDataToolStripMenuItem.Enabled = true;
        MainForm.smethod_1(this.graphToolStripMenuItem, bool_5, 4);
        this.toolStripBtnAFEnabled2.Enabled = bool_5;
        this.toolStripBtnAFEnabled2.ToolTipText = Class96.smethod_39();
        if (!bool_5)
        {
            this.toolStripBtnAFEnabled2.Checked = false;
            this.toolStripBtnAFEnabled2.ToolTipText = Class96.smethod_41();
        }
        this.toolStripTBoxReferer2.Enabled = bool_5;
        this.toolStripTBoxRequest2.Enabled = bool_5;
        this.toolStripTBoxUserAgent2.Enabled = bool_5;
        this.toolStripTBoxUser2.Enabled = bool_5;
        this.toolStripTBoxVHost2.Enabled = bool_5;
        this.tsddReferer.Enabled = bool_5;
        this.tsddUser.Enabled = bool_5;
        this.tsddVHost.Enabled = bool_5;
        this.tsddRequest.Enabled = bool_5;
        this.tsddUserAgent.Enabled = bool_5;
        this.tsddDate.Enabled = bool_5;
        this.enableAllReportsToolStripMenuItem.Visible = !bool_5;
        this.enableAllReportsToolStripMenuItem.Enabled = true;
        this.enableAllStatisticsToolStripMenuItem.Visible = !bool_5;
        this.enableAllStatisticsToolStripMenuItem.Enabled = true;
        this.enableGraphToolStripMenuItem.Visible = !bool_5;
        this.enableGraphToolStripMenuItem.Enabled = true;
    }

E edite apenas no LOB assim. Voltando ao void privado method_2(bool bool_5) que discutimos acima e removendo MainForm.smethod_1 do código, tornando tudo True (desbloqueando assim todas as funções) e removendo a condição if . Isso também trará sucesso, apenas mais trabalho. Para quem é mais conveniente e compreensível.

De acordo com a reversão deste software, isso é tudo. A única coisa que gostaria de acrescentar é que você pode na janela Sobre (Adicionar sua autoria). E agora eu vou te mostrar como fazer isso. Vai ficar muito bom. Uma vez que esta janela tem uma inscrição para o exemplo de exibição de logs http.


https://forumupload.ru/uploads/001b/c9/09/2/t912047.jpg

Pesquisamos nos recursos do programa e vemos que o campo de texto pertence à janela Sobre.
https://forumupload.ru/uploads/001b/c9/09/2/t316101.jpg

E para beleza, vamos substituir e salvar por: CRACKED by -EXE XSS.IS

https://forumupload.ru/uploads/001b/c9/09/2/t614885.jpg

Como resultado , conseguimos o que pretendíamos :frio: . Acho que fica mais bonito e convincente.


Quantas defesas e tantos métodos para derrotá-los , o principal é analisar tudo com cuidado e diligência e a sorte estará do seu lado, isso é tudo para mim! E aproveitando: Desejo a todos um ótimo ano novo, bom humor e sucesso no novo ano . :sorriso10:

O que há no arquivo, captura de tela:

https://mega.nz/file/UH9w3KBS#ame9ZDQ4f … bLmjvrmhOE

0

2


» COVIL HACKER » rachaduras/inversão » Artigo Engenharia Reversa para Iniciantes [Parte 2 \ -EXE-]


|