如何让一个TextField无限“起死回生”?

界面中有个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循环输入(修改)-返回?

附上目前的代码…
%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

Fuzz userland沙盒里的东西有啥意义吗

发现一些应用层的设计或者逻辑缺陷?:joy: