{"id":484562,"date":"2026-06-22T12:31:02","date_gmt":"2026-06-22T12:31:02","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=484562"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=484562","title":{"rendered":"\u0412\u044b\u0440\u0435\u0437\u0430\u0435\u043c 99% \u043c\u0443\u0441\u043e\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e SSA \u0432 Binary Ninja (Flare-On 12)"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u0417\u0430\u043c\u0430\u043d\u043a\u0430<\/h2>\n<p><a href=\"https:\/\/flare-on.com\/files\/Flare-On12_Challenges.zip\" rel=\"noopener noreferrer nofollow\">\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u0438\u044f<\/a><\/p>\n<p>\u041c\u044b \u0438\u0437 \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u043e\u0433\u0440\u043e\u043c\u0435\u043d\u043d\u043e\u0439 (\u044d\u0442\u043e \u043b\u0438\u0448\u044c \u043c\u0430\u043b\u0430\u044f \u0435\u0451 \u0447\u0430\u0441\u0442\u044c) \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0432 \u043d\u0435\u0439 4185 (!) \u0441\u0442\u0440\u043e\u043a \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5ff\/3b2\/082\/5ff3b20823ed5b68893b50aecf34db27.png\" alt=\"\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 main\" title=\"\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 main\" width=\"1230\" height=\"1192\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/5ff\/3b2\/082\/5ff3b20823ed5b68893b50aecf34db27.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5ff\/3b2\/082\/5ff3b20823ed5b68893b50aecf34db27.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 main<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0432\u043e\u0442 \u044d\u0442\u043e<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a04\/be1\/c8a\/a04be1c8a9166278fcd282c4e48146ef.png\" alt=\"\u0414\u0435\u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 main\" title=\"\u0414\u0435\u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 main\" width=\"1072\" height=\"1324\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/a04\/be1\/c8a\/a04be1c8a9166278fcd282c4e48146ef.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a04\/be1\/c8a\/a04be1c8a9166278fcd282c4e48146ef.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0414\u0435\u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 main<\/figcaption><\/div>\n<\/figure>\n<p>\u0410 \u0442\u0443\u0442 \u0432\u0441\u0435\u0433\u043e 35 \u0441\u0442\u0440\u043e\u043a<\/p>\n<h2>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/h2>\n<p> \u041f\u0440\u043e\u0445\u043e\u0434\u044f \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0439 Flare-On 12, \u044f \u043e\u0442\u043a\u0440\u044b\u043b 7 \u0437\u0430\u0434\u0430\u043d\u0438\u0435, \u043d\u0430\u0448\u0435\u043b <code>main<\/code> \u0438 \u0443\u0432\u0438\u0434\u0435\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443: <\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0e8\/fc9\/f95\/0e8fc9f95a48e38c09385a9f8056604b.png\" alt=\"\u0423\u0436\u0430\u0441\u043d\u0430\u044f \u043a\u0443\u0447\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439\" title=\"\u0423\u0436\u0430\u0441\u043d\u0430\u044f \u043a\u0443\u0447\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439\" width=\"1230\" height=\"1192\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/0e8\/fc9\/f95\/0e8fc9f95a48e38c09385a9f8056604b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0e8\/fc9\/f95\/0e8fc9f95a48e38c09385a9f8056604b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0423\u0436\u0430\u0441\u043d\u0430\u044f \u043a\u0443\u0447\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439<\/figcaption><\/div>\n<\/figure>\n<p>\u0418 \u0435\u0449\u0451 \u0442\u044b\u0441\u044f\u0447\u0438 \u0441\u0442\u0440\u043e\u043a \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0431\u0440\u0435\u0434\u0430, \u0430 \u043b\u043e\u0433\u0438\u043a\u0438 \u043d\u0435 \u0432\u0438\u0434\u043d\u043e. \u0422\u0430\u043a \u0447\u0442\u043e \u0432\u0435\u0441\u044c \u044d\u0442\u043e\u0442 \u043c\u0443\u0441\u043e\u0440 \u043d\u0443\u0436\u043d\u043e \u043a\u0430\u043a-\u0442\u043e \u0443\u0431\u0440\u0430\u0442\u044c.<\/p>\n<h2>\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c?<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0433\u0440\u0430\u0444 \u043f\u043e\u0442\u043e\u043a\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0442\u043e \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043e\u043d \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 (\u044f \u0435\u0433\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u0438\u043d\u043d\u044b\u0439, \u0447\u0442\u043e \u0431\u043b\u043e\u043a\u0438 \u0442\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0432\u0438\u0434\u043d\u044b), \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0447\u0430\u0441\u0442\u044c control flow flattening.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0441\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0447\u0435\u0440\u0435\u0437<\/p>\n<pre><code class=\"python\">&gt;&gt;&gt; len(current_function.call_sites)31<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>(\u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e Binary Ninja, \u044d\u0442\u043e\u0442 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0434\u043b\u044f \u043d\u0435\u0433\u043e)<\/p>\n<p>\u0412\u0438\u0434\u0438\u043c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043a\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u0437\u043d\u0430\u0447\u0438\u0442, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043c\u0443\u0441\u043e\u0440\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043d\u0435\u0442. \u0415\u0441\u043b\u0438 \u043f\u043e\u0442\u044b\u043a\u0430\u0442\u044c \u043f\u043e \u044d\u0442\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u0430\u043c, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. \u0412\u043e\u0442 \u0447\u0442\u043e \u044f \u0438\u043c\u0435\u044e \u0432\u0432\u0438\u0434\u0443:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/dd5\/9f4\/692\/dd59f4692031e28467dc677dc959bdf6.png\" alt=\"\u0412\u044b\u0437\u043e\u0432\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0442\u044f\u0436\u0451\u043b\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\" title=\"\u0412\u044b\u0437\u043e\u0432\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0442\u044f\u0436\u0451\u043b\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\" width=\"933\" height=\"298\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/dd5\/9f4\/692\/dd59f4692031e28467dc677dc959bdf6.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/dd5\/9f4\/692\/dd59f4692031e28467dc677dc959bdf6.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0412\u044b\u0437\u043e\u0432\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0442\u044f\u0436\u0451\u043b\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0432\u0435\u0441\u044c \u044d\u0442\u043e\u0442 \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u0438\u0439 \u043f\u043b\u0430\u0441\u0442 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0439 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0412\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0438 \u043d\u0430 \u0447\u0442\u043e \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442, \u043f\u043e\u0447\u0435\u043c\u0443 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0432\u044b\u043a\u0438\u043d\u0443\u043b \u0435\u0433\u043e? <\/p>\n<p>\u0410 \u043e\u0442\u0432\u0435\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u044d\u0442\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e\u0431 \u044d\u0442\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0438\u0441\u0442\u0430\u0442\u044c \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e. \u0412 \u043c\u0443\u0441\u043e\u0440\u043d\u044b\u0445 \u043a\u0443\u0441\u043a\u0430\u0445 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u044d\u0442\u043e:<\/p>\n<pre><code class=\"cpp\">int64_t var1 = data_1001; \/\/ data_1001 \u043d\u0438\u0433\u0434\u0435 \u0432 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u043c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f# \u043a\u0443\u0447\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 var1, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445data_1004 = var1_new; \/\/ data_1004 \u043d\u0438\u0433\u0434\u0435 \u0432 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u043c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0430\u043a \u0447\u0442\u043e \u043f\u043e-\u0441\u0443\u0442\u0438 \u0432\u0441\u0435 \u044d\u0442\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b (\u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435), \u043d\u043e \u0432\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0443\u0436\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u044f \u044d\u0442\u043e\u0442 \u0432\u044b\u0432\u043e\u0434 \u0441\u0434\u0435\u043b\u0430\u043b \u043b\u0438\u0448\u044c \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u043a\u0443\u0441\u043a\u0435 main, \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u0443\u0441\u043a\u0430\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u044d\u0442\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043d\u0443\u0436\u043d\u044b.<\/p>\n<h2>\u041f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0443<\/h2>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432 main, \u0447\u0442\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u043c\u0430\u043b\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 main. \u041e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u0451\u043b \u0432 \u0433\u043e\u043b\u043e\u0432\u0443, \u0442\u0430\u043a \u044d\u0442\u043e \u043a\u0430\u043a-\u0442\u043e \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432 \u0432\u044b\u0437\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043e \u0435\u0451 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f, \u043d\u043e \u043a\u0430\u043a \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c?<\/p>\n<h2>\u041f\u0435\u0440\u0435\u0440\u044b\u0432 \u043d\u0430 \u0442\u0435\u043e\u0440\u0438\u044e<\/h2>\n<p>\u041c\u043e\u0436\u043d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440, \u043d\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0443\u0436\u0430\u0441\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e (\u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e rbp \u0438 \u0442.\u0434.), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 : <\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0430 \u043d\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b <\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 MLIL \u0438\u0437 Binary Ninja \u0432 SSA \u0444\u043e\u0440\u043c\u0435! \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044e \u0447\u0442\u043e \u044d\u0442\u043e<\/p>\n<h3>MLIL<\/h3>\n<p>\u0412 Binary Ninja \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u043b\u0438\u0444\u0442\u0438\u043d\u0433\u0430 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432 \u043f\u0441\u0435\u0432\u0434\u043e \u0421\u0438. \u041e\u0434\u043d\u043e \u0438\u0437 \u043d\u0438\u0445 \u2014 Medium Level Intermediate Language. \u041e\u043d\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0438 \u0441\u0442\u0435\u043a, \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0442\u0430\u043a\u0436\u0435 \u0443 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b. \u041f\u0435\u0440\u0432\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e, \u0447\u0442\u043e \u0441\u043e \u0432\u0442\u043e\u0440\u044b\u043c?<\/p>\n<h3>SSA \u0444\u043e\u0440\u043c\u0430<\/h3>\n<p>\u041d\u0430\u0448\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0443\u0447\u0443 \u0440\u0430\u0437, \u0447\u0442\u043e \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e. \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 SSA \u0444\u043e\u0440\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 Binary Ninja.<\/p>\n<p>\u0421\u0443\u0442\u044c \u044d\u0442\u043e\u0439 \u0444\u043e\u0440\u043c\u044b \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 (\u0442\u043e \u0447\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e) \u0438 \u043b\u044e\u0431\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0439. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044d\u0442\u0430 \u0444\u043e\u0440\u043c\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442:<\/p>\n<p>\u0410 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0435\u0441\u0442\u044c API, \u043a\u0440\u0443\u0442\u044f\u043a!<\/p>\n<pre><code class=\"python\">&gt;&gt;&gt; current_function.mlil.ssa_form.get_ssa_var_definition(example_var)&lt;MediumLevelILSetVarSsa: rcx_2606#6 = &amp;var_218&gt;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0443 Binary Ninja \u0432 SSA \u0444\u043e\u0440\u043c\u0435 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438\u043b\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c \u0441 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442:<\/p>\n<pre><code class=\"cpp\">\/\/ mem#7 \u2014 \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438, mem#6 \u2014 \u0442\u043e, \u0432 \u043a\u0430\u043a\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442rax_5206#6, mem#7 = string::new_autolen(rcx_2606#6, rdx_750#2) @ mem#6<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h2>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0443<\/h2>\n<p>\u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e \u043d\u0430\u0448 \u043f\u043b\u0430\u043d \u043f\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435: \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0432 main \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u043c\u0430\u043b\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 main. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e: <\/p>\n<p>\u041d\u0430\u0439\u0442\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0441\u0435\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445:<\/p>\n<pre><code class=\"python\">&gt;&gt;&gt; len(current_function.mlil.ssa_vars)26980<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430\u0439\u0442\u0438 \u0432\u0441\u0435 \u0432\u044b\u0437\u043e\u0432\u044b:<\/p>\n<pre><code class=\"python\">&gt;&gt;&gt; def is_call(instr):... if isinstance(instr, MediumLevelILCallSsa):... return instr... return None... ... # traverse \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043e\u0431\u0445\u043e\u0434\u0438\u0442 \u0434\u0435\u0440\u0435\u0432\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u041c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0435\u043c\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e-\u0444\u0438\u043b\u044c\u0442\u0440: ... # \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 None, \u0443\u0437\u0435\u043b \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f, \u0430 \u0435\u0441\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442, ... # \u0442\u043e \u043e\u043d \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440.... for call in current_function.mlil.ssa_form.traverse(is_call):... print(call)mem#6 = 0x1402268c0(rcx_1029#1065, 0x140) @ mem#5mem#7 = 0x14002e020(rcx_1030#1066) @ mem#6rax_2057#2268, mem#8 = 0x140081590(rcx_1031#1067) @ mem#7rax_3125#11037, mem#60 = 0x140226560() @ mem#59rax_3126#11038, mem#61 = 0x14022e3d0(rcx_1563#5349) @ mem#60...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430\u0439\u0442\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"python\">&gt;&gt;&gt; current_il_expr&lt;MediumLevelILCallSsa: mem#6 = 0x1402268c0(rcx_1029#1065, 0x140) @ mem#5&gt;&gt;&gt;&gt; current_il_expr.params[&lt;MediumLevelILVarSsa: rcx_1029#1065&gt;, &lt;MediumLevelILConst: 0x140&gt;]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430\u0439\u0442\u0438 \u0432\u0435\u0441\u044c \u043f\u0443\u0442\u044c \u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438) \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043e \u0435\u0451 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"python\">&gt;&gt;&gt; example_var = current_il_expr.dest... ... func = current_function... mlil = func.mlil... ssa = mlil.ssa_form... ... pending: List[SSAVariable] = []... important_vars = set()... ... def add_important(var):... if var in important_vars:... return... important_vars.add(var)... if isinstance(var, SSAVariable):... pending.append(var)... else:... for def_site in func.mlil.get_var_definitions(var):... ssa_def = def_site.ssa_form... if ssa_def is not None:... for used_var in ssa_def.vars_read + ssa_def.vars_written:... add_important(used_var)... for use_site in func.mlil.get_var_uses(var):... ssa_use = use_site.ssa_form... if ssa_use is not None:... for used_var in ssa_use.vars_written:... add_important(used_var)... ... add_important(example_var)... ... while len(pending) &gt; 0:... current_var = pending.pop()... def_instr = ssa.get_ssa_var_definition(current_var)... if def_instr is not None:... for used_var in def_instr.vars_read:... add_important(used_var)... ... print(important_vars){&lt;SSAVariable: rdx_1209 version 1338&gt;, &lt;SSAVariable: rcx_1030 version 1066&gt;, &lt;var void var_168&gt;, &lt;SSAVariable: rcx_2604 version 2134&gt;, &lt;SSAVariable: rdx_1025 version 815&gt;, &lt;SSAVariable: rcx_1031 version 1067&gt;, &lt;SSAVariable: rcx_5181 version 3617&gt;, &lt;SSAVariable: rcx_1029 version 1065&gt;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u0442\u0443\u0442 \u0432\u0430\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0440\u0435\u043c\u0430\u0440\u043a\u0443. \u0425\u043e\u0442\u044c \u043c\u044b \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 SSA-\u0444\u043e\u0440\u043c\u043e\u0439, \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0451 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0435 (\u043d\u0435 SSA) \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435. \u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u0432 \u043a\u043e\u0434\u0435 \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 (<code>ptr = &amp;var<\/code>).<\/p>\n<p>\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u0438\u0434\u0438\u0442 \u0432\u0437\u044f\u0442\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430, \u043e\u043d \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430 \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e \u0438\u0437 \u043b\u044e\u0431\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430. \u041e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0435\u0451 \u0441\u0442\u0440\u043e\u0433\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438, \u043a\u0430\u043a \u0442\u0440\u0435\u0431\u0443\u0435\u0442 SSA, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 Binary Ninja \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442 \u0435\u0451 \u043a\u0430\u043a aliased \u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439.<\/p>\n<p>\u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0439\u0442\u0438 \u043d\u0430\u0437\u0430\u0434 \u043f\u043e \u0433\u0440\u0430\u0444\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a \u0442\u0430\u043a\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e \u043a\u043e\u043d\u0441\u0435\u0440\u0432\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434: \u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0451 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f, \u043d\u043e \u0438 \u0432\u0441\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0447\u0438\u0442\u0430\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u0430\u043a\u0438\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439.<\/p>\n<h3>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u043f\u0440\u044f\u043c\u043e \u0438\u0437 VSCode \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d Binja-RPyC, \u0442\u0430\u043a \u0438\u0445 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u043f\u0438\u0441\u0430\u0442\u044c.<\/p>\n<pre><code class=\"python\">func: Function = bv.get_function_at(0x14020ba00) # mainssa: MediumLevelILFunction = func.mlil.ssa_formdef add_important(var):if var in important_vars:returnimportant_vars.add(var)if isinstance(var, SSAVariable):pending.append(var)else:for def_site in func.mlil.get_var_definitions(var):ssa_def = def_site.ssa_formif ssa_def is not None:for used_var in ssa_def.vars_read + ssa_def.vars_written:add_important(used_var)for use_site in func.mlil.get_var_uses(var):ssa_use = use_site.ssa_formif ssa_use is not None:for used_var in ssa_use.vars_written:add_important(used_var)pending: List[SSAVariable] = []important_vars = set()for call_site in func.call_sites:for mlil in call_site.mlils:for call in mlil.ssa_form.traverse(lambda b: b if isinstance(b, MediumLevelILCallSsa) else None):call: MediumLevelILCallSsa = callif \".synthetic_builtins\" == bv.get_sections_at(call.dest.value.value)[0].name:continuefor var in call.vars_read + call.vars_written:add_important(var)while len(pending) &gt; 0:current_var = pending.pop()def_instr = ssa.get_ssa_var_definition(current_var)if def_instr is not None:for used_var in def_instr.vars_read:add_important(used_var)print(len(important_vars) \/ len(ssa.ssa_vars))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0443\u0442 \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0430\u0436\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 (\u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439) \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0438\u0445 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043a \u043e\u0431\u0449\u0435\u043c\u0443 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 SSA \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u041c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c 1 \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0438\u043d\u0430\u0447\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u043e \u043c\u0435\u043d\u044c\u0448\u0435 1. \u0410 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0430\u0436 0.002446256486286138 (\u044d\u0442\u043e 0.24%), \u0442\u043e \u0435\u0441\u0442\u044c 99.76% \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 (\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043a\u043e\u0434\u0430) \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0438 \u043c\u044b \u044d\u0442\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u043b\u0438!<\/p>\n<h2>\u041f\u0438\u0448\u0435\u043c \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0442\u043e\u0440<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0438\u043c\u0435\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0442\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u044d\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435.<\/p>\n<h3>\u041a\u0430\u043a \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e<\/h3>\n<p>Binary Ninja \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b Workflow \u043c\u0435\u043d\u044f\u0442\u044c \u043b\u044e\u0431\u043e\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 (\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043a\u0440\u043e\u043c\u0435 HLIL).<\/p>\n<h3>\u041a\u0430\u043a \u043d\u0430\u0439\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435<\/h3>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u0435 \u0430\u043f\u0438. \u041c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438 \u0431\u0435\u0437 \u0442\u0430\u043d\u0446\u0435\u0432 \u0441 \u0431\u0443\u0431\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0445 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c<\/p>\n<pre><code class=\"python\">&gt;&gt;&gt; current_il_expr.vars_read[&lt;SSAVariable: rcx_2607 version 2137&gt;, &lt;SSAVariable: rdx_751 version 685&gt;]&gt;&gt;&gt; current_il_expr.vars_written[&lt;SSAVariable: rax_5207 version 4557&gt;]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h3>\u041a\u0430\u043a \u043f\u0438\u0441\u0430\u0442\u044c Workflow<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b Binary Ninja \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u044d\u0442\u0430\u043f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 <\/p>\n<pre><code class=\"python\">import binaryninja as bnimport importlibimport jsondef _trampoline(analysis_context):    import deobfuscator_logic    importlib.reload(deobfuscator_logic)    deobfuscator_logic.run(analysis_context)configuration = json.dumps({    \"name\": \"extension.deobfuscator.slicing\",    \"title\": \"Deobfuscator DCE Slicing\",    \"description\": \"Dead code elimination via backward slicing on MLIL SSA\",    \"eligibility\": {        \"auto\": {            \"default\": True        }    }})wf = bn.Workflow(\"core.function.metaAnalysis\").clone(\"extension.deobf\")wf.register_activity(bn.Activity(configuration, action=_trampoline))wf.insert(\"core.function.generateHighLevelIL\", [    \"extension.deobfuscator.slicing\"])wf.register()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043a\u0443\u0447\u0430 \u0431\u043e\u0439\u043b\u0435\u0440\u043f\u043b\u0435\u0439\u0442\u0430. \u0414\u0443\u043c\u0430\u044e \u0441\u0442\u043e\u0438\u0442 \u0437\u0434\u0435\u0441\u044c \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c 2 \u0432\u0435\u0449\u0438:<\/p>\n<ol>\n<li>\n<p>\u0412 wf.insert \u043d\u0430\u043f\u0438\u0441\u0430\u043d core.function.generateHighLevelIL \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0448 \u043f\u0440\u043e\u0445\u043e\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0441\u044f \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c HLIL (\u043f\u043e \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>wf.insert_after(\u201ccore.function.generateMediumLevelIL\u201d<\/code>, \u043d\u043e \u0438 \u0442\u0430\u043a \u043e\u043a\u0435\u0439). \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043d\u0430\u0448 \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u043e\u0447\u0438\u0441\u0442\u0438\u0442 MLIL \u043f\u0440\u044f\u043c\u043e \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0430\u0447\u043d\u0451\u0442 \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u0437 \u043d\u0435\u0433\u043e \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0421\u0438-\u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434 <\/p>\n<\/li>\n<li>\n<p>Workflow \u0432 Binary Ninja \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0435\u0441\u043b\u0438 \u0431\u044b \u044f \u043f\u0438\u0441\u0430\u043b \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043e\u0434 \u043f\u0440\u044f\u043c\u043e \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438-\u043a\u043e\u043b\u0431\u044d\u043a\u0435, \u043c\u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0430 \u044d\u0442\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e. <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u0440\u044e\u043a \u0441 importlib.reload, \u044f \u0432\u044b\u043d\u0435\u0441 \u0432\u0441\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b deobfuscator_logic.py. \u0422\u0435\u043f\u0435\u0440\u044c \u044f \u043c\u043e\u0433\u0443 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0442\u043e\u0440\u0430, \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c \u0432 Binary Ninja \u043a\u043d\u043e\u043f\u043a\u0443 Reanalyze, \u0438 \u043e\u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 \u043c\u043e\u0439 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u0434. \u042d\u0442\u043e \u043c\u043d\u0435 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b\u043e \u043a\u0443\u0447\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<\/li>\n<\/ol>\n<h3>\u041f\u0438\u0448\u0435\u043c deobfuscator_logic.py<\/h3>\n<p>\u041f\u043e\u0432\u0442\u043e\u0440\u044e \u043d\u0430\u0448 \u043f\u043b\u0430\u043d: \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0442\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435.<\/p>\n<pre><code class=\"python\">import binaryninja as bnfrom binaryninja import *import timedef get_important_vars(bv: BinaryView, func: Function) -&gt; Set[SSAVariable]:    ssa: MediumLevelILFunction = func.mlil.ssa_form    pending: List[SSAVariable] = []    important_vars: Set[SSAVariable] = set()    def add_important(var):        if var in important_vars:            return                if isinstance(var, SSAVariable):            important_vars.add(var)            pending.append(var)        else:            for def_site in func.mlil.get_var_definitions(var):                ssa_def = def_site.ssa_form                if ssa_def is not None:                    for used_var in ssa_def.vars_read + ssa_def.vars_written:                        add_important(used_var)            for use_site in func.mlil.get_var_uses(var):                ssa_use = use_site.ssa_form                if ssa_use is not None:                    for used_var in ssa_use.vars_written:                        add_important(used_var)    for param_var in func.parameter_vars:        add_important(param_var)    for call_site in func.call_sites:        for mlil in call_site.mlils:            for call in mlil.ssa_form.traverse(                lambda b: b if isinstance(b, MediumLevelILCallSsa) else None            ):                try:                    if \".synthetic_builtins\" == bv.get_sections_at(call.dest.value.value)[0].name:                        continue                except IndexError as e:                    pass                for var in call.vars_read + call.vars_written:                    add_important(var)    while len(pending) &gt; 0:        current_var = pending.pop()        def_instr = ssa.get_ssa_var_definition(current_var)        if def_instr is not None:            for used_var in def_instr.vars_read:                add_important(used_var)    return important_varsdef run(context: bn.AnalysisContext):    func: Function = context.function    # \u041d\u0430\u0448 \u043f\u0440\u043e\u0445\u043e\u0434 \u0441\u044a\u0435\u0434\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0430 \u0430\u043d\u0430\u043b\u0438\u0437 \u043d\u0430 \u043f\u0438\u0442\u043e\u043d\u0435 \u043e\u0434\u043d\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u0439, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c    do_deobf = False    for block in func.basic_blocks:        if len(block) &gt; 1000:            do_deobf = True            break    if not do_deobf:        return        mlil = context.mlil    ssa: MediumLevelILFunction = mlil.ssa_form    good_vars = get_important_vars(context.view, func)    # \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f    bad_expr = set()    for instr in ssa.instructions:        written = instr.vars_written + instr.vars_read        if (written and (all(v not in good_vars for v in written) and not isinstance(instr, MediumLevelILIf))):            non_ssa = instr.non_ssa_form            if non_ssa is not None:                bad_expr.add(non_ssa.expr_index)    # \u0421\u0442\u0438\u0440\u0430\u0435\u043c \u044d\u0442\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f    for expr in bad_expr:        mlil.replace_expr(expr, mlil.nop())    # \u041e\u0411\u042f\u0417\u0410\u0422\u0415\u041b\u042c\u041d\u041e, \u0418\u041d\u0410\u0427\u0415 \u0414\u0415\u041a\u041e\u041c\u041f\u0418\u041b\u042f\u0426\u0418\u042f \u041d\u0415 \u0418\u0417\u041c\u0415\u041d\u0418\u0422\u0421\u042f     mlil.finalize()    mlil.generate_ssa_form()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>get_important_vars<\/code> \u2014 \u043f\u043e-\u0441\u0443\u0442\u0438 \u043a\u043e\u043f\u0438\u044f \u043a\u043e\u0434\u0430 \u0438\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u2014 \u044d\u0442\u043e <code>run<\/code>.<\/p>\n<h2>\u0421\u0442\u0430\u0432\u0438\u043c \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0442\u043e\u0440<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c 2 \u0444\u0430\u0439\u043b\u0430 \u2014 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a (\u0442\u043e\u0442, \u0447\u0442\u043e \u0441 <code>_trampoline<\/code>) \u0438 \u0441\u0430\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 (<code>deobfuscator_logic.py<\/code>), \u043a\u0438\u0434\u0430\u0435\u043c \u0438\u0445 \u0432 \u043f\u0430\u043f\u043a\u0443 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bf0\/a6a\/a77\/bf0a6aa77ee55e37bd506f3c46703687.png\" alt=\"\u041a\u0430\u043a \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0430\u043f\u043a\u0443 \u0441 \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438\" title=\"\u041a\u0430\u043a \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0430\u043f\u043a\u0443 \u0441 \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438\" width=\"646\" height=\"978\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/bf0\/a6a\/a77\/bf0a6aa77ee55e37bd506f3c46703687.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bf0\/a6a\/a77\/bf0a6aa77ee55e37bd506f3c46703687.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041a\u0430\u043a \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0430\u043f\u043a\u0443 \u0441 \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u0438\u0434\u0430\u0435\u043c \u0442\u0443\u0434\u0430 2 \u043d\u0430\u0448\u0438\u0445 \u0444\u0430\u0439\u043b\u0430 \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c Binary Ninja.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0444\u0430\u0439\u043b \u0438 \u043b\u0435\u0437\u0435\u043c \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 (CTRL + ,), \u0438\u0449\u0435\u043c <code>function workflow<\/code> \u0438 \u0441\u0442\u0430\u0432\u0438\u043c <code>extension.deobf<\/code> \u0432\u043c\u0435\u0441\u0442\u043e <code>core.function.metaAnalysis<\/code><\/p>\n<p>\u0418 \u0432\u0441\u0451, \u0443 \u043d\u0430\u0441 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442!<\/p>\n<p>&#8230; \u043d\u043e \u0432\u0441\u0451 \u043b\u0438?<\/p>\n<p>\u0412 main \u0432\u0441\u0451 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/75e\/b1c\/ae9\/75eb1cae9fa4c32f065207a7269d7de1.png\" alt=\"\u0414\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f main\" title=\"\u0414\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f main\" width=\"1072\" height=\"1324\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/75e\/b1c\/ae9\/75eb1cae9fa4c32f065207a7269d7de1.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/75e\/b1c\/ae9\/75eb1cae9fa4c32f065207a7269d7de1.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0414\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f main<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u0439\u0434\u0451\u043c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>140081590<\/code>, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c \u044d\u0442\u043e<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/16a\/a30\/073\/16aa300732ddab6b0c91d14edd69119d.png\" alt=\"\u041c\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435\" title=\"\u041c\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435\" width=\"660\" height=\"172\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/16a\/a30\/073\/16aa300732ddab6b0c91d14edd69119d.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/16a\/a30\/073\/16aa300732ddab6b0c91d14edd69119d.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041c\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435<\/figcaption><\/div>\n<\/figure>\n<p>\u0423 \u043d\u0430\u0441 \u043d\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445!<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434. \u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439. \u0415\u0441\u043b\u0438 \u044d\u0442\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043a\u0430\u043a-\u0442\u043e \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u0443\u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u043d\u0430\u043c \u00ab\u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439\u00bb \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u0442\u043e \u043c\u044b \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u043c \u0432\u0435\u0441\u044c \u044d\u0442\u043e\u0442 \u043f\u0443\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u043a\u0430\u043a \u0432\u0430\u0436\u043d\u044b\u0439, \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0435\u0433\u043e \u043d\u0435 \u0443\u0434\u0430\u043b\u0438\u043b. \u041a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0430: <\/p>\n<pre><code class=\"python\">def backprop_conds(bv: BinaryView,func: Function,good_vars: Set[SSAVariable],) -&gt; Set[SSAVariable]:ssa: MediumLevelILFunction = func.mlil.ssa_formpending: List[SSAVariable] = []important_vars: Set[SSAVariable] = set()# cache: var -&gt; reaches_good?reaches_cache = {}def add_important(var):if var in important_vars:returnif isinstance(var, SSAVariable):important_vars.add(var)pending.append(var)else:# \u043e\u0431\u044b\u0447\u043d\u0430\u044f Variable \/ aliased varfor def_site in func.mlil.get_var_definitions(var):ssa_def = def_site.ssa_formif ssa_def is not None:for used_var in ssa_def.vars_read + ssa_def.vars_written:add_important(used_var)def reaches_good(var, seen=None) -&gt; bool:\"\"\"\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442: \u0435\u0441\u043b\u0438 \u0438\u0434\u0442\u0438 \u043d\u0430\u0437\u0430\u0434 \u043e\u0442 var \u043f\u043e def-use \u0446\u0435\u043f\u043e\u0447\u043a\u0435,\u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0434\u043e\u0439\u0442\u0438 \u0434\u043e \u0443\u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 good_vars \u0438\u043b\u0438 newly-important vars.\"\"\"if seen is None:seen = set()if var in seen:return Falseseen.add(var)if var in reaches_cache:return reaches_cache[var]# \u0423\u0436\u0435 \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0441\u043b\u0430\u0439\u0441\u0438\u043d\u0433\u0430if var in good_vars:reaches_cache[var] = Truereturn True# \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043a\u0430\u043a \u0432\u0430\u0436\u043d\u0443\u044e \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e IFif var in important_vars:reaches_cache[var] = Truereturn Trueif isinstance(var, SSAVariable):def_instr = ssa.get_ssa_var_definition(var)if def_instr is None:reaches_cache[var] = Falsereturn False# \u0415\u0441\u043b\u0438 \u043b\u044e\u0431\u0430\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0432\u0435\u0434\u0451\u0442 \u043a good \u2014 var \u0442\u043e\u0436\u0435 good-dependentfor parent in def_instr.vars_read:if reaches_good(parent, seen):reaches_cache[var] = Truereturn Truereaches_cache[var] = Falsereturn Falseelse:# \u041e\u0431\u044b\u0447\u043d\u0430\u044f Variable: \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u0435\u0451 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u043cfor def_site in func.mlil.get_var_definitions(var):ssa_def = def_site.ssa_formif ssa_def is None:continuefor parent in ssa_def.vars_read + ssa_def.vars_written:if reaches_good(parent, seen):reaches_cache[var] = Truereturn Truereaches_cache[var] = Falsereturn Falsedef drain_pending():\"\"\"\u041e\u0431\u044b\u0447\u043d\u044b\u0439 backward slicing \u043e\u0442 \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 important_vars.\"\"\"while pending:current_var = pending.pop()def_instr = ssa.get_ssa_var_definition(current_var)if def_instr is not None:for used_var in def_instr.vars_read:add_important(used_var)changed = Truewhile changed:changed = Falsefor block in ssa:for instr in block:if instr.operation != MediumLevelILOperation.MLIL_IF:continuecond_vars = list(instr.vars_read)if not cond_vars:continue# \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043d\u0430\u0437\u0430\u0434 \u0434\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043e good_vars,# \u0441\u0447\u0438\u0442\u0430\u0435\u043c IF \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432\u0441\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0443\u0441\u043b\u043e\u0432\u0438\u044f.if any(reaches_good(v) for v in cond_vars):before = len(important_vars)for v in cond_vars:add_important(v)drain_pending()if len(important_vars) != before:changed = Truereaches_cache.clear()return important_vars<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 run:<\/p>\n<pre><code class=\"python\">good_vars = get_important_vars(context.view, func)ifs = backprop_conds(context.view, func, good_vars)good_vars.update(ifs)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u0441\u0451, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442!<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/af9\/818\/855\/af9818855809ef702ef09209f0fe687a.png\" alt=\"\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0442\u043e\u0440\" title=\"\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0442\u043e\u0440\" width=\"1282\" height=\"1117\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/af9\/818\/855\/af9818855809ef702ef09209f0fe687a.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/af9\/818\/855\/af9818855809ef702ef09209f0fe687a.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0442\u043e\u0440<\/figcaption><\/div>\n<\/figure>\n<h2>\u0418\u0442\u043e\u0433\u0438 <\/h2>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0432 SSA-\u0444\u043e\u0440\u043c\u0443 \u0438 \u043a\u0440\u0443\u0442\u043e\u0435 API Binary Ninja, \u043c\u044b \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 &gt;4000 \u043c\u0443\u0441\u043e\u0440\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u0434\u043e 35 \u0441\u0442\u0440\u043e\u043a \u0447\u0438\u0441\u0442\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438. \u0414\u0430\u043b\u044c\u0448\u0435 \u0440\u0435\u0432\u0435\u0440\u0441\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0442\u0430\u0441\u043a \u0441\u0442\u0430\u043b\u043e \u0434\u0435\u043b\u043e\u043c \u0442\u0435\u0445\u043d\u0438\u043a\u0438.<\/p>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u044f \u0432\u044b\u043b\u043e\u0436\u0438\u043b \u043d\u0430 <a href=\"https:\/\/gist.github.com\/farvend\/00b16ea789ae07bd779c488fe6a0f07f\" rel=\"noopener noreferrer nofollow\">Gist<\/a>.<\/p>\n<p>\u041f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u0442\u0435\u043b\u0435\u0433\u0443. \u0422\u0443\u0434\u0430 \u043a\u0438\u0434\u0430\u044e \u043c\u0438\u043d\u0438\u0448\u0442\u0443\u043a\u0438, \u0432\u0441\u044f\u043a\u0438\u0435 \u0441\u0432\u043e\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b: <a href=\"https:\/\/t.me\/vector35_fan_club\" rel=\"noopener noreferrer nofollow\">https:\/\/t.me\/vector35_fan_club<\/a><\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1050502\/\">https:\/\/habr.com\/ru\/articles\/1050502\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0417\u0430\u043c\u0430\u043d\u043a\u0430\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u0438\u044f\u041c\u044b \u0438\u0437 \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u043e\u0433\u0440\u043e\u043c\u0435\u043d\u043d\u043e\u0439 (\u044d\u0442\u043e \u043b\u0438\u0448\u044c \u043c\u0430\u043b\u0430\u044f \u0435\u0451 \u0447\u0430\u0441\u0442\u044c) \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0432 \u043d\u0435\u0439 4185 (!) \u0441\u0442\u0440\u043e\u043a \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 main\u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0432\u043e\u0442 \u044d\u0442\u043e\u0414\u0435\u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 main\u0410 \u0442\u0443\u0442 \u0432\u0441\u0435\u0433\u043e 35 \u0441\u0442\u0440\u043e\u043a\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u041f\u0440\u043e\u0445\u043e\u0434\u044f \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0439 Flare-On 12, \u044f \u043e\u0442\u043a\u0440\u044b\u043b 7 \u0437\u0430\u0434\u0430\u043d\u0438\u0435, \u043d\u0430\u0448\u0435\u043b main \u0438 \u0443\u0432\u0438\u0434\u0435\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443: \u0423\u0436\u0430\u0441\u043d\u0430\u044f \u043a\u0443\u0447\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439\u0418 \u0435\u0449\u0451 \u0442\u044b\u0441\u044f\u0447\u0438 \u0441\u0442\u0440\u043e\u043a \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0431\u0440\u0435\u0434\u0430, \u0430 \u043b\u043e\u0433\u0438\u043a\u0438 \u043d\u0435 \u0432\u0438\u0434\u043d\u043e. \u0422\u0430\u043a \u0447\u0442\u043e \u0432\u0435\u0441\u044c \u044d\u0442\u043e\u0442 \u043c\u0443\u0441\u043e\u0440 \u043d\u0443\u0436\u043d\u043e \u043a\u0430\u043a-\u0442\u043e \u0443\u0431\u0440\u0430\u0442\u044c.\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c?\u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0433\u0440\u0430\u0444 \u043f\u043e\u0442\u043e\u043a\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0442\u043e \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043e\u043d \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 (\u044f \u0435\u0433\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u0438\u043d\u043d\u044b\u0439, \u0447\u0442\u043e \u0431\u043b\u043e\u043a\u0438 \u0442\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0432\u0438\u0434\u043d\u044b), \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0447\u0430\u0441\u0442\u044c control flow flattening.\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0441\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0447\u0435\u0440\u0435\u0437&gt;&gt;&gt; len(current_function.call_sites)31(\u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e Binary Ninja, \u044d\u0442\u043e\u0442 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0434\u043b\u044f \u043d\u0435\u0433\u043e)\u0412\u0438\u0434\u0438\u043c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043a\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u0437\u043d\u0430\u0447\u0438\u0442, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043c\u0443\u0441\u043e\u0440\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043d\u0435\u0442. \u0415\u0441\u043b\u0438 \u043f\u043e\u0442\u044b\u043a\u0430\u0442\u044c \u043f\u043e \u044d\u0442\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u0430\u043c, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. \u0412\u043e\u0442 \u0447\u0442\u043e \u044f \u0438\u043c\u0435\u044e \u0432\u0432\u0438\u0434\u0443:\u0412\u044b\u0437\u043e\u0432\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0442\u044f\u0436\u0451\u043b\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0432\u0435\u0441\u044c \u044d\u0442\u043e\u0442 \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u0438\u0439 \u043f\u043b\u0430\u0441\u0442 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0439 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0412\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0438 \u043d\u0430 \u0447\u0442\u043e \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442, \u043f\u043e\u0447\u0435\u043c\u0443 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0432\u044b\u043a\u0438\u043d\u0443\u043b \u0435\u0433\u043e? \u0410 \u043e\u0442\u0432\u0435\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u044d\u0442\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e\u0431 \u044d\u0442\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0438\u0441\u0442\u0430\u0442\u044c \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e. \u0412 \u043c\u0443\u0441\u043e\u0440\u043d\u044b\u0445 \u043a\u0443\u0441\u043a\u0430\u0445 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u044d\u0442\u043e:int64_t var1 = data_1001; \/\/ data_1001 \u043d\u0438\u0433\u0434\u0435 \u0432 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u043c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f# \u043a\u0443\u0447\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 var1, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445data_1004 = var1_new; \/\/ data_1004 \u043d\u0438\u0433\u0434\u0435 \u0432 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u043c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f\u0422\u0430\u043a \u0447\u0442\u043e \u043f\u043e-\u0441\u0443\u0442\u0438 \u0432\u0441\u0435 \u044d\u0442\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b (\u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435), \u043d\u043e \u0432\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0443\u0436\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430\u041e\u0434\u043d\u0430\u043a\u043e \u044f \u044d\u0442\u043e\u0442 \u0432\u044b\u0432\u043e\u0434 \u0441\u0434\u0435\u043b\u0430\u043b \u043b\u0438\u0448\u044c \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u043a\u0443\u0441\u043a\u0435 main, \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u0443\u0441\u043a\u0430\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u044d\u0442\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043d\u0443\u0436\u043d\u044b.\u041f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0443\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432 main, \u0447\u0442\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u043c\u0430\u043b\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 main. \u041e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u0451\u043b \u0432 \u0433\u043e\u043b\u043e\u0432\u0443, \u0442\u0430\u043a \u044d\u0442\u043e \u043a\u0430\u043a-\u0442\u043e \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432 \u0432\u044b\u0437\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043e \u0435\u0451 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f, \u043d\u043e \u043a\u0430\u043a \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c?\u041f\u0435\u0440\u0435\u0440\u044b\u0432 \u043d\u0430 \u0442\u0435\u043e\u0440\u0438\u044e\u041c\u043e\u0436\u043d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440, \u043d\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0443\u0436\u0430\u0441\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e (\u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e rbp \u0438 \u0442.\u0434.), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 : \u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0430 \u043d\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 MLIL \u0438\u0437 Binary Ninja \u0432 SSA \u0444\u043e\u0440\u043c\u0435! \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044e \u0447\u0442\u043e \u044d\u0442\u043eMLIL\u0412 Binary Ninja \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u043b\u0438\u0444\u0442\u0438\u043d\u0433\u0430 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432 \u043f\u0441\u0435\u0432\u0434\u043e \u0421\u0438. \u041e\u0434\u043d\u043e \u0438\u0437 \u043d\u0438\u0445 \u2014 Medium Level Intermediate Language. \u041e\u043d\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0438 \u0441\u0442\u0435\u043a, \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0442\u0430\u043a\u0436\u0435 \u0443 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b. \u041f\u0435\u0440\u0432\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e, \u0447\u0442\u043e \u0441\u043e \u0432\u0442\u043e\u0440\u044b\u043c?SSA \u0444\u043e\u0440\u043c\u0430\u041d\u0430\u0448\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0443\u0447\u0443 \u0440\u0430\u0437, \u0447\u0442\u043e \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e. \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 SSA \u0444\u043e\u0440\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 Binary Ninja.\u0421\u0443\u0442\u044c \u044d\u0442\u043e\u0439 \u0444\u043e\u0440\u043c\u044b \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 (\u0442\u043e \u0447\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e) \u0438 \u043b\u044e\u0431\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0439. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044d\u0442\u0430 \u0444\u043e\u0440\u043c\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442:\u0410 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0435\u0441\u0442\u044c API, \u043a\u0440\u0443\u0442\u044f\u043a!&gt;&gt;&gt; current_function.mlil.ssa_form.get_ssa_var_definition(example_var)&lt;MediumLevelILSetVarSsa: rcx_2606#6 = &amp;var_218&gt;\u0422\u0430\u043a\u0436\u0435 \u0443 Binary Ninja \u0432 SSA \u0444\u043e\u0440\u043c\u0435 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438\u043b\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c \u0441 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442:\/\/ mem#7 \u2014 \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438, mem#6 \u2014 \u0442\u043e, \u0432 \u043a\u0430\u043a\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442rax_5206#6, mem#7 = string::new_autolen(rcx_2606#6, rdx_750#2) @ mem#6\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0443\u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e \u043d\u0430\u0448 \u043f\u043b\u0430\u043d \u043f\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435: \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0432 main \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u043c\u0430\u043b\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 main. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e: \u041d\u0430\u0439\u0442\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0441\u0435\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445:&gt;&gt;&gt; len(current_function.mlil.ssa_vars)26980\u041d\u0430\u0439\u0442\u0438 \u0432\u0441\u0435 \u0432\u044b\u0437\u043e\u0432\u044b:&gt;&gt;&gt; def is_call(instr):&#8230; if isinstance(instr, MediumLevelILCallSsa):&#8230; return instr&#8230; return None&#8230; &#8230; # traverse \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043e\u0431\u0445\u043e\u0434\u0438\u0442 \u0434\u0435\u0440\u0435\u0432\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u041c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0435\u043c\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e-\u0444\u0438\u043b\u044c\u0442\u0440: &#8230; # \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 None, \u0443\u0437\u0435\u043b \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f, \u0430 \u0435\u0441\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442, &#8230; # \u0442\u043e \u043e\u043d \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440&#8230;. for call in current_function.mlil.ssa_form.traverse(is_call):&#8230; print(call)mem#6 = 0x1402268c0(rcx_1029#1065, 0x140) @ mem#5mem#7 = 0x14002e020(rcx_1030#1066) @ mem#6rax_2057#2268, mem#8 = 0x140081590(rcx_1031#1067) @ mem#7rax_3125#11037, mem#60 = 0x140226560() @ mem#59rax_3126#11038, mem#61 = 0x14022e3d0(rcx_1563#5349) @ mem#60&#8230;\u041d\u0430\u0439\u0442\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438:&gt;&gt;&gt; current_il_expr&lt;MediumLevelILCallSsa: mem#6 = 0x1402268c0(rcx_1029#1065, 0x140) @ mem#5&gt;&gt;&gt;&gt; current_il_expr.params[&lt;MediumLevelILVarSsa: rcx_1029#1065&gt;, &lt;MediumLevelILConst: 0x140&gt;]\u041d\u0430\u0439\u0442\u0438 \u0432\u0435\u0441\u044c \u043f\u0443\u0442\u044c \u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438) \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043e \u0435\u0451 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f:&gt;&gt;&gt; example_var = current_il_expr.dest&#8230; &#8230; func = current_function&#8230; mlil = func.mlil&#8230; ssa = mlil.ssa_form&#8230; &#8230; pending: List[SSAVariable] = []&#8230; important_vars = set()&#8230; &#8230; def add_important(var):&#8230; if var in important_vars:&#8230; return&#8230; important_vars.add(var)&#8230; if isinstance(var, SSAVariable):&#8230; pending.append(var)&#8230; else:&#8230; for def_site in func.mlil.get_var_definitions(var):&#8230; ssa_def = def_site.ssa_form&#8230; if ssa_def is not None:&#8230; for used_var in ssa_def.vars_read + ssa_def.vars_written:&#8230; add_important(used_var)&#8230; for use_site in func.mlil.get_var_uses(var):&#8230; ssa_use = use_site.ssa_form&#8230; if ssa_use is not None:&#8230; for used_var in ssa_use.vars_written:&#8230; add_important(used_var)&#8230; &#8230; add_important(example_var)&#8230; &#8230; while len(pending) &gt; 0:&#8230; current_var = pending.pop()&#8230; def_instr = ssa.get_ssa_var_definition(current_var)&#8230; if def_instr is not None:&#8230; for used_var in def_instr.vars_read:&#8230; add_important(used_var)&#8230; &#8230; print(important_vars){&lt;SSAVariable: rdx_1209 version 1338&gt;, &lt;SSAVariable: rcx_1030 version 1066&gt;, &lt;var void var_168&gt;, &lt;SSAVariable: rcx_2604 version 2134&gt;, &lt;SSAVariable: rdx_1025 version 815&gt;, &lt;SSAVariable: rcx_1031 version 1067&gt;, &lt;SSAVariable: rcx_5181 version 3617&gt;, &lt;SSAVariable: rcx_1029 version 1065&gt;}\u041a\u0441\u0442\u0430\u0442\u0438, \u0442\u0443\u0442 \u0432\u0430\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0440\u0435\u043c\u0430\u0440\u043a\u0443. \u0425\u043e\u0442\u044c \u043c\u044b \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 SSA-\u0444\u043e\u0440\u043c\u043e\u0439, \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0451 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0435 (\u043d\u0435 SSA) \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435. \u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u0432 \u043a\u043e\u0434\u0435 \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 (ptr = &amp;var).\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u0438\u0434\u0438\u0442 \u0432\u0437\u044f\u0442\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430, \u043e\u043d \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430 \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e \u0438\u0437 \u043b\u044e\u0431\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430. \u041e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0435\u0451 \u0441\u0442\u0440\u043e\u0433\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438, \u043a\u0430\u043a \u0442\u0440\u0435\u0431\u0443\u0435\u0442 SSA, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 Binary Ninja \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442 \u0435\u0451 \u043a\u0430\u043a aliased \u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439.\u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0439\u0442\u0438 \u043d\u0430\u0437\u0430\u0434 \u043f\u043e \u0433\u0440\u0430\u0444\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a \u0442\u0430\u043a\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e \u043a\u043e\u043d\u0441\u0435\u0440\u0432\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434: \u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0451 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f, \u043d\u043e \u0438 \u0432\u0441\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0447\u0438\u0442\u0430\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u0430\u043a\u0438\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439.\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b\u0427\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u043f\u0440\u044f\u043c\u043e \u0438\u0437 VSCode \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d Binja-RPyC, \u0442\u0430\u043a \u0438\u0445 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u043f\u0438\u0441\u0430\u0442\u044c.func: Function = bv.get_function_at(0x14020ba00) # mainssa: MediumLevelILFunction = func.mlil.ssa_formdef add_important(var):if var in important_vars:returnimportant_vars.add(var)if isinstance(var, SSAVariable):pending.append(var)else:for def_site in func.mlil.get_var_definitions(var):ssa_def = def_site.ssa_formif ssa_def is not None:for used_var in ssa_def.vars_read + ssa_def.vars_written:add_important(used_var)for use_site in func.mlil.get_var_uses(var):ssa_use = use_site.ssa_formif ssa_use is not None:for used_var in ssa_use.vars_written:add_important(used_var)pending: List[SSAVariable] = []important_vars = set()for call_site in func.call_sites:for mlil in call_site.mlils:for call in mlil.ssa_form.traverse(lambda b: b if isinstance(b, MediumLevelILCallSsa) else None):call: MediumLevelILCallSsa = callif &#171;.synthetic_builtins&#187; == bv.get_sections_at(call.dest.value.value)[0].name:continuefor var in call.vars_read + call.vars_written:add_important(var)while len(pending) &gt; 0:current_var = pending.pop()def_instr = ssa.get_ssa_var_definition(current_var)if def_instr is not None:for used_var in def_instr.vars_read:add_important(used_var)print(len(important_vars) \/ len(ssa.ssa_vars))\u0422\u0443\u0442 \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0430\u0436\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 (\u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439) \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0438\u0445 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043a \u043e\u0431\u0449\u0435\u043c\u0443 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 SSA \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u041c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c 1 \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0438\u043d\u0430\u0447\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u043e \u043c\u0435\u043d\u044c\u0448\u0435 1. \u0410 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0430\u0436 0.002446256486286138 (\u044d\u0442\u043e 0.24%), \u0442\u043e \u0435\u0441\u0442\u044c 99.76% \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 (\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043a\u043e\u0434\u0430) \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0438 \u043c\u044b \u044d\u0442\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u043b\u0438!\u041f\u0438\u0448\u0435\u043c \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0442\u043e\u0440\u0422\u0435\u043f\u0435\u0440\u044c \u0438\u043c\u0435\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0442\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u044d\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435.\u041a\u0430\u043a \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044eBinary Ninja \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b Workflow \u043c\u0435\u043d\u044f\u0442\u044c \u043b\u044e\u0431\u043e\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 (\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043a\u0440\u043e\u043c\u0435 HLIL).\u041a\u0430\u043a \u043d\u0430\u0439\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u0435 \u0430\u043f\u0438. \u041c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438 \u0431\u0435\u0437 \u0442\u0430\u043d\u0446\u0435\u0432 \u0441 \u0431\u0443\u0431\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0445 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c&gt;&gt;&gt; current_il_expr.vars_read[&lt;SSAVariable: rcx_2607 version 2137&gt;, &lt;SSAVariable: rdx_751 version 685&gt;]&gt;&gt;&gt; current_il_expr.vars_written[&lt;SSAVariable: rax_5207 version 4557&gt;]\u041a\u0430\u043a \u043f\u0438\u0441\u0430\u0442\u044c Workflow\u0427\u0442\u043e\u0431\u044b Binary Ninja \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u044d\u0442\u0430\u043f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 import binaryninja as bnimport importlibimport jsondef _trampoline(analysis_context):    import deobfuscator_logic    importlib.reload(deobfuscator_logic)    deobfuscator_logic.run(analysis_context)configuration = json.dumps({    &#171;name&#187;:&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-484562","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/484562","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=484562"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/484562\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=484562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=484562"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=484562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}