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,即可去除广告窗口。