"ED!SON (пер. Mr.Boco). Как ломать программы Windows" - читать интересную книгу автора printf("Your code is: %lu", code);
return 0; } Приятных сновидений! 4. КАК РАБОТАЮТ PUSH И CALL КОГДА ПРОГРАММА ВЫЗЫВАЕТ ФУНКЦИЮ ============================================================ Снова взглянем на кусок кода из Task Lock'а: PUSH 32 ; Макс. длина строки PUSH EAX ; Адрес текстового буфера PUSH 000003F4 ; Идентификатор управления PUSH DWORD PTR [ESI+1C] ; Идентификатор окна диалога CALL [USER32!GetDlgItemTextA] ; Получает текст Когда Вы вызываете функцию GetDlgItemTextA из программы на C, вызов выглядит так: GetDlgItemTextA(hwndDlg, 0x3F4, buffer, 0x32); ^ [ESI+1C] ^ EAX PUSH сохраняет данные в области памяти, называемой стеком. В результате вызываемая функция проверяет, что лежит в стеке и использует эти данные по своему усмотрению. 5. О ПРОГРАММАХ НА VISUAL BASIC =============================== EXE файлы, производимые Visual Basic'ом, не являются настоящими EXE. Они просто содержат код для вызова VBRUNxxx.DLL, который затем читает данные из EXE и выполняет программу. Такое устройство псевдо-EXE файлов является также причиной того, что программы на Visual Basic'е такие медленные. А так как EXE файлы не являются настоящими EXE файлами, Вы не можете трассировать и дизассемблировать их - Вы найдете вызов функции из DLL и кучу мусора. И когда Вы будете трассировать такую программу, Вы "заблудитесь" в DLL. Решением этой проблемы является декомпилятор. Существует декомпилятор для программ, написанных на Visual Basic'е версий 2 и 3, созданный кем-то, называющим себя DoDi. Эта программя является шареварной и ее можно найти в InterNet'е (см. Приложение C). Для программ, написанных на Visual Basic'е версии 4 (VB для Windows 95), не существует декомпилятора, насколько мне известно, хотя я бы хотел, чтобы он существовал. =) Примечание: Настоящие программисты на пишут на Basic'е. =) |
|
|