Programok visszafejtése és védelme

A tantárgy angol neve: Reverse Engineering and Program Protection

Adatlap utolsó módosítása: 2017. június 27.

Budapesti Műszaki és Gazdaságtudományi Egyetem
Villamosmérnöki és Informatikai Kar
Villamosmérnöki szak
Mérnök informatikus szak
Gazdaságinformatikus szak
Szabadon választható tantárgy
Tantárgykód Szemeszter Követelmények Kredit Tantárgyfélév
VIHIAV05   2/0/0/f 2  
3. A tantárgyfelelős személy és tanszék Dr. Zsóka Zoltán,
4. A tantárgy előadója Izsó Tamás    tudományos segédmunkatárs    Hálózati Rendszerek és Szolgáltatások Tanszék
Dr. Zsóka Zoltán docens, Hálózati Rendszerek és Szolgáltatások Tanszék

5. A tantárgy az alábbi témakörök ismeretére épít A programozás alapjai 1.
A programozás alapjai 2.
6. Előtanulmányi rend
Ajánlott:
•    Mérnök informatikus hallgatók számára ajánlott ezt megelőzően „A programozás alapjai I.” (VIEEA100) tárgy és  “A programozás alapjai II.” (VIEEA112) tárgy elvégzése.
•    Villamosmérnök hallgatók számára  „A programozás alapjai 1” (VIHIA106)  és „A programozás alapjai 2” (VIHIA107)  tárgy elvégzése.
Ezért a jelen tárgyat a 3. félévben vagy azt követően célszerű felvenni.

7. A tantárgy célkitűzése A programozási folyamat végső szakaszaként át kell térni a statikus programszövegről a dinamikus végrehajtásra. Ez a lépés a számítógépre hárul, de bizonyos esetekben a programozónak is ismerni kell, hogy ilyenkor mi zajlik a számítógépben. A félév során a hallgatók jártasságot szereznek a programok visszafejtésében, vezérlési szerkezetek feltérképezésében, a visszafejtett kódok értelmezésében, a kód visszafejthetőségének megnehezítésben, szoftver másolásvédelmi megoldások tesztelésében, számítógépes vírusok, férgek, stb. működésének megismerésében. A tantárgyat azoknak ajánljuk, akik szerzői jogdíjas programok védelmével, kód generálásával, vírusirtással, gyengén dokumentált programok interfészének a visszafejtésével szeretnének foglalkozni, vagy csak jobban meg szeretnék érteni, hogy a program végrehajtása közben mi történik a számítógép belsejében.
8. A tantárgy részletes tematikája 1.    Motivációs példák bináris kód visszafejtésének szükségszerűségére. Az ide vonatkozó szerzői jogi problémák megbeszélése.
2.    Programok szemantikai értelmezése dióhéjban.
3.    Fordítóprogram működésének a bemutatása. A fordító által használt közbenső kódábrázolások.
4.    Programok statikus analízise és a kód optimalizálása. Optimalizálás kihatása a bináris programok értelmezésére.
5.    Program visszafejtéséhez használt algoritmusok tanulmányozása, és az egyes módszerek összehasonlítása. 
6.    Gépi kódú program vezérlésfolyam gráfjának visszafejtése, és azok megfeleltetése magasabb szintű programozási nyelvek vezérlésszervező utasításainak.
7.    Intel Pentium processzor utasítás-architektúrájának az áttekintése. Stack szervezési módszerek bemutatása
8.    Disassemblerek működése, és a kód visszafejtésének a megzavarása.
9.    C és C++ forrásfájlokból előállított futtatható fájlok visszafejtése, vezérlési szerkezetek feltérképezése.
10.    A linker és a loader működése. A tárgykód (COFF) és végrehajtható fájlformátum (PE/COFF) szerkezetének az ismertetése.
11.    Dinamikusan linkelt könyvtárak belső szerkezetének és működésének megismerése.
12.    IDA disassembler bemutatása. IDA programozása script és C++ nyelven.
13.    Dinamikus analízis ismertetése az Intel által kifejlesztett PIN (Dynamic Binary Program Instrumentation Tool) felhasználásával.
14.    Programok dinamikus nyomkövetéséhez használt debuggerek működése. Visszafejtést megnehezítő (antireversing) technikák bemutatása.

9. A tantárgy oktatásának módja (előadás, gyakorlat, laboratórium) Heti két óra előadás, melyen esettanulmányok is bemutatásra kerülnek.
10. Követelmények Az előadásokon a jelenlétet kötelező. Aláírást nem kaphat az a hallgató, aki az alkalmak több,mint 30%-áról hiányzott (a viszonyítási alap a tanév aktuális félévének időbeosztása szerint ténylegesen megtartott előadások száma).
A félév során a hallgatók 3 kis ZH-t írnak, és egy házi feladatot kell sikeresen megoldaniuk..
A félévközi jegy a kis ZH-k jegyinek átlaga és a házi feladatra kapott az érdemjegy alapján:
0,5*(KZH átlag + HF) a közelebbi egészre kerekítve.(A kis ZH-k sikeressége nem kritérium, azok csak a félévközi jegy meghatározásában szerepelnek. A meg nem írt kis ZH 0 ponttal számít az átlagba.  A házi feladat sikeres (legalább elégséges) teljesítése a félévközi jegy megszerzésének feltétele.

11. Pótlási lehetőségek A házi feladat beadása és a kis ZH a pótlási hét végéig különeljárási díj ellenében pótolható.
A meg nem írt, vagy sikertelen kis ZH-k közül, egyet a pótlási héten megírásra kerülő kis ZH-val pótolni, vagy a legrosszabbat javítani lehet. Javító kis ZH megírása esetén annak érdemjegye számít a félévközi jegy meghatározásában.

12. Konzultációs lehetőségek A félév közben igény esetén a hallgatókkal egyeztetett időpontokban.
13. Jegyzet, tankönyv, felhasználható irodalom 1.    John R. Levine: Linkers & Loaders
2.    Stevens S. Muchnick: Advanced Compiler Design and Implementation
3.    Kip R. Irvine: Assembly Language for Intel-Based Computers
4.    Mark E. Russinovich, David A. Solomon: Windows Internals
5.    Eldad Eilam: Reversing, Secrets of Reverse Engineering
6.    Greg Hoglund, Gary McGraw: Exploiting Software
7.    Singh A. Identifying Malicious Code Through Reverse Engineering
8.    Chris Eagle: The IDA Pro Book The Unofficial Guide
9.    Eric Filiol: Computer viruses: from theory to applications

14. A tantárgy elvégzéséhez átlagosan szükséges tanulmányi munka
Kontakt óra28
Félévközi készülés órákra12
Felkészülés zárthelyire6
Házi feladat elkészítése10
Kijelölt írásos tananyag elsajátítása4
Vizsgafelkészülés0
Összesen60
15. A tantárgy tematikáját kidolgozta Izsó Tamás    tudományos stmts.    Hálózati Rendszerek és Szolgáltatások Tanszék
Dr Zsóka Zoltán docens, Hálózati Rendszerek és Szolgáltatások Tanszék