首页 > 代码库 > OllyDbg 使用笔记 (六)

OllyDbg 使用笔记 (六)

OllyDbg 使用笔记 (六)


参考

书:《加密与解密》

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


VisualSite Designer下载地址:http://pan.baidu.com/s/1ntyVLsH


VisualSite Designer 运行前有个NAG,关闭程序后有个广告窗口,并且有运行次数限制。


去除NAG以及运行次数限制


方法1:

去除NAG窗口的方法是:F8运行程序,碰到出现NAG的CALL就下断点,重新运行按F7进入此CALL,直到找到用户领空“真正“CALL出NAG窗口的CALL。观察此CALL前后的代码。


按照前面说的,找到这个CALL在 00489912


可以发现这个CALL返回eax=1,而且下面的一句是判断cmp是否是1,是1就正常运行。所以这个CALL的作用就是调用NAG窗口,把使用次数减1,返回是否要正常运行。

所以,只需把call    <jmp.&MFC42.#2514_CDialog::DoModal>改成 mov  eax,1 即可实现去除NAG窗口跟使用次数限制。


004898F1   . /0F8E A1000000 jle     00489998
004898F7   . |8D8C24 100200>lea     ecx, dword ptr [esp+210]
004898FE   . |E8 6D240200   call    004ABD70
00489903   . |8D8C24 0C0200>lea     ecx, dword ptr [esp+20C]
0048990A   . |C68424 788700>mov     byte ptr [esp+8778], 0B
00489912     |E8 132B0300   call    <jmp.&MFC42.#2514_CDialog::DoModal>       ;  neg, return 1
00489917   . |83F8 01       cmp     eax, 1
0048991A   . |74 40         je      short 0048995C
0048991C   . |8BCF          mov     ecx, edi
0048991E   . |E8 0DF6FFFF   call    00488F30
00489923   . |8D8C24 B00200>lea     ecx, dword ptr [esp+2B0]
0048992A   . |C68424 788700>mov     byte ptr [esp+8778], 0D
00489932   . |E8 81300300   call    <jmp.&MFC42.#765_CProgressCtrl::~CProgres>


方法2:

程序注册前(或者说不能正常使用)与注册后(或者说能正常使用)。代码的走到过程肯定是不一样的。要么是 jl,jnz等跳不跳转,要么是jmp 寄存器 中 寄存器的值不一样。所以,我们只需F8运行程序,记录下每次jl,jnz等跳不跳,然后多运行几次程序,用完剩余的使用次数,再在OD中F8运行程序,观察下每次jl,jnz等跳不跳,与之前正常运行的做对比,一定发现不一样的就要仔细分析。


004898D1   .  84C0          test    al, al
004898D3   .  0F84 FF000000 je      004899D8
004898D9   .  8A87 E0000000 mov     al, byte ptr [edi+E0]
004898DF   .  84C0          test    al, al
004898E1   .  0F85 42010000 jnz     00489A29
004898E7   .  8B87 E4000000 mov     eax, dword ptr [edi+E4]
004898ED   .  6A 00         push    0
004898EF   .  85C0          test    eax, eax
004898F1   .  0F8E A1000000 jle     00489998
004898F7   .  8D8C24 100200>lea     ecx, dword ptr [esp+210]
004898FE   .  E8 6D240200   call    004ABD70
00489903   .  8D8C24 0C0200>lea     ecx, dword ptr [esp+20C]
0048990A   .  C68424 788700>mov     byte ptr [esp+8778], 0B
00489912   .  B8 01000000   mov     eax, 1
00489917   .  83F8 01       cmp     eax, 1


        可以发现 jle     00489998  正常运行时是 未跳转,使用次数用光后运行是 跳转。所以,只需把jle     00489998 改成nop 即可。



去除运行结束后的广告窗口



OD运行前面改过的程序,关闭程序,出现广告窗口,暂停程序。按alt+k,查看k窗口。k窗口,是通过调动堆栈,判断哪些函数被调用过。


图片1




可以不用管dll中的调用。可以发现00480C29的调用,选中它右键-->显示调用,查看此处的代码:


00480C0F   .  8D4C24 04     lea     ecx, dword ptr [esp+4]
00480C13   .  E8 2833FEFF   call    00463F40
00480C18   .  8D4C24 00     lea     ecx, dword ptr [esp]
00480C1C   .  C74424 68 000>mov     dword ptr [esp+68], 0
00480C24   .  E8 01B80300   call    <jmp.&MFC42.#2514_CDialog::DoModal>
00480C29   .  8D4C24 00     lea     ecx, dword ptr [esp]
00480C2D   .  C74424 68 FFF>mov     dword ptr [esp+68], -1
00480C35   .  E8 DEBA0300   call    <jmp.&MFC42.#641_CDialog::~CDialog>
00480C3A   .  8B4C24 60     mov     ecx, dword ptr [esp+60]
00480C3E   .  64:890D 00000>mov     dword ptr fs:[0], ecx
00480C45   .  83C4 6C       add     esp, 6C
00480C48   .  C3            retn
00480C49      90            nop


        直接把call    <jmp.&MFC42.#2514_CDialog::DoModal>改成nop,即可去除广告窗口。