2010-09-03 31 views
6

我有一個exe文件,我用PE Explorer Disassembler打開。現在我可以看到asm代碼,看起來像這樣:如何將ASM轉換爲可讀取的代碼?

push ebx 
    push esi 
    mov ebx,eax 
    mov eax,[ebx+38h] 
    push eax 
    mov eax,[ebx+3Ch] 
    push eax 
    mov ecx,edx 
    mov eax,ebx 
    mov edx,[ebx+30h] 
    mov esi,[eax] 
    call [esi+7Ch] 
    or byte ptr [ebx+00000088h],02h 
    pop esi 
    pop ebx 
    retn 

我不知道這意味着什麼。有沒有辦法將其轉換爲可讀取的代碼(C,C++,C#或VB.NET)?

背景信息:我需要這個的原因是因爲我需要從我的Windows應用程序調用上述功能。現在這個函數駐留在第三方exe文件中 - 它沒有API或源代碼。任何幫助或建議表示讚賞。

回答

0

你想要什麼叫做「反編譯」。

這不容易解決任務,而且往往不可能。你可以嘗試Google作爲開始。

+0

我在cp上閱讀以下文章:http://www.codeproject.com/KB/cpp/funccaller.aspx - 我可以應用相同的方法嗎? – vikasde 2010-09-03 15:26:20

+0

這就是反壓縮機所做的(在許多其他事情中)。當然你可以這樣做,但這不是一個5分鐘的任務。 – BarsMonster 2010-09-03 15:28:50

+0

好的。我試圖按照文章中描述的方式來完成它,但無法找到任何對我有意義的功能。 – vikasde 2010-09-03 15:34:23

0

您可以使用指針將其反編譯爲C或其他語言,但仍然大部分不可讀。

1

如果你能得到它,IDA Pro + Hex-Rays可以將它反編譯爲半可讀代碼。

+1

嘿,只有2000歐元的一切;)...我已經多年來一直是IDA Pro的客戶,但作爲一個個人,我仍然不能爲插件炫耀更多。 – 0xC0000022L 2011-04-23 19:16:06

2

您需要知道使用了哪些參數。在這種情況下,它看起來像是將參數傳遞給寄存器中的這個例程。一旦你知道這些值是什麼意思,你可以弄清楚這個例程是如何使用的,並用你使用的任何語言重新編寫它。

0

乍一看,它是目標代碼;它(至少)獲取一個對象作爲參數,調用該對象的一個​​方法,該方法將對象的三個屬性作爲參數,然後在同一個對象的另一個屬性中設置一個位(標誌?)爲一個。

IDA Pro可能會識別功能原型,它有一個免費版本可用,它具有您需要的所有功能:http://www.hex-rays.com/idapro/idadownfreeware.htm。然而它只會給你一個關於函數原型的概念,而不是它的行爲(除非你能「讀取」x86程序集)。將它恢復爲普通的C/C++需要HexRays插件,這個插件相當昂貴並且不總是能夠工作(反編譯成高級語言相當複雜)。

0

我有點遲到回答這個帖子,但看到接受的答案是錯誤的,我仍然會給我0.2以防其他人在尋找相同的東西。

您正在尋找的不是「反編譯」,因爲您已將其反編譯爲asm代碼。 你想要的是一種將反彙編代碼編譯成你可以閱讀的東西(如C)

這個逆向工程領域還沒有很好的開發。有些提到的IDA與一些昂貴的插件,但它會做你沒有好......我會提到的唯一程序,可以幫助你: REC

輸出可能不準確,或者你可能無法得到任何C代碼完全取決於您要調試的程序。但如果你不知道裝配,那這是你擁有的最佳選擇。

至於你想要做什麼,你發佈的功能什麼都不做。它使用參數調用另一個函數並獲取返回值。你感興趣的是[esi + 7Ch]。你需要一個調試器並進入這個調用。

在程序中掛鉤該函數是另一回事......你最好自己寫。