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

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

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

Создано: 12 февраля 2010 23:20
· Личное сообщение · #1

Вкратце у меня два вопроса. Первый:как найти и где искать команду jmp/call <регистр>. И второй: есть такой код
root()
{
printf("your have root!\n");
}
main()
{
char passwd[16];char login[16];
printf("login: ");gets(login);
printf("passwd: ");gets(passwd);
if (!strcmp(login,"bob")&&!strcmp(passwd,"god"))
printf("Hello, bob!\n");
}
Как сделать чтоб после компиляции адрес функции root() был к примеру 401020 а не 401000.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 12 февраля 2010 23:26
· Личное сообщение · #2

1. Можешь по опкодам искать в ольке в бинарном поиске, можешь сразу командой, поисков в ольке разных хватает. Лучше искать, чтоб было по константному адресу.
2. Ну добавь ещё процедуру перед ней.



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

Создано: 12 февраля 2010 23:53 · Поправил: neoBlinXaker
· Личное сообщение · #3

2. Ну добавь ещё процедуру перед ней.
Спасибо.Это работает. А только добавлением процедуры можно изменить адрес или есть спец. опции компилятора? Просто в книге дизасм листинг этой проги показывает адрес root() 401150 но код такой же.

С первым разобрался.




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 13 февраля 2010 00:41
· Личное сообщение · #4

У меня к примеру адрес функции root() равен 00401021
Code:
  1. 00401020 >/>  55            push ebp
  2. 00401021  |.  8BEC          mov ebp, esp
  3. 00401023  |.  83EC 40       sub esp, 40
  4. 00401026  |.  53            push ebx
  5. 00401027  |.  56            push esi
  6. 00401028  |.  57            push edi
  7. 00401029  |.  8D7D C0       lea edi, dword ptr ss:[ebp-40]
  8. 0040102C  |.  B9 10000000   mov ecx, 10
  9. 00401031  |.  B8 CCCCCCCC   mov eax, CCCCCCCC
  10. 00401036  |.  F3:AB         rep stos dword ptr es:[edi]
  11. 00401038  |.  68 1C904200   push 42901C                              ; /format = "your have root!
  12. "
  13. 0040103D  |.  E8 EE000000   call 00401130                            ; \printf
  14. 00401042  |.  83C4 04       add esp, 4
  15. 00401045  |.  5F            pop edi
  16. 00401046  |.  5E            pop esi
  17. 00401047  |.  5B            pop ebx
  18. 00401048  |.  83C4 40       add esp, 40
  19. 0040104B  |.  3BEC          cmp ebp, esp
  20. 0040104D  |.  E8 7E010000   call 004011D0                            ; 111._chkesp
  21. 00401052  |.  8BE5          mov esp, ebp
  22. 00401054  |.  5D            pop ebp
  23. 00401055  \.  C3            retn


-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




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

Создано: 13 февраля 2010 01:10 · Поправил: neoBlinXaker
· Личное сообщение · #5

Всем спасибо. Нужно было компилировать с отладочной инфой. Тема закрыта.


 eXeL@B —› Вопросы новичков —› Пример с переполнением буфера
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати