Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Есть ли более - менее адекватные способы изменить MaxLenght для TextBox в бинарнике?

408
08 июля 2011 года
Lei fang
265 / / 01.10.2005
В графическом приложении есть текст бокс... даже не факт что использованы компоненты какие-то для его создания.
В него можно вводить только 8 цифр, а мне надо сделать чтобы можно было ввести 9 цифр.

Под дизассемблером пытался найти нужный фрагемент кода... все очень запутано. Пробовал начинать от вызова функций GetAsyncKeyState, SetCursorPos и еще по мелочи. Они меня никуда не привели.

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

Бинарник содержит астрономическое количество цифр 8, если смотреть под хекс эдитором. Поочередно менять их на 9 и смотреть что получится можно до пенсии.

Есть ли какие-то предложения как можно быстро найти нужное мне место в бинарнике?
316
08 июля 2011 года
Alm3n
889 / / 29.05.2009
Ищи по CreateWindowEx. Вторым параметром будет класс Edit. Или RegisterClass перед ним, если это пользовательсткий класс. Когда найдешь, запомни хэндл и ищи вызов с ним SendMessage, он будет остылать EM_LIMITTEXT сообщение, которое ставит количество вводимого текста.
408
08 июля 2011 года
Lei fang
265 / / 01.10.2005
есть вот что. единственный вызов этой функции, где второй параметр может быть чем угодно
Код:
signed int __cdecl sub_4AAC50(int nCmdShow)
{
  ATOM v1; // ax@3
  signed int result; // eax@4
  void *v3; // ecx@11
  WNDCLASSEXA v4; // [sp+0h] [bp-68h]@1
  DWORD dwExStyle; // [sp+30h] [bp-38h]@5
  DWORD dwStyle; // [sp+34h] [bp-34h]@6
  int pvParam; // [sp+38h] [bp-30h]@8
  int v8; // [sp+3Ch] [bp-2Ch]@9
  int v9; // [sp+40h] [bp-28h]@9
  int v10; // [sp+44h] [bp-24h]@9
  int X; // [sp+48h] [bp-20h]@9
  int Y; // [sp+4Ch] [bp-1Ch]@9
  int v13; // [sp+50h] [bp-18h]@11
  int v14; // [sp+54h] [bp-14h]@11
  struct tagRECT rc; // [sp+58h] [bp-10h]@8

  v4.cbSize = 48;
  v4.style = 3;
  if ( dword_1C69F1C )
    v4.style |= 8u;
  v4.lpfnWndProc = (WNDPROC)dword_1C69F28;
  v4.cbClsExtra = 0;
  v4.cbWndExtra = 0;
  v4.hInstance = dword_1C69EDC;
  v4.hIcon = (HICON)dword_1C69F24;
  v4.hIconSm = (HICON)dword_1C69F20;
  v4.hCursor = 0;
  v4.hbrBackground = GetStockObject(4);
  v4.lpszMenuName = 0;
  v4.lpszClassName = lpClassName;
  v1 = RegisterClassExA(&v4);
  if ( v1 )
  {
    dwExStyle = 24;
    if ( dword_1C69F00 == 1 )
      dwStyle = -2134245376;
    else
      dwStyle = -2147483648;
    SetRect(&rc, 0, 0, xRight, yBottom);
    AdjustWindowRectEx(&rc, dwStyle, 0, dwExStyle);
    SystemParametersInfoA(0x30u, 0, &pvParam, 0);
    if ( dword_C903C0 )
    {
      SetRect(
        (LPRECT)&X,
        pvParam + (v9 - pvParam - (rc.right - rc.left)) / 2,
        v8 + (v10 - v8 - (rc.bottom - rc.top)) / 2,
        rc.right - rc.left + pvParam + (v9 - pvParam - (rc.right - rc.left)) / 2,
        rc.bottom - rc.top + v8 + (v10 - v8 - (rc.bottom - rc.top)) / 2);
      xLeft = X;
      yTop = Y;
    }
    else
    {
      SetRect((LPRECT)&X, xLeft, yTop, xLeft + rc.right - rc.left, yTop + rc.bottom - rc.top);
    }
    dword_1C69EFC = CreateWindowExA(
                      dwExStyle,
                      lpClassName,
                      "RAYSDDWND",
                      dwStyle,
                      X,
                      Y,
                      v13 - X,
                      v14 - Y,
                      0,
                      0,
                      dword_1C69EDC,
                      0); //Хендл о котором вы говорите это dword_1C69EFC в данном случае?
    if ( dword_1C69EFC )
    {
      ShowWindow(dword_1C69EFC, nCmdShow);
      UpdateWindow(dword_1C69EFC);
      GetWindowRect(dword_1C69EFC, &Rect);
      sub_4B51F0(v4.cbSize);
      dword_1C69F0C = 1;
      result = 1;
    }
    else
    {
      sub_4AAF50(v3, "CreateWindowEx");
      result = 0;
    }
  }
  else
  {
    sub_4AAF50((void *)v1, "RegisterClassEx");
    result = 0;
  }
  return result;
}

