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

 eXeL@B —› Вопросы новичков —› OllyDbg, сохранение отредактированной программы
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 3.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 12 октября 2013 20:01 · Поправил: Leksar
· Личное сообщение · #1

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



ее заменяем на эту



далее ниже есть просто нули, в конце программы



их заменяем на




потом правой кнопкой нажимаю "Copy to executable"->"All modifications"
и тут вылетает такое окошко




обычно нажимаю на Copy All и далее сохраняю в файл, а тут не выходит, что я не так делаю?




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

Создано: 12 октября 2013 20:05 · Поправил: Dr0p
· Личное сообщение · #2

> далее ниже есть просто нули, в конце программы

Это походу не дисковое пространство, а пустая память в следствии физического выравнивания. Расширить нужно секцию или новую добавить.



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 12 октября 2013 20:05 · Поправил: Veliant
· Личное сообщение · #3

Указанная память лежит за пределами физического размера секции. Либо расширяй нужную секцию, либо просто сдампи, восстанови импорт и вноси правки в дамп.
Еще вариант найти свободное место выше по коду



Ранг: 3.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 12 октября 2013 20:10
· Личное сообщение · #4

> Расширить нужно секцию или новую добавить.
как это сделать правильно?

> либо просто сдампи, восстанови импорт и вноси правки в дамп.
Это тоже интересно будет узнать




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

Создано: 12 октября 2013 20:13
· Личное сообщение · #5

IMAGE_SECTION_HEADER.SizeOfRawData



Ранг: 3.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 12 октября 2013 20:20
· Личное сообщение · #6

спасибо, буду пробовать



Ранг: 49.7 (посетитель), 19thx
Активность: 0.050
Статус: Участник

Создано: 12 октября 2013 22:13 · Поправил: sivorog
· Личное сообщение · #7

да просто свободное место найди в файле, не в памяти.
т.е., секцию .text , например, сохрани отдельно на диск.
затем её открой в Hex editor'е, в любом.
Если в конце есть достаточно нулей, то дело в шляпе



Ранг: 3.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 12 октября 2013 22:46 · Поправил: Leksar
· Личное сообщение · #8

sivorog пишет:
Если в конце есть достаточно нулей, то дело в шляпе

ну вот к примеру, секция .rdata



в конце нулей достаточно, я так понял делать тоже самое, но только с "нулями" в этой секции. По картинке видно ее адрес 00608000.
Все верно?



Ранг: 6.2 (гость), 10thx
Активность: 0.020
Статус: Участник

Создано: 13 октября 2013 01:09 · Поправил: __X3__
· Личное сообщение · #9

Leksar пишет:
ее адрес 00608000

Её адрес 00608000+ImageBase=00608000+00400000=00A80000. Чтобы не затереть tls добавим 18.
Т. е.:
Code:
  1. CALL 00404728
  2. CALL 00A80018
  3. NOP


Пардонте, не увидел, ImageBase уже учтён, тогда

Code:
  1. CALL 00404728
  2. CALL 00680018
  3. NOP





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

Создано: 13 октября 2013 01:25 · Поправил: Модератор
· Личное сообщение · #10

Leksar

Чувак добавь ты новую секцию и не парься. Я так всегда делаю. Канает если нет самопроверок, но с ними я только один раз столкнулся, так что всё пройдёт. И заюзай лодер, не парь себе мозги с пикодами(дельтаоффсет). Это зло. Ты в будущем это осознаешь.



Ранг: 3.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 13 октября 2013 10:25 · Поправил: Leksar
· Личное сообщение · #11

сделал по этой инструкции:

Запускаешь lordpe, открываешь файл в pe editor, заходишь в sections делаешь add, потом делаешь edit этой секции, в virtualAddress и в rawsize указываешь размер например 1000 закрываешь, сохраняешь, потом я файл открывал в hiew переключался в hex режим, перемещался в самый низ и нажимая shift+f3, вставлял 4096 байт (это в десятичном системе исчисления, узнаешь спомощью калькулятора), ок,esc Все!



секция .new, это скрин другой программы, но защита у них одинаковая.

далее в Olly с адреса 00624000 вставляем свой код и обращаемся к нему "CALL 00624000", верно?



Ранг: 3.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 13 октября 2013 10:27 · Поправил: Leksar
· Личное сообщение · #12

__X3__, без добавления секции тоже заработало, перешел по адресу 00608018, добавил код и все норм



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 13 октября 2013 10:41
· Личное сообщение · #13

Если верить твоей табличке секций, адрес 00608018 находится в секции .reloc, которая не имеет прав на исполнение. Так что как минимум следует их добавить.



Ранг: 3.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 13 октября 2013 10:59 · Поправил: Leksar
· Личное сообщение · #14

Сделал изменения, запустил в отладчике, все конечно заработало, но потом когда сохраняю, процедура, которая начинается с адреса 00608018, не сохраняется, там только нули после повторного открытия. А вот код "CALL 00608018", который вызывает эту процедуру, сохранился. Это из-за прав? Как мне сохранить изменения в секции .reloc? Или другую секцию выбрать?
----------------------------

