81

Re: Низькорівнева всячина

так

82

Re: Низькорівнева всячина

Це пекло, доповнювати недокументований код на асмі *FACEPALM*
Застряг на нерозумінні, як отримати адресу на дані під час підготовки їх до запису в готовий файл щоб з ними щось можна було зробити (в моєму випадку це було пакування та шифрування). Тобто:

s db '11111111111111'
my_operator s     ; по s неможливо отримати адресу на дані ('11111111111111')

купа нелогічних літералів.. хоч би один коментар!
Тому про про більш складні речі (аллокатор) нічого не обіцяю :D Мене вже тіпає...

Подякували: 0xDADA11C71

83

Re: Низькорівнева всячина

Kane написав:

Це пекло, доповнювати недокументований код на асмі *FACEPALM*
Застряг на нерозумінні, як отримати адресу на дані під час підготовки їх до запису в готовий файл щоб з ними щось можна було зробити (в моєму випадку це було пакування та шифрування). Тобто:

s db '11111111111111'
my_operator s     ; по s неможливо отримати адресу на дані ('11111111111111')

купа нелогічних літералів.. хоч би один коментар!
Тому про про більш складні речі (аллокатор) нічого не обіцяю :D Мене вже тіпає...

А я вам заздрю, завжди мріяв про подібний "реверс" фан.

84

Re: Низькорівнева всячина

cheappi386 написав:

А я вам заздрю, завжди мріяв про подібний "реверс" фан.

У мене теж була така мрія, але коли почало більш-менш щось виходити, це стало схожим на задротство: на фоні інших розвинутих технологій колупати недосконалий x86.. :| інакше не назовеш. Особистого кайфу, з часом, усе менше і менше надходить.

85

Re: Низькорівнева всячина

У мене теж була така мрія, але коли почало більш-менш щось виходити, це стало схожим на задротство: на фоні інших розвинутих технологій колупати недосконалий x86.. :| інакше не назовеш. Особистого кайфу, з часом, усе менше і менше надходить.

Я вас цілком розумію, проте це через відсутність співпраці між кодерами та похідної від неї спеціалізації. А тому, кількість грошей залежить не від якості, а від продажів. В умовах псевдосоцальної держави щось (навколо)наукове приречене бути на узбіччі суспільства.

Подякували: Kane, 0x9111A2

86 Востаннє редагувалося Kane (18.09.2015 14:35:06)

Re: Низькорівнева всячина

0xDADA11C7 написав:

похідної від неї спеціалізації

А ще, іноді прокидається совість та боязнь можливого щодо наслідків подібного промислу.

А тому, кількість грошей залежить не від якості, а від продажів.

+1

Подякували: 0xDADA11C7, leofun012

87 Востаннє редагувалося Kane (19.09.2015 21:29:06)

Re: Низькорівнева всячина

Для закріплення розуміння деяких моментів патчингу FASM'у, мені закортіло додати директиву, котра б розраховувала crc32-хеш (практичної цінності нема, бо усе це елементарним чином робиться макросами, але все ж таки).

Відкриваємо TABLES.INC переходимо до мітки data_directives та додамо нашу команду "crc32". Довжина назви - 5 символів, а так як у кожному розділі усі строкові літерали повинні йти у зростаючому порядку за кількістю символів і алфавітом, то назвемо наш новий підрозділ data_directives_5 (якраз після максимальної data_directives_4, яка описує директиву "file")

data_directives_5:
 db 'crc32',1
 dw data_crc32-instruction_handler

Потім коректуємо саму data_directives наступним чином (що воно значить, приходиться поки тільки догадуватись)

data_directives:
 dw data_directives_2-data_directives,(data_directives_3-data_directives_2)/(2+3)
 dw data_directives_3-data_directives,(data_directives_4-data_directives_3)/(3+3)
 dw data_directives_4-data_directives,(data_directives_5-data_directives_4)/(4+3)
 dw data_directives_5-data_directives,(data_directives_end-data_directives_5)/(5+3)

Далі переходимо до PARSER.INC, і шукаємо процедуру get_data_directive. Так як ми додали один підрозділ (data_directives_5) то у цій процедурі правимо

cmp cl, 4 

на

 cmp cl, 5  

Задумка така:

crc32_MessageBoxA crc32 'MessageBoxA'
  • crc32_MessageBoxA - мітка

  • crc32 - команда

  • 'MessageBoxA' - текст, хеш-суму котрого ми рахуємо

Відкриваємо ASSEMBLER.INC і в кінець додаєм наступний код:

data_crc32:
    lods word[esi]
    cmp al, '('
    jne invalid_argument
    lods dword[esi]         ;розмір строки
    
    push eax

    call get_crc32          ; в esi - текст, в eax - розмір тексту
    stos dword[edi]         ; пишем результат

    pop eax
    add esi, eax            ; пропускаємо усю строку
    inc esi                 ; пропускаємо \0

    jmp instruction_assembled   ; працюємо далі

