常見入口ide
Borland Delphi 6.0 - 7.0 00509CB0 > $ 55 PUSH EBP 00509CB1 . 8BEC MOV EBP,ESP 00509CB3 . 83C4 EC ADD ESP,-14 00509CB6 . 53 PUSH EBX 00509CB7 . 56 PUSH ESI 00509CB8 . 57 PUSH EDI 00509CB9 . 33C0 XOR EAX,EAX 00509CBB . 8945 EC MOV DWORD PTR SS:[EBP-14],EAX 00509CBE . B8 20975000 MOV EAX,unpack.00509720 00509CC3 . E8 84CCEFFF CALL unpack.0040694C Microsoft Visual C++ 6.0 00496EB8 >/$ 55 PUSH EBP ; (初始 cpu 選擇) 00496EB9 |. 8BEC MOV EBP,ESP 00496EBB |. 6A FF PUSH -1 00496EBD |. 68 40375600 PUSH Screensh.00563740 00496EC2 |. 68 8CC74900 PUSH Screensh.0049C78C ; SE 處理程序安裝 00496EC7 |. 64:A1 0000000>MOV EAX,DWORD PTR FS:[0] 00496ECD |. 50 PUSH EAX 00496ECE |. 64:8925 00000>MOV DWORD PTR FS:[0],ESP 00496ED5 |. 83EC 58 SUB ESP,58 Microsoft Visual C++ 6.0 [Overlay] E語言 00403831 >/$ 55 PUSH EBP 00403832 |. 8BEC MOV EBP,ESP 00403834 |. 6A FF PUSH -1 00403836 |. 68 F0624000 PUSH Nisy521.004062F0 0040383B |. 68 A44C4000 PUSH Nisy521.00404CA4 ; SE 處理程序安裝 00403840 |. 64:A1 0000000>MOV EAX,DWORD PTR FS:[0] 00403846 |. 50 PUSH EAX 00403847 |. 64:8925 00000>MOV DWORD PTR FS:[0],ESP Microsoft Visual Basic 5.0 / 6.0 00401166 - FF25 6C104000 JMP DWORD PTR DS:[<&MSVBVM60.#100>] ; MSVBVM60.ThunRTMain 0040116C > 68 147C4000 PUSH PACKME.00407C14 00401171 E8 F0FFFFFF CALL <JMP.&MSVBVM60.#100> 00401176 0000 ADD BYTE PTR DS:[EAX],AL 00401178 0000 ADD BYTE PTR DS:[EAX],AL 0040117A 0000 ADD BYTE PTR DS:[EAX],AL 0040117C 3000 XOR BYTE PTR DS:[EAX],AL 或省略第一行的JMP 00401FBC > 68 D0D44000 push dumped_.0040D4D0 00401FC1 E8 EEFFFFFF call <jmp.&msvbvm60.ThunRTMain> 00401FC6 0000 add byte ptr ds:[eax],al 00401FC8 0000 add byte ptr ds:[eax],al 00401FCA 0000 add byte ptr ds:[eax],al 00401FCC 3000 xor byte ptr ds:[eax],al 00401FCE 0000 add byte ptr ds:[eax],al BC++ 0040163C > $ /EB 10 JMP SHORT BCLOCK.0040164E 0040163E |66 DB 66 ; CHAR 'f' 0040163F |62 DB 62 ; CHAR 'b' 00401640 |3A DB 3A ; CHAR ':' 00401641 |43 DB 43 ; CHAR 'C' 00401642 |2B DB 2B ; CHAR '+' 00401643 |2B DB 2B ; CHAR '+' 00401644 |48 DB 48 ; CHAR 'H' 00401645 |4F DB 4F ; CHAR 'O' 00401646 |4F DB 4F ; CHAR 'O' 00401647 |4B DB 4B ; CHAR 'K' 00401648 |90 NOP 00401649 |E9 DB E9 0040164A . |98E04E00 DD OFFSET BCLOCK.___CPPdebugHook 0040164E > \A1 8BE04E00 MOV EAX,DWORD PTR DS:[4EE08B] 00401653 . C1E0 02 SHL EAX,2 00401656 . A3 8FE04E00 MOV DWORD PTR DS:[4EE08F],EAX 0040165B . 52 PUSH EDX 0040165C . 6A 00 PUSH 0 ; /pModule = NULL 0040165E . E8 DFBC0E00 CALL <JMP.&KERNEL32.GetModuleHandleA> ; \GetModuleHandleA 00401663 . 8BD0 MOV EDX,EAX Dasm: 00401000 >/$ 6A 00 PUSH 0 ; /pModule = NULL 00401002 |. E8 C50A0000 CALL <JMP.&KERNEL32.GetModuleHandleA> ; \GetModuleHandleA 00401007 |. A3 0C354000 MOV DWORD PTR DS:[40350C],EAX 0040100C |. E8 B50A0000 CALL <JMP.&KERNEL32.GetCommandLineA> ; [GetCommandLineA 00401011 |. A3 10354000 MOV DWORD PTR DS:[403510],EAX 00401016 |. 6A 0A PUSH 0A ; /Arg4 = 0000000A 00401018 |. FF35 10354000 PUSH DWORD PTR DS:[403510] ; |Arg3 = 00000000 0040101E |. 6A 00 PUSH 0 ; |Arg2 = 00000000 00401020 |. FF35 0C354000 PUSH DWORD PTR DS:[40350C] ; |Arg1 = 00000000
經常使用斷點(OD)函數
經常使用斷點(OD中)
攔截窗口:
bp CreateWindow 建立窗口
bp CreateWindowEx(A) 建立窗口
bp ShowWindow 顯示窗口
bp UpdateWindow 更新窗口
bp GetWindowText(A) 獲取窗口文本
攔截消息框:
bp MessageBox(A) 建立消息框
bp MessageBoxExA 建立消息框
bp MessageBoxIndirect(A) 建立定製消息框
攔截警告聲:
bp MessageBeep 發出系統警告聲(若是沒有聲卡就直接驅動系統喇叭發聲)
攔截對話框:
bp DialogBox 建立模態對話框
bp DialogBoxParam(A) 建立模態對話框
bp DialogBoxIndirect 建立模態對話框
bp DialogBoxIndirectParam(A) 建立模態對話框
bp CreateDialog 建立非模態對話框
bp CreateDialogParam(A) 建立非模態對話框
bp CreateDialogIndirect 建立非模態對話框
bp CreateDialogIndirectParam(A) 建立非模態對話框
bp GetDlgItemText(A) 獲取對話框文本
bp GetDlgItemInt 獲取對話框整數值
攔截剪貼板:
bp GetClipboardData 獲取剪貼板數據
攔截註冊表:
bp RegOpenKey(A) 打開子健
bp RegOpenKeyEx 打開子健
bp RegQueryValue(A) 查找子健
bp RegQueryValueEx 查找子健
bp RegSetValue(A) 設置子健
bp RegSetValueEx(A) 設置子健
功能限制攔截斷點:
bp EnableMenuItem 禁止或容許菜單項
bp EnableWindow 禁止或容許窗口
攔截時間:
bp GetLocalTime 獲取本地時間
bp GetSystemTime 獲取系統時間
bp GetFileTime 獲取文件時間
bp GetTickCount 得到自系統成功啓動以來所經歷的毫秒數
bp GetCurrentTime 獲取當前時間(16位)
bp SetTimer 建立定時器
bp TimerProc 定時器超時回調函數
攔截文件:
bp CreateFileA 建立或打開文件 (32位)
bp OpenFile 打開文件 (32位)
bp ReadFile 讀文件 (32位)
bp WriteFile 寫文件 (32位)
攔截驅動器:
bp GetDriveTypeA 獲取磁盤驅動器類型
bp GetLogicalDrives 獲取邏輯驅動器符號
bp GetLogicalDriveStringsA 獲取當前全部邏輯驅動器的根驅動器路徑
★★VB程序專用斷點★★
bp __vbaStrCmp 比較字符串是否相等
bp __vbaStrComp 比較字符串是否相等
bp __vbaVarTstNe 比較變量是否不相等
bp __vbaVarTstEq 比較變量是否相等
bp __vbaStrCopy 複製字符串
bp __vbaStrMove 移動字符串
bp MultiByteToWideChar ANSI字符串轉換成Unicode字符串
bp WideCharToMultiByte Unicode字符串轉換成ANSI字符串
彙編指令測試
軟件破解經常使用匯編指令 cmp a,b // 比較a與b mov a,b // 把b值送給a值,使a=b ret // 返回主程序 nop // 無做用 call // 調用子程序,子程序以ret結尾 je或jz // 相等則跳(機器碼是74或84) jne或jnz // 不相等則跳(機器碼是75或85) jmp // 無條件跳(機器碼是EB) jb // 若小於則跳 ja // 若大於則跳 jg // 若大於則跳 jge // 若大於等於則跳 jl // 若小於則跳 pop xxx // xxx出棧 push xxx // xxx壓棧 ★★破解經典句式★★ 1.(最經常使用) mov eax [ ] mov edx [ ] call 00?????? 關鍵call test eax eax jz(jnz)或 jne(je) 關鍵跳轉 2 (最經常使用) mov eax [ ] mov edx [ ] call 00?????? 關鍵call jne(je) 關鍵跳轉 3 mov eax [ ] mov edx [ ] cmp eax,edx jnz(jz) 4 lea edi [ ] lea esi [ ] repz cmpsd jz(jnz) 5 mov eax [ ] mov edx [ ] call 00?????? setz (setnz) al (bl,cl…) 6 mov eax [ ] mov edx [ ] call 00?????? test eax eax setz (setnz) bl,cl… 7 call 00?????? *** push eax (ebx,ecx…) …… …… call 00?????? pop eax (ebx,ecx…) test eax eax jz(jnz) 1、數據傳輸指令 ─────────────────────────────────────── 它們在存貯器和寄存器、寄存器和輸入輸出端口之間傳送數據. 1. 通用數據傳送指令. MOV 傳送字或字節. MOVSX 先符號擴展,再傳送. MOVZX 先零擴展,再傳送. PUSH 把字壓入堆棧. POP 把字彈出堆棧. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次壓入堆棧. POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次彈出堆棧. PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次壓入堆棧. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次彈出堆棧. BSWAP 交換32位寄存器裏字節的順序 XCHG 交換字或字節.( 至少有一個操做數爲寄存器,段寄存器不可做爲操做數) CMPXCHG 比較並交換操做數.( 第二個操做數必須爲累加器AL/AX/EAX ) XADD 先交換再累加.( 結果在第一個操做數裏 ) XLAT 字節查錶轉換. ── BX 指向一張 256 字節的表的起點, AL 爲表的索引值 (0-255,即 0-FFH); 返回 AL 爲查表結果. ( [BX+AL]->AL ) 2. 輸入輸出端口傳送指令. IN I/O端口輸入. ( 語法: IN 累加器, {端口號│DX} ) OUT I/O端口輸出. ( 語法: OUT {端口號│DX},累加器 ) 輸入輸出端口由當即方式指定時, 其範圍是 0-255; 由寄存器 DX 指定時, 其範圍是 0-65535. 3. 目的地址傳送指令. LEA 裝入有效地址. 例: LEA DX,string ;把偏移地址存到DX. LDS 傳送目標指針,把指針內容裝入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI. LES 傳送目標指針,把指針內容裝入ES. 例: LES DI,string ;把段地址:偏移地址存到ES:DI. LFS 傳送目標指針,把指針內容裝入FS. 例: LFS DI,string ;把段地址:偏移地址存到FS:DI. LGS 傳送目標指針,把指針內容裝入GS. 例: LGS DI,string ;把段地址:偏移地址存到GS:DI. LSS 傳送目標指針,把指針內容裝入SS. 例: LSS DI,string ;把段地址:偏移地址存到SS:DI. 4. 標誌傳送指令. LAHF 標誌寄存器傳送,把標誌裝入AH. SAHF 標誌寄存器傳送,把AH內容裝入標誌寄存器. PUSHF 標誌入棧. POPF 標誌出棧. PUSHD 32位標誌入棧. POPD 32位標誌出棧. 2、算術運算指令 ─────────────────────────────────────── ADD 加法. ADC 帶進位加法. INC 加 1. AAA 加法的ASCII碼調整. DAA 加法的十進制調整. SUB 減法. SBB 帶借位減法. DEC 減 1. NEC 求反(以 0 減之). CMP 比較.(兩操做數做減法,僅修改標誌位,不回送結果). AAS 減法的ASCII碼調整. DAS 減法的十進制調整. MUL 無符號乘法. IMUL 整數乘法. 以上兩條,結果回送AH和AL(字節運算),或DX和AX(字運算), AAM 乘法的ASCII碼調整. DIV 無符號除法. IDIV 整數除法. 以上兩條,結果回送: 商回送AL,餘數回送AH, (字節運算); 或 商回送AX,餘數回送DX, (字運算). AAD 除法的ASCII碼調整. CBW 字節轉換爲字. (把AL中字節的符號擴展到AH中去) CWD 字轉換爲雙字. (把AX中的字的符號擴展到DX中去) CWDE 字轉換爲雙字. (把AX中的字符號擴展到EAX中去) CDQ 雙字擴展. (把EAX中的字的符號擴展到EDX中去) 3、邏輯運算指令 ─────────────────────────────────────── AND 與運算. OR 或運算. XOR 異或運算. NOT 取反. TEST 測試.(兩操做數做與運算,僅修改標誌位,不回送結果). SHL 邏輯左移. SAL 算術左移.(=SHL) SHR 邏輯右移. SAR 算術右移.(=SHR) ROL 循環左移. ROR 循環右移. RCL 經過進位的循環左移. RCR 經過進位的循環右移. 以上八種移位指令,其移位次數可達255次. 移位一次時, 可直接用操做碼. 如 SHL AX,1. 移位>1次時, 則由寄存器CL給出移位次數. 如 MOV CL,04 SHL AX,CL 4、串指令 ─────────────────────────────────────── DS:SI 源串段寄存器 :源串變址. ES:DI 目標串段寄存器:目標串變址. CX 重複次數計數器. AL/AX 掃描值. D標誌 0表示重複操做中SI和DI應自動增量; 1表示應自動減量. Z標誌 用來控制掃描或比較操做的結束. MOVS 串傳送. ( MOVSB 傳送字符. MOVSW 傳送字. MOVSD 傳送雙字. ) CMPS 串比較. ( CMPSB 比較字符. CMPSW 比較字. ) SCAS 串掃描. 把AL或AX的內容與目標串做比較,比較結果反映在標誌位. LODS 裝入串. 把源串中的元素(字或字節)逐一裝入AL或AX中. ( LODSB 傳送字符. LODSW 傳送字. LODSD 傳送雙字. ) STOS 保存串. 是LODS的逆過程. REP 當CX/ECX<>0時重複. REPE/REPZ 當ZF=1或比較結果相等,且CX/ECX<>0時重複. REPNE/REPNZ 當ZF=0或比較結果不相等,且CX/ECX<>0時重複. REPC 當CF=1且CX/ECX<>0時重複. REPNC 當CF=0且CX/ECX<>0時重複. 5、程序轉移指令 ─────────────────────────────────────── 1>無條件轉移指令 (長轉移) JMP 無條件轉移指令 CALL 過程調用 RET/RETF過程返回. 2>條件轉移指令 (短轉移,-128到+127的距離內) ( 當且僅當(SF XOR OF)=1時,OP1<OP2 ) JA/JNBE 不小於或不等於時轉移. JAE/JNB 大於或等於轉移. JB/JNAE 小於轉移. JBE/JNA 小於或等於轉移. 以上四條,測試無符號整數運算的結果(標誌C和Z). JG/JNLE 大於轉移. JGE/JNL 大於或等於轉移. JL/JNGE 小於轉移. JLE/JNG 小於或等於轉移. 以上四條,測試帶符號整數運算的結果(標誌S,O和Z). JE/JZ 等於轉移. JNE/JNZ 不等於時轉移. JC 有進位時轉移. JNC 無進位時轉移. JNO 不溢出時轉移. JNP/JPO 奇偶性爲奇數時轉移. JNS 符號位爲 "0" 時轉移. JO 溢出轉移. JP/JPE 奇偶性爲偶數時轉移. JS 符號位爲 "1" 時轉移. 3>循環控制指令(短轉移) LOOP CX不爲零時循環. LOOPE/LOOPZ CX不爲零且標誌Z=1時循環. LOOPNE/LOOPNZ CX不爲零且標誌Z=0時循環. JCXZ CX爲零時轉移. JECXZ ECX爲零時轉移. 4>中斷指令 INT 中斷指令 INTO 溢出中斷 IRET 中斷返回 5>處理器控制指令 HLT 處理器暫停, 直到出現中斷或復位信號才繼續. WAIT 當芯片引線TEST爲高電平時使CPU進入等待狀態. ESC 轉換到外處理器. LOCK 封鎖總線. NOP 空操做. STC 置進位標誌位. CLC 清進位標誌位. CMC 進位標誌取反. STD 置方向標誌位. CLD 清方向標誌位. STI 置中斷容許位. CLI 清中斷容許位. 6、僞指令 ─────────────────────────────────────── DW 定義字(2字節). PROC 定義過程. ENDP 過程結束. SEGMENT 定義段. ASSUME 創建段寄存器尋址. ENDS 段結束. END 程序結束.
各類語言按鈕事件特徵碼: VB: 816C24 Delphi & BC++ : 740E8BD38B83????????FF93???????? MFC: sub eax,0a VC++: sub eax,0a 易語言: FF 55 FC 5F 5E或(e-debug) 萬能斷點:【只支持xp系統】//user32.dll 斷點 F3A58BC883E103F3A4E8