у меня уже крыша едет...
может кто-нибудь посмотреть, если не сложно, добавить секцию или показать куда вставлять код чтобы все работало. Остальное я сам сделаю, так как там ему имя компьютера и некоторые другие данные
вот эту процедуру заменить на свою
Code:
  1. 004B8966     50             PUSH EAX
  2. 004B8967     E8 34DDF4FF    CALL <JMP.&advapi32.GetUserNameA>

то есть чтоб считывалось не реальное имя пользователя, а свое.

вот этот код чтобы вызывался (надеюсь он правильный)
Code:
  1. PUSHAD
  2. MOV     ESI, @pc
  3. MOV     EDI, EAX
  4. MOV     ECX, 20 
  5. REP     MOVS BYTE PTR ES:[EDI], BYTE PTR DS:[ESI]
  6. POPAD
  7. RET
  8.  
  9.  
  10. @pc: "yourPCname"


PaintInProExe3 [2.15 Mb]

---------------------------------------
вот кстати мой пост где запросы на взлом, никто так и не помог
http://exelab.ru/f/action=vthread&forum=2&topic=21832&page=11#17




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 13 октября 2013 11:48
· Личное сообщение · #15

Leksar
Code:
  1.   PUSHAD
  2.   MOV ESI,4BD5FA
  3.   MOV EDI,EAX
  4.   MOV ECX,5
  5.   REP MOVS BYTE PTR ES:[EDI],BYTE PTR [ESI]
  6.   POPAD
  7.   RETN
  8.   ASCII "Admin",0


Всё влезло прям тютелька в тютельку
--> Link <--

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 3.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 13 октября 2013 12:04 · Поправил: Leksar
· Личное сообщение · #16

ClockMan
а вот если мне еще код нужно будет добавить, куда его тыкать?
места ниже больше нету.
До меня только сейчас дошло, виртуальный адрес этой секции(CODE) - 00401000, размер RAW данных - BC600, считаем на калькуляторе
00401000+BC600=4BD600
на скрине видно этот адрес


то есть ниже 4BD600 нельзя ничего вставлять
А вот если расширить секцию кода? тогда наверно другие нижние секции могут "повредиться", как с ними быть?




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 13 октября 2013 12:13
· Личное сообщение · #17

Leksar пишет:
А вот если расширить секцию кода?

добавть секцию в конец файла(любым PE редактором) и пиши любой код.
Leksar пишет:
До меня только сейчас дошло, виртуальный адрес этой секции(CODE) - 00401000, размер RAW данных - BC600, считаем на калькуляторе
00401000+BC600=4BD600

Радует что на конец ты понял в чём у тебя была проблема!

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 3.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 13 октября 2013 12:48
· Личное сообщение · #18

еще вопрос, при добавлении новой секции надо нули в конец файла добавлять.
например размер секции 1000, сколько нулей должно быть?




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 13 октября 2013 12:59
· Личное сообщение · #19

Leksar пишет:
1000, сколько нулей должно быть?

Hex>Dec

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 3.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 13 октября 2013 13:00
· Личное сообщение · #20

4096, то есть 4кб




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

Создано: 13 октября 2013 14:10
· Личное сообщение · #21

Leksar

Если дисковый размер больше того, что указан для секции, то получается оверлей, его лодер не подгрузит.



Ранг: 3.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 13 октября 2013 14:15
· Личное сообщение · #22

получилось наконец, всем спасибо!
также помогла статья Модификация исполняемых PE-файлов



Ранг: 3.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 13 октября 2013 14:39 · Поправил: Leksar
· Личное сообщение · #23

еще кое-что
вот есть процедура

Code:
  1.   PUSHAD
  2.   MOV ESI,4BD5FA
  3.   MOV EDI,EAX
  4.   MOV ECX,20
  5.   REP MOVS BYTE PTR ES:[EDI],BYTE PTR [ESI]
  6.   POPAD
  7.   RETN
  8.   ASCII "Admin",0

на входе у нас EAX, и в него записывается "Admin"

для имени компьютера все то же самое, к примеру "Admin-PC".
Еще есть несколько подобных параметров, мне для всех создавать одинаковые процедуры придется?
Можно как-нибудь минимизировать, то есть процедура одна, под ней данные идут:
Code:
  1. ASCII "Admin",0
  2. ASCII "Admin-PC",0
  3. ASCII "C:\Windows",0
  4. ASCII "564124162",0

чтобы не создавать несколько функций, решение есть какое-нибудь?
-------------------------

думаю вот что:
было это
Code:
  1. 004B8AFA  |. 50             PUSH EAX                                 ; |Buffer
  2. 004B8AFB  |. E8 98DCF4FF    CALL <JMP.&kernel32.GetComputerNameA>    ; \GetComputerNameA