Відкриваємо SYSTEM.INC та додаємо get_crc32:

get_crc32:
    mov edx, esi
    mov ecx, eax
    xor eax, eax
    test ecx, ecx
    je @4
    not eax

@1: xor al, byte[edx]
    inc edx
    mov bl, 8h

@2: shr eax, 1h
    jae @3
    xor eax, 0xEDB88320

@3: dec bl
    jne @2
    dec ecx
    jne @1
    not eax

@4:
    ret

Якщо поставимо бряк на початок нашої процедури (data_crc32) можемо побачити наступне:

- в esi буфер із виразом

002200F3  28 00 0B 00|00 00 4D 65|73 73 61 67|65 42 6F 78| (....MessageBox
00220103  41 00 00 00|00 00 00 00|00 00 00 00|00 00 00 00| A...............

- в edi буфер-приймач, куди ми запишемо результат, а FASM нам додасть його по місцезнаходженню нашой мітки.

Для перевірки, виконаємо наступний код

use32

mov eax, dword[crc32_MessageBoxA]
mov ecx, dword[crc32_ExitProcess]

crc32_MessageBoxA crc32 'MessageBoxA'       ; 0x572D5D8E
crc32_ExitProcess crc32 'ExitProcess'       ; 0x251097CC

http://i70.сайт-злодій/big/2015/0919/e2/f1edd9777e794ea61a01aaae2bac0fe2.png

Усе працює :)

Подякували: 0xDADA11C7, leofun012

88 Востаннє редагувалося Kane (20.09.2015 00:20:57)

Re: Низькорівнева всячина

Прихований текст

Сучий пес!!
82 пост

Просто робимо:

call get_data_point

и в ebx адреса на перший байт даних *WALL*

89

Re: Низькорівнева всячина

Пропоную вам трошки доповнити цю роботу і викласти в розділ статті, бо дуже цікаву і гідну річ робите. *THUMBSUP* Доповніть принаймні тим що компілер фасм'а на фасмі написаний.

Подякували: leofun011

90

Re: Низькорівнева всячина

Цей розділ замість нотатника.
Якщо це треба/актуально не тільки мені, то планую зарелізити мод з усіма доповненнями подібного роду, а також мануал з висновками по нутрощам проекту. Хотілося б саме FASMG: там і структура більш охайна, і коментарів трохи є.

91

Re: Низькорівнева всячина

Цей розділ замість нотатника.

Цю тему я для цього і створив, але прошу вас трішки розширити нотатку.

Якщо це треба/актуально не тільки мені, то планую зарелізити мод з усіма доповненнями подібного роду, а також мануал з висновками по нутрощам проекту.

Було б дуже добре!

Хотілося б саме FASMG: там і структура більш охайна, і коментарів трохи є.

