TwMS v241.2 MSCRC Bypass
提供三個版本版本1:
code 最少,但有 side effect
已知問題: 進出商場後 buffer 圖示會消失
版本2:
使用 thread, enable 後只要 thread 結束就可以寫入其他 crc 數據
版本3:
不使用 thread, 在角色登入遊戲後才會初始化,在這之後才能寫入其他 crc 數據
這邊我是在要檢查CRC時才做初始化,也可以改在別的地方去做初始化
版本2、3我是 alloc 整個 exe 範圍,不過實際上不需要這麼大,我在版本3有紀錄 crc1、crc2的範圍,有需要的可以自己確認一下調整大小
MapleStory.exe v241.2
start: 140000000
end:14B3FC000
size: B3FC000
crc1: 147F9045D
min: 140001005
max: 14463E7FF
crc2: 147B01A2B
min: 147F90149
max: 147F906DD// TwMS v241.2 MSCRC Bypass v1
143B7F610:
xor eax,eax
ret
nop 2
143B7F610:
mov ,rdx// TwMS v241.2 MSCRC Bypass v2
Alloc(ms_mem_dup, 188727296) //B3FC000
Alloc(crc_bypass_entry, 1024, MapleStory.exe+7F9045D)
Alloc(crc_bypass_thread, 512)
createthread(crc_bypass_thread)
define(ms_mem_start,140000000)
define(ms_mem_end,14B3FC000)
define(crc_1, 147F9045D)
define(crc_1_ret, 147F90462)
define(crc_2, 147B01A2B)
define(crc_2_ret, 147B01A30)
crc_bypass_thread:
mov rdx,
mov rax,
sub rax,rdx
xor rdx,rdx
mov rcx,8
div rcx
mov rcx,rax
mov rsi,
mov rdi,ms_mem_dup
rep movsq
mov rdi,
mov byte ptr , E9
inc rdi
mov rax,crc_1_bypass_entry
mov rdx,crc_1_ret
sub rax,rdx
mov ,eax
lea rdi,
mov byte ptr ,90
mov rdi,
mov byte ptr , E9
inc rdi
mov rax,crc_2_bypass_entry
mov rdx,crc_2_ret
sub rax,rdx
mov ,eax
lea rdi,
mov byte ptr ,90
jmp terminatethread
crc_bypass_entry:
crc_1_bypass_entry:
cmp r12,
jb crc_1_exit
cmp r12,
jae crc_1_exit
sub r12,
push rax
mov rax,ms_mem_dup
add r12,rax
pop rax
crc_1_exit:
add al,
pop r12
jmp crc_1_ret
crc_2_bypass_entry:
cmp rcx,qword ptr
jb crc_2_exit
cmp rcx,qword ptr
jae crc_2_exit
sub rcx,qword ptr
push rax
mov rax,ms_mem_dup
add rcx,rax
pop rax
crc_2_exit:
mov ecx,
add ,ecx
jmp crc_2_ret
ms_start:
DQ ms_mem_start
ms_end:
DQ ms_mem_end
ms_crc1:
DQ crc_1
ms_crc2:
DQ crc_2
DeAlloc(ms_mem_dup)
DeAlloc(crc_bypass_entry)
DeAlloc(crc_bypass_thread)
crc_1:
add al,
pop r12
crc_2:
mov ecx,
add ,ecx// TwMS v241.2 MSCRC Bypass v3
Alloc(msmem, 188727296) //B3FC000
Alloc(crc_bypass_entry, 1024, MapleStory.exe+7F9045D)
GlobalAlloc(crc1_min,8)
GlobalAlloc(crc1_max,8)
GlobalAlloc(crc2_min,8)
GlobalAlloc(crc2_max,8)
crc1_min:
DQ 7fffffffffff
crc1_max:
DQ 00
crc2_min:
DQ 7fffffffffff
crc2_max:
DQ 00
147F9045D:
DB E9
DD crc_bypass1-147F90462
DB 90
147B01A2B:
DB E9
DD crc_bypass2-147B01A30
DB 90
crc_bypass_entry:
nop
crc_bypass1:
/////////////////////////
cmp r12,
jae Next_1
mov ,r12
Next_1:
cmp r12,
jbe Next_2
mov ,r12
Next_2:
/////////////////////////
cmp byte ptr, 0
jne crc_bypass1_main
inc qword ptr
call set_restore_1
call set_restore_2
call ms_mem_dup
call set_bypass_1
call set_bypass_2
jmp crc_bypass1_main
crc_bypass2:
/////////////////////////
cmp rcx,
jae Next2_1
mov ,rcx
Next2_1:
cmp rcx,
jbe Next2_2
mov ,rcx
Next2_2:
/////////////////////////
cmp byte ptr, 0
jne crc_bypass2_main
inc qword ptr
call set_restore_1
call set_restore_2
call ms_mem_dup
call set_bypass_1
call set_bypass_2
jmp crc_bypass2_main
///////////////////////////////////////////////
crc_bypass1_main:
cmp r12,qword ptr
jb crc_bypass1_return
cmp r12,qword ptr
jae crc_bypass1_return
sub r12,qword ptr
push rax
mov rax,msmem
add r12,rax
pop rax
crc_bypass1_return:
add al,
pop r12
jmp 147F90463
crc_bypass2_main:
cmp rcx,qword ptr
jb crc_bypass2_return
cmp rcx,qword ptr
jae crc_bypass2_return
sub rcx,qword ptr
push rax
mov rax,msmem
add rcx,rax
pop rax
crc_bypass2_return:
mov ecx,
add ,ecx
jmp 147B01A31
///////////////////////////////////////////////
set_restore_1:
push rsi
push rdi
mov rdi,
mov rsi,B3535C4124040241
mov ,rsi
pop rsi
pop rdi
ret
///////////////////////////////////////////////
set_restore_2:
push rsi
push rdi
mov rdi,
mov rsi,499C004D0141098B
mov ,rsi
pop rsi
pop rdi
ret
///////////////////////////////////////////////
set_bypass_1:
push rax
push rdx
push rsi
push rdi
mov rdi,qword ptr
mov byte ptr , E9
inc rdi
mov rax,crc_bypass1
mov rdx,147F90462
sub rax,rdx
mov dword ptr ,eax
lea rdi,
mov byte ptr ,90
pop rdi
pop rsi
pop rdx
pop rax
ret
///////////////////////////////////////////////
set_bypass_2:
push rax
push rdx
push rsi
push rdi
mov rdi,qword ptr
mov byte ptr , E9
inc rdi
mov rax,crc_bypass2
mov rdx,147B01A30
sub rax,rdx
mov dword ptr ,eax
lea rdi,
mov byte ptr ,90
pop rdi
pop rsi
pop rdx
pop rax
ret
///////////////////////////////////////////////
ms_mem_dup:
push rax
push rcx
push rdx
push rsi
push rdi
pushfq
mov rdx,qword ptr
mov rax,qword ptr
sub rax,rdx
xor rdx,rdx
mov rcx,8
div rcx
mov rcx,rax
mov rsi,qword ptr
mov rdi,msmem
rep movsq
//mov rax,crc_bypass_init_done
//inc
popfq
pop rdi
pop rsi
pop rdx
pop rcx
pop rax
ret
////////////////////////////////////
ms_start:
DQ 140000000
ms_end:
DQ 14B3FC000
ms_crc1:
DQ 147F9045D
ms_crc2:
DQ 147B01A2B
ms_crc1_start:
DQ 140001005
ms_crc1_end:
DQ 14463E7FF
ms_crc2_start:
DQ 147F90149
ms_crc2_end:
DQ 147F906DD
crc_bypass_init_done:
DQ 00
////////////////////////////////////
DeAlloc(msmem)
DeAlloc(crc_bypass_entry)
147F9045D:
add al,
pop r12
147B01A2B:
mov ecx,
add ,ecx 可以問一下副作用是甚麼嗎@@ 第一個 李崇文 發表於 2022-3-3 17:28 static/image/common/back.gif
可以問一下副作用是甚麼嗎@@ 第一個
喔喔 我以為是很負面ㄉ 感謝 這個大神來的,心目中的 本帖最後由 dgqweasdzxc 於 2022-3-9 22:32 編輯
請問這樣的流程:
1.遊戲play前注入 版本1代碼
2.然後進入遊戲后注入其他需CRC檢測的代碼
3.正常使用?
這樣的流程對嗎?大大!!
還有 最後弱弱的問下,thread是綫程,是指哪個的綫程啊?
頁:
[1]