原创 C++實現機制(三)——虛函數表

      C++中的虛函數的作用主要是實現了多態的機制。關於多態,簡而言之就是用父類型別的指針指向其子類的實例,然後通過父類的指針調用實際子類的成員函數。這種技術可以讓父類的指針有“多種形態”,這是一種泛型技術。所謂泛型技術,說白了就是

原创 代碼逆向(六)——加法與減法的識別與優化原理

加法的優化相對來說比較簡單,只有3種優化方案,下面我們就以一個簡單的例子來說明這三個問題,先看源碼:int _tmain(int argc, _TCHAR* argv[]){  int nNum, nA = 8;  nNum = argc

原创 代碼逆向(一)——尋找main函數入口

逆向的第一步是什麼?這要問你學習C語言的第一步是什麼,很自然的,逆向的第一步當然也是大名鼎鼎“HelloWorld!”了。但是也不要因此就誤認爲這一節會很簡單,如果你是第一次接觸逆向的話,那麼這一節還是有些難度的。      好的,讓我們

原创 代碼逆向(二)——if-else分支的識別技巧

if-else分支幾乎是所有人學習C語言後第一個接觸的知識點,那麼我們學習逆向理所當然也應該從這裏開始了。其實關於if-else分支我們在上一節已經接觸過了,這一節我們將詳細的探討有關於if-else分支的識別與編譯器可能使用的優化方案。

原创 關於PE病毒編寫的學習(四)——關於歷遍磁盤的討論

在上一章中的“前置病毒”中,由於它只是一個測試病毒,因此該病毒只是搜索病毒文件所在文件夾的exe文件。   顯然,爲了讓它具有更好傳染性,能夠歷遍整個磁盤或某些重要文件夾的特性,是十分重要的。   開始討論歷遍之前,先讓我們來改進原來的代

原创 代碼逆向(四)——switch-case識別技巧初探

    我們先看一段代碼:int _tmain(int argc, _TCHAR* argv[]){    int nNum = 2;    switch (nNum)    {    case 0:        printf("nNu

原创 數據逆向(二)——區分常量、變量、指針

做數據逆向分析最先應該區分數據是常量、變量,還是指針。可是作爲二進制數據本身不會標記自己是什麼,然而編譯器將不同的的類別儲存在不同的區域。     變量數據應分爲這兩類:       1. 局部非靜態變量:對於1KB以下的該種變量,一般都

原创 關於PE病毒編寫的學習(二)

這篇說一下,PE病毒需要那些技術積累,以及這些技術的學習方法和重點是什麼。   1.先說彙編吧         其實我說的彙編關於兩個方面:彙編語言設計 和 微機原理         彙編語言設計,它也是兩方面: 常規教材講的 和 病毒的

原创 代碼逆向(三)——循環分支的識別技巧

“嘿!爲什麼要先學這裏,不應該是for循環嗎?”    相信很多讀者都會產生以上疑問,要的就是這種效果!就讓我們帶着這個疑問開始這一節的學習,先看源碼:int _tmain(int argc, _TCHAR* argv[]){    in

原创 代碼逆向(七)——乘法的識別與優化原理

 那麼如果讓我們來做乘法的優化,我們會怎麼做呢?很顯然位移是必須要被利用的,但是除此之外微軟的編譯器還利用了lea指令,但是乘法的優化是非常多變的,本小節的目的是讓各位讀者再看見某一塊指令時知道“哦!這是乘法...”就可以了。    我們

原创 better c/c++ code(三)——開解循環

當循環次數可以預知時,若是這時要求運行效率時,可以採用開解循環。   這是ASCII壓縮算法的例子: void ASCII_Compress(char *dest,char *src)     void ASCII_Compress(ch

原创 關於PE病毒編寫的學習

首先聲明,因爲害怕被刪帖,我肯定不會展示正確完整病毒代碼,但是會介紹可行的學習方法。   網上有很多關於介紹PE病毒編寫的帖子,但基本上都是分析源碼FunLove和《計算機病毒分析與對抗》中PE病毒的代碼翻版。事實上這兩個代碼是用於原理展

原创 數據逆向(一)——開篇

       許多人將軟件逆向工程看做代碼逆向工程,然而軟件被看做是“軟件=代碼+數據”。那麼對等的就應存在“數據逆向工程”,雖然數據逆向工程與代碼逆向工程有交叉部分,但是它們各有側重。代碼逆向工程主要利用反彙編分析代碼的執行流程。數據逆

原创 數據逆向(四)——結構體識別

結構體        struct是由一系列具有相同類型或不同類型的數據構成的數據集合,也叫結構。它的實現方法上和數組是一樣的,即每一個成員的訪問是直接尋址方式。唯一的區別是,爲了提高訪問效率,成員無論類型爲何,編譯器將它們按照4字節對齊

原创 關於PE病毒編寫的學習(五)——病毒如何做標記和記錄信息

1.做標記和記錄信息的區別    做標記:它是爲了其它病毒識別自己,而在固定或符合一定規則的位置上記錄的符號信息。      記錄信息:它是爲了病毒本身正確運行,而存儲的某些信息,甚至是部分代碼,比如解密程序的隨機密匙、所感染宿主文件的某