可以通過(guò)反匯編來(lái)知道接口函數(shù)的參數(shù),建議使用W32DSM來(lái)分析,也可以直接使用VC來(lái)分析,就是麻煩一點(diǎn)。
現(xiàn)在使用W32DSM來(lái)具體說(shuō)明:
1。先打開(kāi)需要分析的DLL,然后通過(guò)菜單功能-》出口來(lái)找到需要分析的函數(shù),雙擊就可以了。
它可以直接定位到該函數(shù)。
2。看準(zhǔn)該函數(shù)的入口,一般函數(shù)是以以下代碼作為入口點(diǎn)的。
push ebp
mov ebp, esp
...
3。然后往下找到該函數(shù)的出口,一般函數(shù)出口有以下語(yǔ)句。
...
ret xxxx;//其中xxxx就是函數(shù)差數(shù)的所有的字節(jié)數(shù),為4的倍數(shù),xxxx除以4得到的結(jié)果
就是參數(shù)的個(gè)數(shù)。
其中參數(shù)存放的地方:
ebp+08 //第一個(gè)參數(shù)
ebp+0C //第二個(gè)參數(shù)
ebp+10 //第三個(gè)參數(shù)
ebp+14 //第四個(gè)參數(shù)
ebp+18 //第五個(gè)參數(shù)
ebp+1C //第六個(gè)參數(shù)
。。。。
-------------------------------------------
還有一種經(jīng)常看到的調(diào)用方式:
sub esp,xxxx //開(kāi)頭部分
//函數(shù)的內(nèi)容
。。。
//函數(shù)的內(nèi)容
add esp,xxxx
ret //結(jié)尾部分
其中xxxx/4的結(jié)果也是參數(shù)的個(gè)數(shù)。
-------------------------------------------------
還有一種調(diào)用方式:
有于該函數(shù)比較簡(jiǎn)單,沒(méi)有參數(shù)的壓棧過(guò)程,
里面的
esp+04就是第一個(gè)參數(shù)
esp+08就是第二個(gè)參數(shù)
。。。
esp+xx就是第xx/4個(gè)參數(shù)
你說(shuō)看到的xx的最大數(shù)除以4后的結(jié)果,就是該函數(shù)所傳遞的參數(shù)的個(gè)數(shù)。
----------------------------------------------
到現(xiàn)在位置,你應(yīng)該能很清楚的看到了傳遞的參數(shù)的個(gè)數(shù)。至于傳遞的是些什么內(nèi)容,還需要進(jìn)一步的分析。
最方便的辦法就是先找到是什么軟件在調(diào)用此函數(shù),然后通過(guò)調(diào)試的技術(shù),找到該函數(shù)被調(diào)用的地方。一般都是PUSH指令
來(lái)實(shí)現(xiàn)參數(shù)的傳遞的。這時(shí)可以看一下具體是什么東西被壓入堆棧了,一般來(lái)說(shuō),如果參數(shù)是整數(shù),一看就可以知道了,
如果是字符串的話也是比較簡(jiǎn)單的,只要到那個(gè)地址上面去看一下就可以了。
如果傳遞的結(jié)構(gòu)的話,沒(méi)有很方便的辦法解決,就是讀懂該匯編就可以了。對(duì)于以上的分析,本人只其到了拋磚引玉,
希望對(duì)大家有點(diǎn)用處。