Погоджуюся, але те що є для звичайного FASM`у теж варте уваги.

92

Re: Низькорівнева всячина

Є задумка зробити практичніше - вбудувати скриптовий двигун (луа чи пайтон).
Що б ви за його допомогою робили (ну окрім файлового I/O)? Накидайте ідей.

93

Re: Низькорівнева всячина

Що б ви за його допомогою робили (ну окрім файлового I/O)? Накидайте ідей.

Я б багато чого робив би по-людськи: шифрування, пакування ресурсів, людський імпорт функцій, . І взагалі з такими можливостями я б написання софту перевів би ближче до предмету софту, якщо ви розумієте про що я ;)

Подякували: Kane, leofun012

94

Re: Низькорівнева всячина

Є задумка зробити практичніше - вбудувати скриптовий двигун (луа чи пайтон).

Ваш шлях не менш цікава річ, ніж кінцевий результат, тому викладайте що маєте.

95 Востаннє редагувалося 0xDADA11C7 (24.09.2015 00:50:32)

Re: Низькорівнева всячина

Kane
Ви бачили мову/фреймворк ABAKIS? Цікавезна штукенція! Створена за допомогою фасмівських препроцесора і директив. Правда автор все одно пропатчив фасм з метою додавання директив ?if, ?while, ?x.
https://replace.org.ua/extensions/om_images/img/56032c26e674e/abakis.jpg

Приклад уживання цього фреймворку:

; ABAKIS EXAMPLE. SEE \INCLUDE\ 

include 'z.inc' 

text t(64), s(64), f='LOG.TXT' 
text m(64)='NOItUlOVe ReLBmESsa SikaBa' 

function test.text 
  text.copy t, m 
  say t 
  text.reverse t 
  text.upper t 
  text.attach.c t, '!' 
endf 

function test.number 
  say.n 4294967295 
  say.h 0ABCDEF12h 
  say.h 0FFFFFFFFh 
  say.b 11110000111100001111b 
endf 

function test.memory 
  locals p 
  try p=allocate 33 
  memory.zero p, 33 
  memory.set p, '1234', 32 
  say p 
  destroy p 
endf 1 

function test.file 
  locals n 
  get n=text.n t 
  try create f 
  write t, n 
  close 
  try open f 
  read s, n 
  say s 
  close 
  execute f 
endf 1 

function test.io 
  test.memory 
  if false 
    say 'Memory allocation error' 
    return 0 
  end 
  test.file 
  if false 
    say 'File I/O error' 
    return 0 
  end 
endf 1 

function main 
  test.text 
  test.number 
  try test.io 
endf

Мені багато чого неподобається, але автор добре абстрагувався від машинного коду та має системні знання з фасмівської мови компіляції.

Звідсіля

Подякували: leofun01, 221VOLT2

96

Re: Низькорівнева всячина

ABAKIS бачив, вражає.
Існують думки, як ви кажете, щодо курсу розробки "до предмету софту", але досі не знаю як зробити краще та простіше. Ходить думка, зрозуміти як воно працює (FASM), та переписати на тому ж c++, ну а там усі плюхи які тільки прийдуть до розуму.. Або брати курс, та рухатись за розвитком FASMG. Гарно треба обмізкувати, все таки "грандіозне", у якомусь плані, діло коїться.

Які маєте думки на рахунок автоматичного відокремлення даних від коду? Писати емулятора задля аналізу?

Подякували: 221VOLT1

97

Re: Низькорівнева всячина

Технічний вибір тут не найголовніше, бо така велика розробка має бути виправдана планами на майбутнє і деякою кількістю потенційних якісних споживачів(кодерів, а не замовників кінцевого продукту). Вибір технології не має великого значення, хоч на ноді, хоч на рубі, все одно доведеться розбиратися з роботою компіляторів. "Грандіозним" це діло може стати лише за умови спеціалізації і злагодженої роботи учасників. Щодо "предмету софту", то я за кодогенерацію з "формул" і (багато)модульну систему зі змінними модулями на одному інтерхвейсі. Під "формулами" я розумію опис (зазвичай чужих) програмних структур в пам'яті процесів та потрібних для перехоплення функцій. Вони повинні мати добрі засоби візуалізації. Кінцевий згенерований джерельний код не повинний містити натяки на його генерацію фреймворком, щоби мати змогу застосовувати його і для цивільних проєктів.

Якщо ви про цей проєкт, то автоматичного відокремлення нам не потрібно, бо ручного досить щоби запустити повний технологічний цикл з кодогенерацією (що означає найшвидші оновлення в софті, бо данні зворотнього розробника швидше втіляться в код), і наномітами.

Подякували: leofun011

98

Re: Низькорівнева всячина

Поспіхом писав, у думках срач, тому забув розкрити суть останнього речення. Я думав про модуль для морфу коду - поставив мітки start/end і гоу мета- полі- гіперсексі- морфні збочення над кодом. Подумки розвив тему у відокремлення подібного модуля, і згадав одвічну проблему - як відрізнити код і дані? Окрім написання емулятора, задля максимального аналізу коду, нічого не надумав. Які ваші думки? Знаю, що остаточного рішення від усіх проблем нема, але як би максимально збільшити вірогідність успішного виконання.. коротше треба багато базікати аби розвивати подібні фантазії.
Один фіг, построчно треба зубрити кода фасма, тому придумувати собі інші варіанти рішення задачі, аби типу змахлювати/упростити працю - нє нада.

99

Re: Низькорівнева всячина

Я думаю що навіть FASMG вже може щось таке робити, якщо визначити макросами нову "платформу" з генерацією криптованого коду. При чому крипторежим можливо вмикати/вимикати на будь-яких ділянках коду. Хочеш - криптуй все з початку виконання без якогось спеціального прологу, а хочеш - уживай пролог/епілог для маленьких ділянок особливо важливого коду(генерація серійних номерів, наприклад) з генерацію окремих віртуальних машин. Дані од коду одрізнимо за опкодом *CRAZY*

100

Re: Низькорівнева всячина

Для криптування треба визначитися з інтерхвейсами, щоби мутація коду могла бути багатошаровою. Одне це вже має створити перепони для аверів у геометричній прогресії. Найпростіший приклад -- спочатку ми переставляємо місцями/заміняємо опкоди х86 процесора, а потім вже віртуалізуємо за допомогою ВМ, а потім можемо вже мофити пікод ВМ, замінюючи опкоди, а потім вже образ ВМ -- частину переходів у замінити на якусь подобу наномітів. Та вони сказяться в своїй конторі од такого "щастя".

Подякували: Kane, leofun012