код аццкий, сами понимаете :D
277
08 июля 2011 года
arrjj
1.7K / / 26.01.2011
Если приложение на MFC - попробуй найти нужный ресурс с помощью редактора ресурсов. Если на VLC то опятьже редактором или DeDe найти форму и изменить её. А вот если ограничение программное, то тут немного сложнее.... Ну или выложи сюда софтинку, гляну её.
316
08 июля 2011 года
Alm3n
889 / / 29.05.2009
Эт что, результаты како-то дизассемблера? Вообще, на чем приложение написанно и какой размер бинарника, и чем отлаживаешь?
408
08 июля 2011 года
Lei fang
265 / / 01.10.2005
в папке с софтинкой есть дллка MFC71.dll
попробую сейчас редактором пройтись, и если ничего не найду то выложу

а так-то если, все верно про хендл, то я могу перехватить CreateWindowExA и сохранить нужным мне хендл, и дальше разбираться

это результат декомпиляции в IDA. ассемблерный код уж не стал выкладывать :D
приложение написано на с++. возможно MFC
отлаживаю тоже в ИДА
размер 8+ метров
277
08 июля 2011 года
arrjj
1.7K / / 26.01.2011
Судя по всему это HexRays - восстановленный cpp код в IDApro :) Один из простых способов - найти в асм листинге cmp *,8 и менять их по одному:) Но это если ограничение программное, а не виндовое.
316
08 июля 2011 года
Alm3n
889 / / 29.05.2009
кто-то будет смотреть, сколько символов введено в строку, сравнивать иудалять лишние символы?
408
08 июля 2011 года
Lei fang
265 / / 01.10.2005
в общем попробовал два редактора ресурсов. один вообще нашел только иконку, второй тоже иконку, но еще хрень, не относящуюся к текст боксую

Поищу cmp *,8

Вопрос про хендл остается :D

не совсем понял предыдущий пост.
мне нужно просто чтобы пользователи могли ввести 9 значное число, вместо 8 значного.
316
08 июля 2011 года
Alm3n
889 / / 29.05.2009
предыдущий был к arrjj. Lei fang, залей уже куда-нибудь бинарник. мы тоже посмотрим :)
408
08 июля 2011 года
Lei fang
265 / / 01.10.2005
вот он: http://segaempire.somee.com/files/main.zip
ужас как долго в ИДА ищется cmp *,8
до сих пор поиск идет
278
08 июля 2011 года
Alexander92
1.1K / / 04.08.2008
Там он еще библиотечку хочет, ijl15.dll. Выложи тоже, чтоб могли хоть посмотреть на него.
316
08 июля 2011 года
Alm3n
889 / / 29.05.2009
текстовое поле создается не в этом файле. Lei fang, загружай в иду, открывай импорт, Alt+t, SendMessageA, пройдись по Xref'ам и поищи WParam == C5h. это будет оно.
408
08 июля 2011 года
Lei fang
265 / / 01.10.2005
текстовое поле создается не в этом файле
не в main.exe?

здесь все ддлки из папки: http://segaempire.somee.com/files/client_net.zip
client_net.dll создана мной, в ней нет текст бокса

на счет SendMessageA понятно, попробую.
7
08 июля 2011 года
@pixo $oft
3.4K / / 20.09.2006
Эти твои DLL,что ты указал–системные,в них такое создаваться точно не может.MFC–это Microsoft foundation classes,IJL15–Intel JPEG library
Если ограничение установлено при создании окна,при попытке любым образом ввести туда больше символов,чем положено,будет издаваться стандартный звук.Если же нет(в чём я сомневаюсь),то наверняка на короткое время этот символ будет появляться,а потом исчезать.Так что поступай,как написано выше–либо CreateWindow(Ex),либо DialogBox(и какие там ещё функции)+лазание по ресурсам приложения
316
08 июля 2011 года
Alm3n
889 / / 29.05.2009
Цитата: Lei fang
текстовое поле создается не в этом файле
не в main.exe?


угу. либо ида просто его не нашла.

408
08 июля 2011 года
Lei fang
265 / / 01.10.2005
что ж ясно. премного благодарен за советы. Пока прохожусь по WParam == C5h в SendMessageA

звука нет... и на короткое время цифра не появляется
316
08 июля 2011 года
Alm3n
889 / / 29.05.2009
еще было бы хорошо, если б ты spy++ посмотрел какой класс у контрола. там может быть не только edit и сообщение у него другое. если там rich edit, то константа будет 435h.
408
08 июля 2011 года
Lei fang
265 / / 01.10.2005
угумс, ибо нет нужного мне SendMessageA

по моему spy++ не видит никаких контролов в этой проге.
нету значка + слева от названия, чтобы раскрыть его.
Так надо смотреть класс?
316
08 июля 2011 года
Alm3n
889 / / 29.05.2009
если контрол не имеет дочерних контролов, то + не будет. он так же не будет состоять в каком-то списке контролов, если у него нет родителя. а еще у него может не быть подписи и мя класса могло быть изменено, так что ты его точно никак не опознаешь. но посмотреть стоило.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог