李沉舟 发表于 2016-11-26 16:20

winrar 5.4 去广告教程

【软件名称】:WinRar【软件版本】:5.4【软件下载】:自己搜索下载【外壳保护】:无
话说硬柿子都被大牛捏掉了,我们这些屌丝只能捏捏软柿子了。
话说winrar原来在中国改变战略了(现在才知道,汗),只是在软件里搞个Nag。



这个东西其实挺讨厌的,尤其是我这种电脑配置不好的。
理一理逆向分析思路。1. 下断CretaeWindow2. 看看是哪块不开眼的代码创建了这个窗口3. 做了它
OD载入它,按Ctrl+N,发现只有CreateWindowExW这一个API。我们当然不能直接傻乎乎地在那里一个一个的跟踪,假设有20个控件,那么就要调用这个API20次……所以我们考虑一下条件断点,我查了下这个API的参数列表。第一个参数是风格,不用鸟他第二个参数是类名,这个很重要第三个参数是标题名,不喜欢用。我们来看看第二个参数,按照stdcall的调用方式,参数从右边往左边入栈,同时栈空间是从高往低增长的,比如调用 a,a(1, 2, 3)Push 3 ;入栈3,执行完成后,esp = esp - 4Push 2 ;入栈2,esp = esp - 8Push 1; 入栈1,esp = esp – 0xCCall a ;入栈返回地址eip,esp = esp – 0x10栈空间里就是这样排放的数据返回地址eip         ESP参数1(1)          ESP+ 4参数2(2)          ESP+ 8参数3(3)          ESP+ 0xC本人语文不好,可能没讲清楚,别打我啊……于是我们可以得出,ESP + 8就是参数二(stdcall调用方式),而ESP + 8是一个字符串地址我们再来看看OD的条件断点语法。]== “12345” ;如果ESP(字符串地址)指向的字符串等于12345就中断,因为CreateWindowExW使用的是UNICODE字符串,所以这里也用UNICODE,如果是以A结尾的API,则使用STRING其实也可以这么写]] ;这个就相当于字符串的指针了。好吧,扯歪了一点。我们在OD的CPU窗口中按Ctrl+G,输入CreateWindowExW,按确定,来到该API头部,再按Shift + F2,输入以下表达式。



按确定,至于这个类名是怎么得到的吗,其实很简单啊,比如说我用的是Spy4Win这个小工具


点确定之后,我们按下F9,让程序跑起来。



断在这里,我们右键那个第一行的CALL到……,点击反汇编窗口中跟随,发现来到了这里



004A17AD|> \68 00010000   push   100
004A17B2|.68 186F5200push    00526F18                         ;ASCII"http://ad.winrar.com.cn/show_2.html?L=7&bl=7&v=540personal&a=32&src=pe005"
004A17B7|.E8 24F3FFFFcall    004A0AE0
004A17BC|.6A 00         push   0                              ;/lParam = NULL
004A17BE|. FF35 24DF5600 push    dword ptr               ; |hInst =00400000
004A17C4|.6A 00         push   0                              ;|hMenu = NULL
004A17C6|.6A 00         push   0                              ;|hParent = NULL
004A17C8|. 57            push    edi                              ; |Height
004A17C9|. 56            push    esi                           ;|Width
004A17CA|. 55            push    ebp                              ; |Y
004A17CB|. FF7424 2C   push   dword ptr                ; |X
004A17CF|. 53            push    ebx                              ; |Style
004A17D0|.68ACE05000   push    0050E0AC                         ; |WindowName ="WinRAR"
004A17D5|.6804065100   push    00510604                         ; |Class ="RarReminder"
004A17DA|.6A 00         push   0                              ; |ExtStyle = 0
004A17DC|.FF15 A0B65000 call    dword ptr[<&USER32.CreateWindow>; \CreateWindowExW
004A17E2|.F605 A86B5200>test    byte ptr , 1
004A17E9|.5F            pop   edi
004A17EA|. 5D            pop   ebp
004A17EB|.7413         je      short 004A1800
004A17ED|.6A 03         push   3                              ;/Flags = SWP_NOSIZE|SWP_NOMOVE
004A17EF|.6A 00         push   0                              ;|Height = 0
004A17F1|.6A 00         push   0                              ;|Width = 0
004A17F3|.6A 00         push   0                              ;|Y = 0
004A17F5|.6A 00         push   0                              ;|X = 0
004A17F7|.6A FF         push   -1                               ; |InsertAfter =HWND_TOPMOST
004A17F9|. 50            push    eax                              ; |hWnd
004A17FA|. FF15 88B65000 call    dword ptr[<&USER32.SetWindowPos>; \SetWindowPos
004A1800|> 833D 14895300>cmp   dword ptr, 0
004A1807|.7433         je      short 004A183C
004A1809|. C605 64A05700>mov   byte ptr , 1
004A1810|.EB 2A      jmp   short 004A183C
004A1812|> 84DB          test    bl, bl
004A1814|.7426         je      short 004A183C
004A1816|.6A 00         push   0                              ;/lParam = NULL
004A1818|.68403D4D00   push    004D3D40                         ; |DlgProc =WinRAR.004D3D40
004A181D|.C60564A05700>mov   byte ptr , 1            ; |
004A1824|. FF15 B0B65000 call    dword ptr[<&USER32.GetFocus>]   ;|[GetFocus
004A182A|. 50            push    eax                              ; |hOwner
004A182B|.68 1C065100push    0051061C                         ; |pTemplate ="REMINDER"
004A1830|. FF35 20DF5600 push    dword ptr               ; |hInst =00400000
004A1836|. FF15 78B65000 call    dword ptr[<&USER32.DialogBoxPar>; \DialogBoxParamW


通篇都是创建窗口,我们把代码往上面拉一拉。




这些字符串很可疑啊,看起来就是网址,而且还含有ad(广告),我们继续把代码往上面翻。


原来这是一个函数啊,考虑直接在段首RET掉。我们回到段尾,发现是RET8,我们就把段首第一句改成RET8好了(堆栈平衡参数,否则会崩溃)。



保存,打开,发现弹窗已经被去掉了。



清清爽爽的,多秀气的小姑娘啊。
打完收工了。


**** Hidden Message *****

Shark恒 发表于 2016-11-26 16:57

我把最后让大家轻点*你的话给删了,就可以发布了。

DDK4282 发表于 2016-11-26 17:01

很解渴。{:5_120:}

神哥 发表于 2016-11-26 17:01

这个不错呀没广告老带劲了!

李沉舟 发表于 2016-11-26 17:10

Shark恒 发表于 2016-11-26 16:57
我把最后让大家轻点*你的话给删了,就可以发布了。

谢谢鲨鱼提醒

Shy 发表于 2016-11-26 17:15

条件断点最骚的就是断不下具体数值,比如你上图的extStyle=0,然后断==0断不下来,,伤脑筋

shike蟆城 发表于 2016-11-26 18:02

这个教程太给力啦

ghkjduu 发表于 2016-11-26 18:27

没广告老带劲了!谢谢楼主

坏坏LLLLLL 发表于 2016-11-26 18:28

看看怎么怼

joker_bug 发表于 2016-11-26 18:39

学习..大神厉害了{:5_116:}
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: winrar 5.4 去广告教程