破解基础入门之爆破法

从今天开始,本站会发出一系列破解方面的贴子,帮助大家入门、提高,进入真正的破解世界……

好,下面言归正传。

这帖子破解的是一个crackme.主要是真正的软件我破解不了^_^.
这里把暴力破解的原理讲解一下.

if qqq=1 then
注册正确
end if
这里用这个语句来说明一下,
如果QQ=1的话注册正确,但是我们可以使条件变成相反的变成
if not qqq=1 then
注册正确
end if

这样我们就可以使用不正确的注册码,而用正确的注册码凡尔不正确。因为我们的条件去反了。
这就是爆破的基本原理
这里给主一些经常见到的跳转
Jc   有进位则跳转              jnc    无进位则跳转
Jz   为 0 跳转                      jnz    不为0跳转
Je   等于则跳转                     jne    不等于则跳转
Js   为负号则跳转                   jns    不为负号则跳转
Jo   有溢出则跳转                   jno    无溢出则跳转
Jp   奇偶位为偶                     jnp    奇偶位为奇

好了,现在开始我们的爆破旅程^_^

先用OllyDbg v1.10b载入unabexcm1.exe
然后看到一下代码
00401000 u>/$  6A 00              push 0                             ; /Style = MB_OK|MB_APPLMODAL
00401002   |.  68 00204000        push unabexcr.00402000             ; |Title = "abex' 3rd crackme"
00401007   |.  68 12204000        push unabexcr.00402012             ; |Text = "Click OK to check for the keyfile."
0040100C   |.  6A 00              push 0                             ; |hOwner = NULL
0040100E   |.  E8 8C000000        call <jmp.&USER32.MessageBoxA>     ; \MessageBoxA
00401013   |.  6A 00              push 0                             ; /hTemplateFile = NULL
00401015   |.  68 80000000        push 80                            ; |Attributes = NORMAL
0040101A   |.  6A 03              push 3                             ; |Mode = OPEN_EXISTING
0040101C   |.  6A 00              push 0                             ; |pSecurity = NULL
0040101E   |.  6A 00              push 0                             ; |ShareMode = 0
00401020   |.  68 00000080        push 80000000                      ; |Access = GENERIC_READ
00401025   |.  68 B9204000        push unabexcr.004020B9             ; |FileName = "abex.l2c"

是不是看不懂?不用管他,按F9继续执行点击确定之后提示Hmmmmm,I can't find the file!记下来后面有用
然后在汇编代码上右击选择搜索->字符参考.
过一会看到一堆字符,找到Hmmmmm,I can't find the file!双击
来到这里
00401034   |.  83F8 FF            cmp eax,-1                      -----------------------
00401037   |.  74 3C              je short unabexcr.00401075<-----|---看到这个跳转了么? |
00401039   |.  6A 00              push 0                          |   他会先检查是否    |
0040103B   |.  FF35 CA204000      push dword ptr ds:[4020CA]      |   有光盘,如果没有就跳转到错误提示
00401041   |.  E8 4D000000        call <jmp.&KERNEL32.GetFileSize>|   那里(1)改过之后就不会跳转而出现
00401046   |.  83F8 12            cmp eax,12                      |   文件错误的提示使因为
00401049   |.  75 15              jnz short unabexcr.00401060     |<--这个跳转的原因,他会比较文件是否
0040104B   |.  6A 00              push 0                          |   正确,如果不正确就会跳转到文件错
0040104D   |.  68 35204000        push unabexcr.00402035          |   误的提示-------------------------
00401052   |.  68 40204000        push unabexcr.00402040          |   我们把他改为jz就可以完美爆破    | 
00401057   |.  6A 00              push 0                          |   ; |hOwner = NULL                |
00401059   |.  E8 41000000        call <jmp.&USER32.MessageBoxA>  |   ; \MessageBoxA                  |
0040105E   |.  EB 28              jmp short unabexcr.00401088     |                                   |
00401060   |>  6A 00              push 0                          |   ; /Style = MB_OK|MB_APPLMODAL<-(2)
00401062   |.  68 79204000        push unabexcr.00402079          |   ; |Title = "Error"
00401067   |.  68 7F204000        push unabexcr.0040207F          |   ; |Text = "The found file is not a valid keyfile!"
0040106C   |.  6A 00              push 0                          |   ; |hOwner = NULL
0040106E   |.  E8 2C000000        call <jmp.&USER32.MessageBoxA>  |   ; \MessageBoxA
00401073   |.  EB 13              jmp short unabexcr.00401088     |
00401075   |>  6A 00              push 0                         (1)->; |/Style = MB_OK|MB_APPLMODAL
00401077   |.  68 54204000        push unabexcr.00402054              ; ||Title = "Error"
0040107C   |.  68 5A204000        push unabexcr.0040205A              ; ||Text = "Hmmmmm, I can't find the file!"
00401081   |.  6A 00              push 0                              ; ||hOwner = NULL
00401083   |.  E8 17000000        call <jmp.&USER32.MessageBoxA>      ; |\MessageBoxA
00401088   \>  E8 0C000000        call <jmp.&KERNEL32.ExitProcess>    ; \ExitProcess



----------------------------------------------------------------------------------------------
【破解心得】

把整个思路概括一下.
软件先检查光驱是否有光盘,如果没有提示没有光盘,改跳转使之去反,提示文件错误,改跳转使之去反,爆破成功^_^
写成程序的格式

if 光驱有光盘 then
if 光盘上的文件正确 then
成功执行
else
提示文件错误
end if
else
提示没有放入光盘
end if

改变后

if 光驱没有光盘 then
if 光盘上的文件不正确 then
成功执行
else
提示文件错误
end if
else
提示没有放入光盘
end if

大家看了应该觉得不难吧,其它只要稍微有点汇编基础,学起来还是比较轻松的,我们也尽量把这一系列教程做到深入、易懂。
 

X

点击这里给我发消息
微信号:crackgou