Tag Archives: SOFT

Elegantiškas windowsų 7 nulaužimas

Kartais reikia iš šrotinio kompo padaryti veikiantį produktą. Aišku galima ten viską perinstaliuoti, bet mano tingumas pasiekė jau gana dideles aukštumas, todėl jei yra galimybė pasinaudoti esama operacine sistema, tai ir ją ir laužiam ir naudojam. Ypač jei tai legalūs 7 windowsai. Kartais kompai papuola ir su domeinu, ir lokalus administratoriaus slaptažodis nežinomas… Seniau ten leisdavo specialų softą, kuris dar traukdavo kažką iš registro ir kartais neveikdavo. O štai šiandien prisireikė vieną kompą ištraukti iš domeino, pravalyti ir atiduoti second-hand naudojimui. Internetas pasiūlė paprastą sprendimą ir jis suveikė. Kad neužmiršti, surašau čia, nes tai labai elegantiškas sprendimas:

  1. Bootinam kompą iš live-CD, aš naudojau linux mint kompaktą.
  2. Einam į C:\windows\system32\ direktoriją ir ten surandam failą “sethc.exe”. Jį persikeliam kur nors, kad į C:\ disko root direktoriją.
  3. Tame pat system32 folderyje, kopijuojam cmd.exe į sethc.exe. T.y. pakišam kitą failą vietoje sethc.exe
  4. Perkraunam kompą į windows ir sulaukiam login screen. Tada penkis kartus spaudžiam shift klavišą.
  5. Iššokusiam komandinės eilutės ekrane rašom komandą: net user administrator naujasslaptazodis. Arba vietoje admino rašom bet kurį kitą vartotoją.
  6. Logino ekrane suvedam naują slaptažodį ir siautėjam windowsuose.

Kaip ir viskas…

Aišku, gal reikėtu atstatyti “sethc.exe” programą, bet kam? Geriau pasilikti “backdorą” 😛

Biški C optimizacijos

Jau ne pirmą kartą randu svetimam softe vieną dalykėlį. Įdedu čia du fragmentus- originalų ir mano rašyta:

Originalus:

for(int8_t bit = 7; bit >= 0; bit--)
{
L(PORTC, SS1306_OLED_CLK);
if((1 < < bit) & data) { H(PORTC, SS1306_OLED_DAT); } else { L(PORTC, SS1306_OLED_DAT); } H(PORTC, SS1306_OLED_CLK); }

Mano:

for(unsigned char bit=0;bit<8;bit++)
{
L(PORTC, SS1306_OLED_CLK);
if(data & 0x80) {H(PORTC,SS1306_OLED_DAT);} else { L(PORTC, SS1306_OLED_DAT); }
data = data < < 1; H(PORTC, SS1306_OLED_CLK); }

H() ir L() procedūros tai ne mano rašytos ir jos neturi įtakos. Pagrindinis skirtumas yra pakeisti “(1<<bit)” į “(data=data1<<1)”. Atrodo paprastas pakeitimas, bet pagalvokim koks bereikalingas darbas stumti tuos bitus per visą ciklą… 7+6+5+4+3+2+1 bitų pastumimai originaliam softe ir 7 pastumimai mano softe. Skirtumas gerai matosi oscilografo ekrane…

AVR GCC optimization
Čia originalus softas.

AVR GCC optimization
Čia mano.

Grubiai šnekant, su tuo pačiu MCU greitis padidėjo nuo 22μs iki 9μs vienam perduotam baitui, du su biškiu karto (ir 16 baitų mažesnis softas). O čia gi grafinis ekraniukas!
Ir kaip sakiau, jau ne pirmas kartas randu šitą klaidelę svetimam softe, kai daroma duomenu serializacija programiškai.

Aišku vienas loginis niuansas, mano algoritmas sunaikina kintamąjį data. Tačiau jį galima ir atsiminti, bet dažniausiai jis jau nereikalingas.

Kodėl tokios klaidos? Manau todėl, kad mąstoma šabloniškai- tikrinam duomenų bitus su “maske” ir pagal rezultatą išsiunčiam. Čia labai žmogiška, tačiau reikia galvoti plačiau- kam generuoti “maskę”, jei galima taip pat stumdyti pačius duomenis. O jei tai būtų ciklinis stumimas ROL/ROR, tai netgi duomenys nesusigadintu- galima “apsukti” visą baitą ir vėl viskas bus kaip pradžioje.

[dar galimi kiti variantai, kai “maskę” galima irgi “sukti” ir ciklo sąlygas tikrinti pagal tai. Kodas gausis dar geresnis. Laukiam skaitytojų versijų.]

