Unz - распаковщик файлов zip и 7z, основанный на archiver.obj

Work with drives, directories, files
  • Я исправил положение поля с паролем, но выяснилась другая проблема: память поля затирается. Первые 1-4 байта.
    Я проверял даже на старых дистрах - то же самое. Пароль соответственно не работает.

    Кто разбирается в ассемблере, гляньте, пожалуйста.
    Прилагаю тестовый архив с паролем.

    Пароль 123456
    Attachments
    game.zip (4.69 KiB)
    Пароль 123456
    Downloaded 124 times
    Screenshot_3.png
    Screenshot_3.png (6.48 KiB)
    Viewed 5045 times
    Last edited by Leency on Mon Jun 14, 2021 11:16 pm, edited 1 time in total.
    Из хаоса в космос
  • Leency wrote:Прилагаю тестовый архив с паролем.
    А какой пароль для распаковки этого архива? Единицы как на скрине?
  • Добавил другой архив.
    Пароль 123456

    И обновись с SVN. Я удалил старый код, получив одобрение автора. Была задумка, которая осталась незакончена, сделать предпросмотр содержимого архива и выделение чекбоксами.

    Вообще код Unz требует структуризации и чистки :)
    Из хаоса в космос
  • В общем что я смог выяснить по текстовому полю с паролем:
    1) сначала текстовое поле с паролем берет текст из переменной

    Code: Select all

    password	rb 256
    2) потом в это текстовое поле подставляется какое-то поле из структуры dlgInfo

    Code: Select all

    	mov	ebx,[dlgInfo]
    	mov	eax,[ebx+19*4]
    3) и где-то в программе по адресу этого поля структуры dlgInfo пишутся какие-то символы, которые отображаются квадратиками
    Т.е. не понятно что это за структура dlgInfo ? И не ясно в какой из функций появляются символы квадратики, возможно где-то внутри функции aPluginLoad ???
    Пробовал делать что-бы текстовое поле работало само по себе а при закрытии из него пароль копировался по адресу [dlgInfo+19*4]. Квадратики пропадают, но появляется сообщение Ошибка в данных архива или неверный пароль и пароль не распаковывается. Т.е. проблема не в текстовом поле, потому что оно само по себе работает.
  • Картина такая: ссылка на password хранится в структуре edtPassword и в переменной forpassword. Очевидно я думал, что место хранения пароля может быть не только в password. Но это не важно. Важно то, что в коде unz я виду лишь одну запись в поле password - и это запись нулевого байта 0 - очистка строки, короче:
    Spoiler:proc DialogBox dlgInfo:dword
    pushad
    mov ebx,[dlgInfo] ;**
    mov eax,[ebx+19*4]
    mov [forpassword],eax
    mov byte[eax], 0 ;здесь обнуляю строку
    mov [stateDlg], 0
    mcall 51,1,threadDialogBox,stackDlg
    В строке ** очень интересно то, что тут в 19 dword лежит ссылка на password. Этот dlgInfo <= kfar_info_struc.DialogBox и kfar_info.DialogBox , но где используется kfar_info_struc - не вижу. А kfar_info используется плагином. В kfar нет аналогичного бага? Ну и в поле password пишет boxlib. На этом всё пока.
    Отлаживать это дело надо, долго и упорно.
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • Should be fixed in #8900.
  • Great, thanks!
    Из хаоса в космос
  • Who is online

    Users browsing this forum: No registered users and 2 guests