понеділок, 23 лютого 2015 р.

Dosbox – просте використання

 DOSBox — емулятор програмного забезпечення, що емулює IBM PC-сумісний комп'ютер під управлінням старої операційної системи MS-DOS. Це дає можливість запускати старі програми та ігри для DOS на сучасних комп'ютерах.

 Часто при емуляції, а особливо консольних емуляторів, типу Qemu. Gxemul не зрозуміло як діяти, запустив, і чорний екран, десять раз вводити кожного разу одну і туж прогу, це ахтунг.
В даному прикладу, ми розглянемо Dosbox.

 Ми його завантажили і встановили з адресу http://www.dosbox.com/download.php?main=1
 Вибираємо під свою ОС, в темі ми будемо розглядати версію для Windows, буде можливість перевіру і для FreeBSD, NetBSD.

 Як і написано вище, використовується для запуску програм для колись ОС MS-DOS, в теперішніх ОС часто викидає помилку про використання 16 бітного коду. Тому тут допоможе саме емулятор DOS. Також для повноцінного курсу команд MS-DOS, якщо в когось збереглись старі книги з темою про ОС Windows 98 та сеанс MS-DOS.
 Використання емулятора проста, як сам DOS.
Запускаємо програму, бачимо чорний екран, нам потрібно монтувати так званий диск С, автоматично ми знаходимось на диску Z:\. Але для цього нам потрібно створити папку і закинути туди файли MS-DOS, це “ігрушки для старушки”, програми хоч тойже Turbo Pascal 7.0, Nasm MS-DOS, Turbo C …
Так ми створили папку на диску E:\dbox, запустили програму і пишемо в консолі, для монтування диску С:

mount C E:\dbox

Для переходу в диск С пишем

C: і ми вже на диску С. Командою dir ми бачимо список наших файлів. Які ми кинули в папку.

Щоб не писати кожного разу в програмі, то є для цього файл dosbox.conf, в Windows це файл в папці C:\Program Files\DOSBox-0.74\DOSBox 0.74 Options.bat
в області [autoexec] пишемо, щоб не писати кожного разу при запуску програми Dosbox:

mount C E:\dbox\


Dosbox використовую для запуску старих програм і для їх коректної роботи, для прикладу Nasm асемблер:


Turbo C:


гра Танк “Абрамс”:



 Що варто сказати, версія Windows підтримує мережу, точніше емулює модем, тому warcraft можна і по мережі грати. Підтримуються як відео емуляція VGA, VESA, EGA, емуляція звуку . Самих файлів MS-DOS немає, все написано так що емулює dosbox і приривання bios, процесор РС, середовище DOS, саме це пояснюється його кросплатформеністю на інші платформи.

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

вівторок, 17 лютого 2015 р.

Fossil - максимальна простота і мінімалізм в одному

 При недавньому холіварі на тему з системами керування версіями, а саме git vs svn, іноді чути за mercurial ( hg ). При цьому я на днях почув про fossil, читаючи в інтернеті, всім він сподобався за простоту, саме це є основним великим плюсом в fossil:
- всього один файл завантажити з сайту, або скомпілювати і можна поміщати на флешку, як один писав “репозиторій з кодом на флешці”, розмір файлу трішки більше одного мегабайта

- все зберігається в одній базі

- якщо працювати з своїм репозиторієм і налаштовувати сервер, то для цього підійде навіть простий inetd, SCGI, CGI.

- максимальна простота і мінімалізм, за яку виступає сам автор  Річард Хіпп, який ще пише SQLite

- також зберігається все разом і WIKI, BugTreker.

- є репозиторій для коду, аналог sourceforge, github, Chisel - Fossil SCM Hosting


Одним словом, для роботи з кодом вам не потрібно ставити Apache, nginx сервер для сумісної праці, для цього достатньо стандартного inetd, бо на налаштування сервера і його підтримку йде час затрачений, плюс потрібно ще слідкувати за базою даних, кожен вибирає на свій смак, BerklyDB, MySQL. Для інших систем контролю за версіями є багато додатків для веб перегляду, також WIKI, BugTreker. Всі вони різні, а в fossil все в одному. Саме тому цей вибір випав на нього. Та й система годиться для використання.

Fossil відноситься до розподіленої системи керування версіями, тому можна працювати з власним репозиторієм. Створювати власні гілки, та інше. Коротко в мене все.