V-USB ir Microsoft Visual Basic Express Edition

Padaryti įrenginį kuris valdomas per USB su AVR atmega ar panašia mikroschema gana paprasta. Parašyti command line valdyma linux ar windows sistemai irgi gana lengva. Tačiau paleisti ką nors ant monstriško “visual” jau žymiai sunkiau.
Nesu programuotojas ir man tos visos “struktūros” ir kitokie specifiniai dalykai sunkiai įkandami. Man paprasčiau iškastruoti veikiantį svetimą produktą. Vienas toks produktas, tipo pavyzdinis, buvo “generic_hid_vb_50.zip”. Tačiau jis man neveikė- dar buvo per sudėtingas. Tačiau radau kitą projektą- kažkoks LCF matuoklis. Šitas projektas bent jau pamatė mano USB termometrą ir nuskaitė kelis baitus. Paaukojau dieną ir iškastravau esama source kodą iki minimalistinio varianto, kur jau kiekvienas supras kaip ir ką pakeisti. Rezultatas- pilnas source kodas ir maža programėlė, kuri tiesiogiai nuskaito USB termometro skaičius (HID device).

V-USB hid and MS visual basic

Spaudžiant “Write/Read USB” išsiunčiami keli baitai ir kartu nuskaitomi keli baitai iš USB įrenginio. Kiek pamenu, V-USB apribotas 8 baitais vienu metu. Čia jei neklystu.
Dar kažkur pramargalinau automatinį pranešimą, kad “savas” USB įrenginys jau įkištas ar jau ištrauktas. Dabar “statusas” atsinaujina tik pabandžius nuskaityti duomenis.

V-USB HID MS Visual Basic Express Edition 11 source code

Kompiliuojasi su nemokamu Visual Studio paketu.

P.S. turėtu veikti su bet kokiu USB HID įrenginiu. Nebūtinai AVR V-USB…

Mano kalkuliatoriai androidui

Visas pasaulis arba iPadėja arba Androidėja. Aišku dar biški ir windowsėja. Apie smulkesnius -ėjimus nekalbėsim. Dvidešimt pirmas amžius verčia tobulėti. Juolab, kad pas mane net du įrenginiai su Android-Linux sistema:
Android devices
Kiniškas “ipadas” ir FriendlyARM devboardas kuri nusipirkau iš vieno žmogaus. O kai jau yra tokios “platformos”, nutariau perrašyti savo weblogo kalkuliatorius (čia kur dešinėje meniu) šiai platformai. Gal koks žmogus pasinaudos ir geru žodžiu paminės…
Iš karto pasakau, tai mano pirmas projektas android sistemai ir aplamai, pirmas projektas Java kalbose. Ypač tokioje “iškreiptoje” kai android-java… 🙂

Toliau bus screenšotai ir pati programa nusikrovimui: Continue reading →

99 alaus butelių daina arba labai geekiška programavimo kalba

Yra tokia monotoniška angliška daina: 99 alaus buteliai ant lentynos. Prasideda daina taip:

99 bottles of beer on the wall, 99 bottles of beer!
Take one down, pass it around,
98 bottles of beer on the wall!

Ir taip tesiasi kol baigiasi tie buteliai. Galima parašyti programą kuri šios dainos teksta atspausdina ant ekrano. Nieko ten sudėtingo. Tačiau yra tokia labai labai geekiška programavimo kalba “perl”. Šiaip, ji sukurta apdoroti tekstui ir turi visokių įdomių teksto apdorojimo prigulnybių. Nors ir kiek moku šią kalbą, man jos užkeikimai su visokiais skliausteliais, apostrofais, šliašais ir kitais simboliais nesuprantama… O štai kaip sugeba programuoti šios kalbos specialistai. Tai minėtos dainos printeriavimo source kodas:

99 bear bottles
Continue reading →

1995 o gal 1993

Jau galvojau, kad pamečiau… Gal kur nors disketėse dar ir rasčiau. Tačiau gerai kad yra internetas… Apie ką aš čia? Čia mano pirmasis didesnis programinis projektas. Ir kogero antra programa kuri parašyta C kalboje. Programa paviešinta internete, baisu net gi pasakyti, 1995 metais. 🙂
Radau netyčia naršydamas pagal savo vardą ir pavardę. Pasirodo įtrauktas į kažkokius “classic games” CD rinkinius. Pasirodo, aš buvau geras žmogus ir programa netgi įdėjau su visais sourcais. Dabar nusikroviau, paleidau Amiga kompiuterio emuliatorių ir va kas gavosi:

