比如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 的模組。通常的情景是...