1<!DOCTYPE html> 2<html data-wf-page="6836fde44810be6c23b92202" data-wf-site="6836fde34810be6c23b92000" lang="en"> 3 4<head> 5 <!-- Google tag (gtag.js) -->
vendor: 68 bytes, lines 5-6
5 6 <script async src="https://www.googletagmanager.com/gtag/js?id=
6G-HJNWNC3C5K
vendor: 16 bytes, lines 6-7
6"></script> 7
7<script> 8
vendor: 146 bytes, lines 8-12
8window.dataLayer = window.dataLayer || []; 9 function gtag(){dataLayer.push(arguments);} 10 gtag('js', new Date()); 11 12 gtag('config', '
12G-HJNWNC3C5K
vendor: 8 bytes, lines 12-13
12'); 13
13</script>
13 14 15 <meta charset="utf-8" /> 16 <meta content="width=device-width, initial-scale=1" name="viewport" /> 17 <!-- rz-seo-head:start --> 18 <title>Mobile App Penetration Testing iOS & Android | ReactiveZero</title> 19 <meta name="description" content="Mobile app penetration testing from the Netherlands: iOS and Android apps tested to OWASP MASVS, incl. API back-ends, storage and auth. Retest included."> 20 <link rel="canonical" href="https://reactivezero.com/mobile-app-testing.html"> 21 <meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"> 22 <link rel="alternate" hreflang="en" href="https://reactivezero.com/mobile-app-testing.html"> 23 <link rel="alternate" hreflang="nl" href="https://reactivezero.com/nl/mobile-app-testing.html"> 24 <link rel="alternate" hreflang="de" href="https://reactivezero.com/de/mobile-app-testing.html"> 25 <link rel="alternate" hreflang="fr" href="https://reactivezero.com/fr/mobile-app-testing.html"> 26 <link rel="alternate" hreflang="es" href="https://reactivezero.com/es/mobile-app-testing.html"> 27 <link rel="alternate" hreflang="x-default" href="https://reactivezero.com/mobile-app-testing.html"> 28 <meta property="og:type" content="website"> 29 <meta property="og:site_name" content="ReactiveZero"> 30 <meta property="og:locale" content="en_GB"> 31 <meta property="og:url" content="https://reactivezero.com/mobile-app-testing.html"> 32 <meta property="og:title" content="Mobile App Penetration Testing iOS & Android | ReactiveZero"> 33 <meta property="og:description" content="Mobile app penetration testing from the Netherlands: iOS and Android apps tested to OWASP MASVS, incl. API back-ends, storage and auth. Retest included."> 34 <meta property="og:image" content="https://reactivezero.com/images/og-default.png"> 35 <meta property="og:image:width" content="1200"> 36 <meta property="og:image:height" content="630"> 37 <meta property="og:image:alt" content="ReactiveZero - Mobile App Penetration Testing iOS & Android | ReactiveZero"> 38 <meta name="twitter:card" content="summary_large_image"> 39 <meta name="twitter:title" content="Mobile App Penetration Testing iOS & Android | ReactiveZero"> 40 <meta name="twitter:description" content="Mobile app penetration testing from the Netherlands: iOS and Android apps tested to OWASP MASVS, incl. API back-ends, storage and auth. Retest included."> 41 <meta name="twitter:image" content="https://reactivezero.com/images/og-default.png"> 42 <meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)"> 43 <meta name="theme-color" content="#14151a" media="(prefers-color-scheme: dark)"> 44 <link rel="icon" href="/favicon.ico" sizes="48x48"> 45 <link rel="icon" href="/favicon-32x32.png" type="image/png" sizes="32x32"> 46 <link rel="icon" href="/favicon-16x16.png" type="image/png" sizes="16x16"> 47 <link rel="apple-touch-icon" href="/apple-touch-icon.png" sizes="180x180"> 48 <link rel="manifest" href="/site.webmanifest"> 49 <!-- rz-seo-head:end --> 50 51 <style> 52 .section_service_detail { 53 padding-top: 3rem; /* Adjust as needed */ 54 padding-bottom: 3rem; /* Adjust as needed */ 55 } 56 .service_detail_component { 57 /* Add any specific styling for the component wrapper if needed */ 58 } 59 .service_steps_list { 60 list-style: none; 61 padding-left: 0; 62 } 63 .service_step_item { 64 display: flex; 65 align-items: flex-start; /* Align items to the start of the flex container */ 66 margin-bottom: 2rem; 67 padding: 1.5rem; 68 border: 1px solid var(--color-scheme-1--border); 69 border-radius: 8px; 70 background-color: var(--color-scheme-1--foreground); /* Match contact form section */ 71 } 72 .service_step_number { 73 display: flex; 74 align-items: center; 75 justify-content: center; 76 width: 40px; /* Fixed width for the number circle */ 77 height: 40px; /* Fixed height for the number circle */ 78 background-color: #FFFFFF; /* Changed to white */ 79 color: #7d14d7; /* Changed to theme color */ 80 border-radius: 50%; 81 font-weight: bold; 82 margin-right: 1.5rem; 83 flex-shrink: 0; /* Prevent shrinking */ 84 } 85 .service_step_item h4 { 86 margin-top: 0; /* Remove default top margin from h4 if any */ 87 margin-bottom: 0.5rem; 88 } 89 .service_step_item p { 90 margin-bottom: 0; /* Remove default bottom margin from p if any */ 91 } 92 93 /* Re-use layout238_item styling for consistency if desired, or define new ones */ 94 .layout238_list { /* This class is already defined and used in index.html */ 95 display: grid; 96 gap: 2rem; /* Adjust gap as needed */ 97 grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); /* Responsive grid */ 98 } 99 .layout238_item { /* This class is already defined and used in index.html */ 100 background-color: var(--color-scheme-1--foreground); /* Match contact form section */ 101 padding: 1.5rem; 102 border-radius: 8px; 103 border: 1px solid var(--color-scheme-1--border); 104 } 105 .text-align-center { 106 text-align: center; 107 } 108 </style> 109
110<script type="application/ld+json"> 111{ 112 "@context": "https://schema.org", 113 "@graph": [ 114 { 115 "@type": [ 116 "Organization", 117 "ProfessionalService" 118 ], 119 "@id": "https://reactivezero.com/#organization", 120 "name": "ReactiveZero", 121 "url": "https://reactivezero.com/", 122 "logo": { 123 "@type": "ImageObject", 124 "url": "https://reactivezero.com/images/logo-512.png", 125 "width": 512, 126 "height": 512 127 }, 128 "email": "[email protected]", 129 "telephone": "+31103220229", 130 "address": { 131 "@type": "PostalAddress", 132 "streetAddress": "Admiraliteitskade 50-923", 133 "postalCode": "3063 ED", 134 "addressLocality": "Rotterdam", 135 "addressRegion": "Zuid-Holland", 136 "addressCountry": "NL" 137 }, 138 "identifier": { 139 "@type": "PropertyValue", 140 "propertyID": "KVK", 141 "value": "97512249" 142 }, 143 "areaServed": [ 144 { 145 "@type": "Country", 146 "name": "Netherlands" 147 }, 148 { 149 "@type": "Country", 150 "name": "Europe" 151 } 152 ], 153 "sameAs": [ 154 "https://www.linkedin.com/company/reactive-zero", 155 "https://reactivezero.ai/", 156 "https://blog.reactivezero.com/", 157 "https://github.com/reactivezero" 158 ], 159 "brand": { 160 "@type": "Brand", 161 "name": "R0", 162 "url": "https://reactivezero.ai/" 163 } 164 }, 165 { 166 "@type": "WebSite", 167 "@id": "https://reactivezero.com/#website", 168 "url": "https://reactivezero.com/", 169 "name": "ReactiveZero", 170 "publisher": { 171 "@id": "https://reactivezero.com/#organization" 172 } 173 }, 174 { 175 "@type": "WebPage", 176 "@id": "https://reactivezero.com/mobile-app-testing.html#webpage", 177 "url": "https://reactivezero.com/mobile-app-testing.html", 178 "name": "Mobile App Penetration Testing iOS & Android | ReactiveZero", 179 "isPartOf": { 180 "@id": "https://reactivezero.com/#website" 181 }, 182 "about": { 183 "@id": "https://reactivezero.com/#organization" 184 }, 185 "inLanguage": "en" 186 }, 187 { 188 "@type": "Service", 189 "serviceType": "Mobile Application Penetration Testing", 190 "name": "Mobile Application Penetration Testing (iOS & Android)", 191 "provider": { 192 "@id": "https://reactivezero.com/#organization" 193 }, 194 "areaServed": { 195 "@type": "Country", 196 "name": "Netherlands" 197 }, 198 "url": "https://reactivezero.com/mobile-app-testing.html" 199 }, 200 { 201 "@type": "BreadcrumbList", 202 "@id": "https://reactivezero.com/mobile-app-testing.html#breadcrumb", 203 "itemListElement": [ 204 { 205 "@type": "ListItem", 206 "position": 1, 207 "name": "Home", 208 "item": "https://reactivezero.com/" 209 }, 210 { 211 "@type": "ListItem", 212 "position": 2, 213 "name": "Mobile App Testing", 214 "item": "https://reactivezero.com/mobile-app-testing.html" 215 } 216 ] 217 } 218 ] 219} 220</script>
220 221 <link href="css/reactivezero.webflow.shared.825139f12.css" rel="stylesheet" type="text/css" /> 222 <link href="css/redesign.css?v=20260915-phone" rel="stylesheet" type="text/css" /> 223
223<script src="js/theme.js?v=20260915-phone" type="text/javascript"></script>
223 224
224<script type="text/javascript"> 225 ! function (o, c) { 226 var n = c.documentElement, 227 t = " w-mod-"; 228 n.className += t + "js", ("ontouchstart" in o || o.DocumentTouch && c instanceof DocumentTouch) && (n.className += t + "touch") 229 }(window, document); 230 </script>
230 231
231<script> 232 233 function submitForm(event) { 234 event.preventDefault(); 235 236 const form = document.getElementById('contact-form'); 237 const successMessage = document.getElementById('success-message'); 238 const submitButton = form.querySelector('input[type="submit"]'); 239 240 // Collect form data 241 const formData = new FormData(form); 242 243 // Disable submit button during submission 244 submitButton.value = 'Sending...'; 245 submitButton.disabled = true; 246 247 // Send AJAX request 248 fetch('contact.php', { 249 method: 'POST', 250 body: formData 251 }) 252 .then(response => response.json()) 253 .then(data => { 254 if (data.success) { 255 // Show success message 256 successMessage.style.display = 'block'; 257 // Reset form 258 form.reset(); 259 } else { 260 alert('There was an error sending your message. Please try again.'); 261 } 262 }) 263 .catch(error => { 264 console.error('Error:', error); 265 alert('There was an error sending your message. Please try again.'); 266 }) 267 .finally(() => { 268 // Re-enable submit button 269 submitButton.value = 'Submit Request'; 270 submitButton.disabled = false; 271 }); 272 273 return false; 274} 275 </script>
275 276 <!-- Keep this css code to improve the font quality--> 277 <style> 278 * { 279 -webkit-font-smoothing: antialiased; 280 -moz-osx-font-smoothing: grayscale; 281 -o-font-smoothing: antialiased; 282 } 283 </style> 284
284<script type="text/javascript"> 285 (function(c,l,a,r,i,t,y){ 286 c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; 287 t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; 288 y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); 289 })(window, document, "clarity", "script", "y05qed79m6"); 290 </script>
290 291</head> 292 293<body> 294 <div class="page-wrapper"> 295 <div class="global-styles"> 296 <div class="style-overrides w-embed"> 297 <style> 298 /* Ensure all elements inherit the color from its parent */ 299 a, 300 .w-input, 301 .w-select, 302 .w-tab-link, 303 .w-nav-link, 304 .w-nav-brand, 305 .w-dropdown-btn, 306 .w-dropdown-toggle, 307 .w-slider-arrow-left, 308 .w-slider-arrow-right, 309 .w-dropdown-link { 310 color: inherit; 311 text-decoration: inherit; 312 font-size: inherit; 313 } 314 315 /* Focus state style for keyboard navigation for the focusable elements */ 316 *[tabindex]:focus-visible, 317 input[type="file"]:focus-visible { 318 outline: 0.125rem solid #4d65ff; 319 outline-offset: 0.125rem; 320 } 321 322 /* Get rid of top margin on first element in any rich text element */ 323 .w-richtext> :not(div):first-child, 324 .w-richtext > div:first-child > :first-child { 325 margin-top: 0 !important; 326 } 327 328 /* Get rid of bottom margin on last element in any rich text element */ 329 .w-richtext>:last-child, 330 .w-richtext ol li:last-child, 331 .w-richtext ul li:last-child { 332 margin-bottom: 0 !important; 333 } 334 335 /* Prevent all click and hover interaction with an element */ 336 .pointer-events-off { 337 pointer-events: none; 338 } 339 340 /* Enables all click and hover interaction with an element */ 341 .pointer-events-on { 342 pointer-events: auto; 343 } 344 345 /* Create a class of .div-square which maintains a 1:1 dimension of a div */ 346 .div-square::after { 347 content: ""; 348 display: block; 349 padding-bottom: 100%; 350 } 351 352 /* Make sure containers never lose their center alignment */ 353 .container-medium, 354 .container-small, 355 .container-large { 356 margin-right: auto !important; 357 margin-left: auto !important; 358 } 359 360 361 /* Apply "..." after 3 lines of text */ 362 .text-style-3lines { 363 display: -webkit-box; 364 overflow: hidden; 365 -webkit-line-clamp: 3; 366 -webkit-box-orient: vertical; 367 } 368 369 /* Apply "..." after 2 lines of text */ 370 .text-style-2lines { 371 display: -webkit-box; 372 overflow: hidden; 373 -webkit-line-clamp: 2; 374 -webkit-box-orient: vertical; 375 } 376 377 /* Adds inline flex display */ 378 .display-inlineflex { 379 display: inline-flex; 380 } 381 382 /* These classes are never overwritten */ 383 .hide { 384 display: none !important; 385 } 386 387 /* Remove default Webflow chevron from form select */ 388 select { 389 -webkit-appearance: none; 390 } 391 392 393 @media screen and (max-width: 991px) { 394 .hide, 395 .hide-tablet { 396 display: none !important; 397 } 398 } 399 400 @media screen and (max-width: 767px) { 401 .hide-mobile-landscape { 402 display: none !important; 403 } 404 } 405 406 @media screen and (max-width: 479px) { 407 .hide-mobile { 408 display: none !important; 409 } 410 } 411 412 .margin-0 { 413 margin: 0rem !important; 414 } 415 416 .padding-0 { 417 padding: 0rem !important; 418 } 419 420 .spacing-clean { 421 padding: 0rem !important; 422 margin: 0rem !important; 423 } 424 425 .margin-top { 426 margin-right: 0rem !important; 427 margin-bottom: 0rem !important; 428 margin-left: 0rem !important; 429 } 430 431 .padding-top { 432 padding-right: 0rem !important; 433 padding-bottom: 0rem !important; 434 padding-left: 0rem !important; 435 } 436 437 .margin-right { 438 margin-top: 0rem !important; 439 margin-bottom: 0rem !important; 440 margin-left: 0rem !important; 441 } 442 443 .padding-right { 444 padding-top: 0rem !important; 445 padding-bottom: 0rem !important; 446 padding-left: 0rem !important; 447 } 448 449 .margin-bottom { 450 margin-top: 0rem !important; 451 margin-right: 0rem !important; 452 margin-left: 0rem !important; 453 } 454 455 .padding-bottom { 456 padding-top: 0rem !important; 457 padding-right: 0rem !important; 458 padding-left: 0rem !important; 459 } 460 461 .margin-left { 462 margin-top: 0rem !important; 463 margin-right: 0rem !important; 464 margin-bottom: 0rem !important; 465 } 466 467 .padding-left { 468 padding-top: 0rem !important; 469 padding-right: 0rem !important; 470 padding-bottom: 0rem !important; 471 } 472 473 .margin-horizontal { 474 margin-top: 0rem !important; 475 margin-bottom: 0rem !important; 476 } 477 478 .padding-horizontal { 479 padding-top: 0rem !important; 480 padding-bottom: 0rem !important; 481 } 482 483 .margin-vertical { 484 margin-right: 0rem !important; 485 margin-left: 0rem !important; 486 } 487 488 .padding-vertical { 489 padding-right: 0rem !important; 490 padding-left: 0rem !important; 491 } 492 493 /* Apply "..." at 100% width */ 494 .truncate-width { 495 width: 100%; 496 white-space: nowrap; 497 overflow: hidden; 498 text-overflow: ellipsis; 499 } 500 501 /* Removes native scrollbar */ 502 .no-scrollbar {
503 -ms-overflow-style: none; 504 overflow: -moz-scrollbars-none; 505 } 506 507 .no-scrollbar::-webkit-scrollbar { 508 display: none; 509 } 510 </style> 511 </div> 512 <div class="fonts w-embed"> 513 <style> 514 @import url('https://fonts.googleapis.com/css?family=Afacad:400') 515 </style> 516 <style> 517 @import url('https://fonts.googleapis.com/css?family=Work%20Sans:400,500') 518 </style> 519 </div> 520 <div class="color-schemes w-embed"> 521 <style> 522 .color-scheme-1 {} 523 524 .color-scheme-2 { 525 --color-scheme-1--text: var(--color-scheme-2--text); 526 --color-scheme-1--background: var(--color-scheme-2--background); 527 --color-scheme-1--foreground: var(--color-scheme-2--foreground); 528 --color-scheme-1--border: var(--color-scheme-2--border); 529 --color-scheme-1--accent: var(--color-scheme-2--accent); 530 } 531 532 533 .color-scheme-3 { 534 --color-scheme-1--text: var(--color-scheme-3--text); 535 --color-scheme-1--background: var(--color-scheme-3--background); 536 --color-scheme-1--foreground: var(--color-scheme-3--foreground); 537 --color-scheme-1--border: var(--color-scheme-3--border); 538 --color-scheme-1--accent: var(--color-scheme-3--accent); 539 } 540 541 542 .color-scheme-4 { 543 --color-scheme-1--text: var(--color-scheme-4--text); 544 --color-scheme-1--background: var(--color-scheme-4--background); 545 --color-scheme-1--foreground: var(--color-scheme-4--foreground); 546 --color-scheme-1--border: var(--color-scheme-4--border); 547 --color-scheme-1--accent: var(--color-scheme-4--accent); 548 } 549 550 551 552 .w-slider-dot { 553 background-color: var(--color-scheme-1--text); 554 opacity: 0.20; 555 } 556 557 .w-slider-dot.w-active { 558 background-color: var(--color-scheme-1--text); 559 opacity: 1; 560 } 561 562 /* Override .w-slider-nav-invert styles */ 563 .w-slider-nav-invert .w-slider-dot { 564 background-color: var(--color-scheme-1--text) !important; 565 opacity: 0.20 !important; 566 } 567 568 .w-slider-nav-invert .w-slider-dot.w-active { 569 background-color: var(--color-scheme-1--text) !important; 570 opacity: 1 !important; 571 } 572 </style> 573 </div> 574 </div> 575 576 <!-- Updated Navigation --> 577 <div data-collapse="medium" data-animation="default" data-duration="400" fs-scrolldisable-element="smart-nav" data-easing="ease" data-easing2="ease" role="banner" class="navbar2_component w-nav"> 578 <div class="navbar2_container"> 579 <a href="/" class="navbar2_logo-link w-nav-brand"> 580 <img loading="lazy" src="images/r1.png" alt="ReactiveZero" class="navbar2_logo" /> 581</a> 582 <nav role="navigation" class="navbar2_menu is-page-height-tablet w-nav-menu"> 583 584 <a href="/" class="navbar2_link w-nav-link">Home</a> 585 586 <!-- New Dropdown: Solutions --> 587 <div data-delay="200" data-hover="true" class="navbar2_menu-dropdown w-dropdown"> 588 <div class="navbar2_dropdwn-toggle w-dropdown-toggle"> 589 <div>Solutions</div> 590 <div class="dropdown-chevron w-embed"> 591 <svg width=" 100%" height=" 100%" viewBox="0 0 16 16" fill="none" 592 xmlns="http://www.w3.org/2000/svg"> 593 <path fill-rule="evenodd" clip-rule="evenodd" 594 d="M2.55806 6.29544C2.46043 6.19781 2.46043 6.03952 2.55806 5.94189L3.44195 5.058C3.53958 4.96037 3.69787 4.96037 3.7955 5.058L8.00001 9.26251L12.2045 5.058C12.3021 4.96037 12.4604 4.96037 12.5581 5.058L13.4419 5.94189C13.5396 6.03952 13.5396 6.19781 13.4419 6.29544L8.17678 11.5606C8.07915 11.6582 7.92086 11.6582 7.82323 11.5606L2.55806 6.29544Z" 595 fill="currentColor" /> 596 </svg> 597 </div> 598 </div> 599 <nav class="navbar2_dropdown-list w-dropdown-list"> 600 <a href="pentesting.html" class="navbar2_dropdown-link w-dropdown-link">Penetration Testing</a> 601 <a href="red-teaming.html" class="navbar2_dropdown-link w-dropdown-link">Red Teaming</a> 602 <a href="cloud-security-assessments.html" class="navbar2_dropdown-link w-dropdown-link">Cloud Security Assessments</a> 603 <a href="code-review.html" class="navbar2_dropdown-link w-dropdown-link">Code Review</a> 604 <a href="phishing-campaigns.html" class="navbar2_dropdown-link w-dropdown-link">
604Phishing Campaigns</a> 605 <a href="mobile-app-testing.html" class="navbar2_dropdown-link w-dropdown-link">Mobile App Testing</a> 606 <a href="digital-forensics.html" class="navbar2_dropdown-link w-dropdown-link">Digital Forensics</a> 607 <a href="incident-response.html" class="navbar2_dropdown-link w-dropdown-link">Incident Response</a> 608 <a href="malware-analysis.html" class="navbar2_dropdown-link w-dropdown-link">Malware Analysis</a> 609 <a href="custom-projects.html" class="navbar2_dropdown-link w-dropdown-link">Custom Projects</a> 610 </nav> 611 </div> 612 613 <!-- New Dropdown: Industries --> 614 <div data-delay="200" data-hover="true" class="navbar2_menu-dropdown w-dropdown"> 615 <div class="navbar2_dropdwn-toggle w-dropdown-toggle"> 616 <div>Industries</div> 617 <div class="dropdown-chevron w-embed"> 618 <svg width=" 100%" height=" 100%" viewBox="0 0 16 16" fill="none" 619 xmlns="http://www.w3.org/2000/svg"> 620 <path fill-rule="evenodd" clip-rule="evenodd" 621 d="M2.55806 6.29544C2.46043 6.19781 2.46043 6.03952 2.55806 5.94189L3.44195 5.058C3.53958 4.96037 3.69787 4.96037 3.7955 5.058L8.00001 9.26251L12.2045 5.058C12.3021 4.96037 12.4604 4.96037 12.5581 5.058L13.4419 5.94189C13.5396 6.03952 13.5396 6.19781 13.4419 6.29544L8.17678 11.5606C8.07915 11.6582 7.92086 11.6582 7.82323 11.5606L2.55806 6.29544Z" 622 fill="currentColor" /> 623 </svg> 624 </div> 625 </div> 626 <nav class="navbar2_dropdown-list w-dropdown-list"> 627 <a href="https://reactivezero.ai/" target="_blank" rel="noopener" class="navbar2_dropdown-link w-dropdown-link">R0 — autonomous penetration testing appliance</a> 628 </nav> 629 </div> 630 631 <a href="about.html" class="navbar2_link w-nav-link">About Us</a> 632 633 <div data-delay="200" data-hover="true" class="navbar2_menu-dropdown w-dropdown"> 634 <div class="navbar2_dropdwn-toggle w-dropdown-toggle"> 635 <div>Resources</div> 636 <div class="dropdown-chevron w-embed"> 637 <svg width=" 100%" height=" 100%" viewBox="0 0 16 16" fill="none" 638 xmlns="http://www.w3.org/2000/svg"> 639 <path fill-rule="evenodd" clip-rule="evenodd" 640 d="M2.55806 6.29544C2.46043 6.19781 2.46043 6.03952 2.55806 5.94189L3.44195 5.058C3.53958 4.96037 3.69787 4.96037 3.7955 5.058L8.00001 9.26251L12.2045 5.058C12.3021 4.96037 12.4604 4.96037 12.5581 5.058L13.4419 5.94189C13.5396 6.03952 13.5396 6.19781 13.4419 6.29544L8.17678 11.5606C8.07915 11.6582 7.92086 11.6582 7.82323 11.5606L2.55806 6.29544Z" 641 fill="currentColor" /> 642 </svg> 643 </div> 644 </div> 645 <nav class="navbar2_dropdown-list w-dropdown-list"> 646 <a href="https://blog.reactivezero.com" class="navbar2_dropdown-link w-dropdown-link">Blog</a> 647 <a href="https://github.com/reactivezero" target="_blank" rel="noopener" class="navbar2_dropdown-link w-dropdown-link">Toolkits</a> 648 <a href="https://collab.reactivezero.com" target="_blank" rel="noopener nofollow" class="navbar2_dropdown-link w-dropdown-link" data-translate="collab_platform">Collab Platform</a> 649 <a href="/cdn-cgi/l/email-protection#8fe6e1e9e0cffdeaeeecfbe6f9eaf5eafde0a1ece0e2" class="navbar2_dropdown-link w-dropdown-link">Support</a> 650 </nav> 651 </div> 652 653 <a href="https://careers.reactivezero.com" class="navbar2_link w-nav-link" data-translate="careers">Careers</a> 654 <a href="#contact-section" class="navbar2_link w-nav-link">Contact</a> 655</nav> 656 657 </div> 658 </div> 659 </div> 660 661 <!-- Updated Hero Section --> 662 <!-- Updated Hero Section --> 663<header class="section_header15"> 664 <canvas id="rz-particle-canvas"></canvas> 665 <div class="rz-hero-visual rz-hero-visual--lg" aria-hidden="true"><canvas id="rz-visual-mobile"></canvas></div> 666 <div class="padding-global"> 667 <div class="container-large"> 668 <div class="padding-section-large"> 669 <div class="header15_component"> 670 <div class="margin-bottom margin-xxlarge"> 671 <div class="w-layout-grid header15_content-wrapper"> 672 <div class="header15_content-left"> 673 <h1 class="heading-style-h1">Mobile Application Security Testing</h1> 674 </div> 675 <div class="header15_content-right"> 676 <p class="text-size-medium">Our Mobile Application Testing services identify vulnerabilities in your iOS and Android applications, protecting user data and ensuring secure mobile experiences.</p> 677 <div class="margin-top margin-medium"> 678 <div class="button-group"> 679 <a href="#contact-section" class="button w-button">Test Your App</a> 680 </div> 681 </div> 682 </div> 683 </div> 684 </div> 685 </div> 686 </div> 687 </div> 688 </div> 689</header> 690 691<section class="section_service_detail"> 692 <div class="padding-global"> 693 <div class="container-large"> 694 <div class="padding-section-large"> 695 <div class="service_detail_component"> 696 <h2 class="heading-style-h3 text-align-center">Mobile Application Security Testing</h2> 697 <div class="margin-top margin-medium"> 698 <p class="text-size-medium"> 699 ReactiveZero offers specialized Mobile Application Security Testing for iOS and Android platforms. We identify vulnerabilities specific to mobile environments, including insecure data storage, weak authentication, and ansecure communication, helping you protect user data and ensure your mobile applications are resilient against attacks. 700 </p> 701 </div> 702 703 <div class="margin-top margin-xlarge"> 704 <!--METHOD:mobile--> 705<div class="rz-m-mobile" data-method="mobile"> 706 <div class="rz-m-mobile-head"> 707 <span class="rz-m-mobile-eyebrow">
707Methodology · Exploded view</span> 708 <h3 class="heading-style-h4">Testing, layer by layer</h3> 709 <p class="text-size-medium rz-m-mobile-intro">We work down through the application's layers, from the shipped build to the platform beneath it, the way a real attacker would.</p> 710 </div> 711 712 <div class="rz-m-mobile-stage"> 713 <div class="rz-m-mobile-device"> 714 <div class="rz-m-mobile-scene"> 715 <!-- Layer 1 · UI / App logic --> 716 <div class="rz-m-mobile-plane" data-layer="1" aria-hidden="true"> 717 <span class="rz-m-mobile-tab">01</span> 718 <div class="rz-m-mobile-glass"> 719 <svg viewBox="0 0 100 190" fill="none" stroke="currentColor" stroke-width="2" vector-effect="non-scaling-stroke"> 720 <rect x="18" y="10" width="30" height="6" rx="3" stroke="var(--accent)"/> 721 <rect x="18" y="26" width="64" height="20" rx="3"/> 722 <rect x="18" y="54" width="64" height="14" rx="3"/> 723 <rect x="18" y="76" width="64" height="14" rx="3"/> 724 <rect x="18" y="120" width="42" height="12" rx="6" stroke="var(--accent)"/> 725 <path d="M70 126 h12" stroke="var(--accent)"/> 726 </svg> 727 </div> 728 </div> 729 <!-- Layer 2 · Runtime & IPC --> 730 <div class="rz-m-mobile-plane" data-layer="2" aria-hidden="true"> 731 <span class="rz-m-mobile-tab">02</span> 732 <div class="rz-m-mobile-glass"> 733 <svg viewBox="0 0 100 190" fill="none" stroke="currentColor" stroke-width="2" vector-effect="non-scaling-stroke"> 734 <path d="M30 30 c-8 0 -8 8 -8 14 c0 6 -6 6 -6 6 c6 0 6 0 6 6 c0 6 0 14 8 14"/> 735 <path d="M70 30 c8 0 8 8 8 14 c0 6 6 6 6 6 c-6 0 -6 0 -6 6 c0 6 0 14 -8 14"/> 736 <circle cx="50" cy="60" r="3" fill="var(--accent)" stroke="none"/> 737 <rect x="20" y="112" width="24" height="20" rx="3"/> 738 <rect x="56" y="112" width="24" height="20" rx="3"/> 739 <path d="M44 118 h12 M44 126 h12" stroke="var(--accent)"/> 740 <path d="M50 116 l6 2 l-6 2 M50 128 l-6 -2 l6 -2" stroke="var(--accent)"/> 741 </svg> 742 </div> 743 </div> 744 <!-- Layer 3 · Local storage --> 745 <div class="rz-m-mobile-plane" data-layer="3" aria-hidden="true"> 746 <span class="rz-m-mobile-tab">03</span> 747 <div class="rz-m-mobile-glass"> 748 <svg viewBox="0 0 100 190" fill="none" stroke="currentColor" stroke-width="2" vector-effect="non-scaling-stroke"> 749 <ellipse cx="42" cy="34" rx="24" ry="8" stroke="var(--accent)"/> 750 <path d="M18 34 v30 c0 4 11 8 24 8 s24 -4 24 -8 v-30"/> 751 <path d="M18 49 c0 4 11 8 24 8 s24 -4 24 -8"/> 752 <circle cx="66" cy="120" r="7"/> 753 <path d="M72 124 l14 14 M80 132 l4 -4 M84 136 l4 -4" stroke="var(--accent)"/> 754 </svg> 755 </div> 756 </div> 757 <!-- Layer 4 · Network & API --> 758 <div class="rz-m-mobile-plane" data-layer="4" aria-hidden="true"> 759 <span class="rz-m-mobile-tab">04</span> 760 <div class="rz-m-mobile-glass"> 761 <svg viewBox="0 0 100 190" fill="none" stroke="currentColor" stroke-width="2" vector-effect="non-scaling-stroke"> 762 <path d="M30 44 a12 12 0 0 1 23 -4 a10 10 0 0 1 9 16 h-30 a9 9 0 0 1 -2 -12" stroke="var(--accent)"/> 763 <path d="M42 78 v22 M42 78 l-5 6 M42 78 l5 6" stroke="var(--accent)"/> 764 <path d="M58 100 v-22 M58 100 l-5 -6 M58 100 l5 -6"/> 765 <path d="M24 120 l-6 6 l6 6 M76 120 l6 6 l-6 6" /> 766 <path d="M40 122 l4 12 M56 122 l4 12" stroke="var(--accent)"/> 767 </svg> 768 </div> 769 </div> 770 <!-- Layer 5 · Platform --> 771 <div class="rz-m-mobile-plane" data-layer="5" aria-hidden="true"> 772 <span class="rz-m-mobile-tab">05</span> 773 <div class="rz-m-mobile-glass"> 774 <svg viewBox="0 0 100 190" fill="none" stroke="currentColor" stroke-width="2" vector-effect="non-scaling-stroke"> 775 <rect x="30" y="40" width="40" height="40" rx="4" stroke="var(--accent)"/> 776 <rect x="42" y="52" width="16" height="16" rx="2"/> 777 <path d="M38 40 v-8 M50 40 v-8 M62 40 v-8 M38 80 v8 M50 80 v8 M62 80 v8 M30 52 h-8 M30 64 h-8 M70 52 h8 M70 64 h8"/> 778 <path d="M50 116 l16 6 v10 c0 10 -8 16 -16 20 c-8 -4 -16 -10 -16 -20 v-10 z" stroke="var(--accent)"/> 779 </svg> 780 </div> 781 </div> 782 </div>
783 <span class="rz-m-mobile-fig">Exploded view</span> 784 </div> 785 786 <ol class="rz-m-mobile-phases"> 787 <li class="rz-m-mobile-phase" data-phase="1"> 788 <div class="rz-m-mobile-marker"><span class="rz-m-mobile-num">01</span><span class="rz-m-mobile-tick" aria-hidden="true"></span></div> 789 <div class="rz-m-mobile-body"> 790 <span class="rz-m-mobile-layer">UI / App logic</span> 791 <h4 class="rz-m-mobile-title">Recon & reversing</h4> 792 <p class="rz-m-mobile-desc">We pull the shipped IPA and APK, decompile with jadx and Hopper, and map every screen, entry point and hardcoded secret.</p> 793 <div class="rz-m-mobile-deliv"><span class="rz-m-mobile-deliv-k">Deliverable</span><span class="rz-m-mobile-deliv-v">Attack-surface map</span></div> 794 </div> 795 </li> 796 <li class="rz-m-mobile-phase" data-phase="2"> 797 <div class="rz-m-mobile-marker"><span class="rz-m-mobile-num">02</span><span class="rz-m-mobile-tick" aria-hidden="true"></span></div> 798 <div class="rz-m-mobile-body"> 799 <span class="rz-m-mobile-layer">Runtime & IPC</span> 800 <h4 class="rz-m-mobile-title">Runtime instrumentation</h4> 801 <p class="rz-m-mobile-desc">
801On jailbroken and rooted devices we hook the app with Frida, bypass pinning and root detection, and abuse deep links and IPC.</p> 802 <div class="rz-m-mobile-deliv"><span class="rz-m-mobile-deliv-k">Deliverable</span><span class="rz-m-mobile-deliv-v">Runtime PoCs</span></div> 803 </div> 804 </li> 805 <li class="rz-m-mobile-phase" data-phase="3"> 806 <div class="rz-m-mobile-marker"><span class="rz-m-mobile-num">03</span><span class="rz-m-mobile-tick" aria-hidden="true"></span></div> 807 <div class="rz-m-mobile-body"> 808 <span class="rz-m-mobile-layer">Local storage</span> 809 <h4 class="rz-m-mobile-title">Data-at-rest review</h4> 810 <p class="rz-m-mobile-desc">We inspect the Keychain, Keystore, SQLite and preference files for tokens, credentials and personal data left readable on the device.</p> 811 <div class="rz-m-mobile-deliv"><span class="rz-m-mobile-deliv-k">Deliverable</span><span class="rz-m-mobile-deliv-v">Storage evidence log</span></div> 812 </div> 813 </li> 814 <li class="rz-m-mobile-phase" data-phase="4"> 815 <div class="rz-m-mobile-marker"><span class="rz-m-mobile-num">04</span><span class="rz-m-mobile-tick" aria-hidden="true"></span></div> 816 <div class="rz-m-mobile-body"> 817 <span class="rz-m-mobile-layer">Network & API</span> 818 <h4 class="rz-m-mobile-title">Traffic & API testing</h4> 819 <p class="rz-m-mobile-desc">Proxying live traffic through Burp, we test transport security, then probe the backend APIs for broken authorisation, IDOR and weak sessions.</p> 820 <div class="rz-m-mobile-deliv"><span class="rz-m-mobile-deliv-k">Deliverable</span><span class="rz-m-mobile-deliv-v">Verified API findings</span></div> 821 </div> 822 </li> 823 <li class="rz-m-mobile-phase" data-phase="5"> 824 <div class="rz-m-mobile-marker"><span class="rz-m-mobile-num">05</span><span class="rz-m-mobile-tick" aria-hidden="true"></span></div> 825 <div class="rz-m-mobile-body"> 826 <span class="rz-m-mobile-layer">Platform</span> 827 <h4 class="rz-m-mobile-title">Hardening & report</h4> 828 <p class="rz-m-mobile-desc">Finally we review OS-level controls â permissions, biometrics, backup and anti-tampering â and deliver a severity-rated report with prioritised fixes.</p> 829 <div class="rz-m-mobile-deliv"><span class="rz-m-mobile-deliv-k">Deliverable</span><span class="rz-m-mobile-deliv-v">Severity-rated report</span></div> 830 </div> 831 </li> 832 </ol> 833 </div> 834</div> 835<!--/METHOD:mobile--> 836 </div> 837 <div class="margin-top margin-xlarge"> 838 <h3 class="heading-style-h4">Platforms & Focus Areas</h3> 839 <div class="w-layout-grid layout238_list margin-top margin-medium"> 840 <div class="layout238_item"> 841 <h4 class="heading-style-h5">iOS Application Testing</h4> 842 <p>We test iOS apps against the OWASP Mobile Application Security Verification Standard (MASVS). Our consultants examine local data storage in the Keychain, files and databases, check certificate pinning and transport security, and probe authentication, session handling and biometric flows. We assess resistance to reverse engineering and runtime tampering on jailbroken devices, and inspect how the app handles sensitive data in memory, logs and backups. Every finding is reported with a proof-of-concept, its real impact and a concrete fix, followed by a retest once your developers have remediated.</p> 843 </div> 844 <div class="layout238_item"> 845 <h4 class="heading-style-h5">Android Application Testing</h4> 846 <p>We test Android apps to the OWASP MASVS, starting where attackers do: the APK itself. We review exported activities, services and content providers, over-broad permissions, insecure local storage and weak inter-process communication, then examine authentication, deep-link handling and transport security. Using dynamic analysis and reverse engineering on rooted devices, we assess obfuscation, root detection and runtime manipulation. You receive clear, reproducible findings ranked by exploitability, remediation guidance your developers can a
846pply directly, and a free retest to confirm each issue is resolved.</p> 847 </div> 848 <div class="layout238_item"> 849 <h4 class="heading-style-h5">API & Backend Security</h4> 850 <p>A mobile app is only as secure as the API behind it, so we test both together. We map every backend endpoint the app calls â including hidden and undocumented ones â and probe them for broken object-level and function-level authorization (IDOR), authentication weaknesses, mass assignment, injection and business-logic abuse, guided by the OWASP API Security Top 10. Testing the API directly, not just through the app, uncovers issues the interface hides. Findings arrive with proofs-of-concept and prioritised fixes, and complement our wider web and API penetration testing.</p> 851 </div> 852 </div> 853 </div> 854 </div> 855 </div> 856 </div> 857 </div> 858</section> 859<!-- Add this before the footer --> 860<!-- Related services --> 861<section class="rz-related-services"> 862 <div class="padding-global"> 863 <div class="container-large"> 864 <div class="padding-section-large"> 865 <h2 class="heading-style-h5">Related services</h2> 866 <p class="text-size-medium">Mobile app testing pairs with: <a href="pentesting.html">our penetration testing services</a>, <a href="code-review.html">secure code review</a> and <a href="incident-response.html">incident response</a>.</p> 867 </div> 868 </div> 869 </div> 870</section> 871 872<section id="contact-section" class="section_contact"> 873 <div class="padding-global"> 874 <div class="container-large"> 875 <div class="padding-section-large"> 876 <div class="contact_component"> 877 <div class="margin-bottom margin-xxlarge"> 878 <div class="text-align-center"> 879 <div class="max-width-large align-center"> 880 <h2 class="heading-style-h3">Get in Touch</h2> 881 <div class="margin-top margin-small"> 882 <p class="text-size-medium">Ready to strengthen your security posture? Let's discuss how we can help protect your organization.</p> 883 </div> 884 </div> 885 </div> 886 </div> 887 <div class="contact_form-wrapper w-form"> 888 <form id="contact-form" class="contact_form" method="post" onsubmit="return submitForm(event)"> 889 <div class="w-layout-grid contact_form-grid"> 890 <!-- Name Fields --> 891 <div class="input-wrapper"> 892 <label for="First-Name" class="field-label">First Name</label> 893 <input type="text" class="text-field w-input" name="First-Name" id="First-Name" required> 894 </div> 895 <div class="input-wrapper"> 896 <label for="Last-Name" class="field-label">Last Name</label> 897 <input type="text" class="text-field w-input" name="Last-Name" id="Last-Name" required> 898 </div> 899 <!-- Contact Fields --> 900 <div class="input-wrapper"> 901 <label for="Email" class="field-label">Work Email</label> 902 <input type="email" class="text-field w-input" name="Email" id="Email" required> 903 </div> 904 <div class="input-wrapper"> 905 <label for="Phone" class="field-label">Phone Number</label> 906 <input type="tel" class="text-field w-input" name="Phone" id="Phone"> 907 </div> 908 <!-- Company Fields --> 909 <div class="input-wrapper"> 910 <label for="Company" class="field-label">Company Name</label> 911 <input type="text" class="text-field w-input" name="Company" id="Company" required> 912 </div> 913 <div class="input-wrapper"> 914 <label for="Industry" class="field-label">Industry</label> 915 <select id="Industry" name="Industry" class="select-field w-select" required> 916 <option value="">Select Industry...</option> 917 <option value="Finance">Finance & Banking</option> 918 <option value="Healthcare">Healthcare</option> 919 <option value="Technology">Technology</option> 920 <option value="Manufacturing">Manufacturing</option> 921 <option value="Government">Government</option> 922 <option value="Other">Other</option> 923 </select> 924 </div> 925 <!-- Service Selection --> 926 <div class="input-wrapper full-width"> 927 <label for="Services" class="field-label">Services of Interest</label> 928 <select id="Services" name="Services" class="select-field w-select" required> 929 <option value="">Select Service...</option> 930 <option value="Pentesting">Penetration Testing</option> 931 <option value="RedTeam">Red Team Operations</option> 932 <option value="Incident">Incident Response</option> 933 <option value="Other">Other Services</option> 934 </select> 935 </div> 936 <!-- Message Field --> 937 <div class="input-wrapper full-width"> 938 <label for="Message" class="field-label">Message</label> 939 <textarea id="Message" name="Message" class="textarea w-input" required></textarea> 940 </div> 941 </div> 942 <div class="margin-top margin-large"> 943 <input type="submit" value="Submit Request" class="button w-button"> 944 <div id="success-message" class="success-message" style="display: none;">
945 We have received your message, we will contact you within 1 working day. 946 </div> 947 </div> 948 </form> 949 </div> 950 </div> 951 </div> 952 </div> 953 </div> 954</section> 955 956<style> 957 /* Contact Form Styles */ 958 .section_contact { 959 background-color: var(--color-scheme-1--foreground); 960 border-radius: 24px; 961 margin: 2rem; 962 } 963 964 .contact_form-wrapper { 965 max-width: 800px; 966 margin: 0 auto; 967 } 968 969 .contact_form-grid { 970 display: grid; 971 grid-template-columns: 1fr 1fr; 972 gap: 24px; 973 } 974 975 .input-wrapper { 976 display: flex; 977 flex-direction: column; 978 gap: 8px; 979 } 980 981 .input-wrapper.full-width { 982 grid-column: span 2; 983 } 984 985 .field-label { 986 color: var(--color-scheme-1--text); 987 font-weight: 500; 988 } 989 990 .text-field, 991 .select-field, 992 .textarea { 993 background-color: var(--color-scheme-1--background); 994 border: 1px solid var(--color-scheme-1--border); 995 border-radius: 8px; 996 padding: 12px 16px; 997 color: var(--color-scheme-1--text); 998 transition: all 0.3s ease; 999 } 1000 1001 .text-field:focus, 1002 .select-field:focus, 1003 .textarea:focus { 1004 border-color: var(--color-scheme-1--accent); 1005 outline: none; 1006 } 1007 1008 .textarea { 1009 min-height: 120px; 1010 resize: vertical; 1011 } 1012 1013 /* ... existing contact form styles ... */ 1014 1015 .select-field { 1016 background-color: var(--color-scheme-1--background); 1017 border: 1px solid var(--color-scheme-1--border); 1018 border-radius: 8px; 1019 padding: 12px 16px; 1020 color: var(--color-scheme-1--text); 1021 transition: all 0.3s ease; 1022 width: 100%; 1023 -webkit-appearance: none; 1024 -moz-appearance: none; 1025 appearance: none; 1026 background-image: url("data:image/svg+xml,%3Csvg width='12' height='8' viewBox='0 0 12 8' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1.5L6 6.5L11 1.5' stroke='%23ffffff' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); 1027 background-repeat: no-repeat; 1028 background-position: right 16px center; 1029 padding-right: 40px; 1030 } 1031 1032 .select-field option { 1033 background-color: var(--color-scheme-1--background); 1034 color: var(--color-scheme-1--text); 1035 padding: 12px; 1036 } 1037 1038 .select-field:focus { 1039 border-color: var(--color-scheme-1--accent); 1040 outline: none; 1041 } 1042 1043 /* Ensure dropdown options are visible */ 1044 .w-select { 1045 background-color: var(--color-scheme-1--background); 1046 color: var(--color-scheme-1--text); 1047 } 1048 1049 /* Style for dropdown when opened */ 1050 .select-field:hover, 1051 .select-field:focus { 1052 cursor: pointer; 1053 border-color: var(--color-scheme-1--accent); 1054 } 1055 1056 /* Ensure the dropdown container is visible */ 1057 .input-wrapper select { 1058 position: relative; 1059 z-index: 1; 1060 } 1061 1062 /* Additional styling for option elements */ 1063 option { 1064 padding: 16px; 1065 min-height: 40px; 1066 display: block; 1067 } 1068 1069 @media screen and (max-width: 767px) { 1070 .contact_form-grid { 1071 grid-template-columns: 1fr; 1072 } 1073 1074 .input-wrapper.full-width { 1075 grid-column: span 1; 1076 } 1077 } 1078</style> 1079 1080 <footer class="footer4_component"> 1081 <div class="padding-global"> 1082 <div class="container-large"> 1083 <div class="padding-vertical padding-xxlarge"> 1084 <div class="padding-bottom padding-xxlarge"> 1085 <div class="w-layout-grid footer4_top-wrapper"> 1086 <a href="#" id="w-node-_4d369eb2-7646-a9e8-0d8c-87c44169bc12-4169bc0c" class="footer4_logo-link w-nav-brand"> 1087 <img loading="eager" height="32px" alt="" src="images/r1.png" class="footer4_logo" /> 1088 </a> 1089 <div class="w-layout-grid footer4_link-list"> 1090 <a href="#" class="footer4_link">Cyber Solutions</a> 1091 <a href="#" class="footer4_link">Security Insights</a> 1092 <a href="#" class="footer4_link">Expert Guidance</a> 1093 <a href="#" class="footer4_link">Risk Assessment</a> 1094 <a href="#" class="footer4_link">Contact Us</a> 1095 </div> 1096 <div id="w-node-_4d369eb2-7646-a9e8-0d8c-87c44169bc1f-4169bc0c" class="w-layout-grid footer4_social-list"> 1097 <a href="#" class="footer4_social-link w-inline-block"> 1098 <div class="icon-embed-xsmall w-embed"> 1099 <svg width="100%" height="100%" viewB
1099ox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 1100 <path d="M22 12.0611C22 6.50451 17.5229 2 12 2C6.47715 2 2 6.50451 2 12.0611C2 17.0828 5.65684 21.2452 10.4375 22V14.9694H7.89844V12.0611H10.4375V9.84452C10.4375 7.32296 11.9305 5.93012 14.2146 5.93012C15.3088 5.93012 16.4531 6.12663 16.4531 6.12663V8.60261H15.1922C13.95 8.60261 13.5625 9.37822 13.5625 10.1739V12.0611H16.3359L15.8926 14.9694H13.5625V22C18.3432 21.2452 22 17.083 22 12.0611Z" fill="CurrentColor" /> 1101 </svg> 1102 </div> 1103 </a> 1104 <a href="#" class="footer4_social-link w-inline-block"> 1105 <div class="icon-embed-xsmall w-embed"> 1106 <svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 1107 <path fill-rule="evenodd" clip-rule="evenodd" d="M16 3H8C5.23858 3 3 5.23858 3 8V16C3 18.7614 5.23858 21 8 21H16C18.7614 21 21 18.7614 21 16V8C21 5.23858 18.7614 3 16 3ZM19.25 16C19.2445 17.7926 17.7926 19.2445 16 19.25H8C6.20735 19.2445 4.75549 17.7926 4.75 16V8C4.75549 6.20735 6.20735 4.75549 8 4.75H16C17.7926 4.75549 19.2445 6.20735 19.25 8V16ZM16.75 8.25C17.3023 8.25 17.75 7.80228 17.75 7.25C17.75 6.69772 17.3023 6.25 16.75 6.25C16.1977 6.25 15.75 6.69772 15.75 7.25C15.75 7.80228 16.1977 8.25 16.75 8.25ZM12 7.5C9.51472 7.5 7.5 9.51472 7.5 12C7.5 14.4853 9.51472 16.5 12 16.5C14.4853 16.5 16.5 14.4853 16.5 12C16.5027 10.8057 16.0294 9.65957 15.1849 8.81508C14.3404 7.97059 13.1943 7.49734 12 7.5ZM9.25 12C9.25 13.5188 10.4812 14.75 12 14.75C13.5188 14.75 14.75 13.5188 14.75 12C14.75 10.4812 13.5188 9.25 12 9.25C10.4812 9.25 9.25 10.4812 9.25 12Z" fill="CurrentColor" /> 1108 </svg> 1109 </div> 1110 </a> 1111 <a href="#" class="footer4_social-link w-inline-block"> 1112 <div class="icon-embed-xsmall w-embed"> 1113 <svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 1114 <path d="M17.1761 4H19.9362L13.9061 10.7774L21 20H15.4456L11.0951 14.4066L6.11723 20H3.35544L9.80517 12.7508L3 4H8.69545L12.6279 9.11262L17.1761 4ZM16.2073 18.3754H17.7368L7.86441 5.53928H6.2232L16.2073 18.3754Z" fill="CurrentColor" /> 1115 </div> 1116 </a> 1117 <a href="#" class="footer4_social-link w-inline-block"> 1118 <div class="icon-embed-xsmall w-embed"> 1119 <svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 1120 <path fill-rule="evenodd" clip-rule="evenodd" d="M4.5 3C3.67157 3 3 3.67157 3 4.5V19.5C3 20.3284 3.67157 21 4.5 21H19.5C20.3284 21 21 20.3284 21 19.5V4.5C21 3.67157 20.3284 3 19.5 3H4.5ZM8.52076 7.00272C8.52639 7.95897 7.81061 8.54819 6.96123 8.54397C6.16107 8.53975 5.46357 7.90272 5.46779 7.00413C5.47201 6.15897 6.13998 5.47975 7.00764 5.49944C7.88795 5.51913 8.52639 6.1646 8.52076 7.00272ZM12.2797 9.76176H9.75971H9.7583V18.3216H12.4217V18.1219C12.4217 17.742 12.4214 17.362 12.4211 16.9819V16.9818V16.9816V16.9815V16.9812C12.4203 15.9674 12.4194 14.9532 12.4246 13.9397C12.426 13.6936 12.4372 13.4377 12.5005 13.2028C12.7381 12.3253 13.5271 11.7586 14.4074 11.8979C14.9727 11.9864 15.3467 12.3141 15.5042 12.8471C15.6013 13.1803 15.6449 13.5389 15.6491 13.8863C15.6605 14.9339 15.6589 15.9815 15.6573 17.0292V17.0294C15.6567 17.3992 15.6561 17.769 15.6561 18.1388V18.3202H18.328V18.1149C18.328 17.6629 18.3278 17.211 18.3275 16.7591V16.759V16.7588C18.327 15.6293 18.3264 14.5001 18.3294 13.3702C18.3308 12.8597 18.276 12.3563 18.1508 11.8627C17.9638 11.1286 17.5771 10.5211 16.9485 10.0824C16.5027 9.77019 16.0133 9.5691 15.4663 9.5466C15.404 9.54401 15.3412 9.54062 15.2781 9.53721L15.2781 9.53721L15.2781 9.53721C14.9984 9.52209 14.7141 9.50673 14.4467 9.56066C13.6817 9.71394 13.0096 10.0641 12.5019 10.6814C12.4429 10.7522 12.3852 10.8241 12.2991 10.9314L12.2991 10.9314L12.2797 10.9557V9.76176ZM5.68164 18.3244H8.33242V9.76733H5.68164V18.3244Z" fill="CurrentColor" /> 1121 </svg> 1122 </div> 1123 </a> 1124 <a href="#" class="footer4_social-link w-inline-block"> 1125 <div class="icon-embed-xsmall w-embed"> 1126 <svg width="100%" height="100%" viewB
1126ox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 1127 <path fill-rule="evenodd" clip-rule="evenodd" d="M20.5686 4.77345C21.5163 5.02692 22.2555 5.76903 22.5118 6.71673C23.1821 9.42042 23.1385 14.5321 22.5259 17.278C22.2724 18.2257 21.5303 18.965 20.5826 19.2213C17.9071 19.8831 5.92356 19.8015 3.40294 19.2213C2.45524 18.9678 1.71595 18.2257 1.45966 17.278C0.827391 14.7011 0.871044 9.25144 1.44558 6.73081C1.69905 5.78311 2.44116 5.04382 3.38886 4.78753C6.96561 4.0412 19.2956 4.282 20.5686 4.77345ZM9.86682 8.70227L15.6122 11.9974L9.86682 15.2925V8.70227Z" fill="CurrentColor" /> 1128 </svg> 1129 </div> 1130 </a> 1131 </div> 1132 </div> 1133 <div class="divider-horizontal"></div> 1134 <div class="padding-top padding-medium"> 1135 <div class="w-layout-grid footer4_bottom-wrapper"> 1136 <a href="#" class="footer4_legal-link">Admiraliteitskade 50-923<div></div>3063ED, Rotterdam,<div></div> The Netherlands</a><div></div>+31 10 322 0229 1137 1138 <div id="w-node-_4d369eb2-7646-a9e8-0d8c-87c44169bc2d-4169bc0c" class="footer4_credit-text">© 2025 ReactiveZero. All rights reserved.</div> 1139 <a href="#" class="footer4_legal-link">Privacy Policy</a> 1140 <a href="#" class="footer4_legal-link">Terms of Service</a> 1141 <a href="#" class="footer4_legal-link">Cookies Settings</a> 1142 </div> 1143 </div> 1144 </div> 1145 </div> 1146 </div> 1147 </footer> 1148 </div>
vendor: 113 bytes, lines 1148-1149
1148 1149 <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
1149<script src="js/jquery.js?site=6836fde34810be6c23b92000" type="text/javascript"></script>
1149 1150
1150<script src="js/webflow.schunk.36b8fb49256177c8.js" type="text/javascript"></script>
1150 1151
1151<script src="js/webflow.schunk.039ed449019d8266.js" type="text/javascript"></script>
1151 1152
1152<script src="js/webflow-script.js" type="text/javascript"></script>
1152 1153
1153<script src="js/i18n-strings.js?v=20260915-phone" type="text/javascript"></script>
1153 1154
1154<script src="js/i18n.js?v=20260915-phone" type="text/javascript"></script>
1154 1155
1155<script src="js/mobile-nav.js?v=20260915-phone" type="text/javascript"></script>
1155 1156
1156<script src="js/shared-layout.js?v=20260915-phone" type="text/javascript"></script>
1156 1157
1157<script src="js/cookie-modal.js?v=20260915-phone" type="text/javascript"></script>
1157 1158
1158<script src="js/animations.js?v=20260915-phone" type="text/javascript"></script>
vendor: 1 bytes, line 1158
1158
1159<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"70d4e81a4ac44bc9803ebb295e280b35","r":1,"spa":2}' crossorigin="anonymous"></script>
1159 1160</body> 1161 1162</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.