Add missing Python magic values (#2522)

This commit is contained in:
Anton Kochkov 2022-05-02 19:22:12 +08:00 committed by GitHub
parent b40dde5fbf
commit 564d88c319
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 149 additions and 5 deletions

View file

@ -123,6 +123,28 @@ static version_opcode version_op[] = {
{ "v3.9.0a1", opcode_39 },
{ "v3.9.0a2", opcode_39 },
{ "v3.9.0a3", opcode_39 },
{ "v3.9.0a5", opcode_39 },
{ "v3.9.0a6", opcode_39 },
{ "v3.9.0b1", opcode_39 },
{ "v3.9.0b2", opcode_39 },
{ "v3.9.0b3", opcode_39 },
{ "v3.9.0b4", opcode_39 },
{ "v3.9.0b5", opcode_39 },
{ "v3.9.0rc1", opcode_39 },
{ "v3.9.0rc2", opcode_39 },
{ "v3.9.0", opcode_39 },
{ "v3.9.1", opcode_39 },
{ "v3.9.2", opcode_39 },
{ "v3.9.3", opcode_39 },
{ "v3.9.4", opcode_39 },
{ "v3.9.5", opcode_39 },
{ "v3.9.6", opcode_39 },
{ "v3.9.7", opcode_39 },
{ "v3.9.8", opcode_39 },
{ "v3.9.9", opcode_39 },
{ "v3.9.10", opcode_39 },
{ "v3.9.11", opcode_39 },
{ "v3.9.12", opcode_39 },
{ NULL, NULL },
};

View file

@ -6,6 +6,10 @@
#include <rz_util.h>
#include <stdlib.h>
/* In the latest 3.x versions the magic number is stored
* in the `Lib/importlib/_bootstrap_external.py` file
* Search for the line "MAGIC_NUMBER = (XXXX).to_bytes"
*/
static struct pyc_version versions[] = {
{ 0x00949494, "0.9.4 beta", "77b80a91d357c1d95d8e7cd4cbbe799e5deb777e" },
{ 0x0099be2a, "0.9.9", "1cabc2b6c9701aea29bb506b593946e67bf7593a" },
@ -211,9 +215,59 @@ static struct pyc_version versions[] = {
{ 0x0a0d0d55, "v3.8.0rc1", "41f60748364a6afda7360e6cc6e846af569b7ab9" },
{ 0x0a0d0d55, "v3.8.1", "d2529ef779ce819a5ea833b264e47440efcbac29" },
{ 0x0a0d0d55, "v3.8.1rc1", "827f6399a61be9d14f8ccfa5be73a6030ec45f1d" },
{ 0x0a0d0d61, "v3.9.0", "3a819e5c9d3feae85762ae87cebf55f9c8d2b526" },
{ 0x0a0d0d5c, "v3.9.0a1", "fd757083df79c21eee862e8d89aeefefe45f64a0" },
{ 0x0a0d0d5e, "v3.9.0a2", "bf0a31c8fb782e03e9530c2488ab2d0e29fc0495" },
{ 0x0a0d0d60, "v3.9.0a3", "a36ea266c6470f6c65416f24de4497637e59af23" },
{ 0x0a0d0d61, "v3.9.0a4", "4208077a295dbde5b13a73522018029390fd92fa" },
{ 0x0a0d0d61, "v3.9.0a5", "304fc94f4d2caa31bcc7be2a6800a66252cc4356" },
{ 0x0a0d0d61, "v3.9.0a6", "bc1c8af8ef2563802767404c78c8ec6d6a967897" },
{ 0x0a0d0d61, "v3.9.0b1", "d90bbcba0b13ff5eed050429b64aa0184c390786" },
{ 0x0a0d0d61, "v3.9.0b2", "c68d71450b4c9d94268e9f9bbb2a3fa628cda0a1" },
{ 0x0a0d0d61, "v3.9.0b3", "68401900507c323018d3eeefc3d93a1cabd53f5b" },
{ 0x0a0d0d61, "v3.9.0b4", "bca15e79dab6f790259f5cc3f70f7af9ce6091e6" },
{ 0x0a0d0d61, "v3.9.0b5", "d44555f26b126d7b722500725b4810a3374163b8" },
{ 0x0a0d0d61, "v3.9.0rc1", "c3c41989e5e5abb55592b54a1c6b9401c4767047" },
{ 0x0a0d0d61, "v3.9.0rc2", "3fd4769b2ef15f5786d280ffba14669814502298" },
{ 0x0a0d0d61, "v3.9.1", "cd3b1f217da4956cde724da48152031ff61ce0b1" },
{ 0x0a0d0d61, "v3.9.10", "9e24ff64427e7f8243c0225cf70dc2d1f56ab32f" },
{ 0x0a0d0d61, "v3.9.11", "2a0d801a6982c132ec5523b68c7f98a635170ad4" },
{ 0x0a0d0d61, "v3.9.12", "85fabfe6ea9364ca2050392da7e9d5c5dbf00f0c" },
{ 0x0a0d0d61, "v3.9.1rc1", "bde96d34a4f81bc5becf940264b239474b6302b5" },
{ 0x0a0d0d61, "v3.9.2", "024a378a94da9299872e6a875e633b8e7d40070d" },
{ 0x0a0d0d61, "v3.9.2rc1", "99291f5794a639f56463a9475baf282cca2cd4d7" },
{ 0x0a0d0d61, "v3.9.3", "afba08b7766fd1d699cce68c17e0a083bc8894fb" },
{ 0x0a0d0d61, "v3.9.4", "2477a4938c06327480078914db328fbccd73ce78" },
{ 0x0a0d0d61, "v3.9.5", "7b51fc2b26696177700f03fbaa0470b84d9b8afc" },
{ 0x0a0d0d61, "v3.9.6", "390f30e9e0b20032b4c71e6a3a2694645d6a4d38" },
{ 0x0a0d0d61, "v3.9.7", "6fc3c88dca6b53457102714334b5d50b26618d4f" },
{ 0x0a0d0d61, "v3.9.8", "a6f559aadf2556adc247028290c266415e5d5482" },
{ 0x0a0d0d61, "v3.9.9", "dc8b1fcb27a0c2e53109a174b1e33dbaa77f93e6" },
{ 0x0a0d0d6f, "v3.10.0", "bfb376ffcc4260feb9bf1b9a110559b1ff31da80" },
{ 0x0a0d0d61, "v3.10.0a1", "a672043a4da5243a2b00e125b31bd881166ca18c" },
{ 0x0a0d0d66, "v3.10.0a2", "e0250752c7c7611dccb5e1132729b38eb9c56479" },
{ 0x0a0d0d68, "v3.10.0a3", "0e5a7e7d994d1d1a93b9a5e5ba403527ae8e155c" },
{ 0x0a0d0d69, "v3.10.0a4", "81e3534d89dd67086a793eec0e9f80111c27eb1c" },
{ 0x0a0d0d69, "v3.10.0a5", "738ec5dfdcdd1e195124e47ee739f75c6abcfdfa" },
{ 0x0a0d0d6a, "v3.10.0a6", "b795d27e6c6d0b05fc536b3c28a7a9a57e7f5a29" },
{ 0x0a0d0d6b, "v3.10.0a7", "f4ac06f971e6c86166443cdc7eda2808dda04ba8" },
{ 0x0a0d0d6f, "v3.10.0b1", "33da82af8141be9525fb05cafb395d8e11972faa" },
{ 0x0a0d0d6f, "v3.10.0b2", "48776b6d1a4e749a93c9d127ef26eea3307aa18e" },
{ 0x0a0d0d6f, "v3.10.0b3", "dd593d4e3923626d8c3b1eabc6e8afe942970470" },
{ 0x0a0d0d6f, "v3.10.0b4", "d94d3780bbae87b4601dafd3a1bdc07067006218" },
{ 0x0a0d0d6f, "v3.10.0rc1", "645a1422d461db65fd6e505b402b0a71b59ed472" },
{ 0x0a0d0d6f, "v3.10.0rc2", "209ff2c128009de27f09e5f760e69690e660e98a" },
{ 0x0a0d0d6f, "v3.10.1", "770f41eb8338e9a39c1968c9c2cae12ab4bf545c" },
{ 0x0a0d0d6f, "v3.10.2", "3571d41577de6236d73a5eb4c1e28ea5c5ed7640" },
{ 0x0a0d0d6f, "v3.10.3", "1515a31dfbcf9fc7c6de51f6f8b3b7aea7d9929b" },
{ 0x0a0d0d6f, "v3.10.4", "ae74560a6f6539eaacf12e777f8e5136135773a9" },
{ 0x0a0d0d84, "v3.11.0a1", "a510de0953488a47ab5ac8727708497eab325442" },
{ 0x0a0d0d86, "v3.11.0a2", "ae7760f2697f4bf0af1950f98bb4397250199bb3" },
{ 0x0a0d0d89, "v3.11.0a3", "b948add7910eb74b946bd1577ff8edc7927d6014" },
{ 0x0a0d0d92, "v3.11.0a4", "95b215f5b222abef8879cbd21996896acbe59ef1" },
{ 0x0a0d0d96, "v3.11.0a5", "838b51a0799b8fc83413edf0561b86f85625f946" },
{ 0x0a0d0d9d, "v3.11.0a6", "5191ba090ef66cf50a9633a08404500c5d59cfdf" },
{ 0x0a0d0da3, "v3.11.0a7", "45772541f67dffab42ec3e336025e869982c5951" },
};
struct pyc_version get_pyc_version(ut32 magic) {

View file

@ -1,3 +1,19 @@
NAME=pyc load version39
FILE=bins/pyc/py39.pyc
CMDS=<<EOF
iI~machine
EOF
EXPECT=<<EOF
machine Python v3.9.0 VM (rev 3a819e5c9d3feae85762ae87cebf55f9c8d2b526)
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\ \(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN
NAME=pyc load version38
FILE=bins/pyc/py38.pyc
CMDS=<<EOF
@ -62,7 +78,7 @@ free_object (0)
EOF
RUN
NAME=pyc symbols
NAME=pyc 3.7 symbols
FILE=bins/pyc/py37.pyc
CMDS=<<EOF
is~?Human
@ -78,7 +94,7 @@ free_object (0)
EOF
RUN
NAME=pyc sections
NAME=pyc 3.9 sections
FILE=bins/pyc/py37.pyc
CMDS=<<EOF
iS~Bat
@ -100,7 +116,29 @@ free_object (0)
EOF
RUN
NAME=pyc maps
NAME=pyc 3.7 sections
FILE=bins/pyc/py37.pyc
CMDS=<<EOF
iS~Bat
EOF
EXPECT=<<EOF
0x00001f0d 0x2a 0x00001f0d 0x2a 0x0 ---- module_.Bat
0x00001f5f 0xa 0x00001f5f 0xa 0x0 ---- module_.Bat.__init
0x00001fca 0x8 0x00001fca 0x8 0x0 ---- module_.Bat.say
0x00002037 0x4 0x00002037 0x4 0x0 ---- module_.Bat.sonar
0x00002103 0x1c 0x00002103 0x1c 0x0 ---- module_.Batman
0x00002143 0x44 0x00002143 0x44 0x0 ---- module_.Batman.__init
0x00002235 0x4 0x00002235 0x4 0x0 ---- module_.Batman.sing
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\ \(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN
NAME=pyc 3.7 maps
FILE=bins/pyc/py37.pyc
CMDS=<<EOF
oml
@ -110,7 +148,7 @@ EXPECT=<<EOF
EOF
RUN
NAME=pyc entry
NAME=pyc 3.7 entry
FILE=bins/pyc/py37.pyc
CMDS=<<EOF
ie~program
@ -126,7 +164,37 @@ free_object (0)
EOF
RUN
NAME=pyc disasm
NAME=pyc 3.9 disasm
FILE=bins/pyc/py39.pyc
CMDS=<<EOF
pd 10
EOF
EXPECT=<<EOF
;-- entry0:
;-- section.module:
;-- <module>:
0x0000002e LOAD_CONST Multiline strings can be written
using three "s, and are often used
as documentation. ; [00] ---- section size 3248 named module
0x00000030 STORE_NAME __doc__
0x00000032 LOAD_CONST True
,=< 0x00000034 JUMP_IF_FALSE_OR_POP 10
| 0x00000036 LOAD_CONST False
`-> 0x00000038 POP_TOP
0x0000003a LOAD_CONST False
,=< 0x0000003c JUMP_IF_TRUE_OR_POP 18
| 0x0000003e LOAD_CONST True
`-> 0x00000040 POP_TOP
EOF
REGEXP_FILTER_ERR=<<EOF
free_object\ \(0\)
EOF
EXPECT_ERR=<<EOF
free_object (0)
EOF
RUN
NAME=pyc 3.7 disasm
FILE=bins/pyc/py37.pyc
CMDS=<<EOF
pd 10