首页 > 代码库 > 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,即可去除广告窗口。