Сейчас на форуме: asfa, bartolomeo (+6 невидимых)

 eXeL@B —› Вопросы новичков —› OllyDBG не срабатывает условный бряк на GetWindowTextA
Посл.ответ Сообщение

Ранг: 0.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 23 января 2012 22:36
· Личное сообщение · #1

Решил тупо ради интереса попробовать поломать(cделать так, чтобы, например, игра принимала любой серийник, но там она еще к нету подрубается, я так понимаю для проверки ключа, но не суть) не безызвестную игру - Angry Birds. Ну я посмотрел какие функции импортирует игра, увидел там функцию GetWindowTextA(), сразу приметил , что скорей всего она используется для считывания ключа с Текстбокса, ставлю на нее бряк, и как только пытаюсь перейти во окно игры, срабатывает бряк, на выходе из функции GetWindowTextA() содержимое стека таково:
Code:
  1. CPU Stack
  2. Address   Value      ASCII Comments
  3. 001BF158  [00311EBD  Ѕ1   ; /RETURN from USER32.GetWindowTextA to AngryBirds.00311EBD
  4. 001BF15C   0030060E  0   ; |hWnd = 0030060E, class = D:\games\Angry Birds\AngryBirds.exe, text = Angry Birds (1920x1080)
  5. 001BF160   001BF1B0  °с   ; |String = "Angry Birds (1920x1080)"
  6. 001BF164   00000100       ; \MaxCount = 256.

Ну думаю, ладно поставлю условный бряк, ставлю его в конце функции GetWindowTextA() прямо на RETN условие бряка: [[ESP]+8]=="QWERTY", захожу в игру в качестве ключа ввожу QWERTY нажимаю Register иии... ничего! Программа продолжает выполняться... Вот, не могу понять почему, аа чуть не забыл при условии [[ESP]+8]=="Angry Birds (1920x1080)" тоже ничего не происходит, хотя как только я перешел в окно игры, далжна отработать функция GetWindowTextA() и т.к бряк стоит на RETN адрес возврата лежит в верхушке стека и ESP + 8 должен указывать на указатель на строку "Angry Birds (1920x1080)"(в данном случае)... Может условие неправильно записал??



Ранг: 58.1 (постоянный), 42thx
Активность: 0.060.01
Статус: Участник

Создано: 23 января 2012 23:08
· Личное сообщение · #2

А можно прогу узрить?

| Сообщение посчитали полезным: Brian57reg


Ранг: 105.6 (ветеран), 36thx
Активность: 0.10
Статус: Участник

Создано: 23 января 2012 23:58 · Поправил: Dart Sergius
· Личное сообщение · #3

Brian57reg, он бы и не сработал. т.к. в [esp+8] лежит адрес строки.
надо поставить бряк так:
dword ptr:ds[dword ptr:ds[esp+8]]==51574552h что означает QWER в кодировке ASCII

| Сообщение посчитали полезным: Brian57reg


Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 24 января 2012 00:25 · Поправил: Kindly
· Личное сообщение · #4

Brian57reg - ты бы хоть сказал какую версию игры ломаешь и дал линк на закачку чтоли. Эти игры уже давно сломаны, это так, к слову. Насколько помню, там по барабану серийник, хотя в некоторых версиях кнопка Register неактивна, если он не соответствует маске. Тебе надо найти место где игра должна принять сериал, дальше она сама запишет покриптованый файлик куда надо и читать будет именно его для разблокировки. Ну и найдешь потом онлайн чек, или его первого

Линк для интересующихся ;)
http://download.angrybirds.com/#ABR

-----
Array[Login..Logout] of Life


| Сообщение посчитали полезным: Brian57reg

Ранг: 0.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 24 января 2012 11:38
· Личное сообщение · #5

dword ptr:ds[dword ptr:ds[esp+8]]==51574552 -- OllyDBG 2.01 ругается на условие после первого двоеточия: "Condition: Unrecognized identifier"
Kindly, игру качал тут http://download.angrybirds.com/#ABR - самая первая в списке, то что сломана эт я знаю, говорю, тупо ради интререса решил сам ломануть...
Тебе надо найти место где игра должна принять сериал, ну вот я и пытаюсь найти это место только вот с условием бряка разобраться ни как не могу. Если бы условный бряк на GetWindowTextA() сработал я прошел по функции и попал бы как раз где игра что нибудь с этим серийником делает, но блин никак с условием разобраться не могу, да и в нете ничего хорошего по этому поводу не нашел



