首页
社区
课程
招聘
[原创]新手试刀-金山词霸搜索脱壳+去广告
发表于: 2006-4-18 19:39 5033

[原创]新手试刀-金山词霸搜索脱壳+去广告

2006-4-18 19:39
5033
用了接近3个月时间 先学汇编到WIN32 无奈看了几章已经看不下去 实在枯燥 于是就上路了 开始看"加密与解密" 还没看完已经心痒啦 找了这个小东西玩一下 发觉这个东西非常脆弱  

操作系统:win2003
工具: OllyDbg ImportREC Fileinfo(FI)

先用FI查看 是UPX1.2的壳 然后用OD打开 已经断点在"00453DF0"处

00453DF0 金> $ 60           pushad                         ; 壳入口
00453DF1   . BE 00804300     mov esi,金山词霸.00438000
00453DF6   . 8DBE 0090FCFF   lea edi,dword ptr ds:[esi+FFFC9000]
00453DFC   . 57           push edi
00453DFD   . 83CD FF       or ebp,FFFFFFFF
00453E00   . EB 10         jmp short 金山词霸.00453E12
00453E02     90           nop
00453E03     90           nop
00453E04     90           nop
00453E05     90           nop
00453E06     90           nop
00453E07     90           nop
00453E08   > 8A06         mov al,byte ptr ds:[esi]
00453E0A   . 46           inc esi
00453E0B   . 8807         mov byte ptr ds:[edi],al
00453E0D   . 47           inc edi
00453E0E   > 01DB         add ebx,ebx
00453E10   . 75 07         jnz short 金山词霸.00453E19
00453E12   > 8B1E         mov ebx,dword ptr ds:[esi]
00453E14   . 83EE FC       sub esi,-4
00453E17   . 11DB         adc ebx,ebx
00453E19   >^ 72 ED         jb short 金山词霸.00453E08               ; 跳转已经实现
00453E1B   . B8 01000000     mov eax,1                       ; 运行到所选
00453E20   > 01DB         add ebx,ebx
00453E22   . 75 07         jnz short 金山词霸.00453E2B
00453E24   . 8B1E         mov ebx,dword ptr ds:[esi]
00453E26   . 83EE FC       sub esi,-4
00453E29   . 11DB         adc ebx,ebx
00453E2B   > 11C0         adc eax,eax
00453E2D   . 01DB         add ebx,ebx
00453E2F   . 73 0B         jnb short 金山词霸.00453E3C
00453E31   . 75 19         jnz short 金山词霸.00453E4C
00453E33   . 8B1E         mov ebx,dword ptr ds:[esi]
00453E35   . 83EE FC       sub esi,-4
00453E38   . 11DB         adc ebx,ebx
00453E3A   . 72 10         jb short 金山词霸.00453E4C
00453E3C   > 48           dec eax
00453E3D   . 01DB         add ebx,ebx
00453E3F   . 75 07         jnz short 金山词霸.00453E48
00453E41   . 8B1E         mov ebx,dword ptr ds:[esi]
00453E43   . 83EE FC       sub esi,-4
00453E46   . 11DB         adc ebx,ebx
00453E48   > 11C0         adc eax,eax
00453E4A   .^ EB D4         jmp short 金山词霸.00453E20
00453E4C   > 31C9         xor ecx,ecx
00453E4E   . 83E8 03       sub eax,3
00453E51   . 72 11         jb short 金山词霸.00453E64
00453E53   . C1E0 08       shl eax,8
00453E56   . 8A06         mov al,byte ptr ds:[esi]
00453E58   . 46           inc esi
00453E59   . 83F0 FF       xor eax,FFFFFFFF
00453E5C   . 74 78         je short 金山词霸.00453ED6
00453E5E   . D1F8         sar eax,1
00453E60   . 89C5         mov ebp,eax
00453E62   . EB 0B         jmp short 金山词霸.00453E6F
00453E64   > 01DB         add ebx,ebx
00453E66   . 75 07         jnz short 金山词霸.00453E6F
00453E68   . 8B1E         mov ebx,dword ptr ds:[esi]
00453E6A   . 83EE FC       sub esi,-4
00453E6D   . 11DB         adc ebx,ebx
00453E6F   > 11C9         adc ecx,ecx
00453E71   . 01DB         add ebx,ebx
00453E73   . 75 07         jnz short 金山词霸.00453E7C
00453E75   . 8B1E         mov ebx,dword ptr ds:[esi]
00453E77   . 83EE FC       sub esi,-4
00453E7A   . 11DB         adc ebx,ebx
00453E7C   > 11C9         adc ecx,ecx
00453E7E   . 75 20         jnz short 金山词霸.00453EA0
00453E80   . 41           inc ecx
00453E81   > 01DB         add ebx,ebx
00453E83   . 75 07         jnz short 金山词霸.00453E8C
00453E85   . 8B1E         mov ebx,dword ptr ds:[esi]
00453E87   . 83EE FC       sub esi,-4
00453E8A   . 11DB         adc ebx,ebx
00453E8C   > 11C9         adc ecx,ecx
00453E8E   . 01DB         add ebx,ebx
00453E90   .^ 73 EF         jnb short 金山词霸.00453E81
00453E92   . 75 09         jnz short 金山词霸.00453E9D
00453E94   . 8B1E         mov ebx,dword ptr ds:[esi]
00453E96   . 83EE FC       sub esi,-4
00453E99   . 11DB         adc ebx,ebx
00453E9B   .^ 73 E4         jnb short 金山词霸.00453E81
00453E9D   > 83C1 02       add ecx,2
00453EA0   > 81FD 00FBFFFF   cmp ebp,-500
00453EA6   . 83D1 01       adc ecx,1
00453EA9   . 8D142F         lea edx,dword ptr ds:[edi+ebp]
00453EAC   . 83FD FC       cmp ebp,-4
00453EAF   . 76 0F         jbe short 金山词霸.00453EC0
00453EB1   > 8A02         mov al,byte ptr ds:[edx]
00453EB3   . 42           inc edx
00453EB4   . 8807         mov byte ptr ds:[edi],al
00453EB6   . 47           inc edi
00453EB7   . 49           dec ecx
00453EB8   .^ 75 F7         jnz short 金山词霸.00453EB1               ; 跳转实现 回跳
00453EBA   .^ E9 4FFFFFFF     jmp 金山词霸.00453E0E
00453EBF     90           nop
00453EC0   > 8B02         mov eax,dword ptr ds:[edx]       ;运行到所选     
;(显示屏幕不够大 到这里后往下看 找到00453F5B处会发现壳的出口点)

