使用python寫c語言逆向程式的一些坑

2021-10-23 15:35:05 字數 1447 閱讀 1854

比如ida裡面這樣乙個程式要逆向:

其中關鍵**

int result;

// eax

char v4;

// [rsp+1dh] [rbp-13h]

char v5;

// [rsp+1eh] [rbp-12h]

char v6;

// [rsp+1fh] [rbp-11h]

file *v7;

// [rsp+20h] [rbp-10h]

file *stream;

// [rsp+28h] [rbp-8h]

v4 =34;

v5 =0;

v7 =

fopen

(ar**[1]

,"rb");

if( v7 )

fclose

(v7)

;fclose

(stream)

; result =0;

}

在逆向為python的時候要注意以下兩點:

1.符號優先順序

2.整數(位元組)溢位

由於v4是乙個char型別的資料,因此它的最大值不超過255,而每次迴圈它加了34,因此在超過255之後c語言的程式會溢位並捨棄最高位,但python不會,因此每次給v4+34之後要&0xff也就是255

v4=v4+34&

255

有人可能奇怪,為什麼不這樣寫。

v4=

(v4+34)

&255

事實上在python裡+的優先順序比&要高,所以括號可有可無。

同理逆向的時候(假如c是密文,m是明文)

要加個括號才是先c異或v4再減去v5:

m=

(c^v4)

-v5

如果不加的話:

m=c^v4-v5
就是v4先減v5再異或c

因此逆向指令碼如下:

v4=

34v5=0c=

''f=

open

("./233.txt"

,'rb'

)buff=f.read(

)for i in buff:

c=c+

chr(

(i^v4)

-v5)

#注意括號

v4=(v4+34)

&0xff

#注意溢位

v5=(v5+2)

&0xf

print

(c)

關於python符號優先順序可以看這裡:

使用 Scala 寫WordContext程式

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 packagemydemo importorg.apache.spark.objectmywordcontextdemo 執行程式 首先將程式打包成 jar 包 執行以...

使用C語言寫PostgreSQL函式

使用c語言寫postgresql中的函式可以很方便的擴充套件postgresql資料庫的功能。由c語言寫的函式,使用方法與postgresql中內建的函式基本沒有差別,效能基本也沒有什麼差別。本文一步一步教你如何使用c語言寫postgresql函式 原始檔為cfunc.c,內容如下 include ...

使用C寫Python的模組

概述 引入 python.h 標頭檔案 編寫包裝函式 處理從 python 傳入的引數 實現邏輯功能 處理 c 中的返回值 註冊函式 註冊模組 編譯原文發於2010年11月。python 可以非常方便地和 c 進行相互的呼叫。一般,我們不會使用 c 去直接編寫乙個 python 的模組。通常的情景是...