Для встановлення fossil багато не потрібно, для ОС Windows http://www.fossil-scm.org/download.html завантажуємо і розпаковуємо, в папку куди зручно, далі, занести шлях в перемінні середовища, або як я зробив .bat файл і запускаю його завжди коли працюю. Зміст його простий:

# скопіювати і вставити в файл з довільною назвою з розширенням bat, якщо
# будуть помилки то видалити коментарі
@set path=E:\dir\fossil;%path% # жирним замініть на свій шлях до папки
@%comspec%

В pkgsrc і FreeBSD ports fossil знаходиться в /devel/fossil, тому для NetBSD чи якщо ви користуєтесь pkgsrc виконуємо:

$ /usr/pkgsrc/devel/fossil && make inctall clean

FreeBSD ports:

$ /usr/ports/devel/fossil && make inctall clean

Про встановлення коротко все, при виявлення помилок звертайтесь до коммітерів портів, чи на сайт проекту.

Почнемо короткий опис роботи:
- Створюємо репозиторій:

$ fossil init E:\repos\relab2500.foss

або

$ fossil new E:\repos\relab2500.foss

В чому різниця поки що не знаю поки що.

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


- Клонування репозиторію

$ fossil clone E:\repos\relab2500.foss

Я не зберігаю файл репозиорію і код в одному місці, тому йдемо в папку з проектом і відкриваємо репозиторій:

$ cd E:\src\project\
$ fossil open E:\repos\relab2500.foss // відкрили репозиторій

E:\src\project>fossil open E:\fossil\relab2500.foss
project-name: <unnamed>
repository: E:\fossil\relab2500.foss
local-root: E:/src/project/
config-db: C:/Documents and Settings/suprtuser/Application Data/_fossil
project-code: e1efe19ecc500f85541106427ec9da371c8e366a
checkins: 0

Після відкриття створюється в каталозі файл _FOSSIL_ де будуть всі файли бази даних, там будуть відстежуватись всі зміни, шлях до репозиторію та інше, саме тому після коміту радять закрити проект репозиторію:

$ fossil close E:\fossil\relab2500.foss

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

Створюємо довільні файли які вам потрібно і додаємо їх. Добавимо для прикладу два файли java.
..
extd.java
TResk.java
_FOSSIL_


- додаємо їх:

$ fossil add .

Точку пишемо тоді коли знаходимось в каталогові з кодом
маємо результат:

ADDED extd.java
ADDED Tresk.java

- робимо комміт

$ fossil ci -m “add new files”

- порівнюємо версії файлів
для порівняння нам потрібно взнати версії файлів

$ fossil finfo %file_name%

$ fossil finfo extd.java
History of extd.java
2015-02-17 [87de24cce3] add extd class reson (user: suprtuser, artifact: [d2f080dfc9], branch: trunk)
2015-02-17 [f3dd578c29] add commit clode (user: suprtuser, artifact: [b235c8497f], branch: trunk)

жирним виділив версії, порівнюємо їх зміни:

$ fossil diff -from f3dd578c29 --to 87de24cce3 extd.java
--- extd.java
+++ extd.java
@@ -13,7 +13,15 @@
c=a+b;
System.out.println("C = " +c);
}


