当前位置:操作系统 > 玩转网络 >>

程序破解手册

答案:

新手在破解一个软件时总要找找相关资料,非常不方便.我自己做了一本crack学习笔记,觉得挺方便,就放上来了.其中内容来自各大网站,本人只是整理一下: 大家如果决的有用就自己超下来!其中新手最好看看!现在开始:

一、汇编速查
MOV AA,BB 将 BB 放到 AA 里
CALL 调用子程序 (相当于 BASIC 的 GOSUB)
RET 与 RETF 返回程序 (相当于 BASIC 的 RETURN)
CMP XX,YY 比较 XX 与 YY
JZ 若相等则转移
JNZ 若不相等则转移
JB 若小于则转移
JG 若大于则转移
JMP 无条件转移
J??? (各种转移指令)
LOOP 循环直到CX为0
INT XX 类似 CALL 的中断涵数
  PUSH 推入栈(STACK)ESP:PUSH AX
  POP 出栈ESP:POP CX
  XCHG 交换ESP:XCHG AX,BX
  IN、OUT 与PORT有关的IN/OUT
  XLAT 查表
  LEA 段内偏移量。ESP:LEA AX,AREA1=MOV AX,OFFSET AREA1
  LAHF、SAHF与棋标有关的寄存器 AH
  PUSHF、POPF将棋标入/出栈
  ADD ESP ADD AX,CX (AX=AX+CX)
  ADC 加入棋标C的ADD
  INC ESP INC AX(AX=AX+1)
  AAA 加法校正
  SUB、SBB 减法
  DEC ESP: DEC AX(AX=AX-1)
  NEG 去补,
  MUL、IMUL 乘
  DIV、IDIV 除
  SHR、SAR、SHL 算术、逻辑位移R=RIGHT L=LEFT
  OR、XOR、AND 逻辑运算 ESP :XOR AX,AX(AX=0)

直接标志转移
指令格式 机器码 测试条件 如...则转移  
  JC 72 C=1 有进位
JNS 79 S=0 正号
JNC 73 C=0 无进位
JO 70 O=1 有溢出
JZ/JE 74 Z=1 零/等于
JNO 71 O=0 无溢出
JNZ/JNE 75 Z=0 不为零/不等于
JP/JPE 7A P=1 奇偶位为偶
JS 78 S=1 负号
JNP/IPO 7B P=0 奇偶位为奇


间接标志转移
指令格式 机器码 测试格式 如...则转移
JA/JNBE(比较无符号数) 77 C或Z=0 >   高于/不低于或等于
JAE/JNB(比较无符号数) 73 C=0 >=  高于或等于/不低于
JB/JNAE(比较无符号数) 72 C=1 <   低于/不高于或等于
JBE/JNA(比较无符号数) 76 C或Z=1 <=   低于或等于/不高于
JG/JNLE(比较带符号数) 7F (S异或O)或Z=0 >  大于/不小于或等于
JGE/JNL(比较带符号数) 7D S异或O=0 >=  大于或等于/不小于
JL/JNGE(比较带符号数) 7C S异或O=1 <   小于/不大于或等于
JLE/JNG(比较带符号数) 7E (S异或O)或Z=1 <=  小于或等于/不大于
无条件转移指令JMP
指令格式 执行操作 机器码 说明
段内直接短转移Jmp short (IP)←(IP)+8位位移量 EB 转移范围-128到+127字节
段内直接近转移Jmp near (IP)←(IP)+16位位移量 E9 转移到段内的任一位置
段内间接转移Jmp word (IP)←(有效地址EA) FF
段间直接(远)转移Jmp far (IP)←(偏移地址)
(CS)←(段地址) EA
段间间接转移 Jmp dword (IP)←(EA)
(CS)←(EA+2)

二、断点设置表
一般处理:
bpx hmemcpy(万能断点)
bpx MessageBox bpx MessageBoxExA
bpx MessageBeep bpx SendMessage
bpx GetDlgItemText bpx GetDlgItemInt
bpx GetWindowText bpx GetWindowWord
bpx GetWindowInt bpx DialogBoxParamA
bpx CreateWindow bpx CreateWindowEx
bpx ShowWindow bpx UpdateWindow
bmsg xxxx wm_move bmsg xxxx wm_gettext
bmsg xxxx wm_command bmsg xxxx wm_activate
bmsg xxxx wm_create bmsg xxxx wm_destroy


时间相关:
bpint 21 if ah==2A (DOS)
bpx GetLocalTime
bpx GetFileTime
bpx GetSystemtime


CD-ROM 或 磁盘相关:
bpint 13 if ah==2 (DOS) bpint 13 if ah==3 (DOS)
bpint 13 if ah==4 (DOS)
bpx GetFileAttributesA bpx GetFileSize
bpx GetDriveType bpx GetLastError
bpx ReadFile
bpio -h (Your CD-ROM Port Address) R


软件狗相关:
bpio -h 278 R bpio -h 378 R


文件访问相关:
bpint 21 if ah==3dh (DOS) bpint 31 if ah==3fh (DOS)
bpint 21 if ah==3dh (DOS)
bpx ReadFile bpx WriteFile
bpx CreateFile bpx SetFilePointer
bpx GetSystemDirectory

[page_break]
INI 初始化文件相关:
bpx GetPrivateProfileString bpx GetPrivateProfileInt
bpx WritePrivateProfileString bpx WritePrivateProfileInt


