在逆向一个android so的时候,发现一个改良的ecdh算法,在用python调用EC_POINT_point2oct的时候发现最后一个参数是NULL,但是写入0,False,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表示空
网友评论