B0B0
(Ph. D. 5)
1
界面中有个TextFiled和UIWebView,TextField的Delegate中有个回调函数
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[self.webView loadHTMLString:[NSString stringWithFormat:@“Hello %@! \n I am inside a UIWebView !”,textField.text] baseURL:nil];
[textField resignFirstResponder];
return NO;
}
现在有个想法,对这个TextField进行批量自动化地输入并返回。可以自己构造异常输入库,去检测程序对TextField的输入有没有做验证。
尝试hook了delegate和textFieldShouldReturn,在tweak中多次修改textField.text,修改后%orig(textField)。但是发现,调用%orig的时候UIWebView并不会响应,只有当tweak中的方法返回时,WebView才会修改,所以WebView只显示了最后一次的修改值。
又有个想法,%new 一个textFieldDidEndEditing,然后在hook的方法中主动调用textFieldShouldReturn,想让textField在textShouldReturn和textFieldDidEndEditing之间死循环,从中不断修改text,达到fuzz效果。发现无效:在手动按下return键的时候,的确会顺着回调shouldReturn和DidEndEditing,但是在DidEndEditing主动调shouldReturn后并不会回调DidEndEditing,所以没法儿循环下去。
请教大神,有没有好的方法通过tweak或者其他方法实现让textField循环输入(修改)-返回?
B0B0
(Ph. D. 5)
2
附上目前的代码…
%hook ClientSideInjectionDetailsVC
%new
- (void)fuzz:(UITextField *)textField
{
// [NSThread sleepForTimeInterval:1];
[textField becomeFirstResponder];
NSString * content = [[NSString alloc] initWithFormat:@"%d",arc4random() % 100];
NSLog(@“text : %@ → %@”, textField.text, content);
textField.text = content;
// [self textFieldDidEndEditing:textField];
// [self performSelector:@selector(fuzz:) withObject:textField];
}
%new
-
(void)textFieldDidEndEditing:(UITextField *)textField
{
[textField becomeFirstResponder];
NSLog(@“did end editing”);
[self performSelector:@selector(textFieldShouldReturn:) withObject:textField];
}
-
(BOOL)textFieldShouldReturn:(UITextField *)textField
{
NSLog(@“should return”);
[self performSelector:@selector(fuzz:) withObject:textField];
[textField resignFirstResponder];
return %orig(textField);
}
%end // end hook