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

 eXeL@B —› Вопросы новичков —› Разучить прогу лезть в реестр
Посл.ответ Сообщение

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

Создано: 24 апреля 2006 15:16
· Личное сообщение · #1

Камрады, встречайте нуба!
Есть такой вопрос.
Игруха лезет в реестр, где смотрит букву диска, один файл на котором впоследствии и проверяет.
Скопировать ей файл и поменять ключ - не проблема.
Однако больше ниче существенного в реестре игруха не хранит, а игра нужна пиплам, которым править реестр нет прав.
Так вот, при открытии игры в Olly, все замечательно видно, где она лезет в реестр, где мессажку выводит типо диск не вставлен и т.п.
Но опыта в асме не хватает, чтоб понять, че надо конкретно сделать, чтоб либо явно положить куда надо свой путь, либо вообще убрать проверку диска(горадо лучше). Пробовал менять всякие JNE на JE, единстенное, до чего смог додуматься, ниче не дало. Сил хватило тока над мессажкой поиздеваться!
Знаю, что тут все просто, но нулевой экспириенс в кряке дает о себе знать.
Что тут можно сделать?
Если надо, файл гамы(1.5МБ) вот: werder.nm.ru/csce.rar



Ранг: 44.7 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 24 апреля 2006 17:39
· Личное сообщение · #2

Можно посоветовать тебе прочитать КУЧУ статей по кряку.....
И знаний получишь.... и опыт уже не нулквой будет.... А прогу эту щас посмотрю.....



Ранг: 123.7 (ветеран)
Активность: 0.10
Статус: Участник
1nn0$/100

Создано: 24 апреля 2006 20:39
· Личное сообщение · #3

kwin
Посмотри куда считывается инфа из реестра и по этому адресу вбей нужную тебе инфу. Потом запиши nop'ами вызов функции RegQueryValueExA, только вместе с аргументами. Все.
З.Ы. Программу не смотрел.

-----
Blame the victim!




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

Создано: 24 апреля 2006 21:15
· Личное сообщение · #4

Keo
Опыт как раз нулевой и останется. Все пробовать надо.. Мое мнение, что проблемы решать надо по мере поступления, читать ВСЕ ради одной задачи неэффективно. К тому же большинство статей по кряку, из тех что я видел, не по категориям.. К тому же здесь всеж асм читать надо!