00453EC2   . 83C2 04       add edx,4
00453EC5   . 8907         mov dword ptr ds:[edi],eax
00453EC7   . 83C7 04       add edi,4
00453ECA   . 83E9 04       sub ecx,4
00453ECD   .^ 77 F1         ja short 金山词霸.00453EC0
00453ECF   . 01CF         add edi,ecx
00453ED1   .^ E9 38FFFFFF     jmp 金山词霸.00453E0E
00453ED6   > 5E           pop esi
00453ED7   . 89F7         mov edi,esi
00453ED9   . B9 A9080000     mov ecx,8A9
00453EDE   > 8A07         mov al,byte ptr ds:[edi]
00453EE0   . 47           inc edi
00453EE1   . 2C E8         sub al,0E8
00453EE3   > 3C 01         cmp al,1
00453EE5   .^ 77 F7         ja short 金山词霸.00453EDE
00453EE7   . 803F 11       cmp byte ptr ds:[edi],11
00453EEA   .^ 75 F2         jnz short 金山词霸.00453EDE
00453EEC   . 8B07         mov eax,dword ptr ds:[edi]
00453EEE   . 8A5F 04       mov bl,byte ptr ds:[edi+4]
00453EF1   . 66:C1E8 08     shr ax,8
00453EF5   . C1C0 10       rol eax,10
00453EF8   . 86C4         xchg ah,al
00453EFA   . 29F8         sub eax,edi
00453EFC   . 80EB E8       sub bl,0E8
00453EFF   . 01F0         add eax,esi
00453F01   . 8907         mov dword ptr ds:[edi],eax
00453F03   . 83C7 05       add edi,5
00453F06   . 89D8         mov eax,ebx
00453F08   .^ E2 D9         loopd short 金山词霸.00453EE3
00453F0A   . 8DBE 00100500   lea edi,dword ptr ds:[esi+51000]
00453F10   > 8B07         mov eax,dword ptr ds:[edi]
00453F12   . 09C0         or eax,eax
00453F14   . 74 45         je short 金山词霸.00453F5B
00453F16   . 8B5F 04       mov ebx,dword ptr ds:[edi+4]
00453F19   . 8D8430 D4B00500   lea eax,dword ptr ds:[eax+esi+5B0D4]
00453F20   . 01F3         add ebx,esi
00453F22   . 50           push eax
00453F23   . 83C7 08       add edi,8
00453F26   . FF96 B0B10500   call dword ptr ds:[esi+5B1B0]
00453F2C   . 95           xchg eax,ebp
00453F2D   > 8A07         mov al,byte ptr ds:[edi]
00453F2F   . 47           inc edi
00453F30   . 08C0         or al,al
00453F32   .^ 74 DC         je short 金山词霸.00453F10
00453F34   . 89F9         mov ecx,edi
00453F36   . 79 07         jns short 金山词霸.00453F3F
00453F38   . 0FB707         movzx eax,word ptr ds:[edi]
00453F3B   . 47           inc edi
00453F3C   . 50           push eax
00453F3D   . 47           inc edi
00453F3E     B9           db B9
00453F3F   . 57           push edi
00453F40   . 48           dec eax
00453F41   . F2:AE         repne scas byte ptr es:[edi]
00453F43   . 55           push ebp
00453F44   . FF96 B4B10500   call dword ptr ds:[esi+5B1B4]
00453F4A   . 09C0         or eax,eax
00453F4C   . 74 07         je short 金山词霸.00453F55
00453F4E   . 8903         mov dword ptr ds:[ebx],eax
00453F50   . 83C3 04       add ebx,4
00453F53   .^ EB D8         jmp short 金山词霸.00453F2D
00453F55   > FF96 B8B10500   call dword ptr ds:[esi+5B1B8]
00453F5B   > 61           popad                           ; 壳的出口点 这里运行到所选

