【Microsoft】Windows Md5 消息摘要功能

前言

最近寫個(gè)東西玩玩玻侥,需要用到MD5,找了半天亿蒸,發(fā)現(xiàn)MS的MD5連個(gè)接口都沒有凑兰。當(dāng)然事后goolge baidu還是找到了掌桩,可能用得小。openssl也可以票摇,不過為了這些小功能去找個(gè)瑞士軍刀代碼,也是無聊(笑)砚蓬。

正文

圖像 1.png

其實(shí)MS是有這個(gè)接口矢门,不過沒有暴露出來,在ntdll中導(dǎo)出函數(shù)能找到灰蛙。當(dāng)然是不知到形參之類的祟剔,怎么辦? 只能找標(biāo)準(zhǔn)摩梧,rfc1321是MD5 的標(biāo)準(zhǔn)物延,里面有個(gè)MD5的實(shí)現(xiàn)。大概如下:


/* MD5 context. */
typedef struct {
  UINT4 state[4];                                   /* state (ABCD) */
  UINT4 count[2];        /* number of bits, modulo 2^64 (lsb first) */
  unsigned char buffer[64];                         /* input buffer */
} MD5_CTX;

void MD5Init PROTO_LIST ((MD5_CTX *));
void MD5Update PROTO_LIST
  ((MD5_CTX *, unsigned char *, unsigned int));
void MD5Final PROTO_LIST ((unsigned char [16], MD5_CTX *));

當(dāng)然仅父,對(duì)于巨硬大佬不跟標(biāo)準(zhǔn)早有所聞叛薯,我是不相信這么簡(jiǎn)單的。事實(shí)上笙纤,照上面的代碼來耗溜,反匯編跟進(jìn)MD5Init時(shí),你可以發(fā)現(xiàn)state與count的位置剛好倒轉(zhuǎn)省容。只好繼續(xù)google(笑)抖拴,后來找到個(gè)軟件 Process hacker 的 doc,有個(gè)詳細(xì)的MD5_CTX的結(jié)構(gòu)腥椒,試了下還真能用阿宅,代碼風(fēng)格跟巨硬一個(gè)樣。

typedef struct MD5state_st
{
    ULONG i[2];
    ULONG buf[4];
    UCHAR in[64];
    UCHAR digest[16];
} MD5_CTX;

其中笼蛛,digest是MD5緩存洒放,最后輸出的地方,所以MD5Final只接受單個(gè)參數(shù)滨砍。最后大概就是這樣:

#include <windows.h>
#include <tchar.h>


#pragma pack(push,1)
typedef struct MD5state_st
{
   ULONG i[2];
   ULONG buf[4];
   UCHAR in[64];
   UCHAR digest[16];
} MD5_CTX;
#pragma pack(pop)

typedef void (__stdcall *PMD5Init)(MD5_CTX *);
typedef void (__stdcall *PMD5Update)(MD5_CTX *, void*, ULONG);
typedef void (__stdcall *PMD5Final)( MD5_CTX *);

__declspec(dllexport)
void __stdcall MD5Init(MD5_CTX *c) {
   HMODULE ntdll = GetModuleHandle(_T("ntdll.dll"));
   if (!ntdll)return;
   PMD5Init ntdll_MD5_Init = (PMD5Init)GetProcAddress(ntdll, "MD5Init");
   ntdll_MD5_Init(c);
}

__declspec(dllexport)
void __stdcall MD5Update(MD5_CTX *c, void * data, ULONG len) {
   HMODULE ntdll = GetModuleHandle(_T("ntdll.dll"));
   if (!ntdll)return;
   PMD5Update ntdll_MD5_Update = (PMD5Update)GetProcAddress(ntdll, "MD5Update");
   ntdll_MD5_Update(c, data,len);
}


__declspec(dllexport)
void __stdcall MD5Final( MD5_CTX *c) {
   HMODULE ntdll = GetModuleHandle(_T("ntdll.dll"));
   if (!ntdll)return;
   PMD5Final ntdll_MD5_Final = (PMD5Final)GetProcAddress(ntdll, "MD5Final");
   ntdll_MD5_Final(c);
}

這里不用LoadLibrary拉馋,因?yàn)槊總€(gè)進(jìn)程都會(huì)加載ntdll,所以直接GetModuleHandle就可以惨好。__stdcall標(biāo)準(zhǔn)call煌茴,巨硬親兒子,dll一般都是用這個(gè)調(diào)用約定日川,也可以反匯編跟進(jìn)函數(shù)蔓腐,看看是不是函數(shù)自己清棧,不明白可以查下調(diào)用約定龄句,相互調(diào)用的知識(shí)點(diǎn)回论。

結(jié)尾

最后散罕,免不了放個(gè) Window MD5 的github,順便介紹下 “巨硬的加密function Cryptography Reference” 和 “Process hacker 的doc”傀蓉,挺有用的東西欧漱。


編輯于 【2018.3.9】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市葬燎,隨后出現(xiàn)的幾起案子误甚,更是在濱河造成了極大的恐慌,老刑警劉巖谱净,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窑邦,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡壕探,警方通過查閱死者的電腦和手機(jī)冈钦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來李请,“玉大人瞧筛,你說我怎么就攤上這事〉贾眩” “怎么了驾窟?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)认轨。 經(jīng)常有香客問我绅络,道長(zhǎng),這世上最難降的妖魔是什么嘁字? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任恩急,我火速辦了婚禮,結(jié)果婚禮上纪蜒,老公的妹妹穿的比我還像新娘衷恭。我一直安慰自己,他們只是感情好纯续,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布随珠。 她就那樣靜靜地躺著,像睡著了一般猬错。 火紅的嫁衣襯著肌膚如雪窗看。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天倦炒,我揣著相機(jī)與錄音显沈,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拉讯,可吹牛的內(nèi)容都是我干的涤浇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼魔慷,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼只锭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起院尔,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤蜻展,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后召边,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铺呵,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡裹驰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年隧熙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片幻林。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贞盯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出沪饺,到底是詐尸還是另有隱情躏敢,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布整葡,位于F島的核電站件余,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏遭居。R本人自食惡果不足惜啼器,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望俱萍。 院中可真熱鬧端壳,春花似錦、人聲如沸枪蘑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岳颇。三九已至照捡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間话侧,已是汗流浹背麻敌。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掂摔,地道東北人术羔。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓赢赊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親级历。 傳聞我的和親對(duì)象是個(gè)殘疾皇子释移,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容