10 helmikuun, 2022

Reverse engineering dongle protected software

I was young, the internet just started and we could get tonneittain software for free. Se oli ilmainen, koska joku siellä oli ” kiltti ”tarpeeksi crack / patch.exe-tiedosto.

olen laittanut lainausten väliin ”kind” – sanan, koska tällainen näkemys minulla oli lapsena. Nyt olen ohjelmistoinsinööri ja tiedän, kuinka paljon vaivaa ohjelmistojen rakentaminen vaatii. Joten ole kiltti, älä lataa säröillä ohjelmisto. Tue kehittäjää ja Osta lisenssi!

tällaisen halkion hakeminen, exän paikkaaminen, olen aina halunnut tietää, miten tuollainen tehdään. On käynyt ilmi, että sinun täytyy ymmärtää assembler, konekieli vain CPU ymmärtää (ja jotkut muut nörtit siellä). Koska se oli liian vaikeaa,en koskaan ehtinyt oppia sitä. Viime aikoihin asti (kuten 20 vuotta myöhemmin 😊).

Kuva: Patrick Hendry Unsplash

vuosi sitten ostin ohjelmiston (lisenssillä!), joka tarvitsee USB-tikku toimiakseen. Se on todella hankalaa, kun sinulla on se dongle koko ajan. Varsinkin tien päällä. Joten etsin tapoja kiertää se. Ensimmäinen asia törmäsin oli avain emulaattori nimeltään MultiKey. Se dumps muistin dongle rekisteriin ja sitten emuloi dongle lukemalla rekisteristä. Se toimi OK, kunnes halusin käyttää sitä Windows 10. Ilmeisesti Microsoft ei ole niin suuri fani MultiKey. Todellisuudessa se ei ole suuri fani allekirjoittamattomia kuljettajia ja MultiKey käyttää allekirjoittamaton kuljettaja. Joten tarvitsin toisen ratkaisun. Aika sukeltaa kokoamiskoodiin!

tiesin aina, että on olemassa työkalu, jota käytetään käänteisessä suunnittelussa, nimeltään IDA. Se pystyy hajottamaan sinun .exe tiedosto ja näyttää, mitä on tekeillä. Valitettavasti käyttöliittymä on todella vaikea ymmärtää. Tiesin myös OllyDbg: stä. Se on debuggeri. Debuggerin avulla voit käydä assembler-koodin läpi ohjelman ollessa käynnissä! Merkitys, esimerkiksi, jos haluat debug laskin sovellus, voit todella nähdä sen käsittely painiketta painamalla, tekee laskennan ja näyttää tuloksen ruudulla. Helvetti, voit jopa paasata ja muuttaa sen muistia niin, että laskin palauttaa 5, Kun kysyt, mitä 2 + 2 on!

mutta en ole täällä vaihtamassa laskentaa (vaikka se olisi siistiä). Haluan olla vapaa donglesta. Avasin sovellukseni OllyDbg: n kanssa.

OllyDbg

se oli todella musertavaa. En tiennyt, mitä koodit tarkoittavat. Saati tietää, mistä aloittaa. Palasin piirustuspöydän ääreen. Selvisi, että on olemassa RetDec, dekompilaattori, joka yrittää saada C-koodin ulos koneen koodista. Sen pystyttämiseen ja hajottamiseen meni aikaa, mutta vaivannäkö kannatti. Tulos oli huima .C-tiedosto, yli 2 miljoonaa riviä koodia puoliluettavalla koodilla.

itse asiassa löysin koodin lukevan donglen tavuja melko helposti:

RetDec ulostulo: olen jo muuttanut joitakin muuttujan nimet jotain luettavaa.

näillä tiedoilla käännyin takaisin debuggeriini. In the mean while, I found that OllyDbg is really old (from the year 2000) and has not been updated since 2013. Joten löysin tämän uuden, parannetun debuggerin, nimeltään x64dbg. Se on avointa lähdekoodia ja sen parissa työskentelee suuri kehittäjäyhteisö.

konekielen lukeminen

konekielessä jokaisella ohjeella on muistiosoite. Joten osoitteet löytyi RetDec koodi, Käännyin x64dbg ja Katso, koodi, joka lukee ulos dongle:

Assembler-koodi lukee 2 tavua donglen muistista.

kokoonpanokoodissa funktion argumentit ladataan muistiin pinoosoittimen esp avulla. Meidän koodissamme tämä tapahtuu juuri ennen funktion kutsumista. (3 mov ohjeet osoittavat puhelun kestää 3 argumenttia). Puhelun jälkeen pinon osoitin nollataan ja tarkistetaan (testi), jos puhelu funktioon onnistui. Jos ei, näemme koodin tehdä hyppy (jne). Tämä hyppy osoittaa koodinpätkää, joka osoittaa, että donglea ei ole.

kuten näette, siellä on kehotus tiettyyn funktioon lukea donglea. Katsoin ylös viittaus opas selvittää, mitä tämä toiminto tekee:

funktio lukee donglesta 2 tavua muistia (sana). Kuten arvata saattaa, funktio vie 3 argumenttia, joissa viimeinen argumentti on osoitin 2 tavuun, joka sisältää jonkin verran tietoja donglesta.

kokoonpanokoodissa argumentit Ladataan käänteisessä järjestyksessä. Viimeinen argumentti on tämä:

viimeinen argumentti viittaa esi: hen eli donglen tiedot tallennetaan muistiosoitteeseen, jota eri osoittaa.

kun pysähdymme juuri puhelun jälkeen, voimme nähdä tuloksen muistissa.:

0x74. Se luetaan donglesta ja tallennetaan pääohjelman muistiin.

ohittaakseni tämän puhelun, minun tarvitsee vain kirjoittaa 0x74 muistiin, johon esi osoittaa. Tämä on niin yksinkertaista kuin korvaa 7 riviä edellä:

kuten näette, olen myös nop-ed loput assembler ohjeet, mukaan lukien testi, jos kutsu toimia oli voimassa. Tämä tarkoittaa sitä, että hyppyä ei oteta ja ohjelma jatkuu ilman tarkistusta.

paikattuani kaikki dongleen liittyvät puhelut säästin uuden.exe. Otin donglen esiin ja hoidin Tapani .exe ja omaksi hämmästyksekseni se toimi! Olin onnistuneesti säröillä pala ohjelmisto.

toinen asia ristiin bucket list 😊

Ps: suurin osa asioista oli epäselviä, kuten 0x74 ja sovelluksen nimi. Tämä ei ole vahingoittaa kovaa työtä kehittäjät, jotka loivat tämän ohjelmiston millään tavalla. Olin myös hyvin onnekas dongle vain palasi tavuja ja ei tehnyt mitään salausta omasta.

Vastaa

Sähköpostiosoitettasi ei julkaista.