首先声明我是一只菜菜鸟
我昨天做错了一件事:"我想把一个游戏的壳脱了,但是又怕违反规定所以就改了一个名字",但是我是没有什么恶意的,的确是对那个游戏的壳很好奇,希望能得到一些指教,现在我知道自己错了。在这里首先向坛主、版主还有各位朋友道歉。
为了表示我的诚意,我决定写一篇面向菜鸟的非常简单的脱壳和调试实验(因为我自己就是一只菜菜鸟,写不出高级的),菜鸟们不需任何基础都能看懂,各位高手看了不要笑话我呀。
实验对象:mxdft2005.exe
附件:mxdft2005.rar
(说实话,是冒险岛一个外挂,但是我保证现在已经无效了,所以我才用它做实验的,我发誓我不是推广外挂的)
实验目的:脱壳,并根据自己的意愿做一些简单的修改
实验工具:peid0.92、FI、OLLYDBG、peditor 1.7、winhex
首先大概介绍一下,mxdft2005.exe,每次运行就自动打开game.poptang.net,关闭时也要打开一次,而且在软件的窗口中又两个区域,鼠标一不小心点一下也会弹出那个网站,让人觉得很烦人,所以我的实验目标就是:
1、脱掉这个软件的壳;
2、对脱壳后的软件进行修改,让它在运行时、关闭时都候弹出看雪技术论坛的页面,在点击时候也弹出看雪的页面,窗口中关于game.poptang.net都改成看雪的主页地址。
目标定下来了下面就开始行动
第一步:查看软件加了什么壳,我准备了两个查壳的软件:peid0.92和FI,这两个是目前最流行的(好象是吧?其实我也不太清楚,我是菜菜鸟,说错了,大家表怪我呀。)
经过两种工具一检查发现结果惊人的相似――UPX加壳,而且是VB编的尼。
“哈哈哈。。。”我禁不住仰天长笑,各位菜鸟看到这里应该相信我前面说过的话了吧? “什么?前面没看?”我突然有了一种狂晕一下的冲动,并决定重说一次,我刚才说:“我的帖子表任何基础都能看懂的呀”,嘿嘿。。。。没骗人吧??
郁闷,突然想起来,这样一说大家都知道怎么做了,没人往下看了,顿时觉得头晕目眩,伤心绝望中~~~~~~
绝望归绝望,虽然简单,大家都懒得说下去了,但是这是我打算道歉的帖子呀,我要端正态度,继续写下去,不管各位菜鸟是否会瞧不起我了(为什么只有菜鸟,因为高手们早已狂吐不止,晕倒在显示器的脚下了,当然只剩下菜鸟)。
好了现在我仍然要厚着脸皮进行
第二步:抗起OD进行脱壳行动,等等,我去复制一些经典对白
“设置Ollydbg忽略所有的异常选项。老规矩:用IsDebug V1.4插件去掉Ollydbg的调试器标志。”(引用FLY老大的经典语句)
“UPX加壳入口第一句是PUSHAD,出口关键字POPAD ”(这句话嘻嘻经典吧,我自己想的,嘿嘿嘿~~~~,我是菜菜鸟,说错不负责的)
00408C70 > $ 60 PUSHAD ;入口第一句:“PUSHAD”
00408C71 . BE 00704000 MOV ESI,mxdft200.00407000
00408C76 . 8DBE 00A0FFFF LEA EDI,DWORD PTR DS:[ESI+FFFFA000]
00408C7C . 57 PUSH EDI
00408C7D . 83CD FF OR EBP,FFFFFFFF
00408C80 . EB 10 JMP SHORT mxdft200.00408C92
00408C82 90 NOP
00408C83 90 NOP
00408C84 90 NOP
00408C85 90 NOP
00408C86 90 NOP
00408C87 90 NOP
00408C88 > 8A06 MOV AL,BYTE PTR DS:[ESI]
00408C8A . 46 INC ESI
00408C8B . 8807 MOV BYTE PTR DS:[EDI],AL
00408C8D . 47 INC EDI
00408C8E > 01DB ADD EBX,EBX
00408C90 . 75 07 JNZ SHORT mxdft200.00408C99
00408C92 > 8B1E MOV EBX,DWORD PTR DS:[ESI]
00408C94 . 83EE FC SUB ESI,-4
00408C97 . 11DB ADC EBX,EBX
00408C99 >^72 ED JB SHORT mxdft200.00408C88
00408C9B . B8 01000000 MOV EAX,1
00408CA0 > 01DB ADD EBX,EBX
00408CA2 . 75 07 JNZ SHORT mxdft200.00408CAB
00408CA4 . 8B1E MOV EBX,DWORD PTR DS:[ESI]
00408CA6 . 83EE FC SUB ESI,-4
00408CA9 . 11DB ADC EBX,EBX
00408CAB > 11C0 ADC EAX,EAX
00408CAD . 01DB ADD EBX,EBX
00408CAF .^73 EF JNB SHORT mxdft200.00408CA0
00408CB1 . 75 09 JNZ SHORT mxdft200.00408CBC
00408CB3 . 8B1E MOV EBX,DWORD PTR DS:[ESI]
00408CB5 . 83EE FC SUB ESI,-4
00408CB8 . 11DB ADC EBX,EBX
00408CBA .^73 E4 JNB SHORT mxdft200.00408CA0
00408CBC > 31C9 XOR ECX,ECX
00408CBE . 83E8 03 SUB EAX,3
00408CC1 . 72 0D JB SHORT mxdft200.00408CD0
00408CC3 . C1E0 08 SHL EAX,8
00408CC6 . 8A06 MOV AL,BYTE PTR DS:[ESI]
00408CC8 . 46 INC ESI
00408CC9 . 83F0 FF XOR EAX,FFFFFFFF
00408CCC . 74 74 JE SHORT mxdft200.00408D42
00408CCE . 89C5 MOV EBP,EAX
00408CD0 > 01DB ADD EBX,EBX
00408CD2 . 75 07 JNZ SHORT mxdft200.00408CDB
00408CD4 . 8B1E MOV EBX,DWORD PTR DS:[ESI]
00408CD6 . 83EE FC SUB ESI,-4
00408CD9 . 11DB ADC EBX,EBX
00408CDB > 11C9 ADC ECX,ECX
00408CDD . 01DB ADD EBX,EBX
00408CDF . 75 07 JNZ SHORT mxdft200.00408CE8
00408CE1 . 8B1E MOV EBX,DWORD PTR DS:[ESI]
00408CE3 . 83EE FC SUB ESI,-4
00408CE6 . 11DB ADC EBX,EBX
00408CE8 > 11C9 ADC ECX,ECX
00408CEA . 75 20 JNZ SHORT mxdft200.00408D0C
00408CEC . 41 INC ECX
00408CED > 01DB ADD EBX,EBX
00408CEF . 75 07 JNZ SHORT mxdft200.00408CF8
00408CF1 . 8B1E MOV EBX,DWORD PTR DS:[ESI]
00408CF3 . 83EE FC SUB ESI,-4
00408CF6 . 11DB ADC EBX,EBX
00408CF8 > 11C9 ADC ECX,ECX
00408CFA . 01DB ADD EBX,EBX
00408CFC .^73 EF JNB SHORT mxdft200.00408CED
00408CFE . 75 09 JNZ SHORT mxdft200.00408D09
00408D00 . 8B1E MOV EBX,DWORD PTR DS:[ESI]
00408D02 . 83EE FC SUB ESI,-4
00408D05 . 11DB ADC EBX,EBX
00408D07 .^73 E4 JNB SHORT mxdft200.00408CED
00408D09 > 83C1 02 ADD ECX,2
00408D0C > 81FD 00F3FFFF CMP EBP,-0D00
00408D12 . 83D1 01 ADC ECX,1
00408D15 . 8D142F LEA EDX,DWORD PTR DS:[EDI+EBP]
00408D18 . 83FD FC CMP EBP,-4
00408D1B . 76 0F JBE SHORT mxdft200.00408D2C
00408D1D > 8A02 MOV AL,BYTE PTR DS:[EDX]
00408D1F . 42 INC EDX
00408D20 . 8807 MOV BYTE PTR DS:[EDI],AL
00408D22 . 47 INC EDI
00408D23 . 49 DEC ECX
00408D24 .^75 F7 JNZ SHORT mxdft200.00408D1D
00408D26 .^E9 63FFFFFF JMP mxdft200.00408C8E
00408D2B 90 NOP
00408D2C > 8B02 MOV EAX,DWORD PTR DS:[EDX]
00408D2E . 83C2 04 ADD EDX,4
00408D31 . 8907 MOV DWORD PTR DS:[EDI],EAX
00408D33 . 83C7 04 ADD EDI,4
00408D36 . 83E9 04 SUB ECX,4
00408D39 .^77 F1 JA SHORT mxdft200.00408D2C
00408D3B . 01CF ADD EDI,ECX
00408D3D .^E9 4CFFFFFF JMP mxdft200.00408C8E
00408D42 > 5E POP ESI
00408D43 . 89F7 MOV EDI,ESI
00408D45 . B9 21000000 MOV ECX,21
00408D4A > 8A07 MOV AL,BYTE PTR DS:[EDI]
00408D4C . 47 INC EDI
00408D4D . 2C E8 SUB AL,0E8
00408D4F > 3C 01 CMP AL,1
00408D51 .^77 F7 JA SHORT mxdft200.00408D4A
00408D53 . 803F 01 CMP BYTE PTR DS:[EDI],1
00408D56 .^75 F2 JNZ SHORT mxdft200.00408D4A
00408D58 . 8B07 MOV EAX,DWORD PTR DS:[EDI]
00408D5A . 8A5F 04 MOV BL,BYTE PTR DS:[EDI+4]
00408D5D . 66:C1E8 08 SHR AX,8
00408D61 . C1C0 10 ROL EAX,10
00408D64 . 86C4 XCHG AH,AL
00408D66 . 29F8 SUB EAX,EDI
00408D68 . 80EB E8 SUB BL,0E8
00408D6B . 01F0 ADD EAX,ESI
00408D6D . 8907 MOV DWORD PTR DS:[EDI],EAX
00408D6F . 83C7 05 ADD EDI,5
00408D72 . 89D8 MOV EAX,EBX
00408D74 .^E2 D9 LOOPD SHORT mxdft200.00408D4F
00408D76 . 8DBE 00600000 LEA EDI,DWORD PTR DS:[ESI+6000]
00408D7C > 8B07 MOV EAX,DWORD PTR DS:[EDI]
00408D7E . 09C0 OR EAX,EAX
00408D80 . 74 45 JE SHORT mxdft200.00408DC7
00408D82 . 8B5F 04 MOV EBX,DWORD PTR DS:[EDI+4]
00408D85 . 8D8430 988B000>LEA EAX,DWORD PTR DS:[EAX+ESI+8B98]
00408D8C . 01F3 ADD EBX,ESI
00408D8E . 50 PUSH EAX
00408D8F . 83C7 08 ADD EDI,8
00408D92 . FF96 D48B0000 CALL DWORD PTR DS:[ESI+8BD4]
00408D98 . 95 XCHG EAX,EBP
00408D99 > 8A07 MOV AL,BYTE PTR DS:[EDI]
00408D9B . 47 INC EDI
00408D9C . 08C0 OR AL,AL
00408D9E .^74 DC JE SHORT mxdft200.00408D7C
00408DA0 . 89F9 MOV ECX,EDI
00408DA2 . 79 07 JNS SHORT mxdft200.00408DAB
00408DA4 . 0FB707 MOVZX EAX,WORD PTR DS:[EDI]
00408DA7 . 47 INC EDI
00408DA8 . 50 PUSH EAX
00408DA9 . 47 INC EDI
00408DAA B9 DB B9
00408DAB . 57 PUSH EDI
00408DAC . 48 DEC EAX
00408DAD . F2:AE REPNE SCAS BYTE PTR ES:[EDI]
00408DAF . 55 PUSH EBP
00408DB0 . FF96 D88B0000 CALL DWORD PTR DS:[ESI+8BD8]
00408DB6 . 09C0 OR EAX,EAX
00408DB8 . 74 07 JE SHORT mxdft200.00408DC1
00408DBA . 8903 MOV DWORD PTR DS:[EBX],EAX
00408DBC . 83C3 04 ADD EBX,4
00408DBF .^EB D8 JMP SHORT mxdft200.00408D99
00408DC1 > FF96 DC8B0000 CALL DWORD PTR DS:[ESI+8BDC]
00408DC7 > 61 POPAD ;按Crtl+F向下找POPAD,在这里找到了,按F2下断点,然后F9运行到这里
00408DC8 .-E9 9384FFFF JMP mxdft200.00401260 ;F8到这里,再F8
就来到这里:
00401260 68 98134000 PUSH mxdft200.00401398
00401265 E8 EEFFFFFF CALL mxdft200.00401258 ; JMP to MSVBVM60.ThunRTMain
下面就要用OLLYdump插件了
“Plugins”-----“OLLYdump”-----“Dump debugged process”-----“Dump”-----起个名字保存
这就脱壳成功了,下面我们当然应该用peditor 1.7来rebuilder一下了
这样就完美了,HOHO,我也完美的脱了一个壳了(估计连不少菜鸟也要狂吐不止了,没关系反正偶早做好心理准备了)
下面硬着头皮继续进行
第三步:修改所有game.poptang.com相关的地方为
http://bbs.pediy.com/
非常简单,用WINHEX打开我们脱过的文件,查找game.poptang.net,找到以后毫不留情的修改为bbs.pediy.com,还有找到所有的g a m e . p o p t a n g . n e t这种形式的都做相应修改,(为什么那么“宽”,废话不宽能叫“VB宽字符”吗)
至于具体怎么修改才能不损坏文件,大家重要注意00 00这些地方就可以了。
好了,终于完成了,对于一个菜菜鸟的出于道歉的帖子,各位高手该吐的吐,大家该怎么BS就怎么BS吧,我实在写不出高水平的了,耽误大家时间了,不好意思
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)