因为手中几个2D游戏是用HGE写的,而HGE依赖BASS.DLL,而BASS.DLL又是加了壳的,PEID看是PEtite 2.x -> Ian Luck的壳。我不会脱壳啊,只是会点点逆向吧。而游戏中有有个BUG是断在BASS.DLL内的。所以希望脱之看个究竟,但是找遍网上的自动脱壳机,也没找到能脱BASS.DLL。而此BUG时而反复出现,感觉不爽,于是我做了个艰难的决定还是学下脱壳吧。昨天晚上开始看了下网上的一篇教程。这个就是压缩壳嘛,应该不难。了解了脱壳就是在找原始程序的OEP,修复IAT,修复重定位表(DLL的话)。(以上乃个人理解,可能不慎准确)。
下面说下BASS.DLL的脱壳过程:
OD装载,第二次会停在类似
1104C036 >- E9 248BFDFF jmp 11024B5F
1104C03B - E9 06647B6B jmp kernel32.Sleep
1104C040 - E9 75177E6B jmp kernel32.QueueUserAPC
1104C045 - E9 2AE17B6B jmp kernel32.WideCharToMultiByte
1104C04A - E9 42DF7B6B jmp kernel32.InitializeCriticalSecti>
1104C04F - E9 B6D47B6B jmp kernel32.CreateFileMappingA
1104C054 - E9 046B7D6B jmp kernel32.GetExitCodeThread
1104C059 - E9 2DD97B6B jmp kernel32.GetCurrentThread
1104C05E - E9 AD017C6B jmp kernel32.FreeLibraryAndExitThrea>
1104C063 - E9 83EE7B6B jmp kernel32.LoadLibraryW
1104C068 - E9 02F57B6B jmp kernel32.GetModuleFileNameA
的地方,F7步入,到达DLL的入口点
11024B5F /. 55 push ebp
11024B60 |. 8BEC mov ebp, esp
11024B62 |. 53 push ebx
11024B63 |. 8B5D 08 mov ebx, dword ptr [ebp+0x8]
11024B66 |. 56 push esi
11024B67 |. 8B75 0C mov esi, dword ptr [ebp+0xC]
11024B6A |. 57 push edi
11024B6B |. 8B7D 10 mov edi, dword ptr [ebp+0x10]
11024B6E |. 85F6 test esi, esi
VC的标准DLL基本都这样的代码。
利用OllyDump插件 DUMP出来(注意不要勾选Rebuild Import,否则后面无法修复重定位表,应该是OllyDump插件修复IAT有误造成的吧)。
用Import REConstructor v1.7f修复下OD DUMP出来文件的IAT。
用ReloX_Help_GUI.exe 加载原始的BASS.DLL及复件到两个不同的地址,用LordPE DUMP出ReloX_Help_GUI.exe进程中BASS.DLL及其复件,并记录他俩的加载地址。用ReloX加载这两个不同加载地址的DUMP文件。填好对应加载地址,得到重定位信息,用此重定位信息修复OD DUMP出来的已经过修正IAT的文件的重定位表。
最后用LordPE重建下生成的文件,给文件减肥。收官。
工具下载链接:
Import REConstructor v1.7f.7z Import REConstructor v1.7f.
http://deioncube.in/files/cw2k/Tools/Import%20REConstructor%20v1.7f.7z
ucfrlx10a.zip ReloX
http://218.8.245.229:1212/tools/PE_tools/relocations/Relox/ucfrlx10a.zip
Fixing DLL Relocations Using ReloX.rar ReloX_Help_GUI
http://bbs.pediy.com/attachment.php?attachmentid=68461&d=1340349669
参考文章:
初学者用软件脱壳基础教程 【介绍了下壳,及脱壳技巧(找OEP技巧)】http://www.cr173.com/html/7746_1.html
用 PE Tools 的修复重定位插件快速修复 DLL 的重定位表 【讲述了Import REConstructor的用法】http://www.pediy.com/kssd/pediy08/pediy8-525.htm
用Ollydbg手脱Petite V2.2加壳的DLL 【讲述了ReloX的用法】http://bbs.pediy.com/showthread.php?t=9018&highlight=fly+ReloX
最后附上:已脱壳的常见(2.3.0.3,2.4.6.0)及最新(2.4.10.0)版本的BASS.DLL。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!