日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ida提取hashab算法记录

發(fā)布時(shí)間:2025/7/14 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ida提取hashab算法记录 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

????? 話說ida f5功能確實(shí)很強(qiáng)大,以后還會(huì)使用到f5進(jìn)行提取代碼,記錄下這次提取代碼過程中的想法。

????? 首先需要注意f5生成的偽代碼函數(shù)內(nèi)的局部變量都是以1字節(jié)對(duì)齊的,f5把一個(gè)函數(shù)使用的堆棧中的地址都對(duì)應(yīng)到了一個(gè)變量上。ida生成的偽代碼中會(huì)經(jīng)常在某個(gè)變量的基礎(chǔ)上對(duì)后面的數(shù)據(jù)進(jìn)行賦值和拷貝。可以使用下面的方法進(jìn)行解決。然后使用全部替換,在所有的變量前都加上data.。

#pragma pack(1)
?? ?struct data_t
?? ?{
?? ??? ?signed int v3; // esi@1
?? ??? ?signed int v4; // esi@3
?? ??? ?__int16 v6; // [sp+8h] [bp-198h]@1
?? ??? ?char v7; // [sp+Ah] [bp-196h]@1
?? ??? ?int v8; // [sp+Ch] [bp-194h]@1
?? ??? ?__int16 v9; // [sp+10h] [bp-190h]@1
?? ??? ?char v10; // [sp+12h] [bp-18Eh]@1
?? ??? ?int v11; // [sp+14h] [bp-18Ch]@1
?? ??? ?int v12; // [sp+18h] [bp-188h]@1
?? ??? ?int v13; // [sp+1Ch] [bp-184h]@1
?? ??? ?char v14; // [sp+20h] [bp-180h]@1
?? ??? ?char v15; // [sp+24h] [bp-17Ch]@1
?? ??? ?char v16; // [sp+25h] [bp-17Bh]@1
?? ??? ?int v17; // [sp+26h] [bp-17Ah]@1
?? ??? ?int v18; // [sp+2Ah] [bp-176h]@1
?? ??? ?int v19; // [sp+2Eh] [bp-172h]@1
?? ??? ?char v20; // [sp+32h] [bp-16Eh]@1
?? ??? ?__int16 v21; // [sp+33h] [bp-16Dh]@1
?? ??? ?char v22; // [sp+35h] [bp-16Bh]@1
?? ??? ?int v23; // [sp+36h] [bp-16Ah]@1
?? ??? ?__int16 v24; // [sp+3Ah] [bp-166h]@1
?? ??? ?char v25; // [sp+3Ch] [bp-164h]@1
?? ??? ?char v26[31]; // [sp+3Dh] [bp-163h]@3
?? ??? ?char v27; // [sp+5Ch] [bp-144h]@5
?? ?}data;
#pragma pack()

2.需要注意的是生成的偽代碼的局部變量中有些變量的大小有誤,在這次提取算法過程中在這點(diǎn)上吃足了苦頭。

比如說在上面的代碼中f5生成的偽代碼最后的兩個(gè)局部變量很可能是:

?????? char v26; // [sp+3Dh] [bp-163h]@3
?? ??? char v27; // [sp+5Ch] [bp-144h]@5

一般都需要對(duì)局部變量的大小進(jìn)行校驗(yàn),比較好的一點(diǎn)是ida生成的偽代碼后面有注釋,會(huì)告訴我們變量的大小是多少,上面的代碼應(yīng)該修改為

?????? char v26[31]; // [sp+3Dh] [bp-163h]@3
?? ??? char v27; // [sp+5Ch] [bp-144h]@5

如果把局部變量的地址對(duì)齊和變量的大小都修改完成后,提取的函數(shù)基本就沒有什么大的問題了。

3. 需要注意的是ida生成的偽代碼會(huì)有一些宏需要自己進(jìn)行補(bǔ)充

#define _HIDWORD(x) (((_DWORD*)&x)[1])
#define _LODWORD(x) (((_DWORD*)&x)[0])
#define _HIWORD(x) (((_WORD*)&x)[1])
#define _LOWORD(x) (((_WORD*)&x)[0])
//#define __PAIR__(x,y) (((unsigned long long)(x) << 32) + (y))
#define _LOBYTE(x) (((_BYTE*)&x)[0])
#define BYTE1(x) (((_BYTE*)&x)[1])
#define BYTE2(x) (((_BYTE*)&x)[2])
#define BYTE3(x) (((_BYTE*)&x)[3])

這些都需要自己進(jìn)行補(bǔ)齊

4.ida生成的偽代碼有部分會(huì)出現(xiàn)問題,主要體現(xiàn)在 a * ( b / c)這樣的表達(dá)式寫成a * b / c,這樣的問題需要進(jìn)行具體的跟蹤比對(duì)才能發(fā)現(xiàn),有這樣的問題就會(huì)比較耗時(shí)間,其實(shí)我不想說我在這個(gè)問題上被坑了好多時(shí)間進(jìn)去了。

大體上在使用ida提取算法的時(shí)候注意以上幾點(diǎn),就會(huì)節(jié)省很多時(shí)間。

最后把我使用ida提取的hashab算法共享上來,我把代碼中計(jì)算偏移地址的偏移數(shù)據(jù)刪除了,如果某位需要使用就要自己計(jì)算下獲取偏移地址時(shí)使用的偏移數(shù)據(jù),不多只需要改一行代碼。

?http://files.cnblogs.com/xiaoshame/hashab.zip

轉(zhuǎn)載于:https://www.cnblogs.com/xiaoshame/p/4054827.html

總結(jié)

以上是生活随笔為你收集整理的ida提取hashab算法记录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。