QQ收割小分队脱壳去广告记录
QQ收割小分队4.2(beta版)这个最新版,一直都用其他会员的脱壳去广告版,今天无意自己看了下这个软件,发现其实这软件很容易去广告,下面教大家方法,我不说多详细,做个大概的记录吧程序下载地址:http://www.176web.com/xiazai/shouge4.2.rar
看区段就知道是VMProtect所加的壳,大家别看到VMProtect就害怕,其实他只用了VMProtect的压缩功能,IAT没有加密,连入口点都没有被虚拟变形,所以难度相当于UPX,脱起来也很简单,首先你要先学会怎么调试它,关于OD被发现的问题,可以看本区的置顶帖:
http://www.52pojie.cn/thread-15368-1-1.html
http://www.52pojie.cn/thread-31095-1-1.html
第一部分:脱壳
载入OD,脱壳思路就是解码dump修复iat,直接在VirtualProtect断尾F2断点吧,然后就一直F9,从数据窗口观察数据是否被解码了,也就是401000这的代码是否被恢复了,等到发现代码恢复就可以取消断点,然后再程序的代码段.text下段,再F9下就停在程序的OEP了
0045647C E8 68F10000 call 收割小分.004655E9 ; VC++ 2008 OEP
00456481 ^ E9 78FEFFFF jmp 收割小分.004562FE
00456486 8BFF mov edi,edi
00456488 55 push ebp
00456489 8BEC mov ebp,esp
0045648B 6A 00 push 0
IAT也很清晰:
0047700077DCC110ADVAPI32.LookupPrivilegeValueA
0047700477DA796BADVAPI32.OpenProcessToken
0047700877DA6C07ADVAPI32.RegCloseKey
0047700C77DB42F0ADVAPI32.RegQueryValueA
0047701077DA7832ADVAPI32.RegOpenKeyExA
0047701477DAEE4CADVAPI32.AdjustTokenPrivileges
0047701877DA7A9BADVAPI32.RegQueryValueExA
0047701C77DAE834ADVAPI32.RegCreateKeyExA
0047702077DAE927ADVAPI32.RegSetValueExA
0047702477DCB6BEADVAPI32.RegDeleteKeyA
0047702877DC86A3ADVAPI32.RegEnumKeyA
我习惯用UIF修复下IAT,很多人不会使用,做个简单的截图吧,先看程序进程的PID,填入UIF就可以了
设置好PID点start就自动修复IAT了,然后用LordPE来dump程序,再用ImpREC来修复IAT,关于怎么获取IAT看图
从UIF上可以看到:
IAT RVA: 00800000
IAT Size : 000006D0
从OD里知道OEP的RVA是:5647C
ImpREC的选项里勾上创建新的IAT,将上面3个地址填入ImpREC,不要点自动查找IAT了,直接点获取输入表就能获取到IAT了,获取到之后修复dump下来的文件就可以了.
再说下优化程序,用CFF打开脱好的程序,其中.vmp0 .vmp1 .tls .vmp2 .reloc 这几个区段都是VMP的代码重定位还有tls区段,可以直接删除直接用CFF删除区段和数据,删除完保存再用LoadPE看PE信息,会发现很多出错的地方,什么输出表啊 重定位啊 TLS啊 还有一个载入配置啊 全部都清0:
这些清0后还有一个重要的地方要修改一下,是这个程序特殊的地方,特征值改成103,就是勾上选项里的一个重定位已分离选项,这样勾上后保存,才可以在win7上运行,谢谢海风指点
程序优化完再用海风的利器PeRebuilder优化下大小,还可以用Resource Binder或者PE_Optimizer,优化完程序大概有六百多K,差不多了,下面说说自校验
运行程序,发现挂掉了,程序还有个自校验,bp CreateFileA,然后F9,知道发现打开自身了然后返回:
0012B78C 0040D45D/CALL 到 CreateFileA 来自 dumped_.0040D457
0012B790 0012E344|FileName = "C:\Documents and Settings\Administrator\桌面\QQ收割小分队4.2(beta版)\dumped_.exe"
0012B794 80000000|Access = GENERIC_READ
0012B798 00000000|ShareMode = 0
0012B79C 00000000|pSecurity = NULL
0012B7A0 00000004|Mode = OPEN_ALWAYS
0012B7A4 00000000|Attributes = 0
0012B7A8 00000000\hTemplateFile = NULL
打开文件读文件啊,这些东西,我们一直F8走,主要是找返回,目的是回朔到断首,走到这就可以看到了:
0040E965|.E8 56EDFFFF call dumped_.0040D6C0 ;这里就是刚刚获取文件进行校验的地方
0040E96A|.8B35 58E55100 mov esi,dword ptr ds:[<&shell32.ShellExecuteA>] ;shell32.ShellExecuteA
0040E970|.85C0 test eax,eax
0040E972|.74 1B je short dumped_.0040E98F ;校验失败就打开窗口并退出
0040E974|.6A 05 push 5 ; /IsShown = 5
0040E976|.6A 00 push 0 ; |DefDir = NULL
0040E978|.6A 00 push 0 ; |Parameters = NULL
0040E97A|.68 34064800 push dumped_.00480634 ; |FileName = " http://www.176web.com/index.html"
0040E97F|.68 9CFE4700 push dumped_.0047FE9C ; |Operation = "open"
0040E984|.6A 00 push 0 ; |hWnd = NULL
0040E986|.FFD6 call esi ; \ShellExecuteA
0040E988|.8BCF mov ecx,edi
0040E98A|.E8 8C580200 call dumped_.0043421B
0040E98F|>57 push edi ; /Arg1
0040E990|.E8 0B340000 call dumped_.00411DA0 ; \dumped_.00411DA0
我的修改方法是直接连文件都不让他取,直接跳过去,2个字节就可以:
0040E965 /EB 28 jmp short dumped_.0040E98F ;这里就是刚刚获取文件进行校验的地方
改完保存,可以运行了.
第二部分:去广告
去广告其实也不难,广告无非联网获取广告地址,然后再属性框显示出来,我们可以干掉他联网获取广告,把广告显示的属性框用资源工具设置成不可见
首先还是载入程序进入OD,搜索字符串,然后在字符串里搜索 http:// 吧,搜到不是腾讯的地址就下个段,然后直接让程序跑起来,他就自动断下来了
第一处在这里:
0040EB80 .FFD0 call eax
0040EB82 .83C0 10 add eax,10
0040EB85 .894424 44 mov dword ptr ss:,eax
0040EB89 .6A 0D push 0D
0040EB8B .8D4C24 48 lea ecx,dword ptr ss:
0040EB8F .68 D0064800 push Unpack.004806D0 ;http://update.176web.com/farm/notice.html?v=%d
0040EB94 .51 push ecx
0040EB95 .C68424 D4000000 >mov byte ptr ss:,18
0040EB9D .E8 2E6EFFFF call Unpack.004059D0
这就是软件打开程序上的广告了,可以看看地址的内容就知道,一种简单的方法就是nop掉这个地址的第一个字节,这样地址就失效了,广告自然没有了,我喜欢直接跳过这段,我是这样改的:
0040EB4F .8B47 20 mov eax,dword ptr ds:
0040EB52 .6A 00 push 0 ; /Timerproc = NULL
0040EB54 .6A 64 push 64 ; |Timeout = 100. ms
0040EB56 .6A 64 push 64 ; |TimerID = 64 (100.)
0040EB58 .50 push eax ; |hWnd
0040EB59 .FF15 60E25100 call dword ptr ds:[<&user32.Set>; \SetTimer
0040EB5F E9 BC010000 jmp Unpack.0040ED20 ;直接跳过这段,上面的SetTime不能跳过,那里是弹登陆框和检测升级用的,从这里跳到结尾就可以了
0040EB64 .33C9 xor ecx,ecx
0040EB66 .85C0 test eax,eax
0040EB68 .0F95C1 setne cl
0040EB6B .85C9 test ecx,ecx
0040EB6D .75 0A jnz short Unpack.0040EB79
0040EB6F .68 05400080 push 80004005
保存下修改的,继续F9,这里断下来了,这就是上面SetTimer设置的地方:
00417A68|.E8 03980000 call Unpack.00421270
00417A6D|.51 push ecx
00417A6E|.8BCC mov ecx,esp
00417A70|.896424 28 mov dword ptr ss:,esp
00417A74|.33DB xor ebx,ebx
00417A76|.68 001A4800 push Unpack.00481A00 ;update.176web.com
00417A7B|.899C24 18010000mov dword ptr ss:,ebx
00417A82|.E8 99E1FEFF call Unpack.00405C20
00417A87|.8D4C24 48 lea ecx,dword ptr ss:
00417A8B|.E8 90990000 call Unpack.00421420
00417A90|.68 141A4800 push Unpack.00481A14 ;http://update.176web.com/farm/version_v2.js
00417A95|.FF15 5CE65100 call dword ptr ds:[<&wininet.De>;wininet.DeleteUrlCacheEntryA
00417A9B|.51 push ecx
00417A9C|.8BCC mov ecx,esp
00417A9E|.896424 28 mov dword ptr ss:,esp
00417AA2|.68 401A4800 push Unpack.00481A40 ;/farm/version_v2.js
00417AA7|.E8 74E1FEFF call Unpack.00405C20
00417AAC|.8D4C24 48 lea ecx,dword ptr ss:
00417AB0|.E8 EB990000 call Unpack.004214A0
00417AB5|.3BC3 cmp eax,ebx
00417AB7|.74 2F je short Unpack.00417AE8
这个广告比较恶心,判断升级就在这里,这里的JS脚本里有点击广告,最讨厌这玩意,里面还有个地址应该是升级程序的地址,这一点要干掉,我是这样改的:
00417A20 C2 0400 retn 4 ;直接返回,不让它检测升级点击广告!
保存下,大的广告基本已经全部去除了,个别小广告可以小搞一下,比如左下角的那个网站啊和标题栏的私服发布啊,直接用资源工具Restorator去编辑掉,我就改成我们吾爱破解的吧:
00418110 .6A 03 push 3 ; /(Initial CPU selection)
00418112 .68 2FEC4700 push Unpack.0047EC2F ; |CConfigDlg
00418117 .68 2FEC4700 push Unpack.0047EC2F ; |CConfigDlg
0041811C .68 D41A4800 push Unpack.00481AD4 ; |http://www.176web.com/
00418121 .68 9CFE4700 push Unpack.0047FE9C ; |open
00418126 .6A 00 push 0 ; |hWnd = NULL
00418128 .FF15 50E55100 call dword ptr ds:[<&shell32.ShellExecuteA>] ; \ShellExecuteA
0041812E .C3 retn
左下角的,我改成了www.52pojie.cn
00418280 .6A 03 push 3 ; /IsShown = 3
00418282 .68 2FEC4700 push Unpack.0047EC2F ; |CConfigDlg
00418287 .68 2FEC4700 push Unpack.0047EC2F ; |CConfigDlg
0041828C .68 041B4800 push Unpack.00481B04 ; |http://www.hj02.com/?source=farm
00418291 .68 9CFE4700 push Unpack.0047FE9C ; |open
00418296 .6A 00 push 0 ; |hWnd = NULL
00418298 .FF15 50E55100 call dword ptr ds:[<&shell32.ShellExecuteA>] ; \ShellExecuteA
0041829E .C3 retn
这里是菜单栏的地址,我也改成论坛的了
另外有2个地址广告虽然没被访问到,我们也把他干掉,以防万一,地址如下:
00406F40/.55 push ebp ;广告
00406F41|.8BEC mov ebp,esp
00406F43|.83E4 F8 and esp,FFFFFFF8
00406F46|.6A FF push -1
00406F48|.68 80224700 push Unpack.00472280
00406F4D|.64:A1 00000000 mov eax,dword ptr fs:
00406F53|.50 push eax
00406F54|.83EC 28 sub esp,28
00406F57|.56 push esi
00406F58|.A1 44364900 mov eax,dword ptr ds:
00406F5D|.33C4 xor eax,esp
00406F5F|.50 push eax
00406F60|.8D4424 30 lea eax,dword ptr ss:
00406F64|.64:A3 00000000 mov dword ptr fs:,eax
00406F6A|.8BF1 mov esi,ecx
00406F6C|.E8 EED50200 call Unpack.0043455F
00406F71|.33C0 xor eax,eax
00406F73|.68 7CEE4700 push Unpack.0047EE7C ;http://update.176web.com/farm/notice_v2.html
00406F78|.8D4C24 20 lea ecx,dword ptr ss:
00406F7C|.66:894424 20 mov word ptr ss:,ax
00406F81|.E8 7B700300 call Unpack.0043E001
00406F86|.8D4C24 0C lea ecx,dword ptr ss:
00406F8A|.51 push ecx ; /Arg1
00406F8B|.C74424 3C 000000>mov dword ptr ss:,0 ; |
00406F93|.E8 DD6A0300 call Unpack.0043DA75 ; \Unpack.0043DA75
00406F98|.8D5424 0C lea edx,dword ptr ss:
00406F9C|.52 push edx ; /Arg11
00406F9D|.8BC2 mov eax,edx ; |
00406F9F|.50 push eax ; |Arg10
00406FA0|.8BCA mov ecx,edx ; |
00406FA2|.51 push ecx ; |Arg9
00406FA3|.52 push edx ; |Arg8
00406FA4|.8D4424 2C lea eax,dword ptr ss: ; |
00406FA8|.50 push eax ; |Arg7
00406FA9|.68 5C4C4900 push Unpack.00494C5C ; |LLLLL
00406FAE|.6A 00 push 0 ; |Arg5 = 00000000
00406FB0|.6A 00 push 0 ; |Arg4 = 00000000
00406FB2|.6A 01 push 1 ; |Arg3 = 00000001
00406FB4|.68 F4010000 push 1F4 ; |Arg2 = 000001F4
00406FB9|.83C6 74 add esi,74 ; |
00406FBC|.56 push esi ; |Arg1
00406FBD|.C64424 64 01 mov byte ptr ss:,1 ; |
00406FC2|.E8 5F370300 call Unpack.0043A726 ; \Unpack.0043A726
00406FC7|.8B35 B4E55100 mov esi,dword ptr ds:[<&oleaut3>;oleaut32.VariantClear
00406FCD|.83C4 2C add esp,2C
00406FD0|.8D4C24 0C lea ecx,dword ptr ss:
00406FD4|.51 push ecx
00406FD5|.FFD6 call esi ;<&oleaut32.VariantClear>
00406FD7|.8D5424 1C lea edx,dword ptr ss:
00406FDB|.52 push edx
00406FDC|.FFD6 call esi ;<&oleaut32.VariantClear>
00406FDE|.B8 01000000 mov eax,1
00406FE3|.8B4C24 30 mov ecx,dword ptr ss:
00406FE7|.64:890D 00000000 mov dword ptr fs:,ecx
00406FEE|.59 pop ecx
00406FEF|.5E pop esi
00406FF0|.8BE5 mov esp,ebp
00406FF2|.5D pop ebp
00406FF3\.C3 retn
00433010/.55 push ebp ;广告
00433011|.8BEC mov ebp,esp
00433013|.83E4 F8 and esp,FFFFFFF8
00433016|.6A FF push -1
00433018|.68 80224700 push Unpack.00472280
0043301D|.64:A1 00000000 mov eax,dword ptr fs:
00433023|.50 push eax
00433024|.83EC 28 sub esp,28
00433027|.56 push esi
00433028|.A1 44364900 mov eax,dword ptr ds:
0043302D|.33C4 xor eax,esp
0043302F|.50 push eax
00433030|.8D4424 30 lea eax,dword ptr ss:
00433034|.64:A3 00000000 mov dword ptr fs:,eax
0043303A|.8BF1 mov esi,ecx
0043303C|.E8 1E150000 call Unpack.0043455F
00433041|.33C0 xor eax,eax
00433043|.68 643A4800 push Unpack.00483A64 ;http://update.176web.com/farm/version.html
00433048|.8D4C24 20 lea ecx,dword ptr ss:
0043304C|.66:894424 20 mov word ptr ss:,ax
00433051|.E8 ABAF0000 call Unpack.0043E001
00433056|.8D4C24 0C lea ecx,dword ptr ss:
0043305A|.51 push ecx ; /Arg1
0043305B|.C74424 3C 000000>mov dword ptr ss:,0 ; |
00433063|.E8 0DAA0000 call Unpack.0043DA75 ; \Unpack.0043DA75
00433068|.8D5424 0C lea edx,dword ptr ss:
0043306C|.52 push edx ; /Arg11
0043306D|.8BC2 mov eax,edx ; |
0043306F|.50 push eax ; |Arg10
00433070|.8BCA mov ecx,edx ; |
00433072|.51 push ecx ; |Arg9
00433073|.52 push edx ; |Arg8
00433074|.8D4424 2C lea eax,dword ptr ss: ; |
00433078|.50 push eax ; |Arg7
00433079|.68 5C4C4900 push Unpack.00494C5C ; |LLLLL
0043307E|.6A 00 push 0 ; |Arg5 = 00000000
00433080|.6A 00 push 0 ; |Arg4 = 00000000
00433082|.6A 01 push 1 ; |Arg3 = 00000001
00433084|.68 F4010000 push 1F4 ; |Arg2 = 000001F4
00433089|.81C6 D8000000 add esi,0D8 ; |
0043308F|.56 push esi ; |Arg1
00433090|.C64424 64 01 mov byte ptr ss:,1 ; |
00433095|.E8 8C760000 call Unpack.0043A726 ; \Unpack.0043A726
0043309A|.8B35 B4E55100 mov esi,dword ptr ds:[<&oleaut3>;oleaut32.VariantClear
004330A0|.83C4 2C add esp,2C
004330A3|.8D4C24 0C lea ecx,dword ptr ss:
004330A7|.51 push ecx
004330A8|.FFD6 call esi ;<&oleaut32.VariantClear>
004330AA|.8D5424 1C lea edx,dword ptr ss:
004330AE|.52 push edx
004330AF|.FFD6 call esi ;<&oleaut32.VariantClear>
004330B1|.B8 01000000 mov eax,1
004330B6|.8B4C24 30 mov ecx,dword ptr ss:
004330BA|.64:890D 00000000 mov dword ptr fs:,ecx
004330C1|.59 pop ecx
004330C2|.5E pop esi
004330C3|.8BE5 mov esp,ebp
004330C5|.5D pop ebp
004330C6\.C3 retn
看代码就清楚的知道,这里就是那个属性框的广告,我们直接在断首返回就行了,这样改:
00406F40 C3 retn ;广告
00433010 C3 retn ;广告
这里菜单栏文字也给改了,也可以删除掉
原始的那个广告属性框,我们设置成不可见禁用好了.然后其他哦随便改改就完工了.
最后完工了,用着自己的放心啊,不怕被放后门,用起来也很舒心啊,文件我打包下,大家自己手动尝试下吧,大部分我都说了,大家也可以补充其他方法.
吾爱破解
Hmily
2010年3月2号
http://Www.52PoJiE.Cn 占二楼,膜拜一下,回头试试 占楼沙发没了好详细啊·· 刚才我说看看阅读权限居然是200…还好现在改回来了… 回复 4# 疯子韩
那时候在写,没有开放,写好就开放了. 前排欣赏 给我个权限,我给你加精:)eee 精品文章 高手还有分析图强悍!!!支持! 小蓝不是正在搞这个的脱壳么。。。