[原创]IDA Pro 9.0.240925 v2官方正式版原版全平台(Win Mac Linux)全功能完 ...

打印 上一主题 下一主题

主题 1590|帖子 1590|积分 4770

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
[简介]
常用网名: 猪头三
出生日期: 1981.XX.XX
QQ: 643439947
个人网站: 80x86汇编小站
编程生涯: 2001年~至今[共22年]
职业生涯: 20年
开发语言: C/C++、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python
开发工具: Visual Studio、Delphi、XCode、Eclipse、C++ Builder
技能种类: 逆向 驱动 磁盘 文件
研发领域: Windows应用软件安全/Windows体系内核安全/Windows体系磁盘数据安全/macOS应用软件安全
项目经历: 磁盘性能优化/文件体系数据恢复/文件信息采集/敏感文件监测跟踪/网络安全检测
[序言]
在2024年08月左右, hex-rays官方不测的泄露了全版本(Win Mac Linux)全功能的IDA Pro 9.0, 让整个逆向社区打一剂鸡血针, 随后大量的打包版本出现比如: IDA Pro 9.0 Beta官方泄露版, IDA Pro 9.0 RC1发行版. 总之版本混乱, 但随着时间的推移, 大概快2个多月左右, 官方突然把RC1版本直接转换为了正式版. 因此就有目前最纯净最干净的版本: 2024 IDA Pro 9.0.240925 v2官方正式版.
[Windows平台运行]
首先,必要下载2024 IDA Pro 9.0.240925 v2官方正式版 的安装包, 可以从下面的链接下载:
*   磁力链接:magnet:?xt=urn:btih:b2e16894b6c40774283560fe292e5d4bc68c512f&dn=IDA%209.0.240925%20v2
*   下载完成后, 还必要另外下载 keygen2.py 文件(已附上源码, 请下载生存)
打开keygen2.py文件, 并修改其源码. 详细修改如下:
*   替换 elf: "name": "elf" -> 任意替换一个名字
*   替换 "elv@ven: "email": "elv@ven" -> 任意替换一个邮箱
*   修正授权文件发行时间: "issued_on": "2024-08-10 00:00:00"
修改完成后, 将修改好的keygen2.py文件复制到由ida-pro_90_x64win.exe生成的安装目次(IDA Professional 9.0), 并运行. 乐成的话, 会出现以下三个文件:
*   ida.dll.patched
*   ida32.dll.patched
*   idapro.hexlic
这三个文件就是破解好的文件.
最后, 我们必要备份原版的 ida.dll 和 ida32.dll 文件, 并将 ida.dll.patched 和 ida32.dll.patched 文件重命名为 ida.dll 和 ida32.dll. 这样一来, IDA Pro 9.0就能完美运行了.
[注意]
*   必要有肯定的Python动手本领.
*   这个教程适合具有中等以上编程履历的用户.
[总结]
虽然上面给出的是Windows平台的操作步调, 但是其他平台Mac, Linux的处理方式差不多一样的, 大家可以自行研究.
[keygen2.py源码]
  1. import json
  2. import hashlib
  3. import os
  4. # originally made by alula
  5. license = {
  6.     "header": {"version": 1},
  7.     "payload": {
  8.         "name": "elf",
  9.         "email": "elv@ven",
  10.         "licenses": [
  11.             {
  12.                 "description": "license",
  13.                 "edition_id": "ida-pro",
  14.                 "id": "48-2137-ACAB-99",
  15.                 "license_type": "named",
  16.                 "product": "IDA",
  17.                 "seats": 1,
  18.                 "start_date": "2024-08-10 00:00:00",
  19.                 "end_date": "2033-12-31 23:59:59",  # This can't be more than 10 years!
  20.                 "issued_on": "2024-08-10 00:00:00",
  21.                 "owner": "",
  22.                 "product_id": "IDAPRO",
  23.                 "add_ons": [
  24.                     # {
  25.                     #     "id": "48-1337-DEAD-01",
  26.                     #     "code": "HEXX86L",
  27.                     #     "owner": "48-0000-0000-00",
  28.                     #     "start_date": "2024-08-10 00:00:00",
  29.                     #     "end_date": "2033-12-31 23:59:59",
  30.                     # },
  31.                     # {
  32.                     #     "id": "48-1337-DEAD-02",
  33.                     #     "code": "HEXX64L",
  34.                     #     "owner": "48-0000-0000-00",
  35.                     #     "start_date": "2024-08-10 00:00:00",
  36.                     #     "end_date": "2033-12-31 23:59:59",
  37.                     # },
  38.                 ],
  39.                 "features": [],
  40.             }
  41.         ],
  42.     },
  43. }
  44. def add_every_addon(license):
  45.     platforms = [
  46.         "W",  # Windows
  47.         "L",  # Linux
  48.         "M",  # macOS
  49.     ]
  50.     addons = [
  51.         "HEXX86",
  52.         "HEXX64",
  53.         "HEXARM",
  54.         "HEXARM64",
  55.         "HEXMIPS",
  56.         "HEXMIPS64",
  57.         "HEXPPC",
  58.         "HEXPPC64",
  59.         "HEXRV64",
  60.         "HEXARC",
  61.         "HEXARC64",
  62.         # Probably cloud?
  63.         # "HEXCX86",
  64.         # "HEXCX64",
  65.         # "HEXCARM",
  66.         # "HEXCARM64",
  67.         # "HEXCMIPS",
  68.         # "HEXCMIPS64",
  69.         # "HEXCPPC",
  70.         # "HEXCPPC64",
  71.         # "HEXCRV",
  72.         # "HEXCRV64",
  73.         # "HEXCARC",
  74.         # "HEXCARC64",
  75.     ]
  76.     i = 0
  77.     for addon in addons:
  78.         i += 1
  79.         license["payload"]["licenses"][0]["add_ons"].append(
  80.             {
  81.                 "id": f"48-1337-DEAD-{i:02}",
  82.                 "code": addon,
  83.                 "owner": license["payload"]["licenses"][0]["id"],
  84.                 "start_date": "2024-08-10 00:00:00",
  85.                 "end_date": "2033-12-31 23:59:59",
  86.             }
  87.         )
  88.     # for addon in addons:
  89.     #     for platform in platforms:
  90.     #         i += 1
  91.     #         license["payload"]["licenses"][0]["add_ons"].append(
  92.     #             {
  93.     #                 "id": f"48-1337-DEAD-{i:02}",
  94.     #                 "code": addon + platform,
  95.     #                 "owner": license["payload"]["licenses"][0]["id"],
  96.     #                 "start_date": "2024-08-10 00:00:00",
  97.     #                 "end_date": "2033-12-31 23:59:59",
  98.     #             }
  99.     #         )
  100. add_every_addon(license)
  101. def json_stringify_alphabetical(obj):
  102.     return json.dumps(obj, sort_keys=True, separators=(",", ":"))
  103. def buf_to_bigint(buf):
  104.     return int.from_bytes(buf, byteorder="little")
  105. def bigint_to_buf(i):
  106.     return i.to_bytes((i.bit_length() + 7) // 8, byteorder="little")
  107. # Yup, you only have to patch 5c -> cb in libida64.so
  108. pub_modulus_hexrays = buf_to_bigint(
  109.     bytes.fromhex(
  110.         "edfd425cf978546e8911225884436c57140525650bcf6ebfe80edbc5fb1de68f4c66c29cb22eb668788afcb0abbb718044584b810f8970cddf227385f75d5dddd91d4f18937a08aa83b28c49d12dc92e7505bb38809e91bd0fbd2f2e6ab1d2e33c0c55d5bddd478ee8bf845fcef3c82b9d2929ecb71f4d1b3db96e3a8e7aaf93"
  111.     )
  112. )
  113. pub_modulus_patched = buf_to_bigint(
  114.     bytes.fromhex(
  115.         "edfd42cbf978546e8911225884436c57140525650bcf6ebfe80edbc5fb1de68f4c66c29cb22eb668788afcb0abbb718044584b810f8970cddf227385f75d5dddd91d4f18937a08aa83b28c49d12dc92e7505bb38809e91bd0fbd2f2e6ab1d2e33c0c55d5bddd478ee8bf845fcef3c82b9d2929ecb71f4d1b3db96e3a8e7aaf93"
  116.     )
  117. )
  118. private_key = buf_to_bigint(
  119.     bytes.fromhex(
  120.         "77c86abbb7f3bb134436797b68ff47beb1a5457816608dbfb72641814dd464dd640d711d5732d3017a1c4e63d835822f00a4eab619a2c4791cf33f9f57f9c2ae4d9eed9981e79ac9b8f8a411f68f25b9f0c05d04d11e22a3a0d8d4672b56a61f1532282ff4e4e74759e832b70e98b9d102d07e9fb9ba8d15810b144970029874"
  121.     )
  122. )
  123. def decrypt(message):
  124.     decrypted = pow(buf_to_bigint(message), exponent, pub_modulus_patched)
  125.     decrypted = bigint_to_buf(decrypted)
  126.     return decrypted[::-1]
  127. def encrypt(message):
  128.     encrypted = pow(buf_to_bigint(message[::-1]), private_key, pub_modulus_patched)
  129.     encrypted = bigint_to_buf(encrypted)
  130.     return encrypted
  131. exponent = 0x13
  132. def sign_hexlic(payload: dict) -> str:
  133.     data = {"payload": payload}
  134.     data_str = json_stringify_alphabetical(data)
  135.     buffer = bytearray(128)
  136.     # first 33 bytes are random
  137.     for i in range(33):
  138.         buffer[i] = 0x42
  139.     # compute sha256 of the data
  140.     sha256 = hashlib.sha256()
  141.     sha256.update(data_str.encode())
  142.     digest = sha256.digest()
  143.     # copy the sha256 digest to the buffer
  144.     for i in range(32):
  145.         buffer[33 + i] = digest[i]
  146.     # encrypt the buffer
  147.     encrypted = encrypt(buffer)
  148.     return encrypted.hex().upper()
  149. def generate_patched_dll(filename):
  150.     if not os.path.exists(filename):
  151.         print(f"Didn't find {filename}, skipping patch generation")
  152.         return
  153.     with open(filename, "rb") as f:
  154.         data = f.read()
  155.         if data.find(bytes.fromhex("EDFD42CBF978")) != -1:
  156.             print(f"{filename} looks to be already patched :)")
  157.             return
  158.         
  159.         if data.find(bytes.fromhex("EDFD425CF978")) == -1:
  160.             print(f"{filename} doesn't contain the original modulus.")
  161.             return
  162.         data = data.replace(
  163.             bytes.fromhex("EDFD425CF978"), bytes.fromhex("EDFD42CBF978")
  164.         )
  165.         patched_filename = f"{filename}.patched"
  166.         with open(patched_filename, "wb") as f:
  167.             f.write(data)
  168.         print(f"Generated modulus patch to {patched_filename}! To apply the patch, replace the original file with the patched file")
  169. # message = bytes.fromhex(license["signature"])
  170. # print(decrypt(message).hex())
  171. # print(encrypt(decrypt(message)).hex())
  172. license["signature"] = sign_hexlic(license["payload"])
  173. serialized = json_stringify_alphabetical(license)
  174. # write to ida.hexlic
  175. filename = "idapro.hexlic"
  176. with open(filename, "w") as f:
  177.     f.write(serialized)
  178. print(f"Saved new license to {filename}!")
  179. generate_patched_dll("ida32.dll")
  180. generate_patched_dll("ida.dll")
  181. generate_patched_dll("libida32.so")
  182. generate_patched_dll("libida.so")
  183. generate_patched_dll("libida32.dylib")
  184. generate_patched_dll("libida.dylib")
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81429

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表