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

 eXeL@B —› Протекторы —› Прошу помощи с "изменённым" UPX
Посл.ответ Сообщение

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

Создано: 27 февраля 2018 08:19 · Поправил: ap0stol
· Личное сообщение · #1

Добрый день!

Прошу помощи с методикой распаковки кривого UPX
http://ge.tt/3lIbFko2

Суть такая:
если распаковать UPX-ом, то файл оказывается нерабочим, тем не менее, если далее проюзать на файл из PE Tools v1.5 RC7 плагин Reloc Rebuilder, то получаем работоспособный файл.

Если пытаться распаковать x64dbg + scylla используя скрипт
https://github.com/x64dbg/Scripts/blob/master/upx391.txt
, то получаем
oep 000000013FF3A4FC
va 000000013FF3B000
size 00000550
и кривой импорт 000000013FF3A9D4 с инструкцией RET 0x0
либо 19 кривых импортов, если не соглашаться с advanced search
и естественно нерабочий дамп.

Скрипт https://github.com/x64dbg/Scripts/blob/master/3.06_to_3.91.txt не находит OEP вообще.

Если пытаться распаковать через бряк на доступ к памяти по rsp на втором шагу модуля zm.exe
то получаю аналогичные скрипту oep и va
и аналогичный кривой импорт 000000013F5FA9D4 с инструкцией RET 0x0

я понимаю что где-то, видимо, косячю с правильным OEP, но не могу понять где. Прошу помощи.

цель не столько именно распаковать (т.к. распакованный вариант есть), а понять что делаю не правильно и делать правильно, ну и распаковать новую версию этого майнера) http://ge.tt/4X1yHko2 (в неё как минимум ssl влинковано)

Добавлено спустя 12 минут
да, более свежая версия этого файла\майнера распаковывается UPX-ом, но Reloc Rebuilder не берёт распакованный файл

Ps это dstm майнер



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

Создано: 27 февраля 2018 09:06
· Личное сообщение · #2

после Pushad бряк на доступ на Dword смотрим стек,дальше там Popad и джамп на OEP.



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

Создано: 27 февраля 2018 10:02 · Поправил: ap0stol
· Личное сообщение · #3

ей богу, туплю что-ли...

если распаковывать через x64dbg, я делаю следующее:
из
0000000077BD7981 | EB 00 | jmp ntdll.77BD7983 |
выполнить до
>>000000013F3CC190 | 53 | push rbx |
000000013F3CC191 | 56 | push rsi |
000000013F3CC192 | 57 | push rdi |
000000013F3CC193 | 55 | push rbp |
000000013F3CC194 | 48 8D 35 65 DE FD FF | lea rsi,qword ptr ds:[13F3AA000] |
000000013F3CC19B | 48 8D BE 00 70 CB FF | lea rdi,qword ptr ds:[rsi-349000] |

делаю шаг до второй строки
000000013F3CC191 | 56 | push rsi |
далее RSP-перейти к дампу, аппаратный бряк на память\доступ dword

попадаем в
(даже если шаг сделать до 000000013F3CC194 и там RSP-перейти к дампу - переход всё-равно в этот код происходит)
000000013F3CC3FD | 48 8D 44 24 80 | lea rax,qword ptr ss:[rsp-80] |
000000013F3CC402 | 6A 00 | push 0 |
000000013F3CC404 | 48 39 C4 | cmp rsp,rax |
000000013F3CC407 | 75 F9 | jne zm.13F3CC402 |
000000013F3CC409 | 48 83 EC 80 | sub rsp,FFFFFFFFFFFFFF80 |
000000013F3CC40D | E9 EA E0 CA FF | jmp zm.13F07A4FC |
000000013F3CC412 | 00 00 | add byte ptr ds:[rax],al |
000000013F3CC414 | 00 00 | add byte ptr ds:[rax],al |
000000013F3CC416 | 00 00 | add byte ptr ds:[rax],al |
000000013F3CC418 | 94 | xchg esp,eax |
000000013F3CC419 | 00 00 | add byte ptr ds:[rax],al |
000000013F3CC41B | 00 00 | add byte ptr ds:[rax],al |