Ранг: 58.1 (постоянный), 42thx
Активность: 0.060.01
Статус: Участник

Создано: 24 января 2012 14:06
· Личное сообщение · #6

вот что тебе надо
GetDlgItemTextA
Я искал по EnableWindow, т.к. кнопка Register неактивна.



Ранг: 0.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 24 января 2012 14:50
· Личное сообщение · #7

ну GetDlgItemTextA(она, кстати, тоже вызывает GetWindowTextA()) в списке импорта нет, поставил bp и остановки не происходит... видимо игра ее и не вызывает. Ладно, сейчас попробую хорошенько поискать какие условия и как можно задавать в Conditional bp, если ничего не найду то буду копать в сторону EnableWindow, а у меня кнопка активна, наверное, версии игры разные



Ранг: 58.1 (постоянный), 42thx
Активность: 0.060.01
Статус: Участник

Создано: 24 января 2012 14:59
· Личное сообщение · #8

А по тексту, который игра выводит при неправильном ключе нельзя ничего найти? Просто в IDA вся процедура на ладони.
Залил бы свою версию куда-нибудь.



Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 24 января 2012 15:07
· Личное сообщение · #9

может GetWindowTextW

-----
продавец резиновых утёнков




Ранг: 0.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 24 января 2012 16:25 · Поправил: Brian57reg
· Личное сообщение · #10

Сейчас посмотрел через bp conditional log и походу для считывания ключа она вообще не используется т.к в логе все вызовы этой функции выглядят так:
Code:
  1. 7560008E  INT3: [esp] = 0CD1EBD (13442749.)
  2. 7560008E  Call to USER32.7560008E from AngryBirds.00CD1EB7
  3.             000405B0  Arg1 = UNICODE "calization-L1-1-0"
  4.             0029F550  Arg2 = ASCII "Angry Birds (1920x1080)"
  5.             00000100  Arg3 = 100

Моя версия игры вот: http://download.angrybirds.com/#ABR - самая первая в списке
может GetWindowTextW нет, бряк там не срабатывает
Но нашел через референсе стрингс строку: registerKey и вот код связанный с ней
Code:
  1. CPU Disasm
  2. Address   Hex dump          Command                                  Comments
  3. 00C2BCAE  |.  68 4061C400   PUSH 00C46140                            ; /Arg3 = AngryBirds.0C46140, Entry point
  4. 00C2BCB3  |.  33C9          XOR ECX,ECX                              ; |
  5. 00C2BCB5  |.  8D55 CC       LEA EDX,[EBP-34]                         ; |
  6. 00C2BCB8  |.  B8 F029C400   MOV EAX,00C429F0                         ; |Entry point
  7. 00C2BCBD  |.  52            PUSH EDX                                 ; |Arg2
  8. 00C2BCBE  |.  894D D4       MOV DWORD PTR SS:[EBP-2C],ECX            ; |
  9. 00C2BCC1  |.  8975 CC       MOV DWORD PTR SS:[EBP-34],ESI            ; |
  10. 00C2BCC4  |.  8945 D0       MOV DWORD PTR SS:[EBP-30],EAX            ; |
  11. 00C2BCC7  |.  68 6C8ED300   PUSH OFFSET 00D38E6C                     ; |Arg1 = ASCII "registerKey"
  12. 00C2BCCC  |.  8BCE          MOV ECX,ESI                              ; |
  13. 00C2BCCE  |.  E8 CD8B0600   CALL 00C948A0                            ; \AngryBirds.00C948A0
поставил бряк, он срабатывает еще при запуске игры(когда еще окно не отрисовалось)
сейчас посмотрю что в CALL 00C948A0..., кстати эта функция вызывается много раз только агрументы разные, например, тут первый аргумент "registerKey", а есть например "getClipboardText", "isInFullScreenMode" и т.д и тп я так понял функция вызывает скриптовые функции, вернее не вызывает а исполняет.




Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 28 января 2012 02:59
· Личное сообщение · #11

Brian57reg, ну что - разобрался?
Ключик должен быть такого вида:
XXXX-XXXX-XXXX-XXXX
без цифр.
Онлайн чек можно и не патчить, вот если что универсальный патч для всех AngryBirds:
http://rghost.ru/36169193

-----
Array[Login..Logout] of Life



 eXeL@B —› Вопросы новичков —› OllyDBG не срабатывает условный бряк на GetWindowTextA
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати