zoukankan      html  css  js  c++  java
  • OllyDbg 使用笔记 (七)

    OllyDbg 使用笔记 (七)


    參考

    书:《加密与解密》

    视频:小甲鱼 解密系列 视频


    演示样例程序下载:http://pan.baidu.com/s/1gvwlS



    暴力破解


    观察这个程序。能够从程序标题的<unregistered  个跟 About 中的 <Unregistered Version>入手


    用OD打开程序。右键-->查找-->全部參考文本字串


    图片1




    在打开的界面中。将滚动栏移到追上面(由于是从光标处開始搜索的),右键查找文本,先搜索<unregistered


    图片2




    双击找到的文本到代码处。


    005CC81B   .  E8 9C5FEDFF   call    004A27BC
    005CC820   .  A1 8CEB6000   mov     eax, dword ptr [60EB8C]
    005CC825   .  8038 00       cmp     byte ptr [eax], 0
    005CC828   .  0F85 07010000 jnz     005CC935
    005CC82E   .  A1 DCF16000   mov     eax, dword ptr [60F1DC]
    005CC833   .  8038 00       cmp     byte ptr [eax], 0
    005CC836   .  0F85 F9000000 jnz     005CC935
    005CC83C   .  68 70CB5C00   push    005CCB70                         ;  ASCII "PC Surgeon <unregistered - "
    005CC841   .  D905 3CCA5C00 fld     dword ptr [5CCA3C]
    005CC847   .  A1 8CEC6000   mov     eax, dword ptr [60EC8C]
    005CC84C   .  DC20          fsub    qword ptr [eax]
    005CC84E   .  83C4 F4       add     esp, -0C
    005CC851   .  DB3C24        fstp    tbyte ptr [esp]
    005CC854   .  9B            wait
    
    

    细致查看。前面的跳转,能够发现 jnz     005CC935 非常关键。在前面一个jnz     005CC935处下断点,又一次执行程序,发现第这两个jnz     005CC935  未跳转。


    把第一个cmp     byte ptr [eax], 0    改成  cmp     byte ptr [eax], 1 使跳转实现。


    依照相同的方法,搜索<Unregistered Version>,跟改跳转实现。就可以破解程序。




    其它方法


    再来看看这段代码:


    005CC811   .  E8 12B9E6FF                   call    <jmp.&shell32.ShellExecuteA>     ; ShellExecuteA
    005CC816   >  B8 58CB5C00                   mov     eax, 005CCB58                    ;  ASCII "Show: splash"
    005CC81B   .  E8 9C5FEDFF                   call    004A27BC
    005CC820   .  A1 8CEB6000                   mov     eax, dword ptr [60EB8C]
    005CC825   .  8038 00                       cmp     byte ptr [eax], 0
    005CC828   .  0F85 07010000                 jnz     005CC935
    005CC82E   .  A1 DCF16000                   mov     eax, dword ptr [60F1DC]
    005CC833      8038 00                       cmp     byte ptr [eax], 0
    005CC836      0F85 F9000000                 jnz     005CC935
    005CC83C   .  68 70CB5C00                   push    005CCB70                         ;  ASCII "PC Surgeon <unregistered - "
    005CC841   .  D905 3CCA5C00                 fld     dword ptr [5CCA3C]
    005CC847   .  A1 8CEC6000                   mov     eax, dword ptr [60EC8C]
    005CC84C   .  DC20                          fsub    qword ptr [eax]
    005CC84E   .  83C4 F4                       add     esp, -0C
    005CC851   .  DB3C24                        fstp    tbyte ptr [esp]
    005CC854   .  9B                            wait
    
    


    这里有两个jnz     005CC935 。推断分别推断[[60EB8C]] 跟 [[60F1DC]] 是否为0。 从 fld     dword ptr [5CCA3C] 能够发现[5CCA3C]中是15.0 即试用天数。

    细致分析能够发现第一个jnz为推断是否正常,第二个为推断是否超过15天使用期。

    所以[[60EB8C]]的值很关键。

    要找出改[[60EB8C]]的值的地方。


    选中mov     eax, dword ptr [60EB8C] , 右键-->查找參考-->地址常量。就可以列出全部使用了这个地址的命令的位置。


    图片3





    在此窗体右键-->在每一个命令上设置断点。又一次执行程序。


    图片4





    按F9,来到此处:


    005C2BF6   .  8B15 8CEB6000                 mov     edx, dword ptr [60EB8C]          ;  pcsurgeo.00610C4A
    005C2BFC   .  8802                          mov     byte ptr [edx], al
    005C2BFE   .  A1 8CEB6000                   mov     eax, dword ptr [60EB8C]
    005C2C03   .  8038 00                       cmp     byte ptr [eax], 0
    005C2C06   .  75 0D                         jnz     short 005C2C15
    005C2C08   .  E8 6307EEFF                   call    004A3370
    005C2C0D   .  A1 8CEC6000                   mov     eax, dword ptr [60EC8C]
    005C2C12   .  DD18                          fstp    qword ptr [eax]
    005C2C14   .  9B                            wait
    
    

    看到 mov     byte ptr [edx], al 正是给[[60EB8C]] 赋值的地方,把它改成 mov     byte ptr [edx], 1。就可以破解。

    (在保存过程中会出现 重定位提示窗体,由于mov     byte ptr [edx], al改成mov     byte ptr [edx], 1后代码变多了。要重定位才可能正常执行。这里能够先不用管它。)





  • 相关阅读:
    数据结构的理解
    等价、偏序和全序
    等价、偏序和全序
    二叉树与树的理解
    SICP 习题 (2.10)解题总结: 区间除法中除于零的问题
    div:给div加滚动栏 div的滚动栏设置
    textarea文本域宽度和高度(width、height)自己主动适应变化处理
    OSX: 逻辑卷管理系统Core Storage(1)
    垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
    string实现
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7101472.html
Copyright © 2011-2022 走看看