004131C9   . 55             push ebp       ;程序入口点

脱好之后其实可以直接使用 IAT表并没有坏 但我用IDA想在慢慢研究的时候 发现IDA扫了很旧也没扫完 而且很多指令都并没有提示 于是我修复一下它的IAT 再用IDA扫
提示出来了 :)

方法: 启动ImportREC----启动未脱壳的金山词霸搜索---选择金山词霸搜索进程---在OEP处输入"131C9"(即程序入口)---Get Imports(获取输入表)---Fix Dump(修复)
由于新手且书也没看完 有待练习 肯定有不足之处 请老师指正

==================================================
下午继续研究这工具 这工具退出后会自动弹出“http://cb.kingsoft.com/pop/cb.php”的连接广告 于是用了两小时去研究 开始研究API 用OD和W32Masm找了非常多次这两个函数“InternetOpenA”和“InternetOpenUrlA” 毫无进展 用Hiew改了又改:)
都怪自己没看完WIN32那本书
最后好是皇天不负有心人 终于找到了两个解决方法:

先用W32Masm搜索"kingsoft" 然后一直找 开始会找到Kingsoft的ID号和版权还有搜索时需要的地址 最后会来到 "00407F08"处 正是广告网站的地址 由于我汇编还不是太纯熟 只好靠OD帮手了 用OD打开来的“00407F08”处

00407EF1   E8 EAA70000       call (单词搜.004126E0
00407EF6   83C4 04         add esp,4                       ; 恢复现场
00407EF9   896E 40         mov dword ptr ds:[esi+40],ebp
00407EFC   39AE 90000000     cmp dword ptr ds:[esi+90],ebp           ; 比较程序是否被关闭
00407F02   75 15         jnz short (单词搜.00407F19               ; 没有关闭则跳到00407F19处
00407F04   6A 05           push 5
00407F06   55             push ebp
00407F07   55             push ebp
00407F08   68 FC624200       push (单词搜.004262FC                 ; ASCII "http://cb.kingsoft.com/pop/cb.php"
00407F0D   68 F4624200       push (单词搜.004262F4                 ; ASCII "open"
00407F12   55             push ebp
00407F13   FF15 AC214200     call dword ptr ds:[<&shell32.ShellExecuteA>>; shell32.ShellExecuteA
00407F19   5F             pop edi
00407F1A   5E             pop esi
00407F1B   5D             pop ebp
00407F1C   5B             pop ebx
00407F1D   C3             retn

OD实在太爽了 我加了红色字那里是OD显示出来的
ASCII "http://cb.kingsoft.com/pop/cb.php"表示得到广告地址
然后ASCII "open"是打开连接的意思
这里有两种方法可解决
第一种:将"00407F02"处的“jnz”改为“jz” 直接跳到407F19处 寄存器出栈退出 跳过广告
第二种:只要把ASCII "open"那句NOP掉即可 即把00407F0D处用16进制形式改9090(不过不建议这种方法 第一种感觉是完美的修改 :))
而且第二种方法关闭程序后有点慢 是因为OPEN的前一句是得到网站地址
然后我NOP掉了OPEN之后再寄存器全部出栈 所以内存多了一个工作才关闭

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 44229
活跃值: (19955)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
新手能到这步不简单,不过离精华帖标准还有些距离,望继续努力。
除了hiew能改文件外,Ollydbg也能直接修改的,选中修改的行,右键里“复制到可执行文件”即可。
2006-4-18 19:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
最初由 kanxue 发布
新手能到这步不简单,不过离精华帖标准还有些距离,望继续努力。
除了hiew能改文件外,Ollydbg也能直接修改的,选中修改的行,右键里“复制到可执行文件”即可。


谢谢老师指导 请问您的“加密与解密”什么时候出版呀
第二版写的一些软件都已经过时啦 而且我用2003系统用个别软件的时候
代码和您书上写的有差别呀
2006-4-18 20:05
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
顶,同感!
<<加密与解密>>对OD的介绍太少哦
2006-4-18 20:12
0
雪    币: 235
活跃值: (40)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
顶,同意.
2006-4-18 20:32
0
雪    币: 243
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
ShellExecuteA基本上现在的软件都用这个函数来调用IE打开网页!!!!
2006-4-18 21:22
0
雪    币: 198
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
最初由 echolee 发布
00407F08 68 FC624200 push (单词搜.004262FC ; ASCII "http://cb.kingsoft.com/pop/cb.php"
00407F0D 68 F4624200 push (单词搜.004262F4 ; ASCII "open"
00407F12 55 push ebp
00407F13 FF15 AC214200 call dword ptr ds:[<&shell32.ShellExecuteA>>; shell32.ShellExecuteA


最主要的.
2006-4-19 14:11
0
游客
登录 | 注册 方可回帖
返回
//