55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
import importlib.util
|
|
import unittest
|
|
|
|
from tools.libw_pr_oracle import DEFAULT_LIBRARY, LibwPrOracle
|
|
|
|
|
|
KAW = (
|
|
"MDJ3ll0yLjVpYO7iiytgvlbggFZA+kzX1QW7XXr0RScGn+UaN3oe8k/8OMm5qNs5QMOz"
|
|
"XRUsclqPgblszASefBRIZ8n+fvhbUPpcNIEluR/tdXsbSVkdMHyjYPWVAYRZqAjRCr/AqM"
|
|
"9BVr6A25kTIy2Q90Q/XaCQdkDCzEinliF1w7nxO00EBAt5t6dg8V2WHF4ku2pSwEmKcJsR"
|
|
"606dC0ZJhKgGdMmK2ls+Ti6sybfii/wvtiXHkrnC2Z0ES1PnoYBhwpsA"
|
|
)
|
|
|
|
VECTORS = (
|
|
(
|
|
"/rest/nebula/user/mobile/checker"
|
|
"26374264f51d236ceb6e6d6c80fddcca5466131e637f7167"
|
|
+ KAW,
|
|
"0013da23b4d7b0d9e608ea4b9e1c8ad228",
|
|
),
|
|
(
|
|
"/rest/nebula/user/requestMobileCode"
|
|
"a6b7c2e4759da3ec6aeeedecb8aefa45d3e6939ee3fff1e7"
|
|
+ KAW,
|
|
"0040db26b7dbb188e35fe419c91ada8022",
|
|
),
|
|
(
|
|
"/rest/nebula/user/login/mobileVerifyCode"
|
|
"e8f98caa3bd3eda226a0a3a21f648b4789a8ddd0adb1bfa9"
|
|
+ KAW,
|
|
"00408e7fe6d7b188b05ae11ecc4bdf8371",
|
|
),
|
|
("/f/a/p" + KAW, "0046df75e487b7d9b65ab749981a8c8f71"),
|
|
)
|
|
|
|
|
|
@unittest.skipUnless(
|
|
DEFAULT_LIBRARY.is_file()
|
|
and importlib.util.find_spec("elftools") is not None
|
|
and importlib.util.find_spec("unicorn") is not None,
|
|
"libw oracle 需要本地 ELF、pyelftools 和 unicorn",
|
|
)
|
|
class LibwPrOracleTests(unittest.TestCase):
|
|
def test_captured_mode_2_vectors(self) -> None:
|
|
oracle = LibwPrOracle()
|
|
for payload, expected in VECTORS:
|
|
with self.subTest(expected=expected):
|
|
self.assertEqual(oracle.generate(payload), expected)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|