{"id":1605,"date":"2024-12-24T17:08:52","date_gmt":"2024-12-24T17:08:52","guid":{"rendered":"https:\/\/threats.amnpardaz.com\/en\/?p=1605"},"modified":"2025-01-21T07:47:53","modified_gmt":"2025-01-21T07:47:53","slug":"1605","status":"publish","type":"post","link":"https:\/\/threats.amnpardaz.com\/en\/2024\/12\/24\/1605\/","title":{"rendered":"Trojan.Android.RubikaPhisher.Malek"},"content":{"rendered":"<h2 style=\"text-align: justify\">Overview<\/h2>\n<p style=\"text-align: justify\">Type: Trojan<br \/>\nDestruction Level : Moderate<br \/>\nPrevalence: Moderate<\/p>\n<h3 style=\"text-align: justify\">Malware Names<\/h3>\n<ul style=\"text-align: justify\">\n<li>(Padvish) Trojan.Android.RubikaPhisher.Malek<\/li>\n<li>(Avira) ANDROID\/Dropper.FGHB.Gen<\/li>\n<li>(ESET) A Variant Of Android\/TrojanDropper.Agent.FNN<\/li>\n<\/ul>\n<h3 style=\"text-align: justify\">What is Trojan?<\/h3>\n<p style=\"text-align: justify\">A Trojan is a type of malware that masquerades as legitimate software, presenting itself as functional and benign. However, once executed, it performs malicious actions that can cause significant damage to the system. Trojans infiltrate systems through various methods, including:<br \/>\n\u2022 Downloading software from untrusted sources,<br \/>\n\u2022 Embedded malicious code in HTML files,<br \/>\n\u2022 Malicious email attachments, and more.<\/p>\n<h3 style=\"text-align: justify\">What is the RubikaPhisher Malware Family?<\/h3>\n<p style=\"text-align: justify\">The RubikaPhisher malware family is distributed under deceptive names such as &#8220;Modded Rubika&#8221; or &#8220;18+ Movie.&#8221; Upon execution, the malware prompts the user to input their phone number to obtain an activation code for accessing the program. When the user enters their phone number, the an SMS from is received from the legitimate Rubika application&#8217;s SMS panel. If the verification code is entered into the malware, it compromises the user&#8217;s Rubika account. This allows the malware to send messages, join channels, and target specific groups on behalf of the compromised user.<\/p>\n<h2 style=\"text-align: justify\">Technical Description<\/h2>\n<h3 style=\"text-align: justify\">Indicators of Compromise (IoCs):<\/h3>\n<p style=\"padding-right: 30px;text-align: justify\">\u274c\u00a0Unauthorized access to phone call permissions.<br \/>\n\u274c\u00a0Presence of anonymous sessions within the Rubika user account.<\/p>\n<h3 style=\"text-align: justify\">Performance Description<\/h3>\n<p style=\"text-align: justify\">The malware is fully obfuscated and packaged, necessitating the use of dynamic analysis tools for unpacking. The analysis begins by deobfuscating the malware strings and examining its functionality within the cn.beingyi.sub.apps.SubApp.SubApplication class, referenced in the Application tag of the Android manifest file.<br \/>\nCertain Android malware employ packing techniques to conceal their malicious code. In these cases, the primary malware code is encrypted or compressed within the application package (APK) and is only decrypted or decompressed during execution.<br \/>\nThis approach effectively hinders malware detection tools, such as antivirus software, from analyzing the program\u2019s original content.<\/p>\n<h4 style=\"text-align: justify\"><span style=\"color: #0000ff\"><em>&#8220;cn.beingyi.sub.apps.SubApp.SubApplication&#8221;<\/em> Class<\/span><\/h4>\n<p style=\"padding-right: 30px;text-align: justify\"><strong><span style=\"color: #3366ff\">? <em>&#8220;attachBaseContext&#8221;<\/em> Method<\/span><\/strong><\/p>\n<p>In this method, the malware creates a special directory (ded and opt) within the program&#8217;s storage space using the getDir and getFilesDir methods. Then this method opens the APK as a ZipFile, and the \u02bf (base) method is invoked to access the APK&#8217;s file path.<br \/>\nThen JSON-formatted metadata is retrieved from the APK\u2019s configuration file. This metadata includes flags controlling security checks (such as checkVirtual, checkXposed, checkRoot, checkVPN).<\/p>\n<p>Based on the extracted JSON configuration, emulator detection checks for the presence of the Xposed framework, root access, and VPN connections, which are common anti-tampering measures. An array of DEX (Dalvik Executable) files identified in the JSON under the dex&#8221; key are then loaded dynamically.<\/p>\n<p>This process involves extracting files from the APK package and writing them to a designated directory to dynamically load the malware&#8217;s original DEX file, named uPtXsM1W8BMxYvyj52o6tes7q1cDOgrz.dex, during runtime. Once the DEX file has been extracted, it undergoes a cleanup procedure where the file is promptly deleted. This ensures that the malware leaves no residual traces, effectively preventing detection and analysis of its malicious components.<\/p>\n<p dir=\"ltr\" style=\"text-align: justify\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4274\" src=\"http:\/\/threats.amnpardaz.com\/wp-content\/uploads\/sites\/2\/2024\/11\/\u0645\u062a\u062f-attachBaseContext.png\" alt=\"\u0645\u062a\u062f attachBaseContext\" width=\"647\" height=\"449\" \/><\/p>\n<h4 style=\"text-align: justify\"><span style=\"color: #ff0000\"><strong>? &#8220;<em>com.malek.ir.MainActivity&#8221;\u00a0<\/em>Activity<\/strong><\/span><\/h4>\n<p style=\"padding-right: 30px;text-align: justify\"><strong><span style=\"color: #3366ff\">?<em>&#8220;initialize&#8221; <\/em>Method<\/span><\/strong><\/p>\n<p>The initialize method is tasked with validating the user-entered phone number and, if valid, sending a request to the server to issue a verification code. In fact, the process begins by checking whether the phone number input field is empty. If the input field is empty, the malware displays a message stating, &#8220;Enter your number&#8221;, and exits the method. The method verifies that the input starts with &#8220;09&#8221;, which is commonly associated with mobile operators in Iran. If the number is valid, it is converted to its international format by appending Iran&#8217;s country code (&#8220;98&#8221;) and stored in the sendRiply variable. (&#8220;98&#8221; as the country code of Iran) is changed and stored in the sendRiply variable. Using the sendCodeTMP method of the Rubika class, the formatted phone number is sent to the server to initiate the verification process.<\/p>\n<p>The response received from the server, which is stored in malek, is checked. If it includes the key &#8220;client_show_message&#8221;, a message is displayed to the user, allowing them to close it by clicking the &#8220;OK&#8221; button. If the response includes the key &#8220;phone_code_hash&#8221;, this value is stored, and the UI is updated so that the user can enter the confirmation code. Finally, if the entered phone number does not include &#8220;09&#8221;, an error message is displayed to the user.<\/p>\n<p style=\"padding-right: 30px;text-align: justify\"><strong><span style=\"color: #3366ff\">?<em>&#8220;sendCodeTMP&#8221;\u00a0<\/em>Method<\/span><\/strong><\/p>\n<p style=\"text-align: justify\">The sendCodeTMP method facilitates the SMS-based verification by constructing and sending a JSON payload to the server (the phone number that the user is prompted for at the beginning of the run).<br \/>\nThis method receives an input parameter, i.e. the phone number to be verified, and then creates a JSON string that represents the payload of the request to be sent to the server, which includes the following information:<br \/>\npayload contains:<\/p>\n<ul style=\"text-align: justify\">\n<li><em><strong>method<\/strong><\/em>: Specifies the requested operation, which, in this case, is &#8220;sendCode&#8221;.<\/li>\n<li><em><strong>Input<\/strong><\/em>: Contains the phone number to which the verification code will be sent, along with the transmission method, set as &#8220;SMS&#8221;.<\/li>\n<li><em><strong>client<\/strong><\/em>: This component provides details about the application, including its name, version, platform, package name, and the language code for the API that the malware communicates with. The application transmits this information as a JSON string using the post_TmpSession method. This method encrypts the JSON request with an Encryption object and sends it as an HTTP POST request to the server at the URL specified by the urlX variable within the Rubika class, ( \u201chttps:\/\/messengerg2c88.iranlms.ir)\u201d.<\/li>\n<\/ul>\n<p style=\"text-align: justify\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-4257 aligncenter\" src=\"http:\/\/threats.amnpardaz.com\/wp-content\/uploads\/sites\/2\/2024\/11\/\u062a\u0635\u0648\u06cc\u0631-1.png\" alt=\"\u0645\u062a\u062f sendCodeTMP\" width=\"3046\" height=\"327\" \/><\/p>\n<p>The malware interacts extensively with the Rubika application, leveraging various methods to manage authentication, messaging, and group interactions. The malware tries to enter the web version of the Rubika application using the signInTMP method, which is a temporary login method with parameters such as phone hash and verification code. The server&#8217;s response is parsed into an array, arr_s, which is used for further authentication and configuration steps.<\/p>\n<p>The malware registers the infected device using the registerDevic method, storing the result in the PA variable. Then it uses the joinGroup method to join a specific group and saves the result in the join variable, and then the value of the authentication token is stored in the AuthAcunt variable.<\/p>\n<p style=\"text-align: justify\">The malware employs the sendMessage method to send the malekam value, which includes the user&#8217;s authentication token and session private key, to a group or channel identified by the Guid parameter.<br \/>\nThe leaveGroup method is called to immediately exit the group, then the joinChannel method is invoked to join a new channel.<br \/>\nUsing the malek method, the malware retrieves information about a chat or group and stores the response (group or channel state data) in the leave variable. It then:<br \/>\n\u2022 Extracts chat details and the last message, saving them in the input variable.<br \/>\n\u2022 Creates a delete request (mmmm) for a specific message.<br \/>\n\u2022 Substitutes the placeholder value 659456667999560 with the actual message_id of the most recent incoming message.<br \/>\n\u2022 Calls the Maleki method to send a delete request for the specified message.<br \/>\nProfile Retrieval<br \/>\nThe _get method constructs and sends a POST request to https:\/\/rubino7.iranlms.ir with the necessary parameters to retrieve a profile list.<\/p>\n<p style=\"padding-right: 30px;text-align: justify\"><span style=\"color: #0000ff\"><strong>? <em>&#8220;signInTMP&#8221;<\/em> Method<\/strong><\/span><\/p>\n<p>The malware takes a phone number as input and calls the signInTMP method with a phone_code_hash and user-provided verification code. Malware in this method attempts to bypass standard authentication mechanisms by directly calling methods that simulate a valid login. In this method, the malware uses an Encryption object to generate a session and a public-private key pair (keyGenerate).<\/p>\n<p>The private key is stored locally, while the public key is included in the login request to the server to validate the session. The method sends a JSON-based login request (s3) containing:<br \/>\n\u2022 Phone number.<br \/>\n\u2022 Phone hash code.<br \/>\n\u2022 Verification code.<br \/>\n\u2022 Public key.<br \/>\n\u2022 Client metadata (app name, version, platform, language code).<\/p>\n<p>The post_TmpSession method sends this request to a predefined server (set in the urlX variable, the address \u201chttps:\/\/messengerg2c88.iranlms.ir\u201d). Data is encrypted before transmission, and the response is decrypted after receiving it. Then when the response server (s4) is received, this method tries to parse it to check if the login status is &#8220;OK&#8221; and If successful, it retrieves an auth key from the response data.<\/p>\n<p>This token is decrypted using the generated private key and returned alongside the server response. In general, the signInTMP enables the malware to gain unauthorized access to the Rubika user account, allowing manipulation of user sessions and activities.<\/p>\n<p style=\"text-align: justify\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-4258 aligncenter\" src=\"http:\/\/threats.amnpardaz.com\/wp-content\/uploads\/sites\/2\/2024\/11\/\u062a\u0635\u0648\u06cc\u0631-2.png\" alt=\"\u0645\u062a\u062f signInTMP\" width=\"1407\" height=\"370\" \/><\/p>\n<p style=\"padding-right: 30px;text-align: justify\"><span style=\"color: #3366ff\"><strong>? <em>&#8220;joinGroup&#8221;<\/em> Method<\/strong><\/span><\/p>\n<p style=\"text-align: justify\">The joinGroup method facilitates joining a group in the Rubika Messenger application by sending an encrypted request. The joinGroup method takes a single parameter, s, representing a hash link to the group the user wants to join, and then creates a It constructs a JSON payload containing:<br \/>\n\u2022 method: Specifies the action to be performed (e.g., &#8220;joinGroup&#8221;).<br \/>\n\u2022 input: A child object containing the &#8220;hash_link&#8221;, which corresponds to the s parameter.<br \/>\n\u2022 client: Metadata about the client, including program name, version, platform, package name, and language code.<br \/>\nValues like this.app_version (representing the app version) are dynamically concatenated during payload creation. Once constructed, the method calls the post function, passing the JSON payload as an argument to execute the request.<\/p>\n<p style=\"text-align: justify\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-4259 aligncenter\" src=\"http:\/\/threats.amnpardaz.com\/wp-content\/uploads\/sites\/2\/2024\/11\/3-\u0645\u062a\u062f-joinGroup.png\" alt=\"\u00a0\u0645\u062a\u062f joinGroup\" width=\"1497\" height=\"187\" \/><\/p>\n<p style=\"padding-right: 30px;text-align: justify\"><span style=\"color: #0000ff\"><strong>? <em>&#8220;sendMessage&#8221;<\/em> Method<\/strong><\/span><\/p>\n<p>The sendMessage method enables sending messages to specific recipients or groups in the Rubika messaging platform. Creates a JSON payload containing the message details, encrypts the data, and then sends it to the server using a POST request. This method contains two parameters, the s variable is the text of the message to be sent and the s1 variable specifies the recipient or group to which the message will be sent.<\/p>\n<p>In general, this method creates a JSON payload to display the message sending request and sends the message to a specified recipient or group using the POST request, and after sending the message, join a channel using the joinChannel method and a hashed link. Finally, it returns the server&#8217;s response indicating the status of the message delivery.<\/p>\n<p style=\"text-align: justify\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-4260 aligncenter\" src=\"http:\/\/threats.amnpardaz.com\/wp-content\/uploads\/sites\/2\/2024\/11\/4-\u0645\u062a\u062f-sendMessage.png\" alt=\"\u00a0\u0645\u062a\u062f sendMessage\" width=\"1321\" height=\"294\" \/><\/p>\n<p style=\"padding-right: 30px;text-align: justify\"><span style=\"color: #0000ff\"><strong>? <em>&#8220;_get&#8221;<\/em> Method<\/strong><\/span><\/p>\n<p>The _get method makes an HTTP POST request with the parameters \u201capi_version\u201d (specifies the API version), \u201cauth\u201d (), \u201cclient\u201d (contains details about the client, such as application name, application version, language code, package name, and platform), &#8220;data&#8221; (specifies specific request details such as parity, number of profiles sent, and how to sort) and &#8220;method&#8221; (specifies the API method being called (&#8220;getProfileList&#8221;), which is a list of Requests available profiles from the server) to a given URL (https:\/\/rubino7.iranlms.ir) and sends it.<\/p>\n<p>In short, this method creates a JSON payload and dynamically inserts an authorization token, and then sends it as a POST request to the specified URL.<\/p>\n<p style=\"text-align: justify\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-4261 aligncenter\" src=\"http:\/\/threats.amnpardaz.com\/wp-content\/uploads\/sites\/2\/2024\/11\/5-\u0645\u062a\u062f-_get.png\" alt=\"\u0645\u062a\u062f _get\" width=\"1660\" height=\"176\" \/><\/p>\n<p>This method is responsible for sending an SMS-based verification code to authenticate the phone number provided by the user and updating the user interface based on the server&#8217;s response. The sendCodePasswordTMP method sends an SMS-based code request to verify the phone number using a security key.<\/p>\n<p>It sends the request with temporary session credentials ensuring secure server-side management, forming part of the authentication or account recovery workflow in the Rubika application.<\/p>\n<p style=\"padding-right: 30px;text-align: justify\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-4262 aligncenter\" src=\"http:\/\/threats.amnpardaz.com\/wp-content\/uploads\/sites\/2\/2024\/11\/6-\u0645\u062a\u062f-_folo.png\" alt=\"\u00a0\u0645\u062a\u062f _folo\" width=\"1457\" height=\"173\" \/><\/p>\n<p>The _folo method is designed to send a &#8220;follow&#8221; request to the server through a network POST request. This method prepares JSON data using the input parameters and set values \u200b\u200band sends the follow request to a specific profile.<\/p>\n<p>First, a JSON structure is created to send a follow request, and this JSON contains general request information such as the program version and request type (Follow) and is prepared to send the request to the Rubika server.<\/p>\n<p>After setting the initial JSON structure, the values \u200b\u200bare replaced dynamically in such a way that &#8220;Az&#8221; is replaced with the value of AuthAcunt, which represents the user&#8217;s authentication token, and the value of &#8220;635ff1379dc6d67fad3ae150&#8221; is replaced with the value of s1 variables, which is the profile_id of the profile to be followed. The value &#8220;60aea5b63b775004b3e70883&#8221; is replaced by the value of the variable s1, which is the followee_id of the user making the follow request.<\/p>\n<p>After the replacements, The final JSON payload is converted into a HashMap. Then the follow request is sent to \u201chttps:\/\/rubino29.iranlms.ir\u201d using MALEK_OK, which is a RequestNetwork object. MALEK_OK_request_listener acts as a network request response listener and manages the status of the request.<\/p>\n<p style=\"padding-right: 30px;text-align: justify\"><span style=\"color: #0000ff\"><strong>?<em>&#8220;initializeLogic&#8221;<\/em> Method<\/strong><\/span><\/p>\n<p style=\"text-align: justify\">The initializeLogic method sends a GET request to the URL:<br \/>\nhttps:\/\/tackserver-code.ir\/json\/\\u0644\\u06CC\\u0646\\u06A9 \\u06AF\\u0627\\u0631\\u062F .json.<br \/>\nThe response is handled using the vahid_request_listener, which processes the received JSON response. This JSON data is used to update internal variables (link, link, id_fa) and dynamically alter the application&#8217;s behavior based on its contents.<br \/>\nSubsequently, the vpn method is invoked to detect the presence of a VPN connection. If a VPN is detected, the malware displays a message stating \u201cTurn off VPN!\u201d ( the malware checks it, as it aims to avoid network traffic monitoring and analysis.)<br \/>\nUpon detecting a VPN, the malware terminates its activity using the finishAffinity method.<\/p>\n<h4 style=\"text-align: justify\"><span style=\"color: #ff0000\"><strong>? <em>&#8220;com.malek.ir.GhoflActivity&#8221;\u00a0<\/em>Activity<\/strong><\/span><\/h4>\n<p style=\"padding-right: 30px;text-align: justify\"><strong><span style=\"color: #3366ff\">?<em>&#8220;initialize&#8221;\u00a0 <\/em>Method<\/span><\/strong><\/p>\n<p>The initialize method launches several user interface (UI) elements and executes a network request to transfer mobile credits. The onResponse callback method is triggered when a successful network response is received, taking the following parameters:<br \/>\n\u2022 s: A string parameter.<br \/>\n\u2022 s1: A JSON response in string format.<br \/>\n\u2022 hashMap0: A HashMap containing additional data.<\/p>\n<p>The hashed data is stored in hashMap1. Then this HashMap is assigned to variable Vahid12 for further use in the activity. This method created a USSD code in the format &#8220;numbersharj*1#10142&#8221;. Here, number and sharj are extracted from the Vahid12 HashMap, likely representing the recipient phone number and the recharge amount.<\/p>\n<p>The final USSD code is encoded using Uri.encode(&#8220;#&#8221;) to ensure proper formatting for the # character. Then this method sets an intent to initiate a phone call using the generated USSD code.<\/p>\n<p>intent.setData(Uri.parse(\u201ctel:\u201d + GhoflActivity.this.vahid)) sets the data to tel followed by the USSD code and creates a \u201cphone call\u201d request. Finally, the startActivity method is called, which triggers the phone&#8217;s dialer to dial the generated USSD code.<\/p>\n<p style=\"text-align: justify\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-4263 aligncenter\" src=\"http:\/\/threats.amnpardaz.com\/wp-content\/uploads\/sites\/2\/2024\/11\/7-\u0627\u06a9\u062a\u06cc\u0648\u06cc\u062a\u06cc-com.malek_.ir_.GhoflActivity.png\" alt=\"\u00a0\u0627\u06a9\u062a\u06cc\u0648\u06cc\u062a\u06cc com.malek.ir.GhoflActivity\" width=\"1505\" height=\"413\" \/><\/p>\n<h3 style=\"text-align: justify\">Malware Techniques<\/h3>\n<p style=\"text-align: justify\">The \u02c8 method dynamically loads DEX files, adjusting behavior based on the Android SDK version. Then detects the presence of of the xposed framework, root check, emulator detection, and the vpn on the user&#8217;s phone. If any of these checks return a positive result, the malware terminates its operation to avoid detection or analysis.<\/p>\n<h2 style=\"text-align: justify\">How to deal with and clean the system<\/h2>\n<ul style=\"text-align: justify\">\n<li>To mitigate infection and remove the malware, install Padvish antivirus, keep its database file up-to-date and perform an antivirus scan.<\/li>\n<li>Dial <strong>*999#<\/strong> on the line associated with the Rubika account. Choose option 2 to disable anonymous sessions, followed by option 1 to confirm.<\/li>\n<li>Enabling two-factor authentication (2FA) and screen lock can significantly improve the security of your Rubika account and prevent unauthorized access to your account.<\/li>\n<\/ul>\n<h3 style=\"text-align: justify\"><strong>How to prevent phone&#8217;s infection:<\/strong><\/h3>\n<ul>\n<li style=\"text-align: justify\">Do not download or install applications from unreliable sources or unofficial mobile markets.<\/li>\n<li style=\"text-align: justify\">Carefully examine the permissions requested by mobile applications during installation.<\/li>\n<li style=\"text-align: justify\">Continuously back up critical files and information stored on your device.<\/li>\n<li style=\"text-align: justify\">Refrain from using unofficial or modified versions of applications.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Overview Type: Trojan Destruction Level : Moderate Prevalence: Moderate Malware Names (Padvish) Trojan.Android.RubikaPhisher.Malek (Avira) ANDROID\/Dropper.FGHB.Gen (ESET) A Variant Of Android\/TrojanDropper.Agent.FNN What is Trojan? A Trojan is a type of malware that masquerades as legitimate software, presenting itself as functional and benign. However, once executed, it performs malicious actions that can cause significant damage to the&hellip;<\/p>\n","protected":false},"author":27,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[47,87],"tags":[86],"class_list":["post-1605","post","type-post","status-publish","format-standard","hentry","category-malware","category-trojan-malware","tag-trojan-android-packed-malek"],"_links":{"self":[{"href":"https:\/\/threats.amnpardaz.com\/en\/wp-json\/wp\/v2\/posts\/1605","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/threats.amnpardaz.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/threats.amnpardaz.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/threats.amnpardaz.com\/en\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/threats.amnpardaz.com\/en\/wp-json\/wp\/v2\/comments?post=1605"}],"version-history":[{"count":5,"href":"https:\/\/threats.amnpardaz.com\/en\/wp-json\/wp\/v2\/posts\/1605\/revisions"}],"predecessor-version":[{"id":1610,"href":"https:\/\/threats.amnpardaz.com\/en\/wp-json\/wp\/v2\/posts\/1605\/revisions\/1610"}],"wp:attachment":[{"href":"https:\/\/threats.amnpardaz.com\/en\/wp-json\/wp\/v2\/media?parent=1605"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/threats.amnpardaz.com\/en\/wp-json\/wp\/v2\/categories?post=1605"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/threats.amnpardaz.com\/en\/wp-json\/wp\/v2\/tags?post=1605"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}