这个字段的问题
HKELocalEncryptPublicKey
那它是怎么工作的呢?
通过搜索发现只有两个地方用到了此值
000000010267e468 dq ___CFConstantStringClassReference, 0x7c8, _s_szTable+10234, 0x18 ; "HKELocalEncryptPublicKey", DATA XREF=
-[HKESIPInputField encryptPublicKey]+48, ___19
+[HKEApi sharedApi]_block_invoke+507
这2个方法是都是通过objectForInfoDictionaryKey取值的
void * -[HKESIPInputField encryptPublicKey](void * self, void * _cmd) {
r14 = [[NSBundle mainBundle] retain];
rbx = [[r14 objectForInfoDictionaryKey:@"HKELocalEncryptPublicKey"] retain];
[r14 release];
rax = [rbx autorelease];
return rax;
}
void ___19+[HKEApi sharedApi]_block_invoke(void * _block) {
rax = [HKEApi alloc];
rax = [rax init];
rdi = *+[HKEApi sharedApi]::sharedApi;
*+[HKEApi sharedApi]::sharedApi = rax;
[rdi release];
rbx = [NSSearchPathForDirectoriesInDomains(0x5, 0x1, 0x1) retain];
r15 = [[rbx firstObject] retain];
[rbx release];
var_-224 = r15;
rbx = [NSSearchPathForDirectoriesInDomains(0x9, 0x1, 0x1) retain];
r14 = [[rbx firstObject] retain];
[rbx release];
var_-240 = r14;
var_-112 = [[NSString stringWithFormat:@"%@/%@", r15, @"CFCA_HKELocal_Data"] retain];
r9 = @"HKE_Log.log";
r15 = [[NSString stringWithFormat:@"%@/%@/%@", r14, @"CFCA_HKELocal_Log", r9] retain];
var_-96 = intrinsic_movaps(var_-96, 0x0);
*(&var_-96 + 0x10) = 0x0;
var_-96 = 0x12;
*(&var_-96 + 0x1) = 0x41434f4c5f454b48;
*(int8_t *)(&var_-96 + 0x9) = 0x4c;
*(int8_t *)(&var_-96 + 0xa) = 0x0;
var_-248 = r15;
CFCA_SMARTLOG::Init(&var_-96, 0x1000, 0x2);
if ((var_-96 & 0x1) != 0x0) {
operator delete(var_-80);
}
rbx = objc_retainAutorelease(r15);
_cfca_mlog_init([rbx UTF8String], 0x14000);
var_-264 = rbx;
rbx = [[NSBundle mainBundle] retain];
r13 = [[rbx objectForInfoDictionaryKey:@"HKELocalEncryptPublicKey"] retain];
[rbx release];
var_-232 = r13;
rbx = [r13 length];
rcx = [r13 length];
_MTRACE((rbx == 0x0 ? 0x1 : 0x0) + (rbx == 0x0 ? 0x1 : 0x0), "HKELocalSignPublicKey length is %i", rcx, rcx);
intrinsic_movaps(var_-96, 0x0);
var_-96 = 0x12;
[r13 length];
CFCA_SMARTLOG::TraceFormat(&var_-96, 0x3, "[sharedApi]HKELocalSignPublicKey length is %i");
if ((var_-96 & 0x1) != 0x0) {
operator delete(0x0);
}
var_-97 = 0x0;
r12 = [[NSFileManager defaultManager] retain];
rbx = [r12 fileExistsAtPath:var_-112 isDirectory:&var_-97];
[r12 release];
if (var_-97 != 0x0) {
rbx = rbx ^ 0x1;
if (rbx != 0x0) {
r13 = [[NSFileManager defaultManager] retain];
var_-272 = 0x0;
rbx = [r13 createDirectoryAtPath:var_-112 withIntermediateDirectories:0x1 attributes:0x0 error:r9];
r12 = [var_-272 retain];
[r13 release];
r13 = var_-232;
if (rbx == 0x0) {
rbx = objc_retainAutorelease([[r12 description] retain]);
rcx = [rbx UTF8String];
_MTRACE(0x2, "Create directory failed, error %s", rcx, rcx);
[rbx release];
intrinsic_movaps(var_-96, 0x0);
var_-96 = 0x12;
rbx = objc_retainAutorelease([[r12 description] retain]);
[rbx UTF8String];
CFCA_SMARTLOG::TraceFormat(&var_-96, 0x3, "[sharedApi]Create directory failed, error %s");
[rbx release];
if ((var_-96 & 0x1) != 0x0) {
operator delete(0x0);
}
}
[r12 release];
}
}
else {
r13 = [[NSFileManager defaultManager] retain];
var_-272 = 0x0;
rbx = [r13 createDirectoryAtPath:var_-112 withIntermediateDirectories:0x1 attributes:0x0 error:r9];
r12 = [var_-272 retain];
[r13 release];
r13 = var_-232;
if (rbx == 0x0) {
rbx = objc_retainAutorelease([[r12 description] retain]);
rcx = [rbx UTF8String];
_MTRACE(0x2, "Create directory failed, error %s", rcx, rcx);
[rbx release];
intrinsic_movaps(var_-96, 0x0);
var_-96 = 0x12;
rbx = objc_retainAutorelease([[r12 description] retain]);
[rbx UTF8String];
CFCA_SMARTLOG::TraceFormat(&var_-96, 0x3, "[sharedApi]Create directory failed, error %s");
[rbx release];
if ((var_-96 & 0x1) != 0x0) {
operator delete(0x0);
}
}
[r12 release];
}
if ([r13 length] == 0x0) goto loc_100a61360;
loc_100a61301:
r14 = [objc_retainAutorelease(r13) UTF8String];
var_-144 = intrinsic_movaps(var_-144, 0x0);
var_-128 = 0x0;
r12 = strlen(r14);
if (r12 >= 0xfffffffffffffff0) goto loc_100a61676;
loc_100a61343:
if (r12 < 0x17) {
r15 = &var_-143;
*(int8_t *)(r15 + 0xffffffffffffffff) = r12 + r12;
if (r12 != 0x0) {
memcpy(r15, r14, r12);
}
}
else {
r15 = operator new(r12 + 0x10 & 0xfffffffffffffff0);
var_-128 = r15;
var_-144 = r12 + 0x10 & 0xfffffffffffffff0 | 0x1;
memcpy(r15, r14, r12);
}
*(int8_t *)(r15 + r12) = 0x0;
goto loc_100a613b3;
loc_100a613b3:
var_-216 = operator new(0x20);
var_-96 = 0x102c73b28;
var_-64 = &var_-96;
r15 = [HKEApi hkeDevicePolicy];
intrinsic_movaps(var_-208, 0x0);
rax = objc_retainAutorelease(var_-112);
var_-256 = rax;
r12 = [rax UTF8String];
var_-176 = intrinsic_movaps(var_-176, 0x0);
var_-160 = 0x0;
r13 = strlen(r12);
if (r13 < 0xfffffffffffffff0) {
if (r13 < 0x17) {
rbx = &var_-175;
*(int8_t *)(rbx + 0xffffffffffffffff) = r13 + r13;
r14 = var_-216;
if (r13 != 0x0) {
memcpy(rbx, r12, r13);
}
}
else {
rbx = operator new(r13 + 0x10 & 0xfffffffffffffff0);
var_-160 = rbx;
var_-176 = r13 + 0x10 & 0xfffffffffffffff0 | 0x1;
r14 = var_-216;
memcpy(rbx, r12, r13);
}
var_-208 = 0xe;
*(int8_t *)(rbx + r13) = 0x0;
stack[2048] = &var_-144;
rbx = &var_-96;
CFCA::HKE::HKEKit::HKEKit(r14, rbx, r15, 0x2, &var_-208, &var_-176);
*+[HKEApi sharedApi]::sharedApi->_hkeKitHandle = r14;
r14 = var_-224;
r15 = var_-232;
if ((var_-176 & 0x1) != 0x0) {
operator delete(var_-160);
}
if ((0xe & 0x1) != 0x0) {
operator delete(0x0);
}
rdi = var_-64;
if (rdi != rbx) {
if (rdi != 0x0) {
(*(*rdi + 0x28))();
}
}
else {
(*(*rdi + 0x20))();
}
if (*+[HKEApi sharedApi]::sharedApi->_hkeKitHandle == 0x0) {
_MTRACE(0x2, "New HKEKit handle failed");
var_-96 = intrinsic_movaps(var_-96, 0x0);
*(&var_-96 + 0x10) = 0x0;
var_-96 = 0x12;
*(&var_-96 + 0x1) = 0x41434f4c5f454b48;
*(int8_t *)(&var_-96 + 0x9) = 0x4c;
*(int8_t *)(&var_-96 + 0xa) = 0x0;
CFCA_SMARTLOG::TraceFormat(&var_-96, 0x3, "[sharedApi]New HKEKit handle failed");
r14 = var_-224;
if ((var_-96 & 0x1) != 0x0) {
operator delete(0x0);
}
}
if ((var_-144 & 0x1) != 0x0) {
operator delete(var_-128);
}
[r15 release];
[var_-264 release];
[var_-256 release];
[var_-240 release];
[r14 release];
if (*___stack_chk_guard != *___stack_chk_guard) {
__stack_chk_fail();
}
}
else {
std::__1::__basic_string_common<true>::__throw_length_error(&var_-176);
__stack_chk_fail();
}
return;
loc_100a61676:
r15 = std::__1::__basic_string_common<true>::__throw_length_error(&var_-144);
if ((var_-96 & 0x1) != 0x0) {
operator delete(0x0);
}
[r12 release];
[var_-232 release];
[var_-248 release];
[var_-112 release];
[var_-240 release];
[var_-224 release];
_Unwind_Resume(r15);
return;
loc_100a61360:
var_-144 = intrinsic_movaps(var_-144, 0x0);
var_-128 = 0x0;
goto loc_100a613b3;
}