Як виправляти байти в пакувати файлах: UPX, Різне, Security & Hack, статті

www.uinc.ru

Інструмент:

IDA; я використовував версію, люб’язно надану мені Гаррі Колтон:)
HIEW; можна використовувати будь-який редактор з вбудованим дизассемблером
Мізки; не раджу користуватися піратськими версіями, краще купіть 😉

+++++++++++++++++++++ Принцип роботи +++++++++=======+++++++++++ + +

UPX, як і будь-який інший пакувальником, при запуску програми повинен розпакувати її в пам’ять і потім
передати їй управління. Ось цим ми і скористаємося – відстежимо де UPX передає
управління власне програмі. Знайшовши це місце ми спочатку змусимо UPX пропатчити
нам кілька байт, а вже потім повернемо управління програмою.
Я не буду говорити яку програму досліджував я – це не важливо, результат
буде той же, тільки циферки інші.

++++++++++++++++++++++++++++ Почнемо …..++++++++++++++++ + + + +

Віддамо на розтерзання IDA нашу програму. У W32dasm її засовувати не можна так як
він намагається дизасемблювати зашифровані ділянки коду. Виходить повна маячня.
IDA дізассеблірует тільки інструкції Розпакувальник, зашифровані ділянки не чіпає.
Ось типовий лістинг:

; ————— S U B R O U T I N E —————————————
0040CE30 public start
0040CE30 start proc near
0040CE30 pusha; Початок розпакування шукаємо POPA
0040CE31 mov esi, 40B000h; тут починаються інструкції,
0040CE36 lea edi, [esi-0A000h]; розпаковують програму в пам’ять.
0040CE3C push edi; Якщо вам цікавий принцип роботи – потрассіруйте
0040CE3D or ebp, 0FFFFFFFFh; на це йде близько години.
0040CE40 jmp short loc_40CE52
;———– Пропущено близько кілька десятків рядків т.к вони нам не потрібні ————-
0040CF67 dword ptr [esi+0C118h]
0040CF6D or eax, eax
0040CF6F jz short loc_40CF78
0040CF71 mov [ebx], eax
0040CF73 add ebx, 4
0040CF76 jmp short loc_40CF59
0040CF78 ; —————————————————————————
0040CF78 loc_40CF78: ; CODE XREF: start+13F.j
0040CF78 call dword ptr [esi+0C11Ch]
0040CF7E loc_40CF7E: ; CODE XREF: start+110.j
0040CF7E popa; ось ця “попа” нам і була потрібна 🙂
0040CF7F jmp near ptr unk_403A68; JMP на початок розпакованої програми!
0040CF7F start endp

Ось тепер ми знаємо все що нам потрібно.
Подивимося на нашу програму через HIEW.
Дві останні інструкції будуть виглядати так:

0000237E: 61 popad
0000237F: E9E46AFFFF jmp 0FFFF8E68

Тепер нам треба знайти порожнє місце, куди ми впишемо наш патч.
Приблизно п’ятьма інструкціями нижче ми виявляємо купу нуликів (add [eax], al). Підійде.
Перенаправляємо JMP:

0000237F: E90F000000 jmp 000002393; jmp на вільне місце
00002393: C6053234450075 mov b, [000453432], 075; замінюємо байт за адресою
; 453432 на 75
0000239A: E9E46AFFFF jmp 0FFFF8E68; повертаємо керування програмі

От і все.

P.S.
Ну і звичайно все написане призначено ТІЛЬКИ для освітніх цілей.

Всі зауваження, подяки, лайки вітаються.
Удачі,
Corbio
corbio@mail.ru
Genocide Crew member
uinC Member
[c]uinC

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*