破解 文档资料文档格式.docx
《破解 文档资料文档格式.docx》由会员分享,可在线阅读,更多相关《破解 文档资料文档格式.docx(31页珍藏版)》请在冰点文库上搜索。
7574=>
9074=>
EB
75=>
7475=>
9075=>
jnz->
nop
75->
90(相应的机器码修改)
jnz->
jmp
75->
EB(相应的机器码修改)
jz
74(正常)0F85->
0F84
两种不同情况的不同修改方法
1.修改为jmp
je(jne,jz,jnz)=>
jmp相应的机器码EB(出错信息向上找到的第一个跳转)jmp的作用是绝对跳,无条件跳,从而跳过下面的出错信息
出错信息,例如:
注册码不对,sorry,未注册版不能...,"
FunctionNotAvaibleinDemo"
或"
CommandNotAvaible"
Can'
tsaveinShareware/Demo"
等(我们希望把它跳过,不让它出现)
2.修改为nop
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
文件访问相关
bpWriteFile
bpCreateFileA****
bpSetFilePointer
bpGetSystemDirectory
VB程序专用断点:
bpxmsvbvm60!
rtcMsgBox
__vbaStrCmp
__vbaStrComp
__vbaStrCompVar
__vbaStrTextCmp
__vbaFileOpen
__vbaInputFile
__vbaFileSeek
__vbaWriteFile
__vbaFileClose
rtcFileAttributes
rtcFileDateTime
rtcFileLen
rtcFileLength
__vbaVarInt
__vbaVarCmpGe
__vbaVarCmpGt
__vbaVarCmpLe
__vbaVarCmpLt
__vbaVarCmpNe
__vbaVarTextCmpEq
__vbaVarTextCmpGe
__vbaVarTextCmpGt
__vbaVarTextCmpLe
__vbaVarTextCmpLt
__vbaVarTextCmpNe
__vbaVarTextTstEq
__vbaVarTextTstGe
__vbaVarTextTstGt
__vbaVarTextTstLe
__vbaVarTextTstLt
__vbaVarTextTstNe
__vbaVarTstEq
__vbaVarTstGe
__vbaVarTstGt
__vbaVarTstLe
__vbaVarTstLt
__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
INC,DEC
把OP的值加一或减一
INCOPDECOP
INCr/mDECr/m
P,A,Z,S,O
NEG
将OP的符号反相(取二进制补码)
NEGOP
NEGr/m
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
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
ROR,ROL,RCR,RCL
循环移位指令
RORr/m,data/CLROLr/m,data/CLRCRr/m,data/CLRCLr/m,data/CL
程序流程控制指令
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