Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Асемблер
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=10524
Страница 1 от 1

Автор:  DDDSSS [ Сря Сеп 26, 2012 9:34 pm ]
Заглавие:  Асемблер

Надявам се ,че някой разбира от асемблер и то за windows.Въпроса ми е как програмата прикачена по-долу стига до адрес 00401126 и до адрес 004012А3.Използвах Immunity debugger ,но не схванах как се стига до там.

Прикачени файлове:
TinyAsm2.aaa.txt.rar [1.46 KiB]
138 пъти

Автор:  ike [ Сря Сеп 26, 2012 9:43 pm ]
Заглавие:  Re: Асемблер

http://msdn.microsoft.com/en-us/library/windows/desktop/ms680345(v=vs.85).aspx

Автор:  DDDSSS [ Сря Сеп 26, 2012 9:58 pm ]
Заглавие:  Re: Асемблер

Пачнах тази проверка на джъмпа преди самата проверка.

Автор:  palavrov [ Сря Сеп 26, 2012 10:07 pm ]
Заглавие:  Re: Асемблер

Не го знам този immunity debugger, но съм ползва ей това и работи перфектно:

http://www.hex-rays.com/products/ida/index.shtml

Едно време за ДОС си бях писал сам дебъгер, но ми попадна една версия на IDA и от тогава не съм пипал дебъгер за анализ на чужди програми :)

Автор:  DDDSSS [ Сря Сеп 26, 2012 10:16 pm ]
Заглавие:  Re: Асемблер

Това там горе не е безплатно и не намирам нови версии.immunity е добър ако знаеш как да боравиш с него.

Автор:  palavrov [ Сря Сеп 26, 2012 10:20 pm ]
Заглавие:  Re: Асемблер

Е, не е ... ама има безплатна версия която може спокойно да си свалиш.
Пък и преди няколко години последно като ми трябваше се намираха кракнати версии из разните торент сайтове.

http://www.hex-rays.com/products/ida/su ... ware.shtml

Малко е старичка, ама ще свърши чудна работа.

Автор:  DDDSSS [ Сря Сеп 26, 2012 10:24 pm ]
Заглавие:  Re: Асемблер

Все пак се придържам към имунизацията и питам отново как стига до там програмата.

Автор:  vesko_hard [ Сря Сеп 26, 2012 10:51 pm ]
Заглавие:  Re: Асемблер

Хитро измислено :)

Ето псевдо кода на процедурата декомпилиран с ИДА.



Код:
LRESULT __stdcall sub_401126(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
  int v4; // esi@8
  signed int v5; // ecx@8
  int v6; // esi@10
  signed int v7; // ecx@10
  int v8; // esi@13
  signed int v9; // ecx@13
  int v10; // edi@16
  int v11; // esi@16
  signed int v12; // ecx@16
  _UNKNOWN *v13; // edi@12
  int v14; // ebx@12
  unsigned int v15; // ecx@12
  int v16; // eax@22

  if ( Msg == 2 )
  {
    PostQuitMessage(0);
  }
  else
  {
    if ( Msg == 1 )
    {
      lstrcpyA(lf.lfFaceName, "MS Sans Serif");
      lf.lfHeight = -11;
      lf.lfWeight = 500;
      ::wParam = CreateFontIndirectA(&lf);
      ::hWnd = CreateWindowExA(0x200u, "edit", byte_403080, 0x50000080u, 104, 16, 97, 21, hWnd, 1, hInstance, 0);
      SendMessageA(::hWnd, 0x30u, ::wParam, 1);
      dword_4030F8 = CreateWindowExA(0, "static", "Enter your Code", 0x50000100u, 16, 16, 80, 17, hWnd, 3, hInstance, 0);
      SendMessageA(dword_4030F8, 0x30u, ::wParam, 1);
      dword_4030FC = CreateWindowExA(0, "button", "Check", 0x50000001u, 64, 48, 75, 25, hWnd, 2, hInstance, 0);
      SendMessageA(dword_4030FC, 0x30u, ::wParam, 1);
    }
    else
    {
      if ( Msg != 273 )
        return DefWindowProcA(hWnd, Msg, wParam, lParam);
      if ( lParam && wParam == 2 )
      {
        v4 = "x]@AHpl@KJ";
        v5 = 10;
        do
        {
          *v4++ ^= byte_403034;
          --v5;
        }
        while ( v5 );
        v6 = "vJ\\p|ZLLJ\\";
        v7 = 10;
        do
        {
          *v6++ ^= byte_403034;
          --v7;
        }
        while ( v7 );
        v13 = &loc_40127E;
        v14 = 1571486962;
        v15 = &loc_40134A - &loc_40127E;
        do
        {
          v16 = v14 ^ *v13;
          v14 = v16 ^ 2 * v14;
          v13 = v13 + 1;
          --v15;
        }
        while ( v15 );
        if ( v16 == dword_403009 )
        {
          GetDlgItemTextA(hWnd, 1, "       ", 8);
          v8 = "       ";
          v9 = 7;
          do
          {
            if ( !*v8 )
              goto LABEL_20;
            ++v8;
            --v9;
          }
          while ( v9 );
          v10 = "       ";
          v11 = "zFE[E^M.";
          v12 = 7;
          do
          {
            if ( (byte_403035 ^ *v10) != (byte_403034 ^ (*v11 + 1)) )
              goto LABEL_20;
            ++v11;
            ++v10;
            --v12;
          }
          while ( v12 );
          MessageBoxA(0, "vJ\\p|ZLLJ\\", "Crackme Simple", 0);
        }
        else
        {
LABEL_20:
          MessageBoxA(0, "x]@AHpl@KJ", "Crackme Simple", 0);
        }
        ExitProcess(0);
      }
    }
  }
  return 0;
}

Автор:  FiTTiLA [ Чет Сеп 27, 2012 12:03 am ]
Заглавие:  Re: Асемблер

vesko_hard написа:
...


Брей ... коя IDA е това ... много читаво изглежда ...

Автор:  vesko_hard [ Чет Сеп 27, 2012 1:20 am ]
Заглавие:  Re: Асемблер

Последната версия IDA 6.3 със x86 and ARM Decompilers v1.7 .

Само ако човек да не и гледа цената..

Автор:  DDDSSS [ Чет Сеп 27, 2012 6:47 am ]
Заглавие:  Re: Асемблер

Написана е на асемблер директно.Не е компилирана.

Автор:  DDDSSS [ Чет Сеп 27, 2012 9:27 pm ]
Заглавие:  Re: Асемблер

А поне някой да знае какво точно означава int 2b.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/