原创 數據逆向(三)——識別字符串與數組
字符串 在C語言中,字符串是由字符組成,單字符不是字符串,至少有兩個字符組成,且結尾字符是'/0'。 例如:"ABCD" 內存中實際儲存結構是 41H 42H 43H 44H 00H 字符串的尋址,依靠首字節進
原创 關於PE病毒編寫的學習(三)
歷史上,在windows95發佈後,用高級語言編寫的外殼病毒,經過簡單地改造編譯,就能從DOS平臺遷移到windows平臺上。 並且在這當中很多“前置病毒”,僅僅需要重新編譯。 另外之所以用“前置病毒”作爲第一分析樣本,理由如下: 1
原创 ASCII壓縮算法實現
#include <stdio.h>#include<string.h>#include<stdlib.h> //壓縮函數,採用開解循環提高效率void ASCII_Compress(char *dest,char *src){
原创 代碼逆向(五)——switch-case識別技巧提高
我們前面爲各位讀者分別介紹了轉成if-esle與利用跳轉表兩種優化模式,但是在最後我隱含着提出了一個問題,既如果我們的switch-case分支兩個數之差大於50甚至更多的時候,那麼我們此時是否仍需要利用跳轉表來解決問題呢?很顯然我們不能
原创 代碼逆向(八)——除法與取模運算的識別與優化原理
1.9.1、除法與倒數相乘 何爲倒數相乘?很簡單,編譯器世界中倒數相乘的中心思想其實就是用乘法來代替除法運算。它的原理很簡單,就是將被除數乘以除數的倒數,其公式爲x/y = x*(1/y),我們拿10/2作爲例子,我可以得出以下推論
原创 你可能不瞭解的彙編(中)
1.ret結束程序和ExitProcess的區別 在堆棧平衡的情況下,用ret結束程序,系統自然會調用ExitThread來結束線程;另外,如果是單線程進程,系統自然還會調用ExitProcess。然而,在這裏我要說盡量不要使
原创 彙編寫驅動(一)——光速入門
用匯編寫windows驅動非常簡單,只要有彙編基礎和用C寫驅動的能力即可。有了這兩樣基礎,我們距離用匯編寫驅動,只剩下一層窗戶紙,一戳就破。一、準備軟件:Radasm 爲了快速入門,好的IDE是降低入門難度的有效手段。Rad
原创 微軟沒那麼邪惡
此文收集了一些大家對微軟的常見誤解,並予以解釋,本人並非受僱於利益相關團體,立場雖屬主觀,但絕無利益驅使 誤解1:windows源代碼是非公開的,微軟作爲美國政府的看門狗,其中一定隱藏了不可告人的東西 首先,windows是半公
原创 複雜分支結構逆向
一、 條件分支的逆向基礎 (1)簡單if-else 我們知道簡單的if-else的跳轉結構是這樣的。 例如: if(i1<x1) ……; else ……; 在反彙編結果中我們會看到類似下面的結果
原创 抗去除花指令(二)——有創意的花指令
一、概述 “jmp/call/ret+垃圾數據”這樣的花指令已經是相當“老掉牙”了,OD的插件對付它們基本是“秒殺”,所以本文想說點“有點創意”的花指令,至少能對付OD的插件。 二、創意的核心 [2.1]花指令因何被發現 “jmp/c
原创 控制流迷惑——控制流整平
一、控制流整平的作用 學逆向的人都知道,if-else、while、for具有典型的跳轉等結構,即使通過多層嵌套、拓展條件等方法,依然可以通過“切片技術”來判斷。有了這些依據,就給程序分析帶來很多便利。 正是這個原因,爲了
原创 抗去除花指令(三)——去除檢測
任何技術都有被攻破的一天,沒有包打天下的方法。再強的花指令也是有可能被清除的,這時我們也要想辦法應對。所以我們經常需要檢測花指令是否被清除,加以應對。一、花指令被清除後的痕跡 我們來看一下,下面一段簡單花指令被清除後的結果:代碼:
原创 彙編寫驅動(三)——字符串問題的補充——string.mac說明部分的譯文
我的上一篇文章,提到了masm32/macro/string.mac這個文件裏的宏,但是沒有說明使用方法,所以我直接把這個文件裏的使用說明翻譯一下。;; 文本宏的集合;; 作者: Four-F ([email protected]);; 最後更
原创 彙編寫驅動(二)——字符串的一些問題
剛開始學彙編寫驅動時,最開始遇到的問題就是關於字符串的,因此和大家分享一下經驗。1.如何用匯編實現KdPrint 用C寫驅動時,估計都比較喜歡用自定義的宏函數KdPrint來替代DbgPrint。用C的宏定義來很簡單,但
原创 福島核泄漏必然性的分析
我作爲一個核專業的學生,就給大家簡單的說明一下,福島核電站泄漏事故固然有天災的緣故,但其背後隱藏着人爲設計缺陷的必然性。 一、日本處於環太平洋火山帶上,是一個地震高發國家。福島核電站就位於地震帶上。而我國核電站