далее видим цикл, ставим бряк на
000000013F3CC40D | E9 EA E0 CA FF | jmp zm.13F07A4FC |
после срабатывания бряка - шаг с заходом, попадаем в
000000013F07A4FC | 48 83 EC 28 | sub rsp,28 |
000000013F07A500 | E8 07 04 00 00 | call zm.13F07A90C |
000000013F07A505 | 48 83 C4 28 | add rsp,28 |
000000013F07A509 | E9 76 FE FF FF | jmp zm.13F07A384 |
000000013F07A50E | CC | int3 |
000000013F07A50F | CC | int3 |
000000013F07A510 | CC | int3 |
000000013F07A511 | CC | int3 |
000000013F07A512 | CC | int3 |
000000013F07A513 | CC | int3 |
000000013F07A514 | CC | int3 |
000000013F07A515 | CC | int3 |
000000013F07A516 | 66 66 0F 1F 84 00 00 00 | nop word ptr ds:[rax+rax] |
000000013F07A520 | 48 3B 0D 11 EE 00 00 | cmp rcx,qword ptr ds:[13F089338] |
и далее в scylla видим битые импорты..



Попробовал дефолтный win32app из msvc2015 скомпилить в x64 и запаковть upx 3.94 с ключём -5
http://ge.tt/3NQrOko2
при распаковке upx -d экзешник получается не рабочим.
при ручной распаковке, по вот такому методу - также не рабочий...



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

Создано: 27 февраля 2018 10:48 · Поправил: hypn0
· Личное сообщение · #4

37ca_27.02.2018_EXELAB.rU.tgz - zm_unp.7z

Добавлено спустя 2 минуты
С методикой не помогу. Прога автоматом распаковала. Вроде запускается. Что за прога - не скажу. Автор тут обитает, но когда зарелизит - не знаю.



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

Создано: 27 февраля 2018 10:54 · Поправил: ap0stol
· Личное сообщение · #5

hypn0

эх, жаль, эту версию у меня получается распаковать через upx+pe tools+Reloc Rebuilder, а размер екзешника получается ~800kb

а вот эту, более свежую та прога сможет?
http://ge.tt/4X1yHko2
или может автора назовёшь, чтобы черкануть ему?



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

Создано: 27 февраля 2018 11:06
· Личное сообщение · #6

http://www52.zippyshare.com/v/IiECjt6D/file.html
Вот и свежая распакованная.
Распаковщик очень универсальный. Он эмулятор, что угодно распакует. В теории.

Ник автора hors. Он автор Detect It Easy (DIE). Напиши, спроси.

| Сообщение посчитали полезным: ap0stol

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

Создано: 27 февраля 2018 12:33 · Поправил: ap0stol
· Личное сообщение · #7

Мне кажется, что в для свежих upx-ов или свежих msvc такой типовой алгоритм не работает. Также попробовал win32app собрать в msvc2015 но для x86 и также не смог найти корректный oep/va. Аналогичная проблема с битыми импортами. Может кто-то направит на путь истинный..

Добавлено спустя 2 часа 57 минут
#include <stdio.h>

int main()
{
printf("Hello, World\n");
return 0;
}

спомпилен в msvc2015 x86, запакован upx 3.91 с ключём -5
получаю также битый импорт и нерабочий exe.
не понимаю что делаю не так

0f30_27.02.2018_EXELAB.rU.tgz - ConsoleApplication5.zip




Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 27 февраля 2018 16:09 · Поправил: Gideon Vi
· Личное сообщение · #8

может баг. Посмотри 3.94
Во всяком случает с импортом после анпака все нормально.



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

Создано: 27 февраля 2018 16:36 · Поправил: ap0stol
· Личное сообщение · #9

Gideon Vi
чуть раньше про 3.94 писал что также
Попробовал дефолтный win32app из msvc2015 скомпилить в x64 и запаковть upx 3.94 с ключём -5
http://ge.tt/3NQrOko2
при распаковке upx -d экзешник получается не рабочим.
при ручной распаковке, по вот такому методу - также не рабочий...