注册表相关:
bpx RegCreateKey bpx RegDeleteKey
bpx RegCloseKey bpx RegOpenKey
bpx RegQueryvalue


注册标志相关: bpx cs:eip if EAX==0
内存标准相关: bpmb cs:eip rw if 0x30:0x45AA==0


显示相关: bpx 0x30:0x45AA do "d 0x30:0x44BB"
bpx CS:0x66CC do "? EAX"


利用S命令设断:
S [-cu][address L length data-list]
address  :搜索的起始地址
length   :搜索的长度(字节长)
data-list :可以是一系列字节,也可以是字符串, 字符串可以用单引号或双引号括住
例如:S 30:0 L ffffffff ********


三、经典句式
1 mov eax [ ] 这里可以是地址,也可以是其它寄存器
mov edx [ ] 同上 通常这两个地址就储存着重要信息
call 00??????
test eax eax
jz(jnz)
2 mov eax [ ] 这里可以是地址,也可以是其它寄存器
mov edx [ ] 同上 通常这两个地址就储存着重要信息
call 00??????
jne(je)
3 mov eax [ ]
mov edx [ ]
cmp eax,edx
jnz(jz)
或者
begin: mov al [ ]
mov cl [ ]
cmp al,cl
jnz(jz)
mov al [ +1]
mov cl [ +1]
cmp al,cl
jnz(jz)
cmp eax ecx (eax为计数器)
jnl begin
mov al 01
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)
8 暴破口诀:(参考汇编速查)
一条(跳)就死,九筒(90-nop)就胡
一条(跳)就胡,一饼(EB-jmp)伺候
妻死(74-jz)便妻无(75-jnz)
爸死(84)便爸无(85)-jz和jnz的另一种情况


四、VB程序
SmartCheck的配置:
1. Error Detection: 选上所有的选项,"Report error immediately" 可根据情况调整。
Advanced中选上前面的四项,确信"Suppress system API and OLE calls" 没被选上。
2. Reporting: 除了"Report MouseMove events from OCX controls"外其余全选上。


SmartCheck中较容易出现注册码的地方:
__vbastrcmp(String:"****",String:"****")returns
__vbaStrVarVal(VARIATN:String"*") returns
__vbaVarTstEq(VARIANT:****, VARIANT:****) returns
破解预备知识
一.机械码,又称机器码.
ultraedit打开,编辑exe文件时你会看到
许许多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F组成的数码,这些数码
就是机器码.
修改程序时必须通过修改机器码来修改exe文件.

二.需要熟练掌握的全部汇编知识(只有这么多)
不大容易理解,可先强行背住,混个脸儿熟,以后慢慢的就理解了
cmp a,b 比较a与b
mov a,b 把b的值送给a
ret 返回主程序
nop 无作用,英文“no operation”的简写,意思是“do nothing”(机器码90)***机器码的含义参看上面
(解释:ultraedit打开编辑exe文件时你看到90,等同于汇编语句nop)
call 调用子程序
je 或jz 若相等则跳(机器码74 或0F84)
jne或jnz 若不相等则跳(机器码75或0F85)
jmp 无条件跳(机器码EB)
jb 若小于则跳
ja 若大于则跳
jg 若大于则跳
jge 若大于等于则跳
jl 若小于则跳
jle 若小于等于则跳
pop 出栈
push 压栈

三.常见修改(机器码)
74=>75 74=>90 74=>EB
75=>74 75=>90 75=>EB

jnz->nop
75->90(相应的机器码修改)

jnz -> jmp
75 -> EB(相应的机器码修改)

jnz -> jz
75->74 (正常) 0F 85 -> 0F 84(特殊情况下,有时,相应的机器码修改)

四.两种不同情况的不同修改方法
1.修改为jmp
je(jne,jz,jnz) =>jmp相应的机器码EB (出错信息向上找到的第一个跳转)jmp的作用是绝对跳,无条件跳,从而跳过下面的出错信息

xxxxxxxxxxxx 出错信息,例如:注册码不对,sorry,未注册版不能...,"Function Not Avaible in Demo" 或 "Command Not Avaible" 或 "Cant save in Shareware/Demo"等 (我们希望把它跳过,不让它出现)
。。。
。。。
xxxxxxxxxxxx 正确路线所在

2.修改为nop
je(jne,jz,jnz) =>nop相应的机器码90 (正确信息向上找到的第一个跳转) nop的作用是抹掉这个跳转,使这个跳转无效,失去作用,从而使程序顺利来到紧跟其后的正确信息处

xxxxxxxxxxxx 正确信息,例如:注册成功,谢谢您的支持等(我们希望它不被跳过,让它出现,程序一定要顺利来到这里)
。。。
。。。
xxxxxxxxxxxx 出错信息(我们希望不要跳到这里,不让它出现)
。。。
。。。
五.爆破无敌口诀 背会此口诀,天下无敌,以后慢慢琢磨,仔细体会,收益多多。如此好的口诀,不要错过
一条(跳)就死,九筒(90)就胡 (对应上面的2.修改为nop)
一条(跳)就胡,一饼(EB)伺候 (对应上面的1.修改为jmp)
妻死(74)便妻无(75)
爸死(84)便爸无(85)

此口诀是我多年经验的积累和提炼,便于大家记忆和教学
六.作业
熟悉ultraedit的使用

上一个:Winmail和邮件监控
下一个:FTP命令大全及其应用

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,