在逆向一個android so的時候枝恋,發(fā)現(xiàn)一個改良的ecdh算法创倔,在用python調(diào)用EC_POINT_point2oct的時候發(fā)現(xiàn)最后一個參數(shù)是NULL,但是寫入0焚碌,F(xiàn)alse畦攘,None都報錯,最后(注意str是bytes類型):
from OpenSSL import crypto
import struct
import os
class Ecdh():
def __init__(self):
self.ssl_lib = crypto._lib
self.ssl_ffi = crypto._ffi
pass
def gen_ecdh_key_ex(self,bo,str1,str2,str3):
str_len = len(str1)+len(str2)+len(str3)
all_str = str1 + str2 + str3
ecdh2 = self.ssl_lib.EC_KEY_new_by_curve_name(711)
self.ssl_lib.EC_KEY_generate_key(ecdh2)
point = self.ssl_lib.EC_KEY_get0_group(ecdh2)
group = self.ssl_lib.EC_KEY_get0_public_key(ecdh2)
mylen = self.ssl_lib.EC_POINT_point2oct(point,group,2,all_str,str_len,self.ssl_ffi.NULL)
也可以使用
from cffi import FFI
ffi = FFI()
ffi.NULL表示空