逆向的基础备忘

有个蛮不错的软件,注册费很便宜,不注册也只是在第一次打开时弹个框提示一下。由于很精致,就想看看其保护方式,发现居然没壳,用ollydbg查看找注册码,发现不好爆破。于是想找其弹框的函数,但CreateDialog等都断不下,最后用ShowWindow才断下,检查后知道是DialogBoxParamW。

找到相关的代码后就想直接用UE来处理,结果找不到特征码。。。于是直接在ollydbg中修改,再另存。运行时经常会出错!

对修改后的程序再动态调试发现,原先写的一堆90(NOP)有些变成了其他的指令,于是换成在前端写JMP,这才不出错了。

反复对比各个地址和指令后,考虑到该程序的基址会动态变化,所以Call指令,一些变量的mov等对应的地址其实是会变的,可能程序文件中存的只是个占位符,程序在运行时才把相关的地址填上去。

如下:

002F6EAA  |.  8B0D 74C04000 mov     ecx, dword ptr [40C074]          ; 
002F6EB0  |.  52                 push    edx                         ; /lParam
002F6EB1  |.  68 40E22600   push    0026E240                 ; |DlgProc = xxxx.0026E240
002F6EB6  |.  50                 push    eax                         ; |hOwner
002F6EB7  |.  68 D6000000   push    0D6                         ; |pTemplate = D6
002F6EBC  |.  51                 push    ecx                          ; |hInst => 00250000
002F6EBD  |.  FF15 68D73900 call    dword ptr [<&USER32.DialogBoxPar>; \DialogBoxParamW
002F6EC3  |.  5E               pop     esi                              ;  0019F6F8
002F6EC4  |.  C2 0800       retn    8
002F6EC7  |>  6A 0E         push    0E                               ; /Error = ERROR_OUTOFMEMORY
002F6EC9  |.  FF15 14D43900 call    dword ptr [<&KERNEL32.SetLastErr>; \SetLastError
002F6ECF  |.  83C8 FF       or      eax, FFFFFFFF
002F6ED2  |.  5E               pop     esi
002F6ED3  \.  C2 0800       retn    8

 

你可能感兴趣的:(逆向的基础备忘)