原创 選擇排序(c語言描述)

選擇排序的主要思想就是每次找出未排序序列中最小的值,然後將該值放到合適的位置。 #include <stdio.h> #define SWAP(a,b,c) ((c)=(a),(a)=(b),(b)=(c)) void Select

原创 病毒常用方法之註冊表操作

註冊表的增刪查改操作基本上是惡意代碼的常規操作,但是對註冊表的操作通常會留下痕跡,導致被發現,最後被清理掉 .對於驅動模塊更是如此,驅動程序的入口函數的第二個參數就是註冊表路徑,當驅動加載後該值會被寫到相應的位置,這是爲了隱藏自己,要將與

原创 MmIsAddressValid()做了些什麼

從函數的名稱可以看出是判斷地址是否有效,下面是反彙編代碼和C代碼。它主要判斷地址是否對齊來確定地址是否有效。 nt!MiIsAddressValid: 840bcaa8 8bff mov edi,edi 84

原创 病毒常用的方法之同流合污

一些感染型的病毒基本上就是對文件的特性進行了修改(內容,屬性等),如果是破壞型的,普通電腦用戶也可以辨別出來(燒香的熊貓);還有目的是隱蔽的,一般用戶可能就不會那麼容易發現從而中招。快捷鍵病毒將文件夾進行僞造做成一個快捷鍵,文件夾大小變成

原创 undocumented function--還原的IoCreateDriver()

通過WinDbg得到的反彙編代碼來重寫的IoCreateDriver(),完成之後對它的大概流程有了基本的瞭解。這個函數的目的是 依據提供的兩個參數,一個是名稱,一個是驅動初始化例程,來創建一個輕量級的驅動程序—功能不完善;初始化例程是完

原创 Time(口白)-MKJ

Money is not evil by itself It's just paper with perceived value to obtain other things we value in oth

原创 信任不應該被透支

相信走在大街上,發現“誠信”二字應該不會太困難—–某宣傳標語的一部分。人,要講信用,不應該欺騙他人。可能是爲了體現這些標語的價值,事實上它真的需要被重視起來。 透支,讓人聯想到信用卡的透支,身體健康的透支等等。它意味着某個事物不能

原创 Equation樣本中nls_933w.dll模塊簡單分析(上)

這是一個dll文件,它的任務是對導出的5個函數提供支持。這些導出函數被調用程序使用完成相應的‘使命’,主要在兩個方面,1註冊表,2釋放驅動文件並加載,與之通信。 1,突破口 將文件用Ida打開後,習慣性的去查看導入表來對可能發生的行爲

原创 IoEnumerateDeviceObjectList函數的還原

函數接口解釋參考ddk文檔(win 7 32),用來遍歷某個驅動對象的設備對象。c代碼+WinDbg得到的反彙編代碼 NTSTATUS IoEnumerateDeviceObjectList(IN PDRIVER_OBJECT Dr

原创 病毒常用方法之回到起點---PE文件

一般的可執行惡意樣本的INT(導入名稱表)在一定程度上就暴露了自己的行爲,所以又來保護自己了。下面是一個樣本中的實際應用,從PE文件結構入手。爲了可以調用相關的API (由kernel32.dll ,ntdll.dll等導出,它先找到目標

原创 樣本Exforel的還原過程

它的解碼過程比較清晰:將存放在數據段中的文件數據進行解碼,然後構建PE。(需要樣本可以留言) #include <stdio.h> #include <Windows.h> void Decode(char * data, char *

原创 Discovering Dynamically Loaded API in Visual Basic Binaries(轉載 Cisco 的博客,部分))

Performing analysis on a Visual Basic (VB) script, or when Visual Basic is paired with the .NET Framework, becomes an e

原创 病毒常用方法之移花接木---小小hook

之前在一些地方看過不少帖子,介紹或總結hook得各種使用,從中收穫不少。其中有一個總結,我覺得是很準確的:hook就是改變原程序的執行流程。只不過在使用的場合不同,每個人實現的效果可能存在差異,但實現的思路大同小異。 下面介紹一個dl

原创 IoCallDriver()簡析

NTSTATUS IofCallDriver(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp) { if(*pIofCallDriver)

原创 病毒常用方法之加密

惡意軟件爲了躲避殺毒軟件的掃描會將一些敏感的字符或數據進行加密,來改變原有的樣子(特徵).下面是一個解密的反彙編和C代碼: ... ;這個函數調用時有一個參數壓入棧,另外還有兩個寄存器的值被使用