меняем PUSH EAX на PUSH 1 к примеру
а в процедуре уже делаем POP EBX, и сравниваем CMP EBX,1
и в зависимости от EBX записываем в Buffer ту или иную строку через JZ..., но тут проблема
"PUSH EAX" занимает один байт, "PUSH 1" - два байта, как быть тут?




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 13 октября 2013 15:28
· Личное сообщение · #24

Leksar пишет:
меняем PUSH EAX на PUSH 1 к примеру
а в процедуре уже делаем POP EBX, и сравниваем CMP EBX,1

В стеке указан адрес возврата из процедуры,почему бы не им воспользоваться?
Ну примерно так(код с подвохам для раз вашего мозга)
Code:
  1. /*4BD5E9*/  PUSHAD
  2. /*4BD5EA*/  MOV EDI,EAX
  3. /*4BD5EC*/  MOV EAX,[ESP+20]
  4. /*4BD5F0*/  CMP EAX,4B896B==========>1
  5. /*4BD5F5*/  JE SHORT 004BD60F
  6. /*4BD5F7*/  CMP EAX,4B896B==========>2
  7. /*4BD5FC*/  JE SHORT 004BD61B
  8. /*4BD5FE*/  CMP EAX,4B896B==========>3
  9. /*4BD603*/  MOV ESI,4BD5FA==========>указ.на строку 3
  10. /*4BD608*/  MOV ECX,5===============>длина строки 3
  11. /*4BD60D*/  JMP SHORT 004BD625
  12. /*4BD60F*/  MOV ESI,4BD5FA==========>указ.на строку 1
  13. /*4BD614*/  MOV ECX,5===============>длина строки 1
  14. /*4BD619*/  JMP SHORT 004BD625
  15. /*4BD61B*/  MOV ESI,4BD5FA==========>указ.на строку 2
  16. /*4BD620*/  MOV ECX,5===============>длина строки 2
  17. /*4BD625*/  CALL 004BD62C
  18. /*4BD62A*/  POPAD
  19. /*4BD62B*/  RETN
  20. /*4BD62C*/  REP MOVS BYTE PTR ES:[EDI],BYTE PTR [ESI]
  21. /*4BD62E*/  RETN


-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 6.2 (гость), 10thx
Активность: 0.020
Статус: Участник

Создано: 13 октября 2013 15:49
· Личное сообщение · #25

Leksar пишет:
минимизировать, то есть процедура одна, под ней данные идут:

Апи - kernel32.lstrcpy, не?



Ранг: 3.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 13 октября 2013 15:55 · Поправил: Leksar
· Личное сообщение · #26

ClockMan, точно я про стек забыл, думал с флагами мудрить, а тут все просто.
в ESP хранится верхний адрес стека, то есть можно сказать команда
Code:
  1. POP EAX

то же самое что и
Code:
  1. MOV EAX,[ESP]


И так как мы сделали PUSHAD, то сначала идут 8 значений регистров, а потом уже адрес возврата, делаем ESP+20 (не пойму связь между 8 и 20), помещаем его в EAX и сравниваем...

__X3__ пишет:
Апи - kernel32.lstrcpy, не?

даже не знаю, не работал с api функциями в ассемблере




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 13 октября 2013 15:58
· Личное сообщение · #27

Leksar пишет:
И так как мы сделали PUSHAD, то сначала идут 8 значений регистров, а потом уже адрес возврата, делаем ESP+20 (не пойму связь между 8 и 20), помещаем его в EAX и сравниваем...

Молодец 5

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 6.2 (гость), 10thx
Активность: 0.020
Статус: Участник

Создано: 13 октября 2013 16:05
· Личное сообщение · #28

Leksar пишет:
даже не знаю, не работал с api функциями в ассемблере


push @1
push eax
CALL <JMP.&kernel32.lstrcpyA>

...

push @2
push eax
CALL <JMP.&kernel32.lstrcpyA>

...

@1:
ASCII "Admin",0
@2:
ASCII "Admin-PC",0



Ранг: 3.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 13 октября 2013 16:17
· Личное сообщение · #29

__X3__, пока лучше обойдусь без апи.

еще вопрос, в созданной мной секции, когда пишу код, его нельзя анализировать, чтоб отображалось как
Code:
  1. ASCII "Admin",0


а тут отображается следующее
Code:
  1. 00630012   4F               DEC EDI
  2. 00630013   44               INC ESP
  3. 00630014   6D               INS DWORD PTR ES:[EDI],DX                ; I/O command
  4. 00630015   6E               OUTS DX,BYTE PTR ES:[EDI]                ; I/O command
  5. 00630016   66:0000          ADD BYTE PTR DS:[EAX],AL


проблему можно решить?




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 13 октября 2013 16:31 · Поправил: ClockMan
· Личное сообщение · #30

Leksar пишет:
проблему можно решить?

Выделяем мышкой > ПКМ > Analysis > During next analysis,treat selection as > ASCII Text

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.



. 1 . 2 . >>
 eXeL@B —› Вопросы новичков —› OllyDbg, сохранение отредактированной программы
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати