|
原理:程序都是在内存中运行的,一些注册码或是密码在内存中的某段时间那出现。
当你输入密码时,软件就会进行判断,要判断就会发生真假密码的对比,在这段时间内你输入的错的和正确的都会出现在内存中!而一般判断有两种 1.判断正确跳转到真确的代码段错误的不跳转继续往下走(下面对为错误代码段);2.另一种相反,判断错误跳转到显示错误的代码段正确的不跳转继续往下走(下面对为显示正确代码段)。
而这个判断的地方就教做关键调转!,对比注册码的地方也就在他前面的一个以 Call 开头的代码行上!(关键Call)
寻找关键跳转:由于输入不对,就会跳到出错的地方,显示出错信息,而出错信息上面会有一个跳转,(所有调转都是以 J开头的,如JNE/js/jNz,而 JMP 为无条件跳转,也就是对不对都进行跳转,其它的都是判断跳转,NOP 空指令,也就是无效指令,运行后等于没有运行),我们知道把跳转到错误的判断换成 NOP 或是 把跳到正确的判断改成 JMp 就可以破解,这属于爆力破解,也就是说软件自身结构改变了,不管你输的密码/注册码对不对,他都跳向成功!
它要判断就肯定会发生真假注册码对比,对比的信息会在,内存中出现,显示在寄存其上!(自己看)
步骤:
1。判断有无壳。(壳是一种保护软件的工具,软件运行后壳是要被脱去的,这个过程主要在内存中进行),侦壳程:Fi.exe ,使用,按住要查的软件不放,拖到Fi.exe 图标上即可!(常见的壳有Upx,Aspack,EXE32Pack,EZIP,PE Compact,Petite ,PKLiTE,Shrinker 这里没有壳)
2。设置 Ollydbg.exe
3。运行一下软件,看出错时,有什么提示!(password wrong!)
4。ODB加载,找到提示语句,双击来到,关键跳转,关键Call,下断点(F2),运行程序,到软件被中断为止,在寄存器中搜索!
123123 是我门输的错密码。正确的 密码是 mimashishenme
5。找到注册码了!软件破解成功!
6。对于关键跳转的 修改,ODB加载,找到提示语句,双击来到,向上找(第一个不是Jmp 的以 J 开头的代码)关键跳转,(关键跳转上面的第一个Call)关键Call,下断点(按 F2),F8 单步跟踪,
到 0040203F |. /74 15 je short crackme.00402056 显示 跳转没有实现,也就是说他判断的类型属于第一种:判断正确跳转到真确的代码段错误的不跳转继续往下走(下面对为错误代码段),好我们就让他强行实现,在该代码行上按空格,把 je short crackme.00402056 改成 jmp 00402056 ,确定 再按 F9 ,直接跳到成功!
(如果F8 单步跟踪,
到 0040203F |. /74 15 je short crackme.00402056 显示 跳转已经实现,也就是说他判断的类型属于第二种:判断错误跳转到显示错误的代码段正确的不跳转继续往下走(下面对为显示正确代码段)。按空格,把使用Nop 填充的选项 勾上,要把 je short crackme.00402056 改成 Nop ,确定 再按 F9 ,直接跳到成功!)。
|
|