{"id":1394,"date":"2026-07-21T09:00:00","date_gmt":"2026-07-20T20:00:00","guid":{"rendered":"https:\/\/blog.wiseowls.co.nz\/?p=1394"},"modified":"2026-03-08T03:32:02","modified_gmt":"2026-03-07T14:32:02","slug":"reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida","status":"publish","type":"post","link":"https:\/\/blog.wiseowls.co.nz\/index.php\/2026\/07\/21\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\/","title":{"rendered":"Reverse engineering an Android app part 3 \u2014 Extracting runtime secrets with Frida"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/blog.wiseowls.co.nz\/?p=1393\">Last time<\/a> we traced the signing logic to <code>Po.c<\/code>, discovered the secrets come from a native library that decodes them at runtime, and hit a wall trying to statically reverse the XOR encoding. Time for plan B \u2014 if we can&#8217;t reverse the encoding, we&#8217;ll just read the decoded values from memory.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why the obvious approaches don&#8217;t work<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before reaching for Frida, we tried a few shortcuts:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Approach<\/th><th>Result<\/th><\/tr><\/thead><tbody><tr><td>Call <code>Secrets.getXxx()<\/code> directly<\/td><td>Needs an instance, not static<\/td><\/tr><tr><td>Create new <code>Secrets()<\/code> instance<\/td><td>Native code only decodes at init<\/td><\/tr><tr><td>Hook the constructor<\/td><td>App has anti-Frida detection, crashes<\/td><\/tr><tr><td>Reverse XOR in the <code>.so<\/code><\/td><td>Position-dependent key, too complex<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The key insight: the app has <em>already<\/em> decoded the secrets and stored them in a <code>Po.c<\/code> instance sitting on the heap. We don&#8217;t need to trigger the decoding \u2014 we just need to find that instance and read its fields.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Heap scanning with Java.choose()<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/frida.re\/\">Frida&#8217;s<\/a> <code>Java.choose()<\/code> walks the heap looking for live instances of a given class. Combined with <a href=\"https:\/\/docs.oracle.com\/javase\/tutorial\/reflect\/\">reflection<\/a> to bypass private field access, it&#8217;s exactly what we need:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">Java.perform(function() {\n    var PoC = Java.use(\"Po.c\");\n\n    var aField = PoC.class.getDeclaredField(\"a\");\n    var bField = PoC.class.getDeclaredField(\"b\");\n    var cField = PoC.class.getDeclaredField(\"c\");\n    aField.setAccessible(true);\n    bField.setAccessible(true);\n    cField.setAccessible(true);\n\n    Java.choose(\"Po.c\", {\n        onMatch: function(instance) {\n            console.log(\"partnerKey:    \" + aField.get(instance));\n            console.log(\"algorithmKey:  \" + bField.get(instance));\n            console.log(\"algorithmName: \" + cField.get(instance));\n        },\n        onComplete: function() {}\n    });\n});<\/code><\/pre>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">sequenceDiagram\n    participant F as Frida\n    participant H as JVM Heap\n    participant I as Po.c instance\n    F->>H: Java.choose(\"Po.c\")\n    H->>F: Found instance\n    F->>I: reflection \u2014 get field \"a\"\n    I-->>F: partnerKey\n    F->>I: reflection \u2014 get field \"b\"\n    I-->>F: algorithmKey\n    F->>I: reflection \u2014 get field \"c\"\n    I-->>F: algorithmName = HmacSHA1<\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Running the extraction<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"># Push frida-server to the device\n<a href=\"https:\/\/developer.android.com\/tools\/adb\">adb<\/a> push frida-server \/data\/local\/tmp\/\nadb shell \"chmod 755 \/data\/local\/tmp\/frida-server\"\nadb shell \"\/data\/local\/tmp\/frida-server &amp;\"\n\n# Launch the app and wait for it to fully load\nadb shell am start -n com.example.app\/.presentation.ui.MainActivity\n\n# Attach and extract\nfrida -U -n \"TargetApp\" -l get_instance.js<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">And there it is \u2014 all three values printed to the console. The algorithm name was <code>HmacSHA1<\/code>, not <code>HmacSHA256<\/code> as we&#8217;d assumed from static analysis. That one wrong assumption would have produced invalid signatures every time.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The takeaway<\/h2>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">graph TD\n    A[\"Static analysis \u2014 JADX + Apktool\"] -->|finds| B[\"Where secrets live<br\/>How signing works\"]\n    C[\"Dynamic analysis \u2014 Frida\"] -->|finds| D[\"Actual secret values<br\/>Actual algorithm\"]\n    B --> E[\"Complete picture\"]\n    D --> E<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Static analysis tells you <em>how<\/em> the code works. Dynamic analysis tells you <em>what<\/em> it&#8217;s working with. For anything involving runtime-decoded secrets or obfuscated native code, you need both. We spent hours tracing through decompiled Java to understand the signing flow, and then five lines of Frida script gave us the actual values in seconds. The full toolkit: <a href=\"https:\/\/github.com\/skylot\/jadx\">JADX<\/a> for decompilation, <a href=\"https:\/\/apktool.org\/\">Apktool<\/a> for resources, <a href=\"https:\/\/frida.re\/\">Frida<\/a> for runtime extraction. And a healthy distrust of your own assumptions. If you&#8217;re also interested in intercepting app traffic, we covered <a href=\"https:\/\/blog.wiseowls.co.nz\/?p=1313\">SSL unpinning on Android<\/a> in a separate post.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>Last time we traced the signing logic to Po.c, discovered the secrets come from a native library that decodes them at runtime, and hit a wall trying to statically reverse the XOR encoding. Time for plan B \u2014 if we can&#8217;t reverse the encoding, we&#8217;ll just read the decoded values from memory. Why the obvious &hellip; <a href=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2026\/07\/21\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Reverse engineering an Android app part 3 \u2014 Extracting runtime secrets with Frida&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":566,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[7],"tags":[8],"class_list":["post-1394","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-infrastructure","tag-infosec"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Reverse engineering an Android app part 3 \u2014 Extracting runtime secrets with Frida - Timur and associates<\/title>\n<meta name=\"description\" content=\"Using Frida heap scanning to extract runtime secrets from an Android app when static analysis hits a wall.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2026\/07\/21\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Reverse engineering an Android app part 3 \u2014 Extracting runtime secrets with Frida - Timur and associates\" \/>\n<meta property=\"og:description\" content=\"Using Frida heap scanning to extract runtime secrets from an Android app when static analysis hits a wall.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2026\/07\/21\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\/\" \/>\n<meta property=\"og:site_name\" content=\"Timur and associates\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-20T20:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2020\/06\/padlock-code.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"312\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"timur\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@TimurKh\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2026\\\/07\\\/21\\\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2026\\\/07\\\/21\\\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\\\/\"},\"author\":{\"name\":\"timur\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#\\\/schema\\\/person\\\/34d0ed30d573b5bc317ea990bd2e0c59\"},\"headline\":\"Reverse engineering an Android app part 3 \u2014 Extracting runtime secrets with Frida\",\"datePublished\":\"2026-07-20T20:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2026\\\/07\\\/21\\\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\\\/\"},\"wordCount\":309,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2026\\\/07\\\/21\\\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/padlock-code.jpg\",\"keywords\":[\"infosec\"],\"articleSection\":[\"Infrastructure\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2026\\\/07\\\/21\\\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2026\\\/07\\\/21\\\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\\\/\",\"url\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2026\\\/07\\\/21\\\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\\\/\",\"name\":\"Reverse engineering an Android app part 3 \u2014 Extracting runtime secrets with Frida - Timur and associates\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2026\\\/07\\\/21\\\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2026\\\/07\\\/21\\\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/padlock-code.jpg\",\"datePublished\":\"2026-07-20T20:00:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#\\\/schema\\\/person\\\/34d0ed30d573b5bc317ea990bd2e0c59\"},\"description\":\"Using Frida heap scanning to extract runtime secrets from an Android app when static analysis hits a wall.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2026\\\/07\\\/21\\\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2026\\\/07\\\/21\\\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2026\\\/07\\\/21\\\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/padlock-code.jpg\",\"contentUrl\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/padlock-code.jpg\",\"width\":1280,\"height\":312},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2026\\\/07\\\/21\\\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Reverse engineering an Android app part 3 \u2014 Extracting runtime secrets with Frida\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#website\",\"url\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/\",\"name\":\"Timur and associates\",\"description\":\"Notes of an IT contractor\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#\\\/schema\\\/person\\\/34d0ed30d573b5bc317ea990bd2e0c59\",\"name\":\"timur\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg\",\"caption\":\"timur\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/TimurKh\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Reverse engineering an Android app part 3 \u2014 Extracting runtime secrets with Frida - Timur and associates","description":"Using Frida heap scanning to extract runtime secrets from an Android app when static analysis hits a wall.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.wiseowls.co.nz\/index.php\/2026\/07\/21\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\/","og_locale":"en_US","og_type":"article","og_title":"Reverse engineering an Android app part 3 \u2014 Extracting runtime secrets with Frida - Timur and associates","og_description":"Using Frida heap scanning to extract runtime secrets from an Android app when static analysis hits a wall.","og_url":"https:\/\/blog.wiseowls.co.nz\/index.php\/2026\/07\/21\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\/","og_site_name":"Timur and associates","article_published_time":"2026-07-20T20:00:00+00:00","og_image":[{"width":1280,"height":312,"url":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2020\/06\/padlock-code.jpg","type":"image\/jpeg"}],"author":"timur","twitter_card":"summary_large_image","twitter_creator":"@TimurKh","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2026\/07\/21\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\/#article","isPartOf":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2026\/07\/21\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\/"},"author":{"name":"timur","@id":"https:\/\/blog.wiseowls.co.nz\/#\/schema\/person\/34d0ed30d573b5bc317ea990bd2e0c59"},"headline":"Reverse engineering an Android app part 3 \u2014 Extracting runtime secrets with Frida","datePublished":"2026-07-20T20:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2026\/07\/21\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\/"},"wordCount":309,"commentCount":0,"image":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2026\/07\/21\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2020\/06\/padlock-code.jpg","keywords":["infosec"],"articleSection":["Infrastructure"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.wiseowls.co.nz\/index.php\/2026\/07\/21\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2026\/07\/21\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\/","url":"https:\/\/blog.wiseowls.co.nz\/index.php\/2026\/07\/21\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\/","name":"Reverse engineering an Android app part 3 \u2014 Extracting runtime secrets with Frida - Timur and associates","isPartOf":{"@id":"https:\/\/blog.wiseowls.co.nz\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2026\/07\/21\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\/#primaryimage"},"image":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2026\/07\/21\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2020\/06\/padlock-code.jpg","datePublished":"2026-07-20T20:00:00+00:00","author":{"@id":"https:\/\/blog.wiseowls.co.nz\/#\/schema\/person\/34d0ed30d573b5bc317ea990bd2e0c59"},"description":"Using Frida heap scanning to extract runtime secrets from an Android app when static analysis hits a wall.","breadcrumb":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2026\/07\/21\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.wiseowls.co.nz\/index.php\/2026\/07\/21\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2026\/07\/21\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\/#primaryimage","url":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2020\/06\/padlock-code.jpg","contentUrl":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2020\/06\/padlock-code.jpg","width":1280,"height":312},{"@type":"BreadcrumbList","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2026\/07\/21\/reverse-engineering-an-android-app-part-3-extracting-runtime-secrets-with-frida\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.wiseowls.co.nz\/"},{"@type":"ListItem","position":2,"name":"Reverse engineering an Android app part 3 \u2014 Extracting runtime secrets with Frida"}]},{"@type":"WebSite","@id":"https:\/\/blog.wiseowls.co.nz\/#website","url":"https:\/\/blog.wiseowls.co.nz\/","name":"Timur and associates","description":"Notes of an IT contractor","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.wiseowls.co.nz\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.wiseowls.co.nz\/#\/schema\/person\/34d0ed30d573b5bc317ea990bd2e0c59","name":"timur","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg","url":"https:\/\/secure.gravatar.com\/avatar\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg","caption":"timur"},"sameAs":["https:\/\/x.com\/TimurKh"]}]}},"_links":{"self":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts\/1394","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/comments?post=1394"}],"version-history":[{"count":4,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts\/1394\/revisions"}],"predecessor-version":[{"id":1407,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts\/1394\/revisions\/1407"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/media\/566"}],"wp:attachment":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/media?parent=1394"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/categories?post=1394"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/tags?post=1394"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}