【破文作者】 №微笑一刀[LOCKLOSE]
【文章题目】 算霸5主程序脱壳
【下载地址】 忘记了...
----------------------------------------------------------------------------------------------
【加密方式】 Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks [Overlay]
【破解工具】 OD修改版,IMPR.
【软件限制】 启动时有个壳的NAG...
【破解平台】 Win9x/NT/2000/XP/XP SP2
----------------------------------------------------------------------------------------------
【软件简介】
主要功能:
1.
表达式计算,可以进行多行计算。
2.
支持变量,可以设无限变量。
3.
基本支持C和BASIC的各种运算符。
4.
支持二进制、十进制、十六进制常量。
5.
支持数十个常用函数,基本包含了所有普通数学中所有函数。
6.
支持简单的文件处理,可以在文件指定位置写入字节,是黑客们用来破解可执行文件的必备工具。
7.
可以将计算式保存成文件,以便反复使用。
8.
可以设置透明度、置顶及监视粘贴板等。
----------------------------------------------------------------------------------------------
【破解过程】
老规矩,载入OD,设置忽略所有异常,隐藏OD,开工了.
载入以后停在这里~
004F0880 > 55
push ebp <<-------
停在这
004F0881 8BEC
mov ebp,
esp
004F0883 6A FF
push -1
004F0885 68 90BA5000
push calc5.0050BA90
004F088A 68 58054F00
push calc5.004F0558
004F088F 64:A1 00000000
mov eax,
dword ptr fs:[0]
004F0895 50
push eax
004F0896 64:8925 0000000>
mov dword ptr fs:[0],
esp
004F089D 83EC 58
sub esp,58
004F08A0 53
push ebx
004F08A1 56
push esi
004F08A2 57
push edi
下GetModuleHandleA断点,F9运行.
会断在下面的地方,
7C80B529 > 8BFF
mov edi,
edi
7C80B52B 55
push ebp
7C80B52C 8BEC
mov ebp,
esp
7C80B52E 837D 08 00
cmp dword ptr ss:[
ebp+8],0
注意堆栈内容,先面是每次中断出现的信息
0012CA20 77F45BB0 /
CALL 到 GetModuleHandleA 来自 77F45BAA
0012CA24 77F44FF4 \pModule =
"KERNEL32.DLL"
0012CF30 77F45BB0 /
CALL 到 GetModuleHandleA 来自 SHLWAPI.77F45BAA
0012CF34 77F44FF4 \pModule =
"KERNEL32.DLL"
0012D744 004DB7C3 /
CALL 到 GetModuleHandleA 来自 calc5.004DB7BD
0012D748 00000000 \pModule = NULL
00128CD8 00BC03AA /
CALL 到 GetModuleHandleA 来自 00BC03A4
00128CDC 00BD3D68 \pModule =
"kernel32.dll"
00128CD8 00BC03C7 /
CALL 到 GetModuleHandleA 来自 00BC03C1
00128CDC 00BD3D68 \pModule =
"kernel32.dll"
001081BC 00BCB03A /
CALL 到 GetModuleHandleA 来自 00BCB034
001081C0 00000000 \pModule = NULL
001081F0 00BCACA0 /
CALL 到 GetModuleHandleA 来自 00BCAC9E
001081F4 00000000 \pModule = NULL
001081F0 00BCAD9F /
CALL 到 GetModuleHandleA 来自 00BCAD9D
001081F4 00000000 \pModule = NULL
001081F0 00BCADFB /
CALL 到 GetModuleHandleA 来自 00BCADF9
001081F4 00000000 \pModule = NULL
001081F0 00BCAF21 /
CALL 到 GetModuleHandleA 来自 00BCAF1F
001081F4 00000000 \pModule = NULL
000E78EC 7365D4A4 /
CALL 到 GetModuleHandleA 来自 7365D49E
000E78F0 000E78F4 \pModule =
"C:\WINDOWS\system32\ntdll.dll"
在按一次就会出现那个未注册壳的NAG了,点OK后会提示一个异常,SHIFT+F9过去后
堆栈显示
00128A50 00BA99AC /
CALL 到 GetModuleHandleA 来自 00BA99A6
00128A54 00128B8C \pModule =
"kernel32.dll"
返回的时机到了,返回到
00BA99AC 8B0D 2091BD00
mov ecx,
dword ptr ds:[BD9120]
00BA99B2 89040E
mov dword ptr ds:[
esi+
ecx],
eax
00BA99B5 A1 2091BD00
mov eax,
dword ptr ds:[BD9120]
00BA99BA 393C06
cmp dword ptr ds:[
esi+
eax],
edi
00BA99BD 75 16
jnz short 00BA99D5
00BA99BF 8D85 B4FEFFFF
lea eax,
dword ptr ss:[
ebp-14C]
00BA99C5 50
push eax
00BA99C6 FF15 D4E0BC00
call dword ptr ds:[BCE0D4]
; kernel32.LoadLibraryA
00BA99CC 8B0D 2091BD00
mov ecx,
dword ptr ds:[BD9120]
00BA99D2 89040E
mov dword ptr ds:[
esi+
ecx],
eax
00BA99D5 A1 2091BD00
mov eax,
dword ptr ds:[BD9120]
00BA99DA 393C06
cmp dword ptr ds:[
esi+
eax],
edi
00BA99DD 0F84 AD000000
je 00BA9A90 <<--------------
修改为JMP 00BA9A90(Magic Jump)
00BA99E3 33C9
xor ecx,
ecx
00BA99E5 8B03
mov eax,
dword ptr ds:[
ebx]
00BA99E7 3938
cmp dword ptr ds:[
eax],
edi
00BA99E9 74 06
je short 00BA99F1
取消GetModuleHandleA断点下GetCurrentThreadId断点~F9运行
断在
7C809737 > 64:A1 18000000
mov eax,
dword ptr fs:[18] <<----------------
这里
7C80973D 8B40 24
mov eax,
dword ptr ds:[
eax+24]
7C809740 C3
retn
看堆栈内容,直到出现
0012D798 00BC8A3D /
CALL 到 GetCurrentThreadId 来自 00BC8A37
不然一直F9走,出现以后取消断点并返回~
返回到
00BC8A3D A3 A8D6BD00
mov dword ptr ds:[BDD6A8],
eax <<------------
这里
00BC8A42 E8 5512FEFF
call 00BA9C9C
00BC8A47 6A 00
push 0
00BC8A49 E8 B56DFEFF
call 00BAF803
00BC8A4E 6A 00
push 0
00BC8A50 C705 8842BD00 A>
mov dword ptr ds:[BD4288],0BD4FAC
; ASCII "RC"
00BC8A5A E8 B20CFEFF
call 00BA9711
00BC8A5F 59
pop ecx
00BC8A60 59
pop ecx
向下看,找到
00BC8ACB 3348 08
xor ecx,
dword ptr ds:[
eax+8]
00BC8ACE 2BF9
sub edi,
ecx
00BC8AD0 FFD7
call edi <<---------------
这里下断~
00BC8AD2 8BD8
mov ebx,
eax
00BC8AD4 5F
pop edi
00BC8AD5 8BC3
mov eax,
ebx
在00BC8AD0处下断,然后F9运行,在F7跟进去~到这里~
00499B94 55
push ebp <<---------------
这里
00499B95 8BEC
mov ebp,
esp
00499B97 83C4 F0
add esp,-10
00499B9A 53
push ebx
00499B9B B8 E4984900
mov eax,calc5.004998E4
00499BA0 E8 8BC6F6FF
call calc5.00406230
00499BA5 8B1D 1C074B00
mov ebx,
dword ptr ds:[4B071C]
; calc5.004B1BF0
00499BAB 68 4C9C4900
push calc5.00499C4C
; ASCII "calc5"
哇噻...都是红色的...看着就是舒服啊.可以DUMP了.
注意这里我使用PeDumper插件来Dump,
Dump
时把右边的选项都选择上,点获取当前EIP为OEP,然后可以Dump了.保存到一个地方就可以了.
现在到修复IAT的时候了,运行IMPR.OEP处填写99B94,为什么写这个?这个问题别问我~
把无效的剪切掉修复就OK了.
----------------------------------------------------------------------------------------------
【破解心得】
这里Dump时使用PeDumper因为觉得方便一点~省去了修复Dump文件的步骤,当初刚脱
下来修复以后不能运行,经Fly指点才知道是壳修改了PE文件结构,还需要修复以下,这里
使用PeDumper插件Dump的文件已经不需要修复了.直接用IMPR修复就能Run了~
----------------------------------------------------------------------------------------------
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
----------------------------------------------------------------------------------------------
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!