破解 文档资料.docx
《破解 文档资料.docx》由会员分享,可在线阅读,更多相关《破解 文档资料.docx(31页珍藏版)》请在冰豆网上搜索。
破解文档资料
call:
调用子程序
ret:
返回主程序
je或jz:
若相等则跳转
jne或jnz:
若不相等则跳转
pushxx:
xx压栈
popxx:
xx出栈
再来复习一下,判断语句的意义。
cmpa,b 比较a与b
mova,b 把b的值送给a
ret 返回主程序
nop 无作用,英文“nooperation”的简写,意思是“donothing”(机器码90)
call 调用子程序
je或jz 若相等则跳(机器码74或0F84)
jne或jnz 若不相等则跳(机器码75或0F85)
jmp 无条件跳(机器码EB)
Jb 若小于则跳
ja 若大于则跳
jg 若大于则跳
jge 若大于等于则跳
jl 若小于则跳
jle 若小于等于则跳
pop 出栈
push 压栈
常见修改(机器码)
74=>7574=>9074=>EB
75=>7475=>9075=>EB
jnz->nop
75->90(相应的机器码修改)
jnz->jmp
75->EB(相应的机器码修改)
jnz->jz
75->74(正常)0F85->0F84
两种不同情况的不同修改方法
1.修改为jmp
je(jne,jz,jnz)=>jmp相应的机器码EB(出错信息向上找到的第一个跳转)jmp的作用是绝对跳,无条件跳,从而跳过下面的出错信息
出错信息,例如:
注册码不对,sorry,未注册版不能...,"FunctionNotAvaibleinDemo"或"CommandNotAvaible"或"Can'tsaveinShareware/Demo"等(我们希望把它跳过,不让它出现)
2.修改为nop
je(jne,jz,jnz)=>nop相应的机器码90(正确信息向上找到的第一个跳转)nop的作用是抹掉这个跳转,使这个跳转无效,失去作用,从而使程序顺利来到紧跟其后的正确信息处
正确信息,例如:
注册成功,谢谢您的支持等(我们希望它不被跳过,让它出现,程序一定要顺利来到这里)
出错信息(我们希望不要跳到这里,不让它出现)
爆破口诀
一条(跳)就死,九筒(90)就胡(对应上面的2.修改为nop)
一条(跳)就胡,一饼(EB)伺候(对应上面的1.修改为jmp)
妻死(74)变妻无(75)
爸死(84)变爸无(85)
高人总结的常见的存放注册码的地方。
常见断点设置(后面带"*"的为常用的)
字符串
bpGetDlgItemTextA(W)****
bpGetDlgItemInt
bpGetWindowTextA(W)****
bpGetWindowWord
bmsgXXXXwm_gettext
对话框
bpMessageBeep
bpMessageBoxA(W)****
bpMessageBoxExA(W)
bpDialogBoxParamA(W)
bpGreateWindowExA(W)
bpShowWindow
bpUpdateWindow
bmsgXXXXwm_command
对于VB的程序用bpMessageBoxA是无法断下来的,bprtcMsgBox
注册表相关
bpRegCreateKeyA(W)(生成一个key文件)
bpRegDeleteKeyA(W)(删除key文件)
bpRegQueryValueA(W)(队列)
bpRegCloseKey(关闭key文件)
bpRegOpenKeyA(W)****(打开key文件)
时间相关
bpGetLocalTime(本地时间)
bpGetFileTime(获取文件创建的时间)
bpGetSystemtime(获取机器的时间)
CD-ROM或磁盘相关
bpGetFileAttributesA(W)
bpGetFileSize
bpGetDriveType
bpGetLastError
bpReadFile
bpio-h(CD-ROM端口地址)R
软件狗
bpio-h278R
bpio-h378R
INI初始化文件相关
bpGetPrivateProfileStringA****
bpGetPrivateProfileInt
bpWritePrivateProfileString
bpWritePrivateProfileInt
文件访问相关
bpReadFile
bpWriteFile
bpCreateFileA****
bpSetFilePointer
bpGetSystemDirectory
VB程序专用断点:
bpxmsvbvm60!
rtcMsgBox
bpxmsvbvm60!
__vbaStrCmp
bpxmsvbvm60!
__vbaStrComp
bpxmsvbvm60!
__vbaStrCompVar
bpxmsvbvm60!
__vbaStrTextCmp
bpxmsvbvm60!
__vbaFileOpen
bpxmsvbvm60!
__vbaInputFile
bpxmsvbvm60!
__vbaFileSeek
bpxmsvbvm60!
__vbaWriteFile
bpxmsvbvm60!
__vbaFileClose
bpxmsvbvm60!
rtcFileAttributes
bpxmsvbvm60!
rtcFileDateTime
bpxmsvbvm60!
rtcFileLen
bpxmsvbvm60!
rtcFileLength
bpxmsvbvm60!
__vbaVarInt
bpxmsvbvm60!
__vbaVarCmpGe
bpxmsvbvm60!
__vbaVarCmpGt
bpxmsvbvm60!
__vbaVarCmpLe
bpxmsvbvm60!
__vbaVarCmpLt
bpxmsvbvm60!
__vbaVarCmpNe
bpxmsvbvm60!
__vbaVarTextCmpEq
bpxmsvbvm60!
__vbaVarTextCmpGe
bpxmsvbvm60!
__vbaVarTextCmpGt
bpxmsvbvm60!
__vbaVarTextCmpLe
bpxmsvbvm60!
__vbaVarTextCmpLt
bpxmsvbvm60!
__vbaVarTextCmpNe
bpxmsvbvm60!
__vbaVarTextTstEq
bpxmsvbvm60!
__vbaVarTextTstGe
bpxmsvbvm60!
__vbaVarTextTstGt
bpxmsvbvm60!
__vbaVarTextTstLe
bpxmsvbvm60!
__vbaVarTextTstLt
bpxmsvbvm60!
__vbaVarTextTstNe
bpxmsvbvm60!
__vbaVarTstEq
bpxmsvbvm60!
__vbaVarTstGe
bpxmsvbvm60!
__vbaVarTstGt
bpxmsvbvm60!
__vbaVarTstLe
bpxmsvbvm60!
__vbaVarTstLt
bpxmsvbvm60!
__vbaVarTstNe
注意:
VB程序仍然可以使用普通API函数,只要函数“最终”CALL了这个函数。
上面的断点对应VB6程序,如果是VB5程序则将msvbvm60改成msvbvm50即可。
F2:
设置断点,只要在光标定位的位置(上图中灰色条)按F2键即可,再按一次F2键则会删除断点。
(相当于SoftICE中的F9)
F8:
单步步过。
每按一次这个键执行一条反汇编窗口中的一条指令,遇到CALL等子程序不进入其代码。
(相当于SoftICE中的F10)
F7:
单步步入。
功能同单步步过(F8)类似,区别是遇到CALL等子程序时会进入其中,进入后首先会停留在子程序的第一条指令上。
(相当于SoftICE中的F8)
F4:
运行到选定位置。
作用就是直接运行到光标所在位置处暂停。
(相当于SoftICE中的F7)
F9:
运行。
按下这个键如果没有设置相应断点的话,被调试的程序将直接开始运行。
(相当于SoftICE中的F5)
CTR+F9:
执行到返回。
此命令在执行到一个ret(返回指令)指令时暂停,常用于从系统领空返回到我们调试的程序领空。
(相当于SoftICE中的F12)
ALT+F9:
执行到用户代码。
可用于从系统领空快速返回到我们调试的程序领空。
(相当于SoftICE中的F11)
Mov装入送入
mova,b;把b的值赋给a,使a=b
例如,moveax,010h表示,在eax中载入00000010h。
需要注意的是,如果你希望在寄存器中装入0,则有一种更快的方法
例如,xchgebx,ecx,则ebx与ecx的数值将被交换
递增或递减寄存器的值:
我们假定ax的值为8
increg(8,16,32)//incax
decreg(8,16,32)//decax
这两个指令往往用于循环中对指针的操作。
需要说明的是,某些时候我们有更好的方法来处理循环,例如使用loop指令,或rep前缀。
这些将在后面的章节中介绍。
将寄存器的数值与另一寄存器,或立即数的值相加,并存回此寄存器:
addreg32,reg32/imm(8,16,32)
addreg16,reg16/imm(8,16)
addreg8,reg8/imm(8)
例如,addeax,edx,将eax+edx的值存入eax。
减法指令和加法类似,只是将add换成subeax,edx。
Add########两数相加
Sub########两数相减
类似的指令还有and、or、xor(与,或,异或)等等。
它们进行的是逻辑运算。
我们称add、mov、sub、and等称为为指令助记符(这么叫是因为它比机器语言容易记忆,而起作用就是方便人记忆,某些资料中也称为指令、操作码、opcode[operationcode]等);后面的参数成为操作数,一个指令可以没有操作数,也可以有一两个操作数,通常有一个操作数的指令,这个操作数就是它的操作对象;而两个参数的指令,前一个操作数一般是保存操作结果的地方,而后一个是附加的参数
CMPAX,BX//AX寄存器减去BX寄存器的内容
ANDAX,BX//AX与BX做“与运算”
ORAX,BX//AX与BX做“或运算”
TESTAX,BX与ANDAX,BX命令有相同效果
XORAX,AX使AX的内容清零,每个寄存器与自己作异或运算等于清零动作
算术运算
-------------------------------------------------------------
ADDAX,BX 加法运算 AX=AX+BX
SUBAX,BX 减法运算 AX=AX-BX
INCAX 寄存器加一 AX=AX+1
DECAX 寄存器减一 AX=AX-1
MUL 乘法运算
DIV/idiv 除法运算
-------------------------------------------------------------
数据操作
-------------------------------------------------------------
MOVAX,BX数据传送指令,将BX的值移送到AX中
XCHGAX,BX将AX与BX的值互换
8086/8088指令集
为了便于查询,这里分类列出8086/8088汇编指令:
数据传送指令
MOV
功能:
把源操作数送给目的操作数
语法:
MOV目的操作数,源操作数
格式:
MOVr1,r2或MOVr,m或MOVm,r或MOVr,data
XCHG
功能:
交换两个操作数的数据
语法:
XCHG
格式:
XCHGr1,r2或XCHGm,r或XCHGr,m
PUSH,POP
功能:
把操作数压入或取出堆栈
语法:
PUSH操作数POP操作数
格式:
PUSHr或PUSHM或PUSHdataPOPr或POPm
PUSHF,POPF,PUSHA,POPA//PUSHFDPOPFDPUSHADPOPAD
功能:
堆栈指令群
格式:
PUSHFPOPFPUSHAPOPA
LEA,LDS,LES
功能:
取地址至寄存器
语法:
LEAr,mLDSr,mLESr,m
XLAT(XLATB)
功能:
查表指令
语法:
XLATXLATm
算术运算指令
ADD,ADC
功能:
加法指令
语法:
ADDOP1,OP2ADCOP1,OP2
格式:
ADDr1,r2ADDr,mADDm,rADDr,data
影响标志:
C,P,A,Z,S,O
SUB,SBB
功能:
减法指令
语法:
SUBOP1,OP2SBBOP1,OP2
格式:
SUBr1,r2SUBr,mSUBm,rSUBr,dataSUBm,data
影响标志:
C,P,A,Z,S,O
INC,DEC
功能:
把OP的值加一或减一
语法:
INCOPDECOP
格式:
INCr/mDECr/m
影响标志:
P,A,Z,S,O
NEG
功能:
将OP的符号反相(取二进制补码)
语法:
NEGOP
格式:
NEGr/m
影响标志:
C,P,A,Z,S,O
MUL,IMUL
功能:
乘法指令
语法:
MULOPIMULOP
格式:
MULr/mIMULr/m
影响标志:
C,P,A,Z,S,O(仅IMUL会影响S标志)
DIV,IDIV
功能:
除法指令
语法:
DIVOPIDIVOP
格式:
DIVr/mIDIVr/m
CBW,CWD//changebyteword//changeworddword
功能:
有符号数扩展指令
格式:
CBWCWD
AAA,AAS,AAM,AAD
功能:
非压BCD码运算调整指令
格式:
AAAAASAAMAAD
影响标志:
A,C(AAA,AAS)S,Z,P(AAM,AAD)
DAA,DAS
功能:
压缩BCD码调整指令
格式:
DAADAS
影响标志:
C,P,A,Z,S
字符串操作指令
MOVSB,MOVSW,MOVSD
功能:
字符串传送指令
格式:
MOVSBMOVSWMOVSD
标志位:
无
CMPSB,CMPSW,CMPSD
功能:
字符串比较指令
格式:
CMPSBCMPSWCMPSD
标志位:
C,P,Z,S,O
SCASB,SCASW//scansb
功能:
字符串搜索指令
格式:
SCASBSCASW
标志位:
C,P,Z,S,O
LODSB,LODSW,STOSB,STOSW
功能:
字符串载入或存贮指令
格式:
LODSBLODSWSTOSBSTOSW
标志位:
无
REP,REPE,REPNE
功能:
重复前缀指令集
格式:
REP指令SREPE指令SREPNE指令S
标志位:
依指令S而定
位运算指令集
AND,OR,XOR,NOT,TEST
功能:
执行BIT与BIT之间的逻辑运算
格式:
ANDr/m,r/m/dataORr/m,r/m/dataXORr/m,r/m/dataTESTr/m,r/m/dataNOTr/m
影响标志:
C,O,P,Z,S(其中C与O两个标志会被设为0)NOT指令不影响任何标志位
SHR,SHL,SAR,SAL
功能:
移位指令
格式:
SHRr/m,data/CLSHLr/m,data/CLSARr/m,data/CLSALr/m,data/CL
影响标志:
C,P,Z,S,O
ROR,ROL,RCR,RCL
功能:
循环移位指令
格式:
RORr/m,data/CLROLr/m,data/CLRCRr/m,data/CLRCLr/m,data/CL
影响标志:
C,P,Z,S,O
程序流程控制指令
CLC,STC,CMC
功能:
设定进位标志
格式:
CLCSTCCMC
标志位:
C
CLD,STD
功能:
设定方向标志
格式:
CLDSTD
标志位:
D
CLI,STI
功能:
设定中断标志
格式:
CLISTI
标志位:
I
CMP
功能:
比较OP1与OP2的值
格式:
CMPr/m,r/m/data
标志位:
C,P,A,Z,O
JMP
功能:
跳往指定地址执行
格式:
JMP地址
JXX
功能:
当特定条件成立则跳往指定地址执行
格式:
JXX地址
XX为下列值:
A:
ABOVE,当C=0,Z=0时成立
B:
BELOW,当C=1时成立
C:
CARRY,当CF=1时成立
CXZ:
CX寄存器的值为0(ZERO)时成立
E:
EQUAL,当Z=1时成立
G:
GREATER(大于),当Z=0且S=0时成立
L:
LESS(小于),当S不为零时成立
N:
NOT(相反条件),需和其它符号配合使用
O:
OVERFLOW,O=1时成立
P:
PARITY,P=1时成立
PE:
PARITYEVEN,P=1时成立
PO:
PARITYODD,P=0时成立
S:
SIGN,S=1时成立
Z:
ZERO,Z=1时成立
LOOP
功能:
循环指令集
语法:
LOOP地址
LOOPE(Z)
格式:
LOOPNE(Z)地址
标志位:
无
CALL,RET
功能:
子程序调用,返回指令
语法:
CALL地址RETRETn
标志位:
无
INT,IRET
功能:
中断调用及返回指令
语法:
INTnIRET
标志位:
在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值弹回寄存器
处理器状态控制指令
NOP
功能:
空操作指令。
不执行任何操作,但要花费CPU一个机器周期
格式:
NOP
HLT
功能:
暂停指令。
CPU不执行任何操作,一直处于暂停状态,但IP指向HLT的下一条指令。
格式:
HLT
脱离HLT状态的方式:
1、CPU复位;2、CPU响应中断
ESC,WAIT,LOCK
功能:
用于多处理器系统。
其中ESC是交权指令;WAIT是等待指令;LOCK是总线封锁指令
重启验证类软件大致的验证过程。
1、运行软件输入注册信息,点注册后。
一般软件会提示你重新运行软件,以便验证注册信息的正确性(如FlashGet);
也有的只在你输入正确的注册信息时才有这个提示,不然会告诉你输入的注册信息有问题(此软件就属这类)
2、要破解这种软件,首先是判断一下她把注册信息存在哪里(因为她重启验证时要用)。
大致有两种存放方式,第一种是放在注册表里;第二种是放在文件里。
(我们可以在输入注册信息,点击确定前,利用监视类软件来查看一下,如FileMon和RegShot等)
3、知道她的注册信息的存放地点后,就可以选则相应的API断点,来调试了
访问注册表类常用API
bpRegOpenKeyA打开一个现有的注册表项****
bpRegOpenKeyExA打开一个现有的注册表项****
bpRegCreateKeyA在指定的项下创建或打开一个项
bpRegCreateKeyExA在指定项下创建新项的更复杂的方式
bpRegDeleteKeyA删除现有项下方一个指定的子项
bpRegDeleteValueA删除指定项下方的一个值
bpRegQueryValueA获取一个项的设置值
bpRegQueryValueExA获取一个项的设置值
bpRegSetValueA设置指定项或子项的值
bpRegSetValueExA设置指定项的值
bpRegCloseKey关闭系统注册表中的一个项(或键)
访问文件类常用API
bpCreateFileA打开和创建文件、管道、邮槽、通信服务、设备以及控制台****
bpOpenFile这个函数能执行大量不同的文件操作
bpReadFile从文件中读出数据
bpReadFileEx与ReadFile相似,只是它只能用于异步读操作,并包含了一个完整的回调、
浮点运算:
fmul相乘
Fadd相加
Fstp保存
Fstswax清零
VB程序的常见函数
1)数据类型转换:
a)__vbaI2Str将一个字符串转为8位(1个字节)的数值形式(范围在0至255之间)或2个字节的数值形式(范围在-32,768到32,767之间)。
b)__vbaI4Str将一个字符串转为长整型(4个字节)的数值形式(范围从-2,147,483,6482,147,483,647)
c)__vbar4Str将一个字符串转为单精度单精度浮点型(4个字节)的数值形式
d)__vbar8Str将一个字符串转为双精度单精度浮点型(8个字节)的数值形式
e)VarCyFromStr(仅VB6库.要调试,则在WINICE.DAT里必须有OLEAUT32.DLL)字符串到变比型数据类型
f)VarBstrFromI2(仅VB6库.要调试,则在WINICE.DAT里必须有OLEAUT32.DLL)整型数据到字符串:
2)数据移动:
a)__vbaStrCopy将一个字符串拷贝到内存,类似于WindowsAPIHMEMCPY
b)__vbaVarCopy将一个变量值串拷贝到内存
c)__vbaVarMove变量在内存中移动,或将一个变量值串拷贝到内存
3)数学运算:
a)__v