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;
}
Есть ли более - менее адекватные способы изменить MaxLenght для TextBox в бинарнике?
В него можно вводить только 8 цифр, а мне надо сделать чтобы можно было ввести 9 цифр.
Под дизассемблером пытался найти нужный фрагемент кода... все очень запутано. Пробовал начинать от вызова функций GetAsyncKeyState, SetCursorPos и еще по мелочи. Они меня никуда не привели.
Пробовал найти адекватный дебаггер, где можно было бы смотреть стек вызовов хитрым образом - сперва некоторое время пусть бы поработал и при вызове какой - либо функции один раз, больше не показывал бы ее вызовы. Таким образом когда, когда в стеке перестали бы появляться новые вызовы, можно было бы ввести что-то в текст бокс, и посмотреть что появилось в стеке вызовов. Конечно такого чуда не нашлось...
Бинарник содержит астрономическое количество цифр 8, если смотреть под хекс эдитором. Поочередно менять их на 9 и смотреть что получится можно до пенсии.
Есть ли какие-то предложения как можно быстро найти нужное мне место в бинарнике?
Ищи по CreateWindowEx. Вторым параметром будет класс Edit. Или RegisterClass перед ним, если это пользовательсткий класс. Когда найдешь, запомни хэндл и ищи вызов с ним SendMessage, он будет остылать EM_LIMITTEXT сообщение, которое ставит количество вводимого текста.
есть вот что. единственный вызов этой функции, где второй параметр может быть чем угодно
редактора ресурсов. Если на VLC то опятьже редактором или DeDe найти форму и изменить её. А вот если ограничение программное, то тут немного сложнее.... Ну или выложи сюда софтинку, гляну её.
Если приложение на MFC - попробуй найти нужный ресурс с помощью
Эт что, результаты како-то дизассемблера? Вообще, на чем приложение написанно и какой размер бинарника, и чем отлаживаешь?
попробую сейчас редактором пройтись, и если ничего не найду то выложу
а так-то если, все верно про хендл, то я могу перехватить CreateWindowExA и сохранить нужным мне хендл, и дальше разбираться
это результат декомпиляции в IDA. ассемблерный код уж не стал выкладывать :D
приложение написано на с++. возможно MFC
отлаживаю тоже в ИДА
размер 8+ метров
Судя по всему это HexRays - восстановленный cpp код в IDApro :) Один из простых способов - найти в асм листинге cmp *,8 и менять их по одному:) Но это если ограничение программное, а не виндовое.
кто-то будет смотреть, сколько символов введено в строку, сравнивать иудалять лишние символы?
Поищу cmp *,8
Вопрос про хендл остается :D
не совсем понял предыдущий пост.
мне нужно просто чтобы пользователи могли ввести 9 значное число, вместо 8 значного.
предыдущий был к arrjj. Lei fang, залей уже куда-нибудь бинарник. мы тоже посмотрим :)
http://segaempire.somee.com/files/main.zip
ужас как долго в ИДА ищется cmp *,8
до сих пор поиск идет
вот он:
ужас как долго в ИДА ищется cmp *,8
до сих пор поиск идет
Там он еще библиотечку хочет, ijl15.dll. Выложи тоже, чтоб могли хоть посмотреть на него.
текстовое поле создается не в этом файле. Lei fang, загружай в иду, открывай импорт, Alt+t, SendMessageA, пройдись по Xref'ам и поищи WParam == C5h. это будет оно.
не в main.exe?
здесь все ддлки из папки: http://segaempire.somee.com/files/client_net.zip
client_net.dll создана мной, в ней нет текст бокса
на счет SendMessageA понятно, попробую.
Если ограничение установлено при создании окна,при попытке любым образом ввести туда больше символов,чем положено,будет издаваться стандартный звук.Если же нет(в чём я сомневаюсь),то наверняка на короткое время этот символ будет появляться,а потом исчезать.Так что поступай,как написано выше–либо CreateWindow(Ex),либо DialogBox(и какие там ещё функции)+лазание по ресурсам приложения
Цитата: Lei fang
текстовое поле создается не в этом файле
не в main.exe?
не в main.exe?
угу. либо ида просто его не нашла.
звука нет... и на короткое время цифра не появляется
еще было бы хорошо, если б ты spy++ посмотрел какой класс у контрола. там может быть не только edit и сообщение у него другое. если там rich edit, то константа будет 435h.
по моему spy++ не видит никаких контролов в этой проге.
нету значка + слева от названия, чтобы раскрыть его.
Так надо смотреть класс?
если контрол не имеет дочерних контролов, то + не будет. он так же не будет состоять в каком-то списке контролов, если у него нет родителя. а еще у него может не быть подписи и мя класса могло быть изменено, так что ты его точно никак не опознаешь. но посмотреть стоило.