1nn0cent
Вот, из олли:
0040109E |. 8D8424 6C0E0000 LEA EAX,DWORD PTR SS:[ESP+E6C]
004010A5 |. 50 PUSH EAX ; /pBufSize
004010A6 |. 8D8424 04080000 LEA EAX,DWORD PTR SS:[ESP+804] ; |
004010AD |. 50 PUSH EAX ; |Buffer
004010AE |. 8D8424 700E0000 LEA EAX,DWORD PTR SS:[ESP+E70] ; |
004010B5 |. 50 PUSH EAX ; |pValueType
004010B6 |. 6A 00 PUSH 0 ; |Reserved = NULL
004010B8 |. 68 04A04000 PUSH csce.0040A004 ; |ValueName = "CDDir"
004010BD |. 8BB424 780E0000 MOV ESI,DWORD PTR SS:[ESP+E78] ; |
004010C4 |. 56 PUSH ESI ; |hKey
004010C5 |. 2E:FF15 54914000 CALL DWORD PTR CS:[<&ADVAPI32.RegQueryVa>; \RegQueryValueExA
004010CC |. 85C0 TEST EAX,EAX
004010CE |. 0F85 62030000 JNZ csce.00401436


Я так понимаю считывается в буфер по адресу SS:[ESP+804]. Как это поменять?




Ранг: 238.8 (наставник), 67thx
Активность: 0.20
Статус: Участник
CyberHunter

Создано: 24 апреля 2006 21:34
· Личное сообщение · #5

Функции RegQueryValueExA передается 6 параметров:

PUSH x1 ; /pBufSize
PUSH x2 ; |Buffer
PUSH x3 ; |pValueType
PUSH x4 ; |Reserved
PUSH x5 ; |ValueName
PUSH x6 ; |hKey
CALL yyyyyyy ; \RegQueryValueExA

забивай все это nop'ами, а
004010CE JNZ csce.00401436 исправляй на 004010CE JMP csce.00401436

Должно сработать

-----
Nulla aetas ad discendum sera




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

Создано: 24 апреля 2006 23:07
· Личное сообщение · #6

Flint
По смещению 00401436 как раз находится MessageBox, наоборот этот jump ваще убирал, он все равно к нему приходит в итоге!
Ну и как ты сказал, тоже пробовал, не проканало.

Блин, камрады, гляньте прогу! Мож она еще где проверяет, только я по неопытности этого не вижу..




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 24 апреля 2006 23:15
· Личное сообщение · #7

я бы посмотрел игру, тока у меня архив битый качается

-----
[nice coder and reverser]





Ранг: 238.8 (наставник), 67thx
Активность: 0.20
Статус: Участник
CyberHunter

Создано: 24 апреля 2006 23:26
· Личное сообщение · #8

kwin Залей программу на другой сайт, на werder.nm.ru/csce.rar коцаный архив

-----
Nulla aetas ad discendum sera




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

Создано: 25 апреля 2006 01:03
· Личное сообщение · #9

Опаньки!
Сорри, ща перезалью.
Вот, 1.6 МБ, зря блин заархивировал в прошлый раз: werder.nm.ru/csce.exe
Протестил, все качается.




Ранг: 238.8 (наставник), 67thx
Активность: 0.20
Статус: Участник
CyberHunter

Создано: 25 апреля 2006 12:14
· Личное сообщение · #10

Лови патч.
подправил, тока работоспособность не гарантирую т.к. программа,сам понимаешь, тока exeшник от игры.
Попробуй.

А еще можешь сам попробовать так: на всех переходах начиная с 00401010 по 00401531 ставишь бряки и запускаешь программу с диском. В комментариях (справа от кода ставишь метки, типа прыгнул/не прыгнул). Потом запускаешь без диска и ищешь разницу.
Удачи.


ac65_25.04.2006_CRACKLAB.rU.tgz - csce_patch.exe

-----
Nulla aetas ad discendum sera




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

Создано: 25 апреля 2006 16:09
· Личное сообщение · #11

Прога после патча ваще не пашет, ошибку Access Violation говорит.
В общем, что пока нарыл:
Собственно проверка размера(вроде) файла происходит в 04011BC, где вызывается процедура по адресу 0401436, в которой как раз вызывается GetFileAttributes. Если этот прыжок убрать нахрен вместе в вызовом функции, окошка 'CD не найден' уже не увидим. Однако прога паузится из-за с еррором Invalid Path, потому что с файлом этим она че-то еще делает (при том что фактически он ни на че не влияет, брал любой файл > 200мб, с ним замечательно пашет, если путь в реестре поставить). Вот так-то.
Пока идея: вместо того, чтобы прога лезла в реестр, в то место, где она хранит путь, положить путь собственно модуля. Тогда возиться с nop'ом всех мест, где она к файлу обращается, не надо (у меня это ниче не дало. может, руки кривые?). Только как это сделать, не знаю.



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

Создано: 26 апреля 2006 00:23
· Личное сообщение · #12

Flint, Hellspawn, 1nn0cent, Keo

Пипл, кто знает асм..
Как переделать
0040109E |. 8D8424 6C0E0000 LEA EAX,DWORD PTR SS:[ESP+E6C]
004010A5 |. 50 PUSH EAX ; /pBufSize
004010A6 |. 8D8424 04080000 LEA EAX,DWORD PTR SS:[ESP+804] ; |
004010AD |. 50 PUSH EAX ; |Buffer
004010AE |. 8D8424 700E0000 LEA EAX,DWORD PTR SS:[ESP+E70] ; |
004010B5 |. 50 PUSH EAX ; |pValueType
004010B6 |. 6A 00 PUSH 0 ; |Reserved = NULL
004010B8 |. 68 04A04000 PUSH csce.0040A004 ; |ValueName = "CDDir"
004010BD |. 8BB424 780E0000 MOV ESI,DWORD PTR SS:[ESP+E78] ; |
004010C4 |. 56 PUSH ESI ; |hKey
004010C5 |. 2E:FF15 54914000 CALL DWORD PTR CS:[<&ADVAPI32.RegQueryVa>; \RegQueryValueExA
004010CC |. 85C0 TEST EAX,EAX
004010CE |. 0F85 62030000 JNZ csce.00401436

чтоб читала в то же место, тока не ключ реестра, а путь к самой себе?



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 26 апреля 2006 14:57 · Поправил: crc1
· Личное сообщение · #13

kwin
Попробуй так

004010CE |.E8 E76F0000 CALL 004080BA ;прыгаем на свободное место
004010D3 |.90 NOP

004080BA 8BCC MOV ECX, ESP
004080BC BF D3804000 MOV EDI, 004080D3 ; ASCII "C:\GAMES"
004080C1 8A07 MOV AL, BYTE PTR DS:[EDI]
004080C3 888424 04080000 MOV BYTE PTR SS:[ESP+804], AL ;записываем нужный путь к файлу
004080CA 44 INC ESP ;в переменную [ESP+804]
004080CB 47 INC EDI
004080CC 3C 00 CMP AL, 0
004080CE 75 F1 JNZ SHORT 004080C1
004080D0 8BE1 MOV ESP, ECX
004080D2 C3 RETN

004080D3 433A5C47414D4553 ASCII "C:\GAMES"

Твое файло должно лежать в C:\GAMES, если лежит в другом месте, то по адресу 004080D3 пропиши свой путь



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

Создано: 26 апреля 2006 17:30
· Личное сообщение · #14

crc1
Very Big TNX, чувак!!!
Убил прыжки после чтения реестра, добавил твой код, все пашет!

Однако всеж идеально было бы в [ESP+804] помещать не константу, а путь, откуда запущена прога. Кто знает, как это сделать?



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

Создано: 26 апреля 2006 18:36
· Личное сообщение · #15

Нашел такое

mov ax,1203h
int 2Fh ;получим сегмент данных DOS
mov ax,ds
lds si,ds:[bp-1Ah] ;в ds:si - указатель на полный путь

Но это, я так понял, всемсте с именем файла. Как без него путь получить? Или имя убрать?



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 27 апреля 2006 09:27
· Личное сообщение · #16

kwin пишет:
Однако всеж идеально было бы в [ESP+804] помещать не константу, а путь, откуда запущена прога. Кто знает, как это сделать?

Используй функцию GetCommandLineA

004010CE |.E8 E76F0000 CALL 004080B0 ;прыгаем на свободное место
004010D3 |.90 NOP
********************************************************************** ******************
004080B0 $E8 EDFEFFFF CALL <JMP.&KERNEL32.GetCommandLineA> ; GetCommandLineA
004080B5 .40 INC EAX ;убираем кавычки
004080B6 .8BC8 MOV ECX, EAX
004080B8 >41 INC ECX
004080B9 .8039 00 CMP BYTE PTR DS:[ECX], 0 ;получаем в ecx конец строки
004080BC .75 FA JNZ SHORT 004080B8
004080BE >49 DEC ECX
004080BF .8039 5C CMP BYTE PTR DS:[ECX], 5C ;забиваем нолями имя файла
004080C2 .C601 00 MOV BYTE PTR DS:[ECX], 0
004080C5 .75 F7 JNZ SHORT 004080BE
004080C7 8BCC MOV ECX, ESP
004080C9 8BF8 MOV EDI, EAX ;в eax путь к каталогу откуда запущена
004080CB 8A07 MOV AL, BYTE PTR DS:[EDI] ;прога, без имени файла
004080CD 888424 04080000 MOV BYTE PTR SS:[ESP+804], AL
004080D4 44 INC ESP
004080D5 47 INC EDI
004080D6 3C 00 CMP AL, 0
004080D8 75 F1 JNZ SHORT 004080CB
004080DA 8BE1 MOV ESP, ECX
004080DC C3 RETN
004080DD .0000 ADD BYTE PTR DS:[EAX], AL
004080DF .0000 ADD BYTE PTR DS:[EAX], AL




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

Создано: 27 апреля 2006 15:39 · Поправил: kwin
· Личное сообщение · #17

crc1
Спасибо, реально помог!!!

Правда CALL <JMP.&KERNEL32.GetCommandLineA> у меня олли почему-то не прохавал, но CALL DWORD PTR CS:[&KERNEL32.GetCommandLineA] замечательно встал на его место, правда, заняв на 2 байта больше.

Вопрос решен!



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 27 апреля 2006 17:46 · Поправил: crc1
· Личное сообщение · #18

kwin еслиб ты посмотрел чуть повыше адреса 004080B0, то увидел бы переходники на таблицу импорта
00407F96 FF25 60914000 JMP DWORD PTR DS:[<&USER32.MessageBoxA>] ; USER32.MessageBoxA
00407F9C FF25 74914000 JMP DWORD PTR DS:[<&KERNEL32.CreateProce>; kernel32.CreateProcessA
00407FA2 FF25 A0914000 JMP DWORD PTR DS:[<&KERNEL32.GetCommandL>; kernel32.GetCommandLineA
00407FA8 FF25 4C914000 JMP DWORD PTR DS:[<&ADVAPI32.RegCloseKey>; ADVAPI32.RegCloseKey
00407FAE FF25 54914000 JMP DWORD PTR DS:[<&ADVAPI32.RegQueryVal>; ADVAPI32.RegQueryValueExA

По адресу 004080B0 нужно поставить команду CALL 00407FA2. OllyDbg сам пересчитает смещение на нужный переходник(E8 EDFEFFFF). Команда будет 5-байтная. А как сделал ты, боюсь на других машинах может не работать



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

Создано: 27 апреля 2006 19:49
· Личное сообщение · #19

Понятно!
Еще раз спасибо!


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


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