Ant tikro Amiga kompiuterio visas vaizdelis žymiai tolygesnis. Čia jau emuliacijos problemos (CPU ir GPU dažnio santykis). Sunku suderinti, nes “žaidimas” parašytas visiškai nežinant OS subtilybių ir be jokios dokumentacijos. Nors ir nebuvo dokumentacijos (rašiau reverse engineerindamas keletą bandiminiu programų) šis žaidimukas naudoja GPU akseleraciją! (aišku 95 metų lygio). Kas juokingiausia- nemokėjau skaityti iš disko (arba ilinkinti grafinę medžiagą) ir nemokėjau daryti “fprint” komandos grafinėje aplinkoje… Todėl gavosi tokia keista grafika, tekstas ir garsai… 😉

Source kodas rodo dvigubą datą: 1993 ir 1995 metus. Kadangi rašyta ant dviejų kompų (A500 ir A1200) tai yra didelė tikimybė, kad softas gali būti ir 1993 metų. Tik jis paskelbtas 1995.

Boulder Dash

Nu, bent jau prie labirintų žemėliapių parašyta tiktai senesnė data:

Boulder Dash

Gaila, neišliko mano rašytas ATARI kompiuko softas… 🙁 nebuvo tada interneto.

PHP programavimas: vienas iš mano tiesioginių darbų

Kartais nuo karto klausiat ką aš dirbu ne poilsio metu. Vienas iš mano darbų yra web programavimas. Paskutinis, dar nepabaigtas projektas tai UAB Vitra TVS (CMS) su prekių žinynu. Programos nuo nulio nerašiau- kaip pagrindą panaudojom kažkokį komercinį produktą kurį buvo nupirkusi kompanija. Tačiau ta sistema visiškai morališkai paseno, o “gamintojai” pradėjo šnekėti apie kažkokius kosminius skaičius. Teko pasinagrinėti svetimą kodą ir gana stipriai jį perrašyti. Taip gavosi tokia pusiau CMS, pusiau prekių katalogas.

Vitra.lt

Kadangi jau beveik žinau ką daro kiekvienas kodo pirstelėjimas, dabar labai lengva tobulinti sistemą. Ypač kai įdėjas laikas nuo laiko pageneruoja bendradarbiai. “Dizainą” tikrai pats nedariau, čia paprasčiausias free template. Tačiau CMSas lengvai apvelkamas bet kokiu drabužėliu.

Emailų markutės

10 ct markuteLabai jau užknisa spamas. Tikrai užknisa. Su užsienietišku spamu apie pimpalų prailginimą galima kovoti naudojant gana efektyvias Spamassassin priemones. Tačiau su Rusišku ir Lietuvišku spamu jau kovoti žymiai sunkiau. Ypač užknisa, kad Lietuviškas spamas labai neefektyvus ir jo siuntėjai yra visiški debilai. Tokių debilų kontora yra “Office System” iš Vilniaus. Jie siuntinėja 180…230 kilobaitų paveiksliuką su kažkokiu pasiūlymu… Kadangi jie proto neturi, o ir seimūnai nuo šių metų pradžios iteisino spamą, tenka griežtinti elektroninio pašto taisykles. Todėl, jei man rašot laišką iš kokio užspaminto domeino, ypač iš kokių nors Rusiškų webmailų, padidėja tikimybė, kad jūsų laiškas paprasčiausiai automatiškai bus ištrintas jau serveryje, o jūsų SMTP serveriui bus pranešta, kad tokio emailo nėra ar iš viso, kad pašto serveris neegzistuoja. Prasimušti per šį bloką labai sunku. Tačiau yra labai paprastas sprendimas- naudokite pašto ženklus- markutes. Šiuo metu Savel Paštas išleido į apyvartą nemokamas 10, 25 centų ir vieno lito vertės pašto markutes. 🙂
Kad pasinaudoti šiomis markutėmis, tereikia jas perkopijuoti į laiško temos (Subject) laukelį. Užtenka kad ir temos gale įkopijuoti markutę, ir jūsų elektroninis laiškas gaus spamassassino neigiamų taškų. Rašant iš paprastų emailų dažniausiai užtenka priklijuoti 10ct markutę, tačiau jei rašote iš kokio nors nuvalkioto Rusiško webmailo ir dar rusiškom raidėm, gali prireikti 25ct ar net vieno lito pašto ženklo…
Pašto ženklai riboto galiojimo laiko. Todėl prašom nenaudoti senų pašto ženklų. Šiuo metu galioja šie pašto ženklai:

