反汇编之爆破

    废话不多说,我们直接步入正题。玩任何技术,都离不开工具,破解也不例外。下面我们先来认识下破解用到的工具--------OllyDBG,简称OD。大家自行下载软件。
    打开OD后,进入主界面,在菜单栏中点击“文件”,选择”打开“,会弹出一个窗口,供我们寻找要破解的软件,找到之后,点击”打开“,就能把我们要破解的软件加载到OD中,接下来就是破解了。
    在开始破解之前,先运行一遍我们要破解的软件,本贴中是CRECKME 0.exe(去我的网盘中下载)。打开exe文件后,我们看到一个界面,界面中有两个输入框,一个是NAME,需要我们输入用户名,另一个是SERIAL,需要我们输入序列号。我们先王这两个框中随意输入一些数据,比如NAME中输入”aaa“,SERIAL中输入”123“,点击确定后弹出一个窗口,上面写着”Name or Serial is too short“,这是一个提示语句,有提示语句就好办了。接下来我们回到OD主界面。
    在OD主界面中我们可以看到有一个反汇编版面(就是现实一堆反汇编代码的地方),在反汇编中按下右击鼠标,选择”查找“下的”所有参考文本字串“,在参考文本字串界面中我们可以看到刚才出错对话框中的那句”Name or Serial is too short“,在那句话上点击左键,然后再单击右键,选择”反汇编窗口中跟随“,就会来到这个地方004015A0    56            push    esi
