• XSS.stack #1 – первый литературный журнал от юзеров форума

Ручной анпак UPX

CheckerChin

(L2) cache
Забанен
Регистрация
05.11.2018
Сообщения
485
Решения
3
Реакции
255
Гарант сделки
1
Пожалуйста, обратите внимание, что пользователь заблокирован
Всем привет, заинтересовался вопросом как снять upx руками.
Знаю, что есть ключик -d, но интерес руками сделать.
Вообщем поставил бряк на tail jumpе, получил распакованный билд.
Беру Scylla, делаю дамп и фикс дампа.

Смотрю фикшенный бинарь (_SCY который), EP в UPX0. Закидываю в дизасм, всё сходится с оригинальным.
Только вот почему-то бинарь не работает. Бинарь вызывает LoadLibraryExW, там идет вызов RtlInitUnicodeStringEx, внутри происходит исключение EXCEPTION_ACCESS_VIOLATION.
В оригинальном бинаре такого исключения само собой нет.

Бинарь: accesschk64.exe из sysinternals
пакер: UPX 4.2.4
Команда для пакера: upx.exe -9 -o out.exe accesschk64.exe

Если у кого-то есть идеи, буду рад почитать.
 
Всем привет, заинтересовался вопросом как снять upx руками.
Знаю, что есть ключик -d, но интерес руками сделать.
Вообщем поставил бряк на tail jumpе, получил распакованный билд.
Беру Scylla, делаю дамп и фикс дампа.

Смотрю фикшенный бинарь (_SCY который), EP в UPX0. Закидываю в дизасм, всё сходится с оригинальным.
Только вот почему-то бинарь не работает. Бинарь вызывает LoadLibraryExW, там идет вызов RtlInitUnicodeStringEx, внутри происходит исключение EXCEPTION_ACCESS_VIOLATION.
В оригинальном бинаре такого исключения само собой нет.

Бинарь: accesschk64.exe из sysinternals
пакер: UPX 4.2.4
Команда для пакера: upx.exe -9 -o out.exe accesschk64.exe

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


C:
typedef struct _IMAGE_SECTION_HEADER {
  BYTE  Name[IMAGE_SIZEOF_SHORT_NAME];
  union {
    DWORD PhysicalAddress;
    DWORD VirtualSize;
  } Misc;
  DWORD VirtualAddress;
  DWORD SizeOfRawData;
  DWORD PointerToRawData;
  DWORD PointerToRelocations;
  DWORD PointerToLinenumbers;
  WORD  NumberOfRelocations;
  WORD  NumberOfLinenumbers;
  DWORD Characteristics;
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;

на диске секция располагается по оффсету PointerToRawData, а в память мапается по VirtualAddress
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Возможно дело в том, что ты сдампил мапнутый пешник, т.е. обработанный загрузчиком:
При загрузке пешника в память на определенном этапе обрабатываются секции


C:
typedef struct _IMAGE_SECTION_HEADER {
  BYTE  Name[IMAGE_SIZEOF_SHORT_NAME];
  union {
    DWORD PhysicalAddress;
    DWORD VirtualSize;
  } Misc;
  DWORD VirtualAddress;
  DWORD SizeOfRawData;
  DWORD PointerToRawData;
  DWORD PointerToRelocations;
  DWORD PointerToLinenumbers;
  WORD  NumberOfRelocations;
  WORD  NumberOfLinenumbers;
  DWORD Characteristics;
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;

на диске секция располагается по оффсету PointerToRawData, а в память мапается по VirtualAddress
да нет, вроде с секциями всё норм.
Если бы траблы с секциями были бы, то он бы наверное вообще не запускался.
А так он часть кода выполняет, но потом краш
 
да нет, вроде с секциями всё норм.
Если бы траблы с секциями были бы, то он бы наверное вообще не запускался.
А так он часть кода выполняет, но потом краш
Релоки, тлс, мб еще что то - сравни бинарники то, гдето да различается
 
Всем привет, заинтересовался вопросом как снять upx руками.
Знаю, что есть ключик -d, но интерес руками сделать.
Вообщем поставил бряк на tail jumpе, получил распакованный билд.
Беру Scylla, делаю дамп и фикс дампа.

Смотрю фикшенный бинарь (_SCY который), EP в UPX0. Закидываю в дизасм, всё сходится с оригинальным.
Только вот почему-то бинарь не работает. Бинарь вызывает LoadLibraryExW, там идет вызов RtlInitUnicodeStringEx, внутри происходит исключение EXCEPTION_ACCESS_VIOLATION.
В оригинальном бинаре такого исключения само собой нет.

Бинарь: accesschk64.exe из sysinternals
пакер: UPX 4.2.4
Команда для пакера: upx.exe -9 -o out.exe accesschk64.exe

Если у кого-то есть идеи, буду рад почитать.
Попробуй сделать binary diffing
 
Раз ты до отладчика добрался, то в нём и посмотри, где происходит ошибка и что её вызывает. Функция RtlInitUnicodeStringEx просто записывает значения в буфер, который выделяется на стеке в функции LoadLibraryExW.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх