版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、獨釣寒江雪由于我的C用的比較少,所以大部分都用的匯編,部分地方用匯編寫不是很方便,所以我用的C,由于只是學(xué)習(xí),所以內(nèi)核地址我沒有計算都是硬編碼的。過DNF主要分為三步,也許我的思路不太正確,反正可以O(shè)D調(diào)試,下斷。程序沒怎么修邊幅,因為只是測試,所以一般都沒有寫更改內(nèi)核后的恢復(fù),不過不妨礙使用。第一步,這也是最起碼的,你必須要能夠打開游戲進(jìn)程和線程,能夠開打進(jìn)程和線程后不被檢測到第二步,能夠讀寫進(jìn)村內(nèi)存第三步,能夠用OD附加游戲進(jìn)程第四步,能夠下硬件斷點而不被檢測跳過NtReadVirtualMemory,NtWriteVirtualMemory函數(shù)頭的鉤子代碼:#include typede
2、f struct _SERVICE_DESCRIPTOR_TABLEPVOID ServiceTableBase;PULONG ServiceCounterTableBase;ULONG NumberOfService;ULONG ParamTableBase;SERVICE_DESCRIPTOR_TABLE,*PSERVICE_DESCRIPTOR_TABLE; /由于KeServiceDescriptorTable只有一項,這里就簡單點了extern PSERVICE_DESCRIPTOR_TABLE KeServiceDescriptorTable;/KeServiceDescripto
3、rTable為導(dǎo)出函數(shù)/VOID Hook(;VOID Unhook(;VOID OnUnload(IN PDRIVER_OBJECT DriverObject;/ULONG JmpAddress;/跳轉(zhuǎn)到NtOpenProcess里的地址ULONG JmpAddress1;/跳轉(zhuǎn)到NtOpenProcess里的地址ULONG OldServiceAddress;/原來NtOpenProcess的服務(wù)地址ULONG OldServiceAddress1;/原來NtOpenProcess的服務(wù)地址/_declspec(naked NTSTATUS _stdcall MyNtReadVirtual
4、Memory(HANDLE ProcessHandle,PVOID BaseAddress,PVOID Buffer,ULONG NumberOfBytesToRead,PULONG NumberOfBytesReaded /跳過去_asmpush 0x1cpush 804eb560h /共十個字節(jié)jmp JmpAddress _declspec(naked NTSTATUS _stdcall MyNtWriteVirtualMemory(HANDLE ProcessHandle,PVOID BaseAddress,PVOID Buffer,ULONG NumberOfBytesToWrite
5、,PULONG NumberOfBytesReaded /跳過去_asmpush 0x1cpush 804eb560h /共十個字節(jié)jmp JmpAddress1 /NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPathDriverObject->DriverUnload = OnUnload;DbgPrint("Unhooker load"Hook(;return STATUS_SUCCESS;/VOID OnUnload(IN PDRIVER_OBJECT D
6、riverObjectDbgPrint("Unhooker unload!"Unhook(;/VOID Hook(ULONG Address, Address1;Address = (ULONGKeServiceDescriptorTable->ServiceTableBase + 0xBA * 4;/0x7A為NtOpenProcess服務(wù)IDAddress1 = (ULONGKeServiceDescriptorTable->ServiceTableBase + 0x115 * 4;/0x7A為NtOpenProcess服務(wù)IDDbgPrint("
7、Address:0x%08X",Address;OldServiceAddress = *(ULONG*Address;/保存原來NtOpenProcess的地址OldServiceAddress1 = *(ULONG*Address1;/保存原來NtOpenProcess的地址DbgPrint("OldServiceAddress:0x%08X",OldServiceAddress;DbgPrint("OldServiceAddress1:0x%08X",OldServiceAddress1;DbgPrint("MyNtOpenPr
8、ocess:0x%08X",MyNtReadVirtualMemory;DbgPrint("MyNtOpenProcess:0x%08X",MyNtWriteVirtualMemory;JmpAddress = (ULONG0x805b528a + 7; /跳轉(zhuǎn)到NtOpenProcess函數(shù)頭10的地方,這樣在其前面寫的JMP都失效了JmpAddress1 = (ULONG0x805b5394 + 7;DbgPrint("JmpAddress:0x%08X",JmpAddress;DbgPrint("JmpAddress1:0x%0
9、8X",JmpAddress1;_asm /去掉內(nèi)存保護(hù)climov eax,cr0and eax,not 10000hmov cr0,eax*(ULONG*Address = (ULONGMyNtReadVirtualMemory;/HOOK SSDT*(ULONG*Address1 = (ULONGMyNtWriteVirtualMemory;_asm /恢復(fù)內(nèi)存保護(hù) mov eax,cr0or eax,10000hmov cr0,eaxsti/VOID Unhook(ULONG Address, Address1;Address = (ULONGKeServiceDescrip
10、torTable->ServiceTableBase + 0xBA * 4;/查找SSDTAddress1 = (ULONGKeServiceDescriptorTable->ServiceTableBase + 0x115 * 4;_asmclimov eax,cr0and eax,not 10000hmov cr0,eax*(ULONG*Address = (ULONGOldServiceAddress;/還原SSDT*(ULONG*Address1 = (ULONGOldServiceAddress1;/還原SSDT_asm mov eax,cr0or eax,10000hm
11、ov cr0,eaxstiDbgPrint("Unhook"由于它不斷對DebugPort清零,所以要修改調(diào)試相關(guān)函數(shù),使得所有的訪問DebugPort的地方全部訪問EPROCESS中的ExitTime字節(jié),這樣它怎么清零都無效了,也檢測不到代碼:.386.model flat, stdcalloption casemap:noneinclude dnf_hook.inc.constDspdo_1 equ 80643db6hDmpp_1 equ 80642d5ehDmpp_2 equ 80642d64hDct_1 equ 806445d3hDqm_1 equ 8064308
12、9hKde_1 equ 804ff5fdhDfe_1 equ 80644340hPcp_1 equ 805d1a0dhMcp_1 equ 805b0c06hMcp_2 equ 805b0d7fhDmvos_1 equ 8064497fhDumvos_1 equ 80644a45hPet_1 equ 805d32f8hDet_1 equ 8064486chDep_1 equ 806448e6h.code;還原自己的HookDriverUnload proc pDriverObject:PDRIVER_OBJECTret DriverUnload endpModifyFuncAboutDbg pr
13、oc addrOdFunc, cmd_1, cmd_2pushadmov ebx, addrOdFuncmov eax, cmd_1mov DWORD ptr ebx, eaxmov eax, cmd_2mov DWORD ptr ebx + 4, eaxpopadret ModifyFuncAboutDbg endpDriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRINGclimov eax, cr0and eax, not 10000hmov cr0, eaxinvoke ModifyFun
14、cAboutDbg, Dspdo_1, 90784789h, 0fde89090hinvoke ModifyFuncAboutDbg, Dmpp_1, 90787e39h, 950f9090hinvoke ModifyFuncAboutDbg, Dct_1, 90785e39h, 840f9090hinvoke ModifyFuncAboutDbg, Dqm_1, 9078408bh, 45899090hinvoke ModifyFuncAboutDbg, Kde_1, 90787839h, 13749090hinvoke ModifyFuncAboutDbg, Dfe_1, 9078418b
15、h, 0d2329090hinvoke ModifyFuncAboutDbg, Pcp_1, 90784389h, 45f69090hinvoke ModifyFuncAboutDbg, Mcp_1, 90785e39h, 950f9090hinvoke ModifyFuncAboutDbg, Mcp_2, 90784a89h, 5e399090hinvoke ModifyFuncAboutDbg, Dmvos_1, 9078498bh, 0cb3b9090hinvoke ModifyFuncAboutDbg, Dumvos_1, 00787983h, 74909090hinvoke Modi
16、fyFuncAboutDbg, Pet_1, 00787f83h, 74909090hinvoke ModifyFuncAboutDbg, Det_1, 9078498bh, 0c9859090hinvoke ModifyFuncAboutDbg, Dep_1, 9078498bh, 0c9859090h;invoke ModifyFuncAboutDbg, Dmpp_2, 8bc0950fh, 8b90c032hmov eax, pDriverObjectassume eax : ptr DRIVER_OBJECTmov eax.DriverUnload, offset DriverUnlo
17、adassume eax : nothingmov eax, cr0or eax, 10000hmov cr0, eaxstimov eax, STATUS_SUCCESSretDriverEntry endpend DriverEntry繞過NtOpenProcess,NtOpenThread,KiAttachProcess以及最重要的,不能讓它檢測到有硬件斷點,所以要對CONTEXT做一些偽裝,把真實的DR0DR7的數(shù)據(jù)存放到別的地方,OD訪問的時候返回正確的數(shù)據(jù),如果是DNF要獲取上下文,就稍微做下手腳代碼:.386.model flat, stdcalloption casemap:n
18、oneinclude dnf_hook.inc.constNtOpenProcessHookAddr equ 805cc626hNtOpenProcessRetAddr equ 805cc631hNtOpenProcessNoChange equ 805cc62chNtOpenThreadHookAddr equ 805cc8a8hNtOpenThreadRetAddr equ 805cc8b3hNtOpenThreadNoChange equ 805cc8aehKiAttachProcessAddr equ 804f9a08hKiAttachProcessRetAddr equ 804f9a
19、0fhObOpenObjectByPointerAddr equ 805bcc78hNtGetContextThreadAddr equ 805d2551h;805c76a3hNtGetContextThreadRetAddr equ 805c76a7h;805d2555h.datanameOffset dd ?threadCxtLink dd 0tmpLink dd ?.codeGetProcessName procinvoke PsGetCurrentProcessmov ebx, eaxadd ebx, nameOffsetinvoke DbgPrint, $CTA0("n&q
20、uot;push ebxinvoke DbgPrint, ebxpop ebxinvoke strncmp, $CTA0("DNF.exe", ebx, 6push eaxinvoke DbgPrint, $CTA0("n"pop eaxretGetProcessName endpHookCode proc;執(zhí)行被覆蓋的代碼push dword ptr ebp-38hpush dword ptr ebp-24h;判斷是否dnf的進(jìn)程invoke GetProcessName.if !eax ;如果是DNF自己的進(jìn)程,那么跳轉(zhuǎn)回去執(zhí)行它的Hook代碼pus
21、hadinvoke DbgPrint, $CTA0("nNotUnHookn"popadmov eax, NtOpenProcessNoChange;805c13e6hjmp eax.else ;如果不是DNF自己的進(jìn)程,那么直接調(diào)用ObOpenObjectByPointer,再返回到后面pushadinvoke DbgPrint, $CTA0("nUnHookn"popadmov eax, ObOpenObjectByPointerAddr;805b13f0hcall eaxmov ebx, NtOpenProcessRetAddr;805c13ebh
22、jmp ebx.endifHookCode endp;獲取系統(tǒng)名稱偏移GetNameOffset proc epelocal tmpOffsetpushadmov ebx, epeinvoke strlen, $CTA0("System"xor ecx, ecx:push eaxpush ecxinvoke strncmp, $CTA0("System", ebx, eaxpop ecx.if !eaxpop eaxmov tmpOffset, ecxpopadmov eax, tmpOffsetret.elseifpop eaxinc ebxinc e
23、cxcmp ecx, 4096je Fjmp B.endif:popadmov eax, -1retGetNameOffset endpHook procpushad;頭5字節(jié)跳轉(zhuǎn)mov eax, offset HookCodesub eax, NtOpenProcessHookAddr;805c13e0h;805c13edhsub eax, 5mov ebx, NtOpenProcessHookAddr;805c13e0h;805c13edhmov cl, 0E9hmov BYTE PTR ebx, clmov DWORD PTR ebx + 1, eaxpopadretHook endpH
24、ookThreadCode proc;執(zhí)行被覆蓋的代碼push dword ptr ebp-34hpush dword ptr ebp-20h;判斷是否dnf的進(jìn)程invoke GetProcessName.if !eax ;如果是DNF自己的進(jìn)程,那么跳轉(zhuǎn)回去執(zhí)行它的Hook代碼pushadinvoke DbgPrint, $CTA0("nNotUnHookn"popadmov eax, NtOpenThreadNoChange;805c13e6hjmp eax.else ;如果不是DNF自己的進(jìn)程,那么直接調(diào)用ObOpenObjectByPointer,再返回到后面pu
25、shadinvoke DbgPrint, $CTA0("nUnHookn"popadmov eax, ObOpenObjectByPointerAddr;805b13f0hcall eaxmov ebx, NtOpenThreadRetAddr;805c13ebhjmp ebx.endifHookThreadCode endpHookThread procpushad;頭5字節(jié)跳轉(zhuǎn)mov eax, offset HookThreadCodesub eax, NtOpenThreadHookAddr;805c13e0h;805c13edhsub eax, 5mov ebx,
26、NtOpenThreadHookAddr;805c13e0h;805c13edhmov cl, 0E9hmov BYTE PTR ebx, clmov DWORD PTR ebx + 1, eaxpopadretHookThread endpHookDbg procmov edi, edipush ebpmov ebp, esppush ebxpush esimov esi, KiAttachProcessRetAddrjmp esiHookDbg endpDbg procpushad;頭5字節(jié)跳轉(zhuǎn)mov eax, offset HookDbgsub eax, KiAttachProcessA
27、ddr;805c13e0h;805c13edhsub eax, 5mov ebx, KiAttachProcessAddr;805c13e0h;805c13edhmov cl, 0E9hmov BYTE PTR ebx, clmov DWORD PTR ebx + 1, eaxpopadretDbg endp;還原自己的HookDriverUnload proc pDriverObject:PDRIVER_OBJECTclimov eax, cr0and eax, not 10000hmov cr0, eax;還原進(jìn)程處理mov eax, 0ffc875ffhmov ebx, 805cc656
28、hmov DWORD ptr ebx, eaxmov eax, 43e8dc75hmov DWORD ptr ebx + 4, eax;還原線程處理mov eax, 0ffcc75ffhmov ebx, 805cc8d8hmov DWORD ptr ebx, eaxmov eax, 0c1e8e075hmov DWORD ptr ebx + 4, eax;還原調(diào)試處理mov eax, 08b55ff8bhmov ebx, 804f9a08hmov DWORD ptr ebx, eaxmov eax, 08b5653echmov DWORD ptr ebx + 4, eaxmov eax, cr
29、0or eax, 10000hmov cr0, eaxstiret DriverUnload endp;顯示LinkTable的信息ShowLinkTableInfo proc ptrLTpushadinvoke DbgPrint, $CTA0("nThe LinkTable Info:n"mov ebx, ptrLTmov eax, (LinkTable ptr ebx.ThreadHandleinvoke DbgPrint, $CTA0("ThreadHandle:%0Xn", eaxmov ebx, ptrLTmov eax, (LinkTable
30、 ptr ebx.Dr0Seginvoke DbgPrint, $CTA0("Dr0Seg:%0Xn", eaxmov ebx, ptrLTmov eax, (LinkTable ptr ebx.Dr1Seginvoke DbgPrint, $CTA0("Dr1Seg:%0Xn", eaxmov ebx, ptrLTmov eax, (LinkTable ptr ebx.Dr2Seginvoke DbgPrint, $CTA0("Dr2Seg:%0Xn", eaxmov ebx, ptrLTmov eax, (LinkTable pt
31、r ebx.Dr3Seginvoke DbgPrint, $CTA0("Dr3Seg:%0Xn", eaxmov ebx, ptrLTmov eax, (LinkTable ptr ebx.Dr6Seginvoke DbgPrint, $CTA0("Dr6Seg:%0Xn", eaxmov ebx, ptrLTmov eax, (LinkTable ptr ebx.Dr7Seginvoke DbgPrint, $CTA0("Dr7Seg:%0Xn", eaxmov ebx, ptrLTmov eax, (LinkTable ptr e
32、bx.LinkPtrinvoke DbgPrint, $CTA0("LinkPtr:%0Xn", eaxmov ebx, ptrLTmov eax, (LinkTable ptr ebx.NextLinkPtrinvoke DbgPrint, $CTA0("NextLinkPtr:%0Xn", eaxpopadretShowLinkTableInfo endp ;判斷該線程是否存在;如果不存在則返回0,存在則返回指向該鏈表的指針,1代表鏈表為空ExsitsLinkTable proc pHandlepushadmov eax, threadCxtLink
33、.if !eax ;鏈表為空pushadinvoke DbgPrint, $CTA0("nLinkTable Is Null.n"popad popadmov eax, 1ret.endif:mov ebx, (LinkTable ptr eax.ThreadHandlecmp ebx, pHandle ;如果匹配已經(jīng)存在je Fmov eax, (LinkTable ptr eax.NextLinkPtr.if !eax ;已經(jīng)到達(dá)末尾,沒有找到匹配pushadinvoke DbgPrint, $CTA0("pHandle Is Not Found.n"
34、;popadpopadxor eax, eaxret.endifjmp B:pushadinvoke DbgPrint, $CTA0("npHandle Is Exsits.n"popadinvoke ShowLinkTableInfo, eax;返回鏈表指針mov tmpLink, eaxpopadmov eax, tmpLinkretExsitsLinkTable endp;拷貝Context到LinkTable中CopyContextToLinkTable proc ptrContext, ptrLTpushadmov ebx, ptrContextmov edx,
35、ptrLTmov ecx, 4:mov eax, DWORD ptr ebx + ecxmov DWORD ptr edx + ecx, eaxadd ecx, 4cmp ecx, 18hjbe BpopadretCopyContextToLinkTable endp;添加LinkTable表AddLinkTable proc pHandle, ptrContextpushadinvoke ExsitsLinkTable, pHandle.if eax > 1;已經(jīng)存在只需要更新dr寄存器即可invoke CopyContextToLinkTable, eax, ptrContext.e
36、lsepush eaxinvoke ExAllocatePool, 1, size LinkTable.if eax;申請內(nèi)存成功mov ebx, eaxpop eax;置地一個元素mov ecx, pHandlemov (LinkTable ptr ebx.ThreadHandle, ecx;拷貝dr寄存器的值invoke CopyContextToLinkTable, ptrContext, ebx;置另外兩個元素mov (LinkTable ptr ebx.LinkPtr, ebxmov (LinkTable ptr ebx.NextLinkPtr, 0invoke ShowLinkTa
37、bleInfo, ebx;把新的鏈表項添加到鏈表中.if eax = 1;如果鏈表為空,直接加在表頭mov threadCxtLink, ebx.else;如果鏈表不為空則加到末尾mov eax, threadCxtLink:;指向下一個元素mov ecx, (LinkTable ptr eax.NextLinkPtrtest ecx, ecxje Fmov eax, ecxjmp B:mov (LinkTable ptr eax.NextLinkPtr, ebx.endif.else;申請內(nèi)存失敗pop eaxpushadinvoke DbgPrint, $CTA0("nAlloc
38、 Memory Faild.n"popadjmp F.endif.endif:popadretAddLinkTable endp;判斷進(jìn)程是否過慮進(jìn)程;如果是需要過慮的進(jìn)程返回值為1,否則返回0IsFilterProcess procpushad;獲取當(dāng)前進(jìn)程名invoke PsGetCurrentProcessmov ebx, eaxadd ebx, nameOffsetinvoke DbgPrint, $CTA0("n%s: Call NtGetContextThread n", ebxinvoke strncmp, $CTA0("DNF.exe&q
39、uot;, ebx, 7test eax, eaxjne Fpopadmov eax, 1ret:popadxor eax, eaxretIsFilterProcess endp;顯示Context的調(diào)試寄存器ShowDrRegInfo proc ptrContextpushadinvoke DbgPrint, $CTA0("nThe Context Info:n"mov ebx, ptrContextmov eax, DWORD ptr ebx + 4invoke DbgPrint, $CTA0("Dr0:%0Xn", eaxmov ebx, ptrC
40、ontextmov eax, DWORD ptr ebx + 8invoke DbgPrint, $CTA0("Dr1:%0Xn", eaxmov ebx, ptrContextmov eax, DWORD ptr ebx + 0chinvoke DbgPrint, $CTA0("Dr2:%0Xn", eaxmov ebx, ptrContextmov eax, DWORD ptr ebx + 10hinvoke DbgPrint, $CTA0("Dr3:%0Xn", eaxmov ebx, ptrContextmov eax, DW
41、ORD ptr ebx + 14hinvoke DbgPrint, $CTA0("Dr6:%0Xn", eaxmov ebx, ptrContextmov eax, DWORD ptr ebx + 18hinvoke DbgPrint, $CTA0("Dr7:%0Xn", eaxpopadretShowDrRegInfo endp;恢復(fù)被隱藏的dr寄存器RecoveryDrReg proc ptrContext, pHandlepushad;定位到LinkTablemov ebx, threadCxtLinkNEXT:test ebx, ebxjne F
42、 ;如果沒有遍歷完popadret:mov eax, (LinkTable ptr ebx.ThreadHandlecmp eax, pHandleje F ;如果找到匹配項mov ebx, (LinkTable ptr ebx.NextLinkPtrjmp NEXT:;拷貝完畢后立即結(jié)束invoke CopyContextToLinkTable, ebx, ptrContextxor ebx, ebxjmp NEXTRecoveryDrReg endp;清空Context的dr寄存器ClearDrReg proc ptrContextpushadmov ebx, ptrContextmov ecx, 4:mov DWORD ptr ebx + ecx, 0add ecx, 4cmp ecx, 18hjbe B
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2022年廣東省中山市公開招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2024年四川省自貢市公開招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2021年浙江省衢州市公開招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2022年山東省日照市公開招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2022年廣東省云浮市公開招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 河南省平頂山市(2024年-2025年小學(xué)六年級語文)部編版質(zhì)量測試(下學(xué)期)試卷及答案
- 2025年特種用途飛機(jī)項目發(fā)展計劃
- 廣西貴港市(2024年-2025年小學(xué)六年級語文)部編版開學(xué)考試(下學(xué)期)試卷及答案
- 2024版成都臨時展覽租賃合同3篇
- 2024年電子元器件買賣合同模板
- 2024年土石方工程合同模板(三篇)
- 云南2025年中國工商銀行云南分行秋季校園招聘650人筆試歷年參考題庫解題思路附帶答案詳解
- 中級水工閘門運(yùn)行工技能鑒定理論考試題及答案
- 2024年蘭州市城關(guān)區(qū)四年級數(shù)學(xué)第一學(xué)期期末統(tǒng)考模擬試題含解析
- 奮躍而上 飛速奔跑(2023年黑龍江牡丹江中考語文試卷議論文閱讀題及答案)
- 記賬實操-足浴店賬務(wù)處理分錄
- 九一八《勿忘國恥吾輩當(dāng)自強(qiáng)》教案
- 2024年離婚協(xié)議書簡單離婚協(xié)議書
- 2024年新北師大版一年級上冊數(shù)學(xué)教學(xué)課件 總復(fù)習(xí)(1) 數(shù)與代數(shù)
- 期末試卷(試題)-2024-2025學(xué)年二年級上冊數(shù)學(xué)北師大版
- 高二數(shù)學(xué)數(shù)列小結(jié)省公開課金獎全國賽課一等獎微課獲獎?wù)n件
評論
0/150
提交評論