004015A1    57            push    edi
004015A2    6A 01         push    1
004015A4    8BF1          mov     esi, ecx
004015A6    E8 6B030000   call   
004015AB    8D7E 74       lea     edi, dword ptr [esi 74]
004015AE    8BCF          mov     ecx, edi
004015B0    FF15 D0314000 call    dword ptr [<&MFC71.#2902_ATL::CS>;  MFC71.7C146AB0
004015B6    83F8 06       cmp     eax, 6
004015B9      7D 1A         jge     short 004015D5
004015BB    817E 78 A0860>cmp     dword ptr [esi 78], 186A0
004015C2      7D 11         jge     short 004015D5
004015C4    6A 00         push    0
004015C6    6A 00         push    0
004015C8    68 8C394000   push    0040398C                         ASCII "Name or Serial is too short!"
004015CD    E8 3E030000   call   
004015D2    5F            pop     edi
004015D3    5E            pop     esi
004015D4    C3            retn
004015D5    68 78394000   push    00403978                         ASCII "IndolentAfternoon"
004015DA    8BCF          mov     ecx, edi
004015DC    FF15 C0314000 call    dword ptr [<&MFC71.#1482_ATL::CS>;  MFC71.7C144DAE
004015E2    85C0          test    eax, eax
004015E4    ^ 75 EC         jnz     short 004015D2
004015E6    817E 78 D7C75>cmp     dword ptr [esi 78], 56C7D7
004015ED    ^ 75 E3         jnz     short 004015D2
004015EF    6A 00         push    0
004015F1    6A 00         push    0
004015F3    68 44394000   push    00403944                         ASCII "Congratulation! Correct Serial Num,do next one? "
004015F8    E8 13030000   call   
004015FD    8B06          mov     eax, dword ptr [esi]
004015FF    5F            pop     edi
00401600    8BCE          mov     ecx, esi
00401602    5E            pop     esi

    在上面反汇编代码中我们找到
004015C4    6A 00         push    0
004015C6    6A 00         push    0
004015C8    68 8C394000   push    0040398C                         ASCII "Name or Serial is too short!"
004015CD    E8 3E030000   call   

    很显然,这是调用MFC的MessageBox函数,当用户名或序列号长度太短时就调用这个函数显示一个对话框来提示我们。不过我们不怕,既然是破解者,就要把这个拦路虎给干掉。如何干掉?我们顺着这个函数往前看,很快我们就会看到两个跳转指令
004015B6    83F8 06       cmp     eax, 6
004015B9      7D 1A         jge     short 004015D5
004015BB    817E 78 A0860>cmp     dword ptr [esi 78], 186A0
004015C2      7D 11         jge     short 004015D5

     这个我们可以猜的出来是检测用户名和密码长度的。由于这一课我们只学习爆破,不需要去了解它的用户名和密码是什么,那么只要修改这两个跳转就行。如何修改?我们在OD中的004015B9      7D 1A         jge     short 004015D5代码行左击数标,然后再右击鼠标,选择”汇编“,在弹出的对话框中吧”jge“改成”jmp“(无条件跳转,也就是不管我输入的用户名长度是多少,程序都跳转,不去执行那个弹出提示框的函数),点击”汇编“,这时代码就改成004015B9      7D 1A         jmp     short 004015D5,点击”取消“。接下来用同样的方法来修改004015C2      7D 11         jge     short 004015D5,也是吧”jge“改成”jmp“,到这里为止,不论我们输入的用户名和序列号是多少,程序都不会再报 "Name or Serial is too short!"。
    接下来就是如何让程序显示注册成功。我们可以再下面的代码中找到这么一段代码
004015D5    68 78394000   push    00403978                         ASCII "IndolentAfternoon"
004015DA    8BCF          mov     ecx, edi
004015DC    FF15 C0314000 call    dword ptr [<&MFC71.#1482_ATL::CS>;  MFC71.7C144DAE
004015E2    85C0          test    eax, eax
004015E4    ^ 75 EC         jnz     short 004015D2
004015E6    817E 78 D7C75>cmp     dword ptr [esi 78], 56C7D7
004015ED    ^ 75 E3         jnz     short 004015D2
004015EF    6A 00         push    0
004015F1    6A 00         push    0
004015F3    68 44394000   push    00403944                         ASCII "Congratulation! Correct Serial Num,do next one? "
004015F8    E8 13030000   call   

    上面修改两个跳转指令后,无论我们输入的用户名和序列号是什么,程序都会跳到004015D5    68 78394000   push    00403978                         ASCII "IndolentAfternoon"这个地方,顺着这往下看,我们看到这样一个函数
004015EF    6A 00         push    0
004015F1    6A 00         push    0
004015F3    68 44394000   push    00403944                         ASCII "Congratulation! Correct Serial Num,do next one? "
004015F8    E8 13030000   call   
    
    这也是一个MessageBox函数,提示我们注册成功,而我们的目的也就是使得这个函数得以执行。如何让这个函数执行呢?我们顺着这个函数网上看,可以看到两个跳转指令
004015E4    ^ 75 EC         jnz     short 004015D2
004015E6    817E 78 D7C75>cmp     dword ptr [esi 78], 56C7D7
004015ED    ^ 75 E3         jnz     short 004015D2

      既然我们要让注册成功这个函数执行,那么就要废掉这两个跳转指令,如何废掉?我们按照上面的方法来处理。先是在004015E4    ^ 75 EC         jnz     short 004015D2
这行代码上左击鼠标,然后再右击鼠标,选择”汇编“,在弹出的对话框的编辑框中输入nop点击”汇编“,这时代码就变成
004015E4      90            nop
004015E5      90            nop
再点击”取消“。
      用同样的方法处理004015ED    ^ 75 E3         jnz     short 004015D2这行代码。
这时MessageBox函数前面的代码就变成
004015E4      90            nop
004015E5      90            nop
004015E6    817E 78 D7C75>cmp     dword ptr [esi 78], 56C7D7
004015ED      90            nop
004015EE      90            nop
004015EF    6A 00         push    0
004015F1    6A 00         push    0
004015F3    68 44394000   push    00403944                         ASCII "Congratulation! Correct Serial Num,do next one? "
004015F8    E8 13030000   call   

    到此,我们的代码就改完了,接下来就是保存我们之前修改过的代码。在反汇编版面中右击鼠标,在”复制到可执行文件“一栏中选择”所有修改“,点击”全部复制“,我们会看到一个字体小一点的反汇编界面,在这个反汇编界面中右击鼠标,选择”保存文件“,输入我们破解后的文件名,点击保存即可。到此,我们的爆破也就完成了,运行我们破解后保存的可执行文件,在NAME和SERIAL编辑框中输入任意数据,他都会弹出一个序列号正确的对话框,说明我们成功把软件破解了。
    下面来总结下我们爆破的过程:
    1、先是运行我们要破解的软件(也就是CrackMe0.exe),在NAME和SERIAL中输入任意数据,点击确定,看是否有什么提示信息。
    2、用OD加载要破解的软件,根据1中的提示信息,在OD中找到相关字串,并通过”反汇编跟随“跟随到字串所处的代码段。
    3、从字串所处代码段附近查找,找到关键跳转指令后,将其修改,使其跳到我们想要的地方(上面的”jge“改为”jmp“部分)或是使其失效(上面的”jnz“改为”nop“),以便达到破解的目的。
    4、破解之后,将破解的代码保存到可执行文件。
    这样,一个简单的爆破就完成了,想学破解的同学,去试着玩玩吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值