• OllyDbg 使用注意事项 (十)


    OllyDbg 用笔记 (十)


    參考

    书:《加密与解密》

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


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



    这个程序能够从标题栏的“ unregistered”入手,查找全部參考文本字串,搜索 “unregistered”


    能够找到这段代码:


    004046DD      90            nop
    004046DE      90            nop
    004046DF      90            nop
    004046E0  /$  8A4424 04     mov     al, byte ptr [esp+4]
    004046E4  |.  84C0          test    al, al
    004046E6  |.  74 12         je      short 004046FA
    004046E8  |.  A1 440A4300   mov     eax, dword ptr [430A44]
    004046ED  |.  68 F09C4200   push    00429CF0                         ; /Text = "Flash Jigsaw Producer"
    004046F2  |.  50            push    eax                              ; |hWnd => NULL
    004046F3  |.  FF15 5C924200 call    dword ptr [<&USER32.SetWindowTex>; SetWindowTextA
    004046F9  |.  C3            retn
    004046FA  |>  8B0D 440A4300 mov     ecx, dword ptr [430A44]
    00404700  |.  68 C89C4200   push    00429CC8                         ; /Text = "Flash Jigsaw Producer (unregistered)"
    00404705  |.  51            push    ecx                              ; |hWnd => NULL
    00404706  |.  FF15 5C924200 call    dword ptr [<&USER32.SetWindowTex>; SetWindowTextA
    0040470C  .  C3            retn
    0040470D      90            nop
    0040470E      90            nop
    
    


    能够发现004046E0~0040470C 是一段函数。

    我们能够发现je跳转比較关键,在这里能够先尝试让je不跳转。

    可是这样仅仅能使标题中不会出现(unregistered),被屏蔽的功能还是不能使用。

    直接改je跳转不行,我们能够看看引起je跳不跳转到al。al是call这个函数的參数,我们须要找到call这个函数的地方,查看al的变化。


    在004046E0下断点。

    又一次载入程序。按F9执行到断点处。

    能够在信息版本号中看到调用这个函数的地址。

    图片1



    选中右键就可以跳到call的地址。


    想要找出call这个函数的地址,还能够选中004046E0,右键--〉查找參考--〉选定命令,就可以看到call这个函数的地址。

    图片2



    我们能够看到,有两地方call这个函数,在这两个地方都下断点。又一次载入程序,按F9执行到第一个调用函数的命令。

    004047AB  |.  68 60034300   push    00430360                         ; /IniFileName = "C:Usersvbox32AppDataLocalYavSoftfjproducerstartup.ini"
    004047B0  |.  6A 28         push    28                               ; |BufSize = 28 (40.)
    004047B2  |.  68 34034300   push    00430334                         ; |ReturnBuffer = fjproduc.00430334
    004047B7  |.  68 089D4200   push    00429D08                         ; |Default = "<-No Pass->"
    004047BC  |.  51            push    ecx                              ; |Key => "Password"
    004047BD  |.  68 149D4200   push    00429D14                         ; |Section = "Registration"
    004047C2  |.  FF15 68904200 call    dword ptr [<&KERNEL32.GetPrivate>; GetPrivateProfileStringA
    004047C8  |.  68 34034300   push    00430334                         ;  ASCII "<No Pass>"
    004047CD  |.  E8 6EFEFFFF   call    00404640
    004047D2  |.  50            push    eax
    004047D3  |.  E8 08FFFFFF   call    004046E0
    004047D8  |.  83C4 08       add     esp, 8
    004047DB  |.  5E            pop     esi
    004047DC  |.  83C4 28       add     esp, 28
    004047DF  .  C3            retn
    
    


    我们能够发现改变al的是call 004046E0。在它上面下断点。进入这个函数,能够发现这个函数是计算密钥对不正确的函数。


    00404640  /$  83EC 2C       sub     esp, 2C
    00404643  |.  56            push    esi
    00404644  |.  8B7424 34     mov     esi, dword ptr [esp+34]
    00404648  |.  8BC6          mov     eax, esi
    0040464A  |.  8D50 01       lea     edx, dword ptr [eax+1]
    0040464D  |.  8D49 00       lea     ecx, dword ptr [ecx]
    00404650  |>  8A08          /mov     cl, byte ptr [eax]
    00404652  |.  40            |inc     eax
    00404653  |.  84C9          |test    cl, cl
    00404655  |.^ 75 F9         jnz     short 00404650
    00404657  |.  2BC2          sub     eax, edx
    00404659  |.  83F8 04       cmp     eax, 4
    0040465C  |.  73 07         jnb     short 00404665
    0040465E      32C0          xor     al, al
    00404660  |.  5E            pop     esi
    00404661  |.  83C4 2C       add     esp, 2C
    00404664  |.  C3            retn
    00404665  |>  6A 03         push    3
    00404667  |.  68 C49C4200   push    00429CC4                         ;  ASCII "fjr"
    0040466C  |.  56            push    esi
    0040466D  |.  E8 6EAA0100   call    0041F0E0
    00404672  |.  83C4 0C       add     esp, 0C
    00404675  |.  85C0          test    eax, eax
    00404677  |.^ 75 E5         jnz     short 0040465E
    
    


    F8单步执行。能够发现是xor al,al 把al变成0的。能够把xor al,al  改成mov  al,1。

    在执行,能够发被屏蔽的功能已经能够用了。









    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    机器学习笔记:sklearn交叉验证之KFold与StratifiedKFold
    Python学习笔记:丢失的数字
    机器学习笔记:sklearn.datasets样本生成器——make_classification、make_blobs、make_regression
    Python学习笔记:一些出乎意料的代码
    有趣智力题:蒙提霍尔悖论 —— “决定”挑战
    Python学习笔记:季度判断
    Task.Run存在多个任务使用同一线程的情况
    照片一键生成证件照白底|在线网页生成一寸电子版证件照
    xml转数组 何苦
    elasticsearch ik kibana logstaus (ELK)的安装使用(windows版) 何苦
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4870620.html
Copyright © 2020-2023  润新知