发布网友 发布时间:2022-06-02 16:56
共1个回答
热心网友 时间:2023-11-20 11:32
用VBDed结合Ollydbg分析代码,很容易找到的。先用VBDed查看程序,发现NAG窗口为FrmLogin,在此窗体中只找到一个过程(程序做了些手脚,其它过程识别不出来):CmdOKClick,地址在426A50,足够了。再用Ollydbg载入程序,去到426A50处,发现跳转来自403044。再去到403044处,看到什么?一系列跳转。这是VB程序的特点,这个窗体的每个过程都从这里开始,如SetTimer、CommandClick等。在每个跳转上设断,重新运行程序,程序立即在某个断点上停下,可以将跳转方向改为426A50,即直接运行按确定按钮后的过程。在上一篇教程中,我们清除了一个烦人的NAG窗口。虽在实用上还是比较成功(最起码每次打开一个压缩包文件时不再会弹出一个可恶的窗口,然后我们不停的重复的点击着《关闭》,确实烦),但从美观上,还有点不雅,如图1所示,今天我们稍微让它雅观点,把标标题栏上的"WinRAR - WinRAR (评估版本)"给去掉。我就从两个思路上解决这问题。第一:在SetWindowText函数上设置断点。[ INFO:SetWindowText这个API函数用来改变窗口的标题栏的文字(如果有窗口的话),即我们所说的标题。这也就是我们在此函数上设置断点的原因所在。函数原型如下:BOOL SetWindowText( HWND hWnd, // 窗口的句柄 LPCTSTR lpString // 指向标题字符串的指针 ***我们所关注的*** );返回值:失败返回0,否则非0.]把这函数拦截下来之后我们应该怎么办呢,就像介绍这个函数时我们所说的,LPCTSTR lpString这就是我们所关注的,第一,可以更改其指针,使其指向我们希望的地址。第二,可以更改它所指向的内容,让它变成我们所希望的。分析好了,那我们就Fire Up OD,把WinRAR.exe给载入。按《Ctrl + N》组合键,查询我们所需的API,输入setwindowtext(咦,都没输入框啊,怎么输啊,没事的,尽管输,然后再看下这个窗口的标题栏,哈,看到了们,你所输入的就在那,不区分大小写),然后光标定位到SetWindowTextA上,咦?,下面怎么还有一个SetWindowTextW,若对windows编程的人有点了解,就应该知道怎么回事,这里不多说,A,代表ANSI,也就是我们平常所用的ASCII编码方式,而W则为UNICODE,我们选择后者,因为我们要处理的标题栏有汉字,需用UNICODE编码。指向SetWindowTextW这一行,《右击》,选择《在每个参考上设置断点》,然后回到CPU窗口,按F9运行,好,断在这了:004640AD |. 57 push edi ; /Text ****这里****004640AE |. FF75 FC push dword ptr [ebp-4] ; |hWnd004640B1 |. E8 74EF0300 call <jmp.&USER32.SetWindowTextW> ; \SetWindowTextW看到了没,EDI即我们所说的指向标题字符串的指针,然后看看右边的寄存器窗口,EDI 0012920C UNICODE "WinRAR - WinRAR ("好了,目标找出来的,该怎么做呢,前面我们也分析了,第一点,改变指针,不过,本人不推荐这方法,因此在此跳过。那们就用第二种方法,我们分析知,EDI指向0012920C,因此我们转到数据窗口,按《Ctrl + G》,输入0012920C,回车,这样我们就跳到了我们所感兴趣的数据上,用鼠标在00129290C上按住鼠标《左键》不放,拖到这字符串的结尾,即00129291D,在这高亮区域《右击》,选择《二进制》->《编辑》,之后把UNICODE这行改为WinRAR,记得选上下面那个《保持大小》复选框。然后再在刚才的高亮区域《右击》,选择《复制到可执行文件》,保存即可。这样我们再次打开时,标题栏上的那个显眼的(评估版本)就没了。如图2所示。第二方法呢,我们就稍微更深入一点,我们既然知道这个指针,那或许我们就会好奇那个EDI的值是从哪里来的,于是我们往上滚动几行。.......00464094 |. 59 pop ecx00464095 |. 5D pop ebp00464096 \. C3 retn00464097 90 nop00464098 /$ 55 push ebp 00464099 |. 8BEC mov ebp, esp0046409B |. 51 push ecx0046409C |. 53 push ebx0046409D |. 56 push esi0046409E |. 57 push edi0046409F |. 8BFA mov edi, edx ;*****这里*******004640A1 |. 8945 FC mov dword ptr [ebp-4], eax004640A4 |. E8 13C7FAFF call 004107BC004640A9 |. 85C0 test eax, eax004640AB |. 74 0B je short 004640B8004640AD |. 57 push edi ; /Text004640AE |. FF75 FC push dword ptr [ebp-4] ; |hWnd004640B1 |. E8 74EF0300 call <jmp.&USER32.SetWindowTextW> ; \SetWindowTextW哈,看到了没,就在那,mov edi, edx 。我们往上找,希望找到EDX又是怎么来的,可,咦,找到00464098 /$ 55 push ebp这行时,再往上找就是另一个函数了,也就是说我们这是一个被调用的函数,那是谁调用了它呢,我们把光标定位到00464098 /$ 55 push ebp这行,然后再这行上《右击》,选择《查找参考》->《选定命令》,然后出来了一个窗口,那里列出了调用这个函数的所有命令,我们《右击》,选择《在每个命令上设置断点》,不放过任何一个断点。好了,断点设置好了,返回CPU,按F9,哈,断在这了:004438B9 |. E8 DA070200 call 00464098往上看看:004438AE 8D95 00F4FFFF lea edx, dword ptr [ebp-C00]004438B4 |. A1 E46E4C00 mov eax, dword ptr [4C6EE4]004438B9 |. E8 DA070200 call 00464098哈,看到了,004438AE 8D95 00F4FFFF lea edx, dword ptr [ebp-C00] 嗯,我们要马把EDX改成指向我们所需的地址,嗯,哪有呢,哈,别忘了寄存器窗口(也可往上找,不过在这,简单点处理),ESI 0012CEEE UNICODE "WinRAR"看到了没,我们就把它改成为,004438AE |> \BA 638D4A00 mov edx, esi运行,看到了没,那个可恶的“(评估版本)”也没了,如图2所示。好了,就这样,我们的WinRAR的第二个破解教程就这样结束了,不过,记得要保存啊,哈。。。追问我说的是mapgis6.7里面的。。。是输入线里面的解析造线,如图:
就是红圈圈里面的那个窗口,无论如何关不了,能不能在不关闭大窗口的前提下关闭它???我不知道是不是软件的bug还是怎么。。