{"id":7871,"date":"2024-05-17T15:05:45","date_gmt":"2024-05-17T13:05:45","guid":{"rendered":"https:\/\/www.iprog.it\/blog\/?p=7871"},"modified":"2024-05-17T15:05:49","modified_gmt":"2024-05-17T13:05:49","slug":"mobile-security-harnessing-afl-for-fuzz-testing","status":"publish","type":"post","link":"https:\/\/www.iprog.it\/blog\/sicurezza-informatica\/mobile-security-harnessing-afl-for-fuzz-testing\/","title":{"rendered":"Mobile Security: Harnessing AFL++ for Fuzz Testing"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/62360046.png\" rel=\"lightbox[7871]\"><img loading=\"lazy\" decoding=\"async\" width=\"256\" height=\"256\" src=\"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/62360046.png\" alt=\"\" class=\"wp-image-7872\" srcset=\"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/62360046.png 256w, https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/62360046-176x176.png 176w, https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/62360046-60x60.png 60w, https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/62360046-150x150.png 150w\" sizes=\"auto, (max-width: 256px) 100vw, 256px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In today&#8217;s blog, I&#8217;ll show you how to set up AFL++ for fuzzing native libraries (JNI) on Android. This can help uncover new bugs, thereby increasing the attack surface.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">AFL++ (American Fuzzy Lop Plus Plus)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><br>AFL++ (American Fuzzy Lop Plus Plus) is an advanced and enhanced version of the original AFL (American Fuzzy Lop) fuzzer. Fuzzing is a software testing technique that involves providing invalid, unexpected, or random data as inputs to a computer program to find bugs and vulnerabilities.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Imagine a program you rely on daily. It could be anything from your web browser to a complex banking application. Unfortunately, even the most well-written software can harbor vulnerabilities. This is where AFL++ comes in &#8211; a powerful tool that helps uncover these hidden bugs before they cause problems.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Installation AFL ++<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To embark on your fuzzing adventure with AFL++, you&#8217;ll need a suitable environment. While Kali Linux is a popular choice, any Linux distribution should work just fine. Here&#8217;s a step-by-step guide to get you started:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/opt\ngit clone https:\/\/github.com\/qilingframework\/qiling\ngit submodule update --init --recursive\ncd ..\ngit clone https:\/\/github.com\/AFLplusplus\/AFLplusplus\ncd AFLplusplus\nmake distrib\nsudo make install<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">To work in an Android environment, we need to <a href=\"https:\/\/github.com\/android\/ndk\/wiki\/Unsupported-Downloads\">download <\/a>the NDK from this link. I selected version 21. After downloading, unzip the file and save it to the desktop.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before moving forward, we need to modify a couple of AFL files.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">First, navigate to <code>\/opt\/AFLplusplus\/qemu_mode\/qemuafl\/linux-user\/main.c<\/code> and comment out the <code>signal_init();<\/code> line.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Next, open <code>\/opt\/AFLplusplus\/qemu_mode\/build_qemu_support.sh<\/code> and comment out all lines containing the <code>git<\/code> command. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now we can compile the tool to work with the aarch64 architecture.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/opt\/AFLplusplus\nsudo CPU_TARGET=aarch64 .\/build_qemu_support.sh<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Demo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For our demo, we will create a dummy library in C, simulating that it was extracted from an APK and utilized through JNI (Java Native Interface). The code for this library is as follows (we will name the file <code>libhello.c<\/code>).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include&lt;stdio.h>\n#include&lt;string.h>\n\nvoid  sayHello(char name&#91;]){\n    char buffer&#91;10] ;\n    strcpy(buffer,name);\n    printf(\"Hello %s\",buffer);\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Afterwards, we will also create the harness program that will be utilized by AFL. the harness code that interfaces with AFL++ and your target program. This code will be responsible for reading inputs from AFL++, feeding them to the target program, and capturing the program&#8217;s output.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include&lt;stdio.h>\n#include&lt;string.h>\n\nextern void  sayHello(char name&#91;]);\n\nint main(int argc, char const *argv&#91;])\n{\n \n    char buffer&#91;70000];\n    FILE *fp = fopen(argv&#91;1], \"rw\");\n   fread(buffer,70000,1,fp);\n   sayHello(buffer);\n\n    return 0;\n}\n   <\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The next step is to compile the two file<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/home\/kali\/Desktop\/android-ndk-r21e\/toolchains\/llvm\/prebuilt\/linux-x86_64\/bin\/aarch64-linux-android21-clang libhello.c -o libhello.so  -shared -fPIC\n\n\/home\/kali\/Desktop\/android-ndk-r21e\/toolchains\/llvm\/prebuilt\/linux-x86_64\/bin\/aarch64-linux-android21-clang harness.c -o harness -lhello -L.\n\n\nThen, we need to configure some variables to ensure that AFL operates correctly.\n\nexport QEMU_LD_PREFIX=\/opt\/qiling\/examples\/rootfs\/arm64_android                  \nexport QEMU_SET_ENV=LD_LIBRARY_PATH=\/home\/kali\/Desktop\/tutorial\nmkdir input\necho \"AAAA\" > input\/input.txt<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Before to execute the fuzzer we can check if everything it works in the proper way:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>AFL_INST_LIBS=1 \/opt\/AFLplusplus\/afl-qemu-trace .\/harness input\/input.txt<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/image.png\" rel=\"lightbox[7871]\"><img loading=\"lazy\" decoding=\"async\" width=\"630\" height=\"102\" src=\"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/image.png\" alt=\"\" class=\"wp-image-7874\" srcset=\"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/image.png 630w, https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/image-620x100.png 620w, https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/image-300x49.png 300w, https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/image-624x101.png 624w\" sizes=\"auto, (max-width: 630px) 100vw, 630px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Finally we can execute our fuzzer:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>AFL_INST_LIBS=1 \/opt\/AFLplusplus\/afl-fuzz -Q -i input\/ -o output  .\/harness @@<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/image-1.png\" rel=\"lightbox[7871]\"><img loading=\"lazy\" decoding=\"async\" width=\"707\" height=\"408\" src=\"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/image-1.png\" alt=\"\" class=\"wp-image-7875\" srcset=\"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/image-1.png 707w, https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/image-1-620x358.png 620w, https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/image-1-300x173.png 300w, https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/image-1-624x360.png 624w\" sizes=\"auto, (max-width: 707px) 100vw, 707px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Within a few seconds, the fuzzer has already crashed the program, and we can locate the results in the output folder. Of course, this is just a demonstration, but a fuzzer could require weeks to uncover something of interest. Additionally, a security engineer needs to conduct a thorough reverse engineering analysis to identify the most suitable functions to fuzz. Functions such as Memcpy and strcpy are among those worth considering. If you enjoyed this blog, please show your support by sharing or giving it a like. If you&#8217;d like to read more blogs like this, don&#8217;t hesitate to let me know!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In today&#8217;s blog, I&#8217;ll show you how to set up AFL++ for fuzzing native libraries (JNI) on Android. This can help uncover new bugs, thereby increasing the attack surface. AFL++ (American Fuzzy Lop Plus Plus) AFL++ (American Fuzzy Lop Plus Plus) is an advanced and enhanced version of the original&#8230; <a href=\"https:\/\/www.iprog.it\/blog\/sicurezza-informatica\/mobile-security-harnessing-afl-for-fuzz-testing\/\">Read more &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":7872,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2259],"tags":[2557,2558,2560,2474],"class_list":["post-7871","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sicurezza-informatica","tag-afl-2","tag-binary-exploitation","tag-jni","tag-offensive-security"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Mobile Security: Harnessing AFL++ for Fuzz Testing - iProg<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.iprog.it\/blog\/sicurezza-informatica\/mobile-security-harnessing-afl-for-fuzz-testing\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Mobile Security: Harnessing AFL++ for Fuzz Testing - iProg\" \/>\n<meta name=\"twitter:description\" content=\"In today&#8217;s blog, I&#8217;ll show you how to set up AFL++ for fuzzing native libraries (JNI) on Android. This can help uncover new bugs, thereby increasing the attack surface. AFL++ (American Fuzzy Lop Plus Plus) AFL++ (American Fuzzy Lop Plus Plus) is an advanced and enhanced version of the original... Read more &raquo;\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/62360046.png\" \/>\n<meta name=\"twitter:creator\" content=\"@flexkid1\" \/>\n<meta name=\"twitter:site\" content=\"@iprogblog\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Diego\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/sicurezza-informatica\\\/mobile-security-harnessing-afl-for-fuzz-testing\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/sicurezza-informatica\\\/mobile-security-harnessing-afl-for-fuzz-testing\\\/\"},\"author\":{\"name\":\"Diego\",\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/#\\\/schema\\\/person\\\/048c8acb70f8a33f1498675ab9db41a3\"},\"headline\":\"Mobile Security: Harnessing AFL++ for Fuzz Testing\",\"datePublished\":\"2024-05-17T13:05:45+00:00\",\"dateModified\":\"2024-05-17T13:05:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/sicurezza-informatica\\\/mobile-security-harnessing-afl-for-fuzz-testing\\\/\"},\"wordCount\":469,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/sicurezza-informatica\\\/mobile-security-harnessing-afl-for-fuzz-testing\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/62360046.png\",\"keywords\":[\"AFL++\",\"binary exploitation\",\"jni\",\"offensive security\"],\"articleSection\":[\"Sicurezza Informatica\"],\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.iprog.it\\\/blog\\\/sicurezza-informatica\\\/mobile-security-harnessing-afl-for-fuzz-testing\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/sicurezza-informatica\\\/mobile-security-harnessing-afl-for-fuzz-testing\\\/\",\"url\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/sicurezza-informatica\\\/mobile-security-harnessing-afl-for-fuzz-testing\\\/\",\"name\":\"Mobile Security: Harnessing AFL++ for Fuzz Testing - iProg\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/sicurezza-informatica\\\/mobile-security-harnessing-afl-for-fuzz-testing\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/sicurezza-informatica\\\/mobile-security-harnessing-afl-for-fuzz-testing\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/62360046.png\",\"datePublished\":\"2024-05-17T13:05:45+00:00\",\"dateModified\":\"2024-05-17T13:05:49+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/#\\\/schema\\\/person\\\/048c8acb70f8a33f1498675ab9db41a3\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.iprog.it\\\/blog\\\/sicurezza-informatica\\\/mobile-security-harnessing-afl-for-fuzz-testing\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/sicurezza-informatica\\\/mobile-security-harnessing-afl-for-fuzz-testing\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/62360046.png\",\"contentUrl\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/62360046.png\",\"width\":256,\"height\":256},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/\",\"name\":\"iProg\",\"description\":\"perch\u00e9 reinventare la ruota?\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/#\\\/schema\\\/person\\\/048c8acb70f8a33f1498675ab9db41a3\",\"name\":\"Diego\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bf8084effa4627f8e50af0d50d06b0677e4a9de5e895e347c0590ad5696fdfc9?s=96&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bf8084effa4627f8e50af0d50d06b0677e4a9de5e895e347c0590ad5696fdfc9?s=96&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bf8084effa4627f8e50af0d50d06b0677e4a9de5e895e347c0590ad5696fdfc9?s=96&r=g\",\"caption\":\"Diego\"},\"description\":\"Google+\",\"sameAs\":[\"http:\\\/\\\/it.linkedin.com\\\/in\\\/diegocaridei\\\/\",\"https:\\\/\\\/x.com\\\/flexkid1\",\"http:\\\/\\\/www.youtube.com\\\/channel\\\/UCjQ2z1ygV9tv55QAc2q3JHA\"],\"url\":\"https:\\\/\\\/www.iprog.it\\\/blog\\\/author\\\/flexkid\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Mobile Security: Harnessing AFL++ for Fuzz Testing - iProg","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:\/\/www.iprog.it\/blog\/sicurezza-informatica\/mobile-security-harnessing-afl-for-fuzz-testing\/","twitter_card":"summary_large_image","twitter_title":"Mobile Security: Harnessing AFL++ for Fuzz Testing - iProg","twitter_description":"In today&#8217;s blog, I&#8217;ll show you how to set up AFL++ for fuzzing native libraries (JNI) on Android. This can help uncover new bugs, thereby increasing the attack surface. AFL++ (American Fuzzy Lop Plus Plus) AFL++ (American Fuzzy Lop Plus Plus) is an advanced and enhanced version of the original... Read more &raquo;","twitter_image":"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/62360046.png","twitter_creator":"@flexkid1","twitter_site":"@iprogblog","twitter_misc":{"Scritto da":"Diego","Tempo di lettura stimato":"4 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.iprog.it\/blog\/sicurezza-informatica\/mobile-security-harnessing-afl-for-fuzz-testing\/#article","isPartOf":{"@id":"https:\/\/www.iprog.it\/blog\/sicurezza-informatica\/mobile-security-harnessing-afl-for-fuzz-testing\/"},"author":{"name":"Diego","@id":"https:\/\/www.iprog.it\/blog\/#\/schema\/person\/048c8acb70f8a33f1498675ab9db41a3"},"headline":"Mobile Security: Harnessing AFL++ for Fuzz Testing","datePublished":"2024-05-17T13:05:45+00:00","dateModified":"2024-05-17T13:05:49+00:00","mainEntityOfPage":{"@id":"https:\/\/www.iprog.it\/blog\/sicurezza-informatica\/mobile-security-harnessing-afl-for-fuzz-testing\/"},"wordCount":469,"commentCount":0,"image":{"@id":"https:\/\/www.iprog.it\/blog\/sicurezza-informatica\/mobile-security-harnessing-afl-for-fuzz-testing\/#primaryimage"},"thumbnailUrl":"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/62360046.png","keywords":["AFL++","binary exploitation","jni","offensive security"],"articleSection":["Sicurezza Informatica"],"inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.iprog.it\/blog\/sicurezza-informatica\/mobile-security-harnessing-afl-for-fuzz-testing\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.iprog.it\/blog\/sicurezza-informatica\/mobile-security-harnessing-afl-for-fuzz-testing\/","url":"https:\/\/www.iprog.it\/blog\/sicurezza-informatica\/mobile-security-harnessing-afl-for-fuzz-testing\/","name":"Mobile Security: Harnessing AFL++ for Fuzz Testing - iProg","isPartOf":{"@id":"https:\/\/www.iprog.it\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.iprog.it\/blog\/sicurezza-informatica\/mobile-security-harnessing-afl-for-fuzz-testing\/#primaryimage"},"image":{"@id":"https:\/\/www.iprog.it\/blog\/sicurezza-informatica\/mobile-security-harnessing-afl-for-fuzz-testing\/#primaryimage"},"thumbnailUrl":"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/62360046.png","datePublished":"2024-05-17T13:05:45+00:00","dateModified":"2024-05-17T13:05:49+00:00","author":{"@id":"https:\/\/www.iprog.it\/blog\/#\/schema\/person\/048c8acb70f8a33f1498675ab9db41a3"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.iprog.it\/blog\/sicurezza-informatica\/mobile-security-harnessing-afl-for-fuzz-testing\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/www.iprog.it\/blog\/sicurezza-informatica\/mobile-security-harnessing-afl-for-fuzz-testing\/#primaryimage","url":"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/62360046.png","contentUrl":"https:\/\/www.iprog.it\/blog\/wp-content\/uploads\/2024\/05\/62360046.png","width":256,"height":256},{"@type":"WebSite","@id":"https:\/\/www.iprog.it\/blog\/#website","url":"https:\/\/www.iprog.it\/blog\/","name":"iProg","description":"perch\u00e9 reinventare la ruota?","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.iprog.it\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/www.iprog.it\/blog\/#\/schema\/person\/048c8acb70f8a33f1498675ab9db41a3","name":"Diego","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/secure.gravatar.com\/avatar\/bf8084effa4627f8e50af0d50d06b0677e4a9de5e895e347c0590ad5696fdfc9?s=96&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bf8084effa4627f8e50af0d50d06b0677e4a9de5e895e347c0590ad5696fdfc9?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bf8084effa4627f8e50af0d50d06b0677e4a9de5e895e347c0590ad5696fdfc9?s=96&r=g","caption":"Diego"},"description":"Google+","sameAs":["http:\/\/it.linkedin.com\/in\/diegocaridei\/","https:\/\/x.com\/flexkid1","http:\/\/www.youtube.com\/channel\/UCjQ2z1ygV9tv55QAc2q3JHA"],"url":"https:\/\/www.iprog.it\/blog\/author\/flexkid\/"}]}},"views":2161,"_links":{"self":[{"href":"https:\/\/www.iprog.it\/blog\/wp-json\/wp\/v2\/posts\/7871","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.iprog.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.iprog.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.iprog.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.iprog.it\/blog\/wp-json\/wp\/v2\/comments?post=7871"}],"version-history":[{"count":2,"href":"https:\/\/www.iprog.it\/blog\/wp-json\/wp\/v2\/posts\/7871\/revisions"}],"predecessor-version":[{"id":7876,"href":"https:\/\/www.iprog.it\/blog\/wp-json\/wp\/v2\/posts\/7871\/revisions\/7876"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.iprog.it\/blog\/wp-json\/wp\/v2\/media\/7872"}],"wp:attachment":[{"href":"https:\/\/www.iprog.it\/blog\/wp-json\/wp\/v2\/media?parent=7871"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.iprog.it\/blog\/wp-json\/wp\/v2\/categories?post=7871"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.iprog.it\/blog\/wp-json\/wp\/v2\/tags?post=7871"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}