Compare commits

..
Author SHA1 Message Date
elseif 7719188665 Update README.md
Signed-off-by: elseif <elseif@live.cn>
2024-08-30 14:06:45 +08:00
elseif 016a2de24f Update README_EN.md
Signed-off-by: elseif <elseif@live.cn>
2024-08-30 14:06:32 +08:00
elseif 2957c5a6ef Update README.md
Signed-off-by: elseif <elseif@live.cn>
2024-08-26 14:48:15 +08:00
elseif ec407be988 Update README_EN.md
Signed-off-by: elseif <elseif@live.cn>
2024-08-26 14:48:04 +08:00
elseif ed0815f070 Update README_EN.md
Signed-off-by: elseif <elseif@live.cn>
2024-08-26 14:47:29 +08:00
elseif e88fbc0161 Update README.md
Signed-off-by: elseif <elseif@live.cn>
2024-08-22 18:28:53 +08:00
elseif 6d1ebb4d8a Update mikrotik_patch_6.yml
Signed-off-by: elseif <elseif@live.cn>
2024-08-19 19:25:03 +08:00
elseif ca24fa62b1 Update mikrotik_patch_6.yml
Signed-off-by: elseif <elseif@live.cn>
2024-08-19 19:24:52 +08:00
elseif 73f15e63e7 Update mikrotik_patch_6.yml
Signed-off-by: elseif <elseif@live.cn>
2024-08-19 19:21:23 +08:00
elseif 96df91e97c Update mikrotik_patch_6.yml
Signed-off-by: elseif <elseif@live.cn>
2024-08-19 19:19:07 +08:00
elseif 65fd858255 Update mikrotik_patch_6.yml
Signed-off-by: elseif <elseif@live.cn>
2024-08-19 19:11:44 +08:00
elseif 208a160edc Update README_EN.md
Signed-off-by: elseif <elseif@live.cn>
2024-08-19 00:33:28 +08:00
elseif c3781d822e Update README.md
Signed-off-by: elseif <elseif@live.cn>
2024-08-19 00:33:07 +08:00
elseif f2eefbcc8f Add files via upload
Signed-off-by: elseif <elseif@live.cn>
2024-08-19 00:32:26 +08:00
zyb dc31de2e33 modified: patch.py 2024-08-08 15:21:50 +08:00
zyb 8d6181eb84 modified: mikro.py 2024-08-08 11:58:06 +08:00
zyb 6a69a53051 modified: README.md 2024-08-07 11:10:46 +08:00
7 changed files with 29 additions and 17 deletions
+3 -1
View File
@@ -138,6 +138,7 @@ jobs:
if: steps.get_latest.outputs.has_new_version == 'true' if: steps.get_latest.outputs.has_new_version == 'true'
run: | run: |
sudo modprobe nbd sudo modprobe nbd
sudo apt-get update
sudo apt-get install -y qemu-utils extlinux > /dev/null sudo apt-get install -y qemu-utils extlinux > /dev/null
truncate --size 64M install-image-$LATEST_VERSION.img truncate --size 64M install-image-$LATEST_VERSION.img
sudo qemu-nbd -c /dev/nbd0 -f raw install-image-$LATEST_VERSION.img sudo qemu-nbd -c /dev/nbd0 -f raw install-image-$LATEST_VERSION.img
@@ -191,6 +192,7 @@ jobs:
sudo cp ./all_packages/dude-$LATEST_VERSION.npk ./chr/var/pdb/dude/image sudo cp ./all_packages/dude-$LATEST_VERSION.npk ./chr/var/pdb/dude/image
sudo -E python3 patch.py npk ./chr/var/pdb/routeros-x86/image sudo -E python3 patch.py npk ./chr/var/pdb/routeros-x86/image
sudo cp ./chr/var/pdb/routeros-x86/image ./all_packages/routeros-x86-$LATEST_VERSION.npk sudo cp ./chr/var/pdb/routeros-x86/image ./all_packages/routeros-x86-$LATEST_VERSION.npk
sudo cp ./all_packages/routeros-x86-$LATEST_VERSION.npk routeros-x86-$LATEST_VERSION.npk
sudo umount ./chr sudo umount ./chr
sudo qemu-nbd -d /dev/nbd0 sudo qemu-nbd -d /dev/nbd0
sudo rm -rf ./chr sudo rm -rf ./chr
@@ -267,5 +269,5 @@ jobs:
mikrotik-${{ env.LATEST_VERSION }}.iso mikrotik-${{ env.LATEST_VERSION }}.iso
chr-${{ env.LATEST_VERSION }}*.zip chr-${{ env.LATEST_VERSION }}*.zip
install-image-${{ env.LATEST_VERSION }}.zip install-image-${{ env.LATEST_VERSION }}.zip
system-${{ env.LATEST_VERSION }}.npk routeros-x86-${{ env.LATEST_VERSION }}.npk
all_packages-x86-${{ env.LATEST_VERSION }}.zip all_packages-x86-${{ env.LATEST_VERSION }}.zip
+4 -4
View File
@@ -1,14 +1,11 @@
# MikroTik RouterOS Patch [[English](README_EN.md)] # MikroTik RouterOS Patch [[English](README_EN.md)]
### [[Discord](https://discord.gg/keV6MWQFtX)] [[Telegram](https://t.me/mikrotikpatch)] [[Keygen(Telegram Bot)](https://t.me/ROS_Keygen_Bot)]
### 国内镜像下载 密码: elseif ### 国内镜像下载 密码: elseif
[ [123pan](https://www.123pan.com/s/IpxgTd-BYjQh.html) ] [ [123pan](https://www.123pan.com/s/IpxgTd-BYjQh.html) ]
[ [7.15.3](https://elseif.lanzouj.com/b00cre7g7a)] [ [7.15.3](https://elseif.lanzouj.com/b00cre7g7a)]
[ [7.15.2](https://elseif.lanzouj.com/b00crdq4hg)]
[ [7.16beta4](https://elseif.lanzouj.com/b00crdq4fe) ]
[ [7.15.3-arm64](https://elseif.lanzouj.com/b00cre7g8b) ] [ [7.15.3-arm64](https://elseif.lanzouj.com/b00cre7g8b) ]
[ [7.15.2-arm64](https://elseif.lanzouj.com/b00crdq4ih) ]
[ [7.16beta4-arm64](https://elseif.lanzouj.com/b00crdq4gf) ]
[ [6.49.15](https://elseif.lanzouj.com/b00crdq4ji) ] [ [6.49.15](https://elseif.lanzouj.com/b00crdq4ji) ]
[ [6.49.13](https://elseif.lanzouj.com/b00crdq4kj) ] [ [6.49.13](https://elseif.lanzouj.com/b00crdq4kj) ]
@@ -26,6 +23,9 @@
### Chr模式授权许可 ### Chr模式授权许可
![](image/chr.png) ![](image/chr.png)
![](image/arm.png)
![](image/mips.png)
## 如何使用Shell ## 如何使用Shell
安装 option-{version}.npk 包 安装 option-{version}.npk 包
telnet到RouterOS,用户名devel,密码与admin的密码相同 telnet到RouterOS,用户名devel,密码与admin的密码相同
+4 -1
View File
@@ -1,6 +1,6 @@
# MikroTik RouterOS Patch [[中文](README.md)] # MikroTik RouterOS Patch [[中文](README.md)]
### [[Discord](https://discord.gg/keV6MWQFtX)] [[Telegram](https://t.me/+99Mw06p3K7NlMmNl)] ### [[Discord](https://discord.gg/keV6MWQFtX)] [[Telegram](https://t.me/mikrotikpatch)] [[Keygen(Telegram Bot)](https://t.me/ROS_Keygen_Bot)]
### Download [Latest Patched](https://github.com/elseif/MikroTikPatch/releases/latest) iso file,install it and enjoy. ### Download [Latest Patched](https://github.com/elseif/MikroTikPatch/releases/latest) iso file,install it and enjoy.
### CHR image is both support BIOS and UEFI boot mode. ### CHR image is both support BIOS and UEFI boot mode.
@@ -19,6 +19,9 @@
### license RouterOS for chr ### license RouterOS for chr
![](image/chr.png) ![](image/chr.png)
![](image/arm.png)
![](image/mips.png)
## How to use shell ## How to use shell
install option-{version}.npk package install option-{version}.npk package
run telnet to routeros with username devel and password is same as admin run telnet to routeros with username devel and password is same as admin
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 464 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 725 KiB

+1 -2
View File
@@ -4,8 +4,7 @@ from sha256 import SHA256
from toyecc import AffineCurvePoint, getcurvebyname, FieldElement,ECPrivateKey,ECPublicKey,Tools from toyecc import AffineCurvePoint, getcurvebyname, FieldElement,ECPrivateKey,ECPublicKey,Tools
from toyecc.Random import secure_rand_int_between from toyecc.Random import secure_rand_int_between
MIKRO_LICENSE_HEADER = '-----BEGIN MIKROTIK SOFTWARE KEY------------'
MIKRO_LICENSE_FOOTER = '-----END MIKROTIK SOFTWARE KEY--------------'
MIKRO_BASE64_CHARACTER_TABLE = b'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' MIKRO_BASE64_CHARACTER_TABLE = b'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
SOFTWARE_ID_CHARACTER_TABLE = b'TN0BYX18S5HZ4IA67DGF3LPCJQRUK9MW2VE' SOFTWARE_ID_CHARACTER_TABLE = b'TN0BYX18S5HZ4IA67DGF3LPCJQRUK9MW2VE'
+17 -9
View File
@@ -87,6 +87,9 @@ def patch_initrd_xz(initrd_xz:bytes,key_dict:dict,ljust=True):
new_initrd_xz = lzma.compress(new_initrd,check=lzma.CHECK_CRC32,filters=[{"id": lzma.FILTER_LZMA2, "preset": 9,}] ) new_initrd_xz = lzma.compress(new_initrd,check=lzma.CHECK_CRC32,filters=[{"id": lzma.FILTER_LZMA2, "preset": 9,}] )
if ljust: if ljust:
assert len(new_initrd_xz) <= len(initrd_xz),'new initrd xz size is too big' assert len(new_initrd_xz) <= len(initrd_xz),'new initrd xz size is too big'
print(f'new initrd xz size:{len(new_initrd_xz)}')
print(f'old initrd xz size:{len(initrd_xz)}')
print(f'ljust size:{len(initrd_xz)-len(new_initrd_xz)}')
new_initrd_xz = new_initrd_xz.ljust(len(initrd_xz),b'\0') new_initrd_xz = new_initrd_xz.ljust(len(initrd_xz),b'\0')
return new_initrd_xz return new_initrd_xz
@@ -102,6 +105,7 @@ def find_7zXZ_data(data:bytes):
while b'\x00\x00\x00\x00\x01\x59\x5A' in _data: while b'\x00\x00\x00\x00\x01\x59\x5A' in _data:
offset2 = offset2 + _data.index(b'\x00\x00\x00\x00\x01\x59\x5A') + 7 offset2 = offset2 + _data.index(b'\x00\x00\x00\x00\x01\x59\x5A') + 7
_data = _data[offset2:] _data = _data[offset2:]
print(f'found 7zXZ data offset:{offset1} size:{offset2-offset1}')
return data[offset1:offset2] return data[offset1:offset2]
def patch_elf(data: bytes,key_dict:dict): def patch_elf(data: bytes,key_dict:dict):
@@ -119,6 +123,9 @@ def patch_pe(data: bytes,key_dict:dict):
new_vmlinux = vmlinux.replace(initrd_xz,new_initrd_xz) new_vmlinux = vmlinux.replace(initrd_xz,new_initrd_xz)
new_vmlinux_xz = lzma.compress(new_vmlinux,check=lzma.CHECK_CRC32,filters=[{"id": lzma.FILTER_LZMA2, "preset": 9,}] ) new_vmlinux_xz = lzma.compress(new_vmlinux,check=lzma.CHECK_CRC32,filters=[{"id": lzma.FILTER_LZMA2, "preset": 9,}] )
assert len(new_vmlinux_xz) <= len(vmlinux_xz),'new vmlinux xz size is too big' assert len(new_vmlinux_xz) <= len(vmlinux_xz),'new vmlinux xz size is too big'
print(f'new vmlinux xz size:{len(new_vmlinux_xz)}')
print(f'old vmlinux xz size:{len(vmlinux_xz)}')
print(f'ljust size:{len(vmlinux_xz)-len(new_vmlinux_xz)}')
new_vmlinux_xz = new_vmlinux_xz.ljust(len(vmlinux_xz),b'\0') new_vmlinux_xz = new_vmlinux_xz.ljust(len(vmlinux_xz),b'\0')
new_data = data.replace(vmlinux_xz,new_vmlinux_xz) new_data = data.replace(vmlinux_xz,new_vmlinux_xz)
return new_data return new_data
@@ -150,19 +157,20 @@ def patch_netinstall(key_dict: dict,input_file,output_file=None):
rva = sub_resource.directory.entries[0].data.struct.OffsetToData rva = sub_resource.directory.entries[0].data.struct.OffsetToData
size = sub_resource.directory.entries[0].data.struct.Size size = sub_resource.directory.entries[0].data.struct.Size
data = pe.get_data(rva,size) data = pe.get_data(rva,size)
assert len(data) -4 >= struct.unpack_from('<I',data)[0] ,f'bootloader data size mismathch' _size = struct.unpack('<I',data[:4])[0]
data = data[4:] _data = data[4:4+_size]
try: try:
if data[:2] == b'MZ': if _data[:2] == b'MZ':
new_data = patch_pe(data,key_dict) new_data = patch_pe(_data,key_dict)
elif data[:4] == b'\x7FELF': elif _data[:4] == b'\x7FELF':
new_data = patch_elf(data,key_dict) new_data = patch_elf(_data,key_dict)
else: else:
raise Exception(f'unknown bootloader format {data[:4].hex().upper()}') raise Exception(f'unknown bootloader format {_data[:4].hex().upper()}')
except Exception as e: except Exception as e:
print(f'patch {bootloader["arch"]}({sub_resource.id}) bootloader failed {e}') print(f'patch {bootloader["arch"]}({sub_resource.id}) bootloader failed {e}')
new_data = data new_data = _data
new_data = struct.pack("<I",len(new_data)) + new_data.ljust(len(data),b'\0') new_data = struct.pack("<I",_size) + new_data.ljust(len(_data),b'\0')
new_data = new_data.ljust(size,b'\0')
pe.set_bytes_at_rva(rva,new_data) pe.set_bytes_at_rva(rva,new_data)
pe.write(output_file or input_file) pe.write(output_file or input_file)
elif netinstall[:4] == b'\x7FELF': elif netinstall[:4] == b'\x7FELF':