Как менять что то в Exe-файле ?

  • Автор темы Guest_Artur_*
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest_Artur_*

#1
Задачка у меня такая:
Есть программа в виде exe файла для Win32, в программе кнопочка пассивна, хочу акиивизировать. Как можно это сделать ????
 

grigsoft

Well-known member
15.11.2005
735
0
#2
Найди лучше бесплатную альтернативу тому, что хочешь сломать :blink: надо хотя бы основные вещи понимать в асме и Win32 программировании. Начнешь понимать - не будешь спрашивать. Хочешь поучится - в сети полно материалов по дизассемблированию\крекингу.
Хотя в твоем случае может оказаться что и простого изменения ресурсов будет достаточно.
 
G

Guest_Artur_*

#3
Альтернатива тому, что хочу сломать, точно нету (прога написана именно для нас)! Простое изменение ресурсов думаю тоже никак не поможет, эта кнопка не всегда пассивна, толко при некотрых событиях. По моему в коде этих событий было что то вроде
button.Enable = False
Вот как получить АСМ код из ехе и на этом коде поменять False и получить обратно ехе, не знаю B) . Пробовал HIEW32 но полученный код совсем на АСМ не похож. Буду благодарен если посоветуете как выкрутится
 

grigsoft

Well-known member
15.11.2005
735
0
#4
Ну в таком случае лучше автора искать и исходники. Кнопка - это только вершина айсберга. Почему она блокируется? А может там данные не готовы, и приложение ляжет после нажатия и всю базу положит?
В общем случае надо нечто вроде http://www.ollydbg.de/, отладкой искать нужное место (а в асме ты такого не увидишь B) ), потом править. В принципе, если владеешь любым отладчиком, показывающим асм код, можно попробовать в привычной среде, но спецсредства лучше.
Если же ты не разработчик - то забудь, или ищи кого-нибудь кто увлекается именно этим
 
G

Guest_Artur_*

#5
Спасибо за ответы !!!
Опишу ситуацию:
Программа-экзаминатор (разработчик не я, и кода мне не достать B) )
Нажимаю на кнопку №1, идёт запрос к серверу, получаю ответ от сервера то есть экзаменный вопрос с вариантами ответов, активируется кнопка №2 "Ответить !", через некотрое время опять становится пассивным.
Я вот хочу держать её активным в 10 раз дольше.
А если от опаздавшего ответа в базе на сервере случится "катастрофа" мне от этого терять нечего
 
Z

zubr

#6
2 варианта:
1. Тупой и простой вариант: раз кнопка бывает активна, можно попробовать в этот момент определить ее хэндл, и затем по этому хэндлу (не выгружая приложение) посылать ему сообщение WM_ENABLED.
2. В отладчике типа DASM или SoftIce поставить точки останова на функции APi SendMessage, PostMessage, PeekMessage. При отладке смотреть, что в параметрах этих функций - если WM_ENABLED(числовая константа) с WParam=0 то патчить.
 
G

Guest_Artur_*

#7
А как можно получить хэндл кнопки из другой программы ??????
 

grigsoft

Well-known member
15.11.2005
735
0
#8
Добавлю только что лучше уж EnableWindow ловить.
Кстати, можно еще воспользоваться тулзами которые управляют окнами на ходу - помню была у меня такая - ей можно было показать кнопку у работающего приложения, и сказать ей - Enable. Это надо каждый раз ручками вызывать, конечно, но в твоем случае может помочь. Вот только найти сейчас не смог сходу.
 
G

Guest_Artur_*

#9
<!--QuoteBegin-grigsoft+5:05:2006, 08:21 -->
<span class="vbquote">(grigsoft @ 5:05:2006, 08:21 )</span><!--QuoteEBegin-->Кстати, можно еще воспользоваться тулзами которые управляют окнами на ходу - помню была у меня такая - ей можно было показать кнопку у работающего приложения, и сказать ей - Enable. Это надо каждый раз ручками вызывать, конечно, но в твоем случае может помочь. Вот только найти сейчас не смог сходу.
[snapback]35010" rel="nofollow" target="_blank[/snapback]​
[/quote]

Думаю мне это в полне подойдёт. :)
Прошу отправте если найдёте artur@arway.am
 

grigsoft

Well-known member
15.11.2005
735
0
#10
Где ж ее найти :) Но это мне напомнило, что я когда-то сам такое писал ради интереса. Нашел, собрал, вроде работает даже. Тут выложил - http://www.grigsoft.ru/winstyle.zip (75K). Надо мишень тащить и бросить на кнопку.
 
G

Guest

#11
<!--QuoteBegin-grigsoft+5:05:2006, 08:48 -->
<span class="vbquote">(grigsoft @ 5:05:2006, 08:48 )</span><!--QuoteEBegin-->Где ж ее найти Но это мне напомнило, что я когда-то сам такое писал ради интереса. Нашел, собрал, вроде работает даже. Тут выложил - [snapback]35015" rel="nofollow" target="_blank[/snapback]</div>[/quote]

Спасибо большое !!!!! Отличная програмка :) , но задача моя оказалась сложнее чем я мог представить !
В программе время контроллируется, когда нажимаю кнопку ответа, выдает что я опаздал :(
Придётся всё таки иметь дело с АСМ и поменять там разницу времени.
Как думаете, этот путь разумна ????????????????
 

grigsoft

Well-known member
15.11.2005
735
0
#12
о чем я и говорил. Я думаю правильный путь - лучше к тесту готовиться :) Менять надо не время, а проверку условия, но я не вижу как тебе это поможет - наверняка на сервере тоже проверка от таких умных.
 
G

Guest

#13
<!--QuoteBegin-grigsoft+5:05:2006, 10:01 -->
<span class="vbquote">(grigsoft @ 5:05:2006, 10:01 )</span><!--QuoteEBegin-->о чем я и говорил. Я думаю правильный путь - лучше к тесту готовиться Менять надо не время, а проверку условия, но я не вижу как тебе это поможет - наверняка на сервере тоже проверка от таких умных.
[snapback]35033" rel="nofollow" target="_blank[/snapback]​
[/quote]

И всё же хотелось бы пробовать :)
Не подскажете как приблизительно может выглядит в АСМ следующее условие ??

if ( time1 - time2 >= dtime) then
AfxMessageBox("Опаздали",0,0)
else
Send(Ответ);


Сложно ли всё это настолько, чтоб отказатся от этой затеи ??????
 

grigsoft

Well-known member
15.11.2005
735
0
#14
На мой взгляд не имея навыка работы с отладчиком в асме сам ты этого не сделаешь. Ну загрузи приложение в том же OllyDbg и попробуй разобраться. Наличие сообщения упрощает ситуацию - можно остановиться когда сообщение видно и посмотреть на стек - где то рядом будет и проверка jnz\jz.
Если пользуешься VS, можно и в его отладчике этот момент посмотреть.
 
Z
#15
Один из способов обмануть по времени:
запатчить функции GetLocalTime, GetSystemTime в kernel32.dll на определенное время, так чтобы они выдавали нужное тебе время. Саму запатченную длл-ку разместить в каталоге программы, тогда программа будет загружать вместо настоящей дллки, которая в System32, твою запатченную.
 
Статус
Закрыто для дальнейших ответов.