比如IDA里面这样一个程序要逆向:
其中关键代码
1 | int result; // eax |
在逆向为python的时候要注意以下两点:
1.符号优先级
2.整数(字节)溢出
由于v4是一个char类型的数据,因此它的最大值不超过255,而每次循环它加了34,因此在超过255之后c语言的程序会溢出并舍弃最高位,但python不会,因此每次给v4+34之后要&0xff也就是255
1 | v4=v4+34&255 |
有人可能奇怪,为什么不这样写。
1 | v4=(v4+34)&255 |
事实上在python里+的优先级比&要高,所以括号可有可无。
同理逆向的时候(假如c是密文,m是明文)
要加个括号才是先c异或v4再减去v5:
1 | m=(c^v4)-v5 |
如果不加的话:
1 | m=c^v4-v5 |
就是v4先减v5再异或c
因此逆向脚本如下:
1 | v4=34 |
关于python符号优先级可以看这里:
https://www.runoob.com/python/python-operators.html#ysf8
说些什么吧!