+}
+class Resoner
+{
+int a=5;
+for(int b = 7; a < b; a=a+b)
+{
+System.out.println(a);
+return a;
}

- повернення файлу до попередньої версії:

$ fossil revert -r %Версія по індентифікатору% %назва файлу%

Ідентифікатор файлу береться з команди fossil finfo, як в нашому прикладі.

- стан репозиторію:

$ fossil status

- закриття репозиторію:

$ fossil close E:\fossil\relab2500.foss

Звісно це не повний мануал по fossil, це невеликий приклад, більше інформації в документації чи по командам:

$ fossil help

чи

$ fossil help %команда%

Чого тут не розглянули, так це отримання змін з віддаленого репозиторію, слідкування за змінами, переміщення і видалення файлів, що робити з помилками, вони можуть бути коли робити комміт, а файл ще незбережений і відкритий. Також ми не розглянули відправлення змін в віддалений репозиторій.
Це досить простий і зручний інструмент для роботи!

І зберігайте свої дані надійно, робіть бекапи!!!








понеділок, 16 лютого 2015 р.

Netcat приклади використання

  netcat (англ. net мережа + cat) — утиліта Unix, що дозволяє встановити з'єднання TCP та UDP, отримувати та передавати звідти дані. Незважаючи на простоту та користь, ця утиліта не включена до жодного стандарту.

Про користь тут згадується не просто так, ця утиліта проста і кроссплатформена, тобто є версія для Linux, BSD, Windows …. З netcat є можливість пересилати файли, підмінювати IP, прослуховувати порти ... За простоту, часто використовується хакерами, для встановлення підключень для серверів. Є різні версії netcat, з своїми можливостями та опціями. Наприклад criptcat, sdb – netcat з кріптографією, тому все залежить від ОС, компіляцією з параметрами, не завжди можуть бути одні і ті самі опції в різних версіях netcat. Наприклад опція -d лише для Windows. З цією версією що в мене, немає опції -g, передача даних через певні IP адреса. Netcat є в Cygwin, якщо ви вибрали установити потрібні модулі в списку. З командної строки викликається як nc. Також його можна установити в FreeBSD:
# cd /usr/ports/net/netcat && make install clean
pkgsrc:
# cd /usr/pkgsrc/net/netcat && make install clean
По бажанню ви можете встановити і criptcat, sdb, про установку netcat в своїй ОС дізнайтеся “від свого пакетного менеджера”, проведіть пошук та встановлення.
Вернемось до використання netcat:
- Сканування на відкрити порти:
$ nc -z site.com 1-1024

Для сканування з детальним скануванням потрібно виконати -v:
$ nc -v -z site.com 1-1024

- Підключення до серверу:
$ nc -l -p 22222 -e /bin/sh # для UNIX ОС
Для запуску в Windows писати cmd.exe. Також для використання опції -e потрібно спеціальна збірка програми.
Для підключення від клієнту:
$ nc ip-adress 22222 # приклад $ nc 173.58.34.67 -p 22222

- Передача файлів:
$ nc -l 23233 > filenames # виконуємо на машині де приймається файл
Виконуємо на комп'ютері для передачі файлів:
$ cat filenames | nc 173.58.34.67 23233

Далі почнемо розмову, річ в тім, що з цих прикладів, не можливо зрозуміти, а що в цьому є такого ноу - хау, та як netcat використовують хакери, хоч через ftp, tftp, putty. Потрібно що б файл мав права на запуск, якщо ви завантажили файл через сайт, в розділ завантаження, то швидше за все вам нічого не світить, для безпеки там ставлять права що б файл запускати не можливо. Netcat не замінить вам nmap. На даний момент по обставинам я не можу зібрати і описати всі можливості netcat, а саме:
- Підміна IP адреса
за допомогою -g, приклад


nc -g 101.233.0.50 -g 200.10.55.98 -g 150.150.74.4 194.150.99.50 80

- обійти фаєрвол
перенаправленням даних на інший порт

- перехват служби
- захоплення програми
- невидима передача файлів, nc не залишає даних в логах

 Як бачимо в руках досвідченого умільця ІТ систем і пару кілобайт програма це сильна зброя. Netcat проста, корисна утиліта, саме того нею так багато користуються, краще програму зібрати самому і під свої потреби.

середу, 11 лютого 2015 р.

Nasm - компіляція і лінкування в ОС Windows

 Є миті коли є враження, що opensource чи вільне програмне забезпечення в ОС Windows це костиль над костилями, його роблять так, аби він працював, аби працював. Часто доводиться бачити приклад компіляції під вільні ОС, а в Windows все навпаки. Для прикладу його компіляція і лінкування програми в nasm, про сам компілятор nasm ви можете почитати в вікіпедії, про його плюси та мінуси, історію розвитку:

 Суть питання в чому, після завантаження nasm в Windows у вас є лише компілятор, а потім об'єктний файл потрібно компонувати ( лінкувати ) в формат ехе. Але просто зробити так:

$ nasm -f win32 -o hello.exe hello.asm

Не вийде, все одно nasm створить лиш об'єктний файл, в даному випадку ми створили лиш його не розширенням *.obj, a exe. Іншими словами, ми написали наступне:

$ nasm -f win32 -o hello.obj hello.asm

Є декілька варіантів компіляції і компоновані файлів в Windows:
1. використати Alink
2. MinGW ( GCC для Windows )
3. Binutils з використанням ld ( для зручності я використовую Cygwin )

Почнемо з першого, сам компановщик для Windows можна завантажити тут http://alink.sourceforge.net/
Завантажувати файл alink.zip
Код має виглядати так:

;Compilation program test
;nasm -fobj test.asm
;alink -oPE test.obj // писати так як є без пробілів, бо буде помилка при збірці

import MessageBoxA user32.dll ;Include the dll user32.dll
extern MessageBoxA ; Now calling external symbol without underscore....
import ExitProcess kernel32.dll
extern ExitProcess

section .data
msgme db "Це тест програми на компановщику ALINk!",0 ;Text

section .text use32 CLASS=CODE ;"use32 CLASS=CODE for telling the other linker(Such as alink.exe) that program for 32bit

..start: ; ..start (not _start) for other linker for start of the code

push dword 0x00 ; MB_OK
mov esi,msgme ;esi="[Text]"
push esi ; is now top of the stack, second paramaters title
push dword msgme ; Text
push dword 0 ;Reserve
call [MessageBoxA] ;Call the Function MessageBoxA

push dword 0x00
call [ExitProcess]

Результат:



Так, саме так повинен виглядати код для компановщика alink. Замість _start, ..start, також вказуємо в області секції use32 CLASS=CODE, вказати компановщику, що це код для 32 бітної системи. Також для інших секцій вказується подібним прикладом:
SECTION DATA USE32 CLASS=DATA
SECTION BSS USE32 CLASS=DATA
SECTION CODE USE32 CLASS=CODE

Також можна писати section .text use32, покажемо приклад, але вже для консольного варіанту з API WriteConsole:

; Compilation & link
; nasm -f obj test.asm
; alink -oPE test2.obj -subsys con

extern GetStdHandle
import GetStdHandle kernel32.dll
extern WriteConsoleA
import WriteConsoleA kernel32.dll
extern ExitProcess
import ExitProcess kernel32.dll

section .data USE32
strich: db 'this is text console!!!', 0xA
LenStich: equ $-strich

section .text USE32
..start:
push dword -11 ; -11 вивід на консоль
call [GetStdHandle] ; результат буде в регістрі eax
push dword 0
push dword 0
push dword LenStich
push strich
push eax
call [WriteConsoleA]
push dword 0
call [ExitProcess]

Результат:


2. З alink коротко розібрались, тому переходимо до компановки за допомогою GCC, слід зауважити, що цей метод застосовують коли використовують саме функції С, при цьому краще використовувати Cygwin, там все налаштовано, а якщо просто ставити MinGW то можуть бути помилки

; nasm -fwin32 hello.asm
; gcc hello.obj -o hello.exe
; file name hello.asm compilation & linking obj
global _main
extern _printf
section .data
fmtStr: db 'Linker gcc hello.obj -o hello.exe test', 0xA, 0
section .text
_main:
sub esp, 4 ; Allocate space on the stack for one 4 byte parameter
lea eax, [fmtStr]
mov [esp], eax ; Arg1: pointer to format string
call _printf ; Call printf(3):
add esp, 4 ; Pop stack once
ret
; код взятий з сайту wikibooks

Результат:

3. Розглянемо nasm + виклик win32 функцій

; Compilation & linker
; nasm -fwin32 file.asm
; ld -e _start file.obj -lkernel32 -o file.exe
global _start
 
extern _GetStdHandle@4
extern _WriteConsoleA@20
extern _ExitProcess@4
 
section .data
        str:     db 'hello, world',0xA
        strLen:  equ $-str
 
section .bss
        numCharsWritten:        resb 1
 
section .text
        _start:
 
        push    dword 0         ; Arg5: Unused so just use zero
        push    numCharsWritten ; Arg4: push pointer to numCharsWritten
        push    dword strLen    ; Arg3: push length of output string
        push    str             ; Arg2: push pointer to output string
        push    eax             ; Arg1: push handle returned from _GetStdHandle
        call    _WriteConsoleA@20

        push    dword 0         ; Arg1: push exit code
        call    _ExitProcess@4
; код взятий з сайту wikibooks

 Результат тексту програми буде такий самий , як і в попередній. З особливостей, тут ми вказали nasm що буде вже проміжний файл win32 obj, -e параметром вказали точку входу в програму, це в нашому випадку _start, -l підключили бібліотеку, всі win32 функції відносяться до складу kernel32.dll, тому пишемо -lkernel32.

Як бачимо все залежить від від ОС, компановщика. Вдалого вам лінкування.