![]() |
eXeL@B —› Вопросы новичков —› Нужна помощь в создании кейгена! |
Посл.ответ | Сообщение |
|
Создано: 20 марта 2007 13:01 · Личное сообщение · #1 Имеется программа, ключ в которой генерится в зависимости от железа и программного обеспечения, поэтому при изменении конфигурации компа прога слетает. А автор проги - человек довольно жадный - для приобретенной у него проги бесплатно высылает только 3 ключа, а за каждый последующий хочет 400 рублей. Но я немного увлекся, короче место в программе где генерится ключ активации, я нашел, прогу зарегистрировал. Но не хочется каждый раз в отладчике искать этот номер. Подскажите пожалуйста, как создать кейген или подправить прогу чтобы она сама выводила в окно или в файл этот номер. Вот это место: 00512D2A |. E8 5568FEFF CALL 004F9584 00512D2F 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14] ;здесь в EAX загружается адрес по которому находится правильный ключ 00512D32 8D55 F0 LEA EDX,DWORD PTR SS:[EBP-10] 00512D35 E8 8264EFFF CALL 004091BC Это место прогамма проходит несколько раз, в результате после появления первого окна ключа в памяти уже не найти. Заранее благодарен за ответы, желательно поподробнее! ![]() |
|
Создано: 20 марта 2007 13:22 · Личное сообщение · #2 |
|
Создано: 20 марта 2007 15:01 · Личное сообщение · #3 |
|
Создано: 20 марта 2007 15:21 · Поправил: Dr3d · Личное сообщение · #4 |
|
Создано: 20 марта 2007 16:43 · Личное сообщение · #5 |
|
Создано: 20 марта 2007 20:40 · Личное сообщение · #6 |
|
Создано: 21 марта 2007 12:40 · Личное сообщение · #7 Если можно то поподробнее, а то я так и пытался сделать но Windows XP не позволяет восстановить затертые байты во время работы программы. Возможно я что-то не так делаю, посколько ассемблер знаю плохо. Если не трудно, пожалуйста, напишите код, который копирует серийник в буфер и восстанавливает затертые байты 00512D2F E9 205D0000 JMP 00518A54 00512D34 90 NOP 00512D35 E8 8264EFFF CALL 004091BC 00518A44 0000 ADD BYTE PTR DS:[EAX],AL ; пустое место (буфер) в програме для серийника 00518A46 0000 ADD BYTE PTR DS:[EAX],AL ----- ---- 00518A52 0000 ADD BYTE PTR DS:[EAX],AL 00518A54 60 PUSHAD ; место для кода Огромнейшее человеческое спасибо! ![]() |
|
Создано: 21 марта 2007 17:46 · Личное сообщение · #8 |
|
Создано: 22 марта 2007 12:09 · Поправил: wasmkv · Личное сообщение · #9 Большое спасибо за код. Извиняюсь за назойливость, но хотелось немножко коментариев. 00518A44 60 PUSHAD 00518A45 6A 00 PUSH 0 ; Arg4 = 00000000 00518A47 6A 00 PUSH 0 ; Arg3 = 00000000 00518A49 50 PUSH EAX ; Arg2 00518A4A 6A 00 PUSH 0 ; Arg1 = 00000000 00518A4C E8 BA7A8577 CALL user32.77D7050B ; user32.77D7050B 00518A51 61 POPAD 00518A52 8D55 F0 LEA EDX,DWORD PTR SS:[EBP-10] 00518A55 E8 6207EFFF CALL 004091BC 00518A5A E9 D8A2FFFF JMP 00512D37 Если я правилно понял то копирование происходит с помощью команды CALL user32.77D7050B. Если можно поподробнее о том какие параметры передаются этой функции (что такое Arg1, Arg2, Arg3, Arg4). Буду очень благодарен, если подскажете, где можно почитать об этой (и не только) библиотеках, желательно на русском языке. Спасибо еще раз. ![]() |
|
Создано: 22 марта 2007 14:50 · Личное сообщение · #10 |
|
Создано: 23 марта 2007 12:08 · Поправил: wasmkv · Личное сообщение · #11 C MessageBoxA разобрался, спасибо. В Windows XP без SP работает, MessageBox появляется 8 раз. В Windows XP SP2, возникли некоторые проблемы, но это не важно. Получается то, с чего начал, а именно, остался открытым вопрос - можно ли Windows XP SP2 восстановить затертые переходом оригинальные байты по тому же самому адресу. В качестве примера: Оригинальные 00512D32 8D55 F0 LEA EDX,DWORD PTR SS:[EBP-10] 00512D35 E8 8264EFFF CALL 004091BC Измененные 00512D32 E9 0D5D0000 JMP 00518A44 ;переход на мой код на свободное место 00512D37 90 NOP 00512D38 90 NOP 00512D39 90 NOP А после выполнения кода возможно ли в Windows XP SP2, чтобы по адресу 00512D32 был не JMP 00518A44, а как в оригинале, 00512D32 8D55 F0 LEA EDX,DWORD PTR SS:[EBP-10] 00512D35 E8 8264EFFF CALL 004091BC чтобы программа больше не попадала на мой код. Если возможность такая есть, то пожалуйста подскажите как это сделать. Спасибо за ответ. ![]() |
|
Создано: 23 марта 2007 12:36 · Поправил: PE_Kill · Личное сообщение · #12 wasmkv пишет: 00512D32 E9 0D5D0000 JMP 00518A44 ;переход на мой код на свободное место ну а по адресу 00518A44 пишешь mov dword [00512D32],0E8F0558D mov dword [00512D36],0FFEF6482 ------| замуты с серийником |------ ************************ ------------------------------------------- jmp 00512D32 ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 23 марта 2007 13:57 · Личное сообщение · #13 |
|
Создано: 23 марта 2007 14:10 · Личное сообщение · #14 Я делал уже так, только что попробовал еще раз без замутов с серийником: 00518A44 60 PUSHAD 00518A45 C705 322D5100 8D55F0E8 MOV DWORD PTR DS:[512D32],E8F0558D 00518A4F C705 362D5100 8264EFFF MOV DWORD PTR DS:[512D36],FFEF6482 00518A59 61 POPAD 00518A5A E9 D8A2FFFF JMP 00512D37 В результате Windows XP SP2 матерится: Access violation at address 00518A45 in module 'VAGScan4.exe'. Write of address 00512D32. И Олька тоже Access violation when writing to [00512d32]- Use Shift+F7/F8/F9 to pass exeption to program. Короче тупик полный. ![]() |
|
Создано: 23 марта 2007 14:29 · Поправил: wasmkv · Личное сообщение · #15 1nn0cent пишет: ... не понимаю зачем... Посмотри как сделал я: то что хатерто джампом написал после своего кода. Во первых: получается 8 MessageBox_ов, которые надо закрывать. Во вторых: чтобы не разбираться и рипать процедуру генерации серийника, хочу прочитать его по конкретному адресу с помощью к примеру SignOfMisery, поскольку кроме железа и програмного обеспечения серийник зависит и от рег номера поставляемого на CD. ![]() |
|
Создано: 24 марта 2007 17:19 · Поправил: MilitaryMan · Личное сообщение · #16 wasmkv 00512D2A |. E8 5568FEFF CALL 004F9584 00512D2F 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14] ;здесь в EAX загружается адрес по которому находится правильный ключ 00512D32 8D55 F0 LEA EDX,DWORD PTR SS:[EBP-10] 00512D35 E8 8264EFFF CALL 004091BC 1nn0cent пишет: wasmkv пишет: 00512D2F После этого адреса делай JMP на свой код, который выведет серийник в файл или куда там тебе надо. После кода делай JMP обратно, только не забудь то что затрешь восстановить. PE_Kill пишет: wasmkv пишет: 00512D32 E9 0D5D0000 JMP 00518A44 ;переход на мой код на свободное место ну а по адресу 00518A44 пишешь mov dword [00512D32],0E8F0558D mov dword [00512D36],0FFEF6482 ------| замуты с серийником |------ ************************ ------------------------------------------- jmp 00512D32 Всё правильно, за исключекнием того, что: НАДО ДОБАВИТЬ (чисто алгоритм): 1. Перед прыжком В НЕИСПОЛЬЗУЕМОЕ/ПУСТОЕ место записываешь 0 или 1 (или чё хошь) 2. Собственно сам прыжок 3. Проверка на то, что прыжок первый (это та переменная из п.1) 4.1. Если да - замуты с серийником + INC переменной, определенной ранее (п.1) + прыжок на п.5 4.2. Нет - прыжок на п.5 5. Тот код, что затер 6. Возврат (прыжок) на продолжение Примерно такую конструкцию заюзал, когда делал регистратор для игр с новой защитой от мэйла (ведь опыта в написании кейгена тоже ёк). Правда замутов с ошибкой не было, поэтому проверку на первый это прыжок или нет - не делал ![]() |
|
Создано: 25 марта 2007 03:58 · Личное сообщение · #17 |
|
Создано: 25 марта 2007 09:52 · Личное сообщение · #18 |
|
Создано: 26 марта 2007 10:12 · Поправил: wasmkv · Личное сообщение · #19 1nn0cent пишет: Посмотри внимательней пост PE_Kill'a. И запиши в моем коде на место старый код. Тогда все будет ок, и МессагеБокс вылезет один раз. Да я так и хотел, после первой проверки вернуть код на свое прежнее место. Но возникают проблемы с записью в память. Hellspawn пишет: попробуй поставить на эту секцию флаг записи Подскажите пожалуйста, как это сделать? ![]() |
|
Создано: 26 марта 2007 11:28 · Личное сообщение · #20 |
|
Создано: 26 марта 2007 17:07 · Личное сообщение · #21 tundra37 пишет: wasmkv По-моему ты перемудрил. Для того чтобы узнать серийник нужна правленная программа. Приходится мудрить, потому что не получается. Сегодня столкнулся с новой проблемой, нормально работающая правленная программа хотя и с 8 MessageBox'ами на одной машине, отказывается работать на другой. Прога выдает сообщение: Access violation at address 00000000. Read of address 00000000. 00513F5F 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14] 00513F62 E9 B95F0000 JMP 00519F20 ; внесенные изменения в прогу выделены 00513F67 90 NOP 00513F68 90 NOP 00513F69 90 NOP 00513F6A 8B55 F0 MOV EDX,DWORD PTR SS:[EBP-10] Мой код 00519F20 60 PUSHAD 00519F21 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL 00519F23 68 409F5100 PUSH 00519F40 ; |Title = "Key" 00519F28 50 PUSH EAX ; |Text 00519F29 6A 00 PUSH 0 ; |hOwner = NULL 00519F2B E8 C2658577 CALL user32.MessageBoxA ; \MessageBoxA 00519F30 61 POPAD 00519F31 8D55 F0 LEA EDX,DWORD PTR SS:[EBP-10] ;это затертые JMP'ом команды в проге 00519F34 E8 3BF2EEFF CALL 00409174 ;это затертые JMP'ом команды в проге 00519F39 E9 29A0FFFF JMP 00513F6A 00519F3E 00 DB 00 00519F3F 00 DB 00 00519F40 4B 65 79 00 ASCII "Key",0 Может я ошибаюсь, но мне кажется, что это может происходить из-за того MessageBoxA на разных машинах грузится по различным адресам. Как это можно обойти и заставить работать на других компах ??? ![]() |
|
Создано: 27 марта 2007 12:44 · Личное сообщение · #22 wasmkv пишет: Как это можно обойти и заставить работать на других компах На других машинах не работает, т.к. тебе дали "черновой" вариант. У тебя вбит вызов 00519F2B E8 C2658577 CALL user32.MessageBoxA ; \MessageBoxA в котором зашит конкретный адрес. На другом сервис-паке и другой ОС, адрес другой. По хорошему надо искать в таблице импорта и ставить обращение туда. С твоим уровнем тебе в запросы на взлом надо или жди добрую душу ![]() Либо изготавливай кейген "по черному" на каждой из машин. ![]() |
|
Создано: 27 марта 2007 15:59 · Поправил: wasmkv · Личное сообщение · #23 tundra37 пишет: С твоим уровнем тебе в запросы на взлом надо или жди добрую душу Спасибо за ответ, но вместо отправлять в запросы на взлом, лучше дали бы ссылочку где об этом можно почитать. Это все таки одна из нескольких взломаных мной программ. И запрос я запостил в раздел Вопросы новичков ибо в запросах на взлом я свой уровень повысить не смогу, а хочется все-таки самому научиться. ![]() |
|
Создано: 27 марта 2007 16:26 · Личное сообщение · #24 |
|
Создано: 27 марта 2007 19:13 · Личное сообщение · #25 wasmkv пишет: дали бы ссылочку где об этом можно почитать Вся информация в разделе "Новичку". Какую ссылку ? Про импорт, про патчи ? Число программ вовсе не говорит про уровень - ты азбуки не знаешь. Тупо делаешь что-то, не понимая смысл. В конце концов взял бы просто и посмотрел на отладчике, как "заплатка" отрабатывает на другой машине - сразу все увидел бы. А у тебя сплошные вопросы и бездействие. Так долго учится будешь. "Глубже копайте - там золото". ![]() |
|
Создано: 28 марта 2007 10:47 · Поправил: wasmkv · Личное сообщение · #26 tundra37 пишет: На других машинах не работает, т.к. тебе дали "черновой" вариант Этот черновой вариант я правил сам в Ольке и код CALL user32.MessageBoxA мне выдал отладчик. А ошибку свою я понял. Ошибся в том, что понадеялся что Windows XP SP2 устанавливался на обе машины с одного диска, а на другой машине не было отладчика. Когда разобрался, то исправил. Все оказалось очень даже просто и оригинально, без всяких JMP и восстановления затертых команд. Ниже привожу код, правда из более новой версии программы: 00513F5A . E8 5568FEFF CALL 004FA7B4 ; оригинал 00513F5F . 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14] ; оригинал 00513F62 . 8B15 38325200 MOV EDX,DWORD PTR DS:[<&user32.MessageBoxA>]; адрес из таблицы импорта 00513F68 . 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL 00513F6A . 68 803F5100 PUSH 00513F80 ; |Title = "Key" 00513F6F . 50 PUSH EAX ; |Text 00513F70 . 6A 00 PUSH 0 ; |hOwner = NULL 00513F72 . FFD2 CALL EDX ; \MessageBoxA 00513F74 . 8B15 EC315200 MOV EDX,DWORD PTR DS:[<&kernel32.Exi>; адрес kernel32.ExitProcess из таблицы импорта 00513F7A . 6A 00 PUSH 0 ; /ExitCode = 0 00513F7C . FFD2 CALL EDX ; \ExitProcess 00513F7E . 90 NOP 00513F7F . 90 NOP 00513F80 . 4B DEC EBX ; заголовок окна 00513F81 . 65790000 DD 00007965 ; 'Key' Осталось только сделать лоадер с помощью diablo2oo2's Universal Patcher [dUP], который проделает эту работу в памяти, дабы уменьшить размер кейгена. Огромное СПАСИБО всем, кто хоть как-то пытался помочь. Особая благодарность 1nn0cent,PE_Kill и также tundra37. ![]() |
|
Создано: 29 марта 2007 08:57 · Личное сообщение · #27 |
![]() |
eXeL@B —› Вопросы новичков —› Нужна помощь в создании кейгена! |
Эта тема закрыта. Ответы больше не принимаются. |