ну и сабж из первого поста, как же всё-таки корректно распаковать то? Дабы знать, уметь это делать

Добавлено спустя 51 минуту
msvc 2015, upx 3.94
msbuild C:\Users\ap0stol\Downloads\0f30_27.02.2018_EXELAB.rU\ConsoleApplication5.vcxproj /p:configuration=release /p:platform=win32
compiled.exe (переименованный ConsoleApplication5.exe) - рабочий
upx -5 compiled.exe -o packed.exe
packed.exe - рабочий
upx -d packed.exe -o unpacked.exe
unpacked.exe - не рабочий

и также, если через x32dbg попытать распаковать, то в scylla ошибки в импортах...

7bc9_27.02.2018_EXELAB.rU.tgz - souce_with_exe.zip




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

Создано: 27 февраля 2018 19:52 · Поправил: difexacaw
· Личное сообщение · #10

ap0stol

Обьясняю популярно. Нет никакого смысла собирать кучу тулз и пытаться ими как то решить софт(иначе человек искал бы решение не перебором софта, а учил матчасть). Вам это может быть нужно для повышения личного скилла(опыта/знаний), но тогда это всё уг не нужно, либо вам это нужно для заработка $, но вы эти задачи не можите решить из за отсутствия того самого скилла. Так что вы впали в рекурсию. А так как вы из неё выйти не можите и одновременно хотите, то есть спец раздел, где за ваши цели($) решают задачи.

-----
vx





Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 28 февраля 2018 02:28
· Личное сообщение · #11

ap0stol пишет:
ну и сабж из первого поста, как же всё-таки корректно распаковать то?


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



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

Создано: 28 февраля 2018 06:05 · Поправил: ap0stol
· Личное сообщение · #12

Gideon Vi
2 разных компа, на одном win7 x64 + msvc2015, на другом win10 x64 + Visual C++ Build Tools.
Ну и zm.exe из первого поста не я компилировал.
И на гитхабе в тикетах кто-то другой отписывался что upx -d не работает, думаю и при распаковке вручную также байда с импортами: https://github.com/upx/upx/issues/75

P.s. Если просто экзешник собранный по моему проекту загрузить в x96dbg, то в scylla я тоже вижу битый импорт, с той лишь разницей, что если удалить битый fthunk то сдампленный exe запустится, а вот после upx уже нет.

Добавлено спустя 20 минут
частично выяснил, что если exe-шник собран с флагом /DYNAMICBASE то распаковать UPX не получается, если без него (ASRL) - то распаковывается без проблем.

Добавлено спустя 32 минуты
всем спасибо за участие, разобрался, как распаковывать.
с оригинального exe скидываю флаг DynamicBase, гружу в x64dbg, далее OEP, scylla, прибиваю один битый импорт, dump, fix dump



Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 28 февраля 2018 08:51 · Поправил: TryAga1n
· Личное сообщение · #13

ap0stol пишет:
с оригинального exe скидываю флаг DynamicBase, гружу в x64dbg, далее OEP, scylla, прибиваю один битый импорт, dump, fix dump

Ну это как бы первое что нужно сделать, при распаковке или реверсе тела с ASLR. Неужели ты сразу не заметил, что у тебя постоянно менялись адреса в отладчике? о_О




Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 28 февраля 2018 09:29
· Личное сообщение · #14

Ну дошел и ладно, молодец. Хотя, надо бы иметь отдельную ось под реверс, с котлюченными aslr и прочим.
В upx действительно баг. Причем, на DYNAMICBASE ему должно бы быть пофиг, распаковка-то static.



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

Создано: 28 февраля 2018 10:21 · Поправил: ap0stol
· Личное сообщение · #15

TryAga1n
Ну вот я и спрашивал помощи, что я упустил из виду. И да, я вроде не замечал что oep основной программы менялся. Да и опыта в этом деле почти нет

Gideon Vi
Теперь уже понимаю что нужно именно так делать. Ну и не мог изначально подумать на баг в upx-е разных версий


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