[Markute10c]
[Markute25c]
[Markute1Lt]

Gal toks metodas paplis 🙂

Spamassassin pluginas FromTo

Pradėjo mano serveriuką atakuoti spamas kuris siūlo pasiilginti savo šlangą keliais centimetrais. Kiek žiūrėjau, pats spaminis tekstas skiriasi kiekviename laiške. Pilnai skiriasi, o ir tiesioginio “penis enlargement” nėra paminėta. Viskas parašytas alegorijom- tai smauglys, tai gyvatė, tai šlanga, tai gyvis.. ir panašiai. Tiesiogiai spamassassin taisyklės kaip ir nėra galimybės parašyti.Tačiau yra vienas bendras dalykas tuose laiškuose- gavėjas ir siuntėjas sutampa. T.y. “FROM:” ir “TO:” laukelis tas pats. Kaip ir laiškai rašyti sau pačiam.
Pasiknaisiojes internete nieko gero neradau. Todėl pasinaudojau paprasto plugino source code ir parašiau pluginą, kuris paprasčiausiai sulygina tuos du laukelius.

Pluginas ir konfiguracinė eilutė šiame ZIP faile: FromTo Spamassassin plugin

Kadangi kodas labai paprastas, bet kas gali pasimodifikuoti source, kad būtų atliekamas net tik “FROM” = “TO” tikrinimas, bet ir “REPLYTO” ir koks nors “envelope”…
Nu ir standartinė atmazkė: use at your own risk.

Mygtukai analoginiam įėjime

Viskas prasidėjo nuo to, kad asmuo kodiniu vardu “Miltukų Meistras” sudaužė vieną Kinietišką prietaisiuką, o aš ji norėjau dar panagrinėti… Čia aišku nepalyginamas dalykas su žmogaus kodiniu vardu “Taupytis” poelgiu, kai norėdamas pažiūrėti kokios spalvos stiklas, jis atsipjovė su kampiniu šlifuokliu plazminio teliko ekrano gabalą… Dar veikiančio teliko…

O dabar esmė- daugelyje prietaisu yra grupės mygtukų. Dažnai mygtukai būna ir megėjiškuose prietaisuose su mikrokontroleriais (MCU). Tam tikslui naudojamos vertingos mikroprocesoriuko kojos. Jei grupė mygtukų, jie jungiami į matricą ir naudojamas dinaminis klavietūros skanavimas. Tuo tarpu, kieme jau 21 amžius ir daugelis MCU turi analoginius įėjimus. Ir daugelyje pramoninių prietaisų (magnetolos, CD grotuvai, radiojos, MP3 grotuvėliai, LCD monitoriai, elektroniniai laikrodžiai) jau seniai naudoja analoginį mygtukų valdyma. Minėtas sudaužytas prietaisas turėjo štai tokį mygtukų pajungimą:


(čia realaus prietaiso schema. Kodėl parinkti tokie rezistoriai aš nežinau)

Kaip matome, šeši mygtukai pajungti prie vienos MCU kojos. Šiaip prietaisiukas turi 3 analoginius valdymo įėjimus. 3 duomenų laidais pajungta 16 mygtukų. Naudojant grynai skaitmeninį pajungimą reikėtu žymiai daugiau MCU laidelių ir daryti ganėtinai sudėtingą ir resursų naudojantį algoritmą.

Pabandom suvesti skaitmeninio ir analoginio valdymo pliusus ir minusus (šios konkrečios schemos):

Analoginis valdymas:
(+) vienas MCU laidas
(+) lengva pajungti kiek toliau išneštą klavietūrą (rezistorius lengva prilituoti prie mygtukų)
(+) lengvas softas- analoginis signalas gali generuoti pertraukimą arba galima viena komandą nuskaityti klavietūros būklę.
(+)nėra kontaktų “kibirkščiavimo”
(-) reikia ADC
(-) reikia skirtingų rezistorių 🙂
(-) negalima daryti akordų (tiesa galima panaudoti binarinį kodavima su 2^n kodavimu)
(-) reikalingas Vref (tiesa jis gi pas MCU būna)
(-) galbūt jautrus trukdžiams? Ar blogiems mygtukams?

Skaitmeninis valdymas:
(+) yprastas
(+) daug softo
(+) galima akordai (nevisada)
(-) reikia daugiau MCU kojyčių
(-) reikia kovoti su kontaktų drebėjimu
(-) daug laidų iki klavietūros
(-) softas ėda daug MCU laiko, jei reikia dinaminio skanavimo

Malonu būtų išgirsti mintis ir komentarus.