Compare commits

..

15 Commits

Author SHA1 Message Date
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

View File

@@ -138,6 +138,7 @@ jobs:
if: steps.get_latest.outputs.has_new_version == 'true'
run: |
sudo modprobe nbd
sudo apt-get update
sudo apt-get install -y qemu-utils extlinux > /dev/null
truncate --size 64M 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 -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 ./all_packages/routeros-x86-$LATEST_VERSION.npk routeros-x86-$LATEST_VERSION.npk
sudo umount ./chr
sudo qemu-nbd -d /dev/nbd0
sudo rm -rf ./chr
@@ -267,5 +269,5 @@ jobs:
mikrotik-${{ env.LATEST_VERSION }}.iso
chr-${{ 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

View File

@@ -1,14 +1,11 @@
# MikroTik RouterOS Patch [[English](README_EN.md)]
### [[Discord](https://discord.gg/keV6MWQFtX)] [[Telegram](https://t.me/+99Mw06p3K7NlMmNl)] [[Keygen(tg)](https://t.me/ROS_Keygen_Bot)]
### 国内镜像下载 密码: elseif
[ [123pan](https://www.123pan.com/s/IpxgTd-BYjQh.html) ]
[ [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.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.13](https://elseif.lanzouj.com/b00crdq4kj) ]
@@ -26,6 +23,9 @@
### Chr模式授权许可
![](image/chr.png)
![](image/arm.png)
![](image/mips.png)
## 如何使用Shell
安装 option-{version}.npk 包
telnet到RouterOS,用户名devel,密码与admin的密码相同

View File

@@ -1,6 +1,6 @@
# MikroTik RouterOS Patch [[中文](README.md)]
### [[Discord](https://discord.gg/keV6MWQFtX)] [[Telegram](https://t.me/+99Mw06p3K7NlMmNl)]
### [[Discord](https://discord.gg/keV6MWQFtX)] [[Telegram](https://t.me/+99Mw06p3K7NlMmNl)] [[Keygen(tg)](https://t.me/ROS_Keygen_Bot)]
### 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.
@@ -19,6 +19,9 @@
### license RouterOS for chr
![](image/chr.png)
![](image/arm.png)
![](image/mips.png)
## How to use shell
install option-{version}.npk package
run telnet to routeros with username devel and password is same as admin

BIN
image/arm.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 464 KiB

BIN
image/mips.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 725 KiB

View File

@@ -4,8 +4,7 @@ from sha256 import SHA256
from toyecc import AffineCurvePoint, getcurvebyname, FieldElement,ECPrivateKey,ECPublicKey,Tools
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+/'
SOFTWARE_ID_CHARACTER_TABLE = b'TN0BYX18S5HZ4IA67DGF3LPCJQRUK9MW2VE'

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,}] )
if ljust:
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')
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:
offset2 = offset2 + _data.index(b'\x00\x00\x00\x00\x01\x59\x5A') + 7
_data = _data[offset2:]
print(f'found 7zXZ data offset:{offset1} size:{offset2-offset1}')
return data[offset1:offset2]
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_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'
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_data = data.replace(vmlinux_xz,new_vmlinux_xz)
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
size = sub_resource.directory.entries[0].data.struct.Size
data = pe.get_data(rva,size)
assert len(data) -4 >= struct.unpack_from('<I',data)[0] ,f'bootloader data size mismathch'
data = data[4:]
_size = struct.unpack('<I',data[:4])[0]
_data = data[4:4+_size]
try:
if data[:2] == b'MZ':
new_data = patch_pe(data,key_dict)
elif data[:4] == b'\x7FELF':
new_data = patch_elf(data,key_dict)
if _data[:2] == b'MZ':
new_data = patch_pe(_data,key_dict)
elif _data[:4] == b'\x7FELF':
new_data = patch_elf(_data,key_dict)
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:
print(f'patch {bootloader["arch"]}({sub_resource.id}) bootloader failed {e}')
new_data = data
new_data = struct.pack("<I",len(new_data)) + new_data.ljust(len(data),b'\0')
new_data = _data
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.write(output_file or input_file)
elif netinstall[:4] == b'\x7FELF':