-
-
[原创]去掉O2Mania的广告
-
发表于:
2010-2-28 16:59
11284
-
【文章标题】: 去掉O2Mania的广告
【文章作者】: Rex
【作者邮箱】: 744417059@qq.com
【作者主页】: http://hi.baidu.com/elevin
【作者QQ号】: 744417059
【下载地址】: 自己搜索下载
【作者声明】: 只是不喜欢弹窗广告,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
记得读高中的时候比较流行玩劲乐团,班里有一个高手,那手速看的我真是惊叹万分,我都看不清了,他还能稳健的连击。本人那个时候偶尔也玩下,不过水平很菜。
后来因为一些原因很长时间没有去碰它了。去年某个时候,我又想起劲乐团来了,于是去网上搜,可惜啊,舞团还在,乐团却没有了。
无奈找了个单机版的O2Mania,做的一般,凑活着可以玩一下。
最近又把它翻出来了,软件没有更新,广告却一直在更新。本人觉得嵌入的广告无所谓,弹窗总让人有种不安全的感觉,于是决定来修整一下这个东东。
首先PEID查壳,发现是VC7编译的,没有壳。
使用WINHEX修改软件最后一个字节,执行软件,弹窗提示“软件被非法修改”,此时的标题栏为空。
用OD载入,查找字符串,没找到。
估计弹窗用的是MessageBox,于是给所有MessageBox下断点,F9直接到达了目标代码区域。
首先是一个判定,如果文件自校验失败将继续执行本段代码。
之后便是解密字符信息并弹出窗口的代码。
004280C1 |. /0F84 88000000 JE o2mania_.0042814F
004280C7 |. |B0 48 MOV AL,48
004280C9 |. |B1 2F MOV CL,2F
004280CB |. |884424 3E MOV BYTE PTR SS:[ESP+3E],AL
004280CF |. |884424 40 MOV BYTE PTR SS:[ESP+40],AL
004280D3 |. |C64424 38 4C MOV BYTE PTR SS:[ESP+38],4C
004280D8 |. |C64424 39 33 MOV BYTE PTR SS:[ESP+39],33
004280DD |. |884C24 3A MOV BYTE PTR SS:[ESP+3A],CL
004280E1 |. |C64424 3B 0D MOV BYTE PTR SS:[ESP+3B],0D
004280E6 |. |C64424 3C 4E MOV BYTE PTR SS:[ESP+3C],4E
004280EB |. |C64424 3D 44 MOV BYTE PTR SS:[ESP+3D],44
004280F0 |. |C64424 3F 38 MOV BYTE PTR SS:[ESP+3F],38
004280F5 |. |C64424 41 57 MOV BYTE PTR SS:[ESP+41],57
004280FA |. |884C24 42 MOV BYTE PTR SS:[ESP+42],CL
004280FE |. |C64424 43 21 MOV BYTE PTR SS:[ESP+43],21
00428103 |. |C64424 44 47 MOV BYTE PTR SS:[ESP+44],47
00428108 |. |C64424 45 3B MOV BYTE PTR SS:[ESP+45],3B
0042810D |. |C64424 46 00 MOV BYTE PTR SS:[ESP+46],0
00428112 |. |C64424 47 00 MOV BYTE PTR SS:[ESP+47],0
00428117 |. |33C0 XOR EAX,EAX
00428119 |. |8DA424 000000>LEA ESP,DWORD PTR SS:[ESP]
00428120 |> |8A4C04 38 /MOV CL,BYTE PTR SS:[ESP+EAX+38]
00428124 |. |F6D1 |NOT CL
00428126 |. |884C04 38 |MOV BYTE PTR SS:[ESP+EAX+38],CL
0042812A |. |40 |INC EAX
0042812B |. |83F8 0E |CMP EAX,0E
0042812E |.^|7C F0 \JL SHORT o2mania_.00428120
00428130 |. |55 PUSH EBP ; /Style
00428131 |. |68 69C74A00 PUSH o2mania_.004AC769 ; |Title = ""
00428136 |. |8D5424 40 LEA EDX,DWORD PTR SS:[ESP+40] ; |
0042813A |. |52 PUSH EDX ; |Text
0042813B |. |FF15 50C44A00 CALL DWORD PTR DS:[<&USER32.GetActiveWin>; |[GetActiveWindow
00428141 |. |50 PUSH EAX ; |hOwner
00428142 |. |FF15 60C44A00 CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA
00428148 |. |33C0 XOR EAX,EAX
0042814A |. |E9 9F010000 JMP o2mania_.004282EE
观察一下前后的指令,发现作者有意对弹窗的文本进行了隐藏。
隐藏的方法很简单:事先将输出文本求反,申请一段栈空间,然后用mov指令以立即数的方式将求反的数据移动到栈空间,之后循环再将栈空间中数据求一次反即可。
简单的将判断的跳转修改为JMP之后,保存到文件o2mania1.exe,运行没有提示“软件被非法修改”了,不过点击“开始”之后,这个提示又弹出来了。先不管这么多,更正前面修改的最后一个字节,继续破解。
和上面一样,对所有弹窗下断点。F9之后,本人先关掉了弹出的广告,再点开始,结果程序总是报错。本人看到基本的AntiDebug插件是开启,又尝试了一遍,不过这次我没有主动去关掉那个广告,成功断下。看来在调试程序的时候最好不要乱动。
修改和前面一样,直接将条件跳转改成JMP,保存到文件o2mania2.exe。由于代码的基本逻辑和先前的那段差不多,就不再贴上来了。
运行o2mania2.exe,没有发现问题,完整性检查已经被废掉了。
可是奇怪的问题发生了,它不再给我弹广告了……
这回都不好下断点了,因为可能是某种条件判定倒是弹广告的地方没有被执行。这个判定不是因为本人的修改所导致的,因为原版也不弹了。
虽然难度又大了,还是继续。
查找模块中的名称,发现弹窗最有可能用的是ShellExecute,于是全部下断点。看到所有调用比较少,于是逐个看了一下,没有什么可疑的。
此时运行一下原版程序,奇迹般地又开始弹广告了,这真是太好了!
对ShellExecute下断点跑一次,发现竟然没有断下来,看来这广告IE弹窗和其他的所有IE弹窗用的不是一种方式。之后又查了一下CreateThread,发现和IE弹窗还是没有关系。
无奈之下,本人觉得还是认真看下字符串里面有没有什么可疑的地方比较好。
找了一遍,没看到什么可以的文字,倒是有几个空字符引起了我的注意。
凭借直觉,在里面手动跟了几次,越发觉得可疑,但无法下结论,因为字符可能还是隐藏的。直接在CreateWindowEx下断点并F9,解码出来的标题暴露了一个地址,把这个地址在Chrome中打开,发现就是内嵌的那个广告。此时软件的弹窗中的音乐突然响起,一看Chrome右下角,拦截了一弹窗。
此时我的的感觉比较怪异。本来没想搞掉他的内嵌广告,结果反被他的内嵌广告搞了。找了这么久的弹窗,原来是内嵌广告里面弹出来的!
有了这条线索,终结行动开始了。
从CreateWindow一直往前找,找到了这个广告网址生成的地方了。它把这次还原操作由前面的取反改成了减法而已,这对于我们来说没有区别。
之后我们要做的事情就是让广告显示不出来。至于怎么个搞法,我想大家都有自己的方法。我就直接把网址搞成一空字符串,测试显示很好,因为IE可以接受空网址。
至于如何搞成空字符串,最简单的就是在数据源中,有目的的使其解析出来的第一个字符为NULL。
本人由于没多想,直接自己再空白区写了一小段代码实现首字符清零。
首先在广告参数传入之前改掉一个合适的地方,把代码跳转到我们编写的那段。
0043A67A > \E9 810E0700 JMP o2mania_.004AB500
0043A67F 90 NOP
这个是我编写的小段代码,将栈中广告链接首双字改0(只要首字节为0就可以),执行完再跳转回去。
004AB500 > \8B4C24 14 MOV ECX,DWORD PTR SS:[ESP+14]
004AB504 . C74424 48 000>MOV DWORD PTR SS:[ESP+48],0
004AB50C . 85C9 TEST ECX,ECX
004AB50E .^ E9 6DF1F8FF JMP o2mania_.0043A680
到此为止,广告已经被去掉了,不过在界面显示广告的地方有一个框。使用ResHacker可以对这些资源进行修改。本人把那个显示广告的控件直接删掉然后把其他控件排列一下就OK了。仔细想想,貌似一开始就删掉这个岂不是更好,于是又试了一下,发现不行,虽然嵌入广告没有显示,但是弹窗还是出来了。
--------------------------------------------------------------------------------
【经验总结】
使用内嵌广告进行广告弹窗的确是个有新意的想法。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2010年02月28日 16:57:20
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)