首页
社区
课程
招聘
[原创]SoftDefender V1.1x->魔剑传说脱壳
发表于: 2005-12-10 14:04 10664

[原创]SoftDefender V1.1x->魔剑传说脱壳

2005-12-10 14:04
10664

软件地址:  http://goldsun.ys168.com 对外公布\mjcs_ori_unpack.zip 1.5MB
文章出自:PeaceClub
工具: Ollydbg,kerberos API spy,Imprec,HideOD

情况说明:一个朋友让我检查一下此软件是否有后门,所以就拿来研究了一下.
分析:Peid一看是未知壳,而且是自创进程型的.用ollydbg载入,发现有anti,所以用了看雪的HideOD插件,运行

后主进程ExitProcess退出,CreateProcessA创建的子进程运行中.
POEP:


不知道什么壳,花指令多。

第一步:通过偷窥设法转单进程
想看看此软件到底通过什么标志来进行进程转换.所以偶用
kerberos API spy调入程序,运行后得到log:


C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\~temp0
哦,原来通过临时文件来做Flag.  
我们在CreateProcessA往上看,找标志,强行转单进程
ollydbg载入,he 575d53 (GetCommandLineA后,要用硬件断点,壳本身检测5个长度的cc)
中断后向上观察:


HOHO,575d37这里就是Magic Jump,重来强行跳即可转为运行解码进程.

第二步: OEP :
通过观察代码确定是Delphi的程序,寻找OEP,我们he GetModuleHandleA
看堆栈esp处,当发现:


是从4066d9调用的时候,我们知道oep已经过了。
逐步返回


往上看,看到了add esp,-10,HOHO,可以确定4c80e0就是OEP了
Dump吧!

第三步: IAT处理
ollydbg重新载入,转成本进程运行,he 4c80e0 到了oep后,Imprec上场。
IAT检测范围为: RVA  e218c Size 7B8
载入一看基本都识别不了,看来IAT做了处理。
到4e218c看看去!


通过观察,基本被指向了动态申请的内存区域 14xxxx
例如,结构如下:
00406604  -FF25 84224E00    JMP DWORD PTR DS:[4E2284]
=>  4e2284里的值为  145400
145400处代码为:
00145400   74 0E            JE SHORT 00145410                        ; JMP to kernel32.GetModuleHandleA
00145402   75 0C            JNZ SHORT 00145410                       ; JMP to kernel32.GetModuleHandleA
00145404   E8 1A32534E      CALL 4E678623
00145409   A6               CMPS BYTE PTR DS:[ESI],BYTE PTR ES:[EDI]
0014540A   40               INC EAX
0014540B   009A A54000FF    ADD BYTE PTR DS:[EDX+FF0040A5],BL
00145411   25 16541400      AND EAX,145416
00145416   29B5 807C0000    SUB DWORD PTR SS:[EBP+7C80],ESI
0014541C   0000             ADD BYTE PTR DS:[EAX],AL
0014541E   0000             ADD BYTE PTR DS:[EAX],AL
做了变形,所以得写代码修复。
找个区域写代码,我到140000处:



140000处新建EIP,在 14003e popad处设断点运行。
运行后,用imprec载入IAT,发现还有8个是坏的。

这8个壳做了特殊处理,因此我也来特殊处理 :)
找个delphi的程序把iat表保存下来和它对照一下,正确纠正这8个:
e21b0  57b942     GetTickCount
e21dc  57ba3a     GetStartupInfoA
e21f4 57ba29       GetCommandLineA
e22dc 57bca8     SearchPathA
e2328 57b9ec    GetVersionExA
e232c 57b942    GetVersion
e237c 57ba5a    GetCurrentProcessId
e2380 57bba0   GetCurrentDirectoryA

第四步: 完工,优化:
这里可以手工把dump.exe文件里的壳section代码给去掉,然后根据offset删除垃圾代码,修理好以后就可以Imprec Fix IAT了.
好了,测试运行正常.

我写文章目的,是让大家一起探讨解壳思路,还请各路大侠指教几番.


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (12)
雪    币: 245
活跃值: (195)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
2
good~!!!....
2005-12-10 14:08
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
偶会给 你晕死 去!
2005-12-10 14:32
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
4
SoftDefender V1.1x -> Randy Li
输入表修复可以更简单点
2005-12-10 14:51
0
雪    币: 255
活跃值: (207)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
5
fly是识壳专家啊,见多识广.userdb借用一下?
2005-12-10 15:02
0
雪    币: 234
活跃值: (370)
能力值: ( LV9,RANK:530 )
在线值:
发帖
回帖
粉丝
6
学习了
2005-12-10 15:07
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
7
2005-12-10 16:38
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我有个更好的思路~
去试试先~
2005-12-10 22:38
0
雪    币: 237
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
学习了!!!!!
2005-12-11 15:32
0
雪    币: 136
活跃值: (429)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
10
good
2005-12-11 20:25
0
雪    币: 215
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
2006-5-12 19:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
收藏以后,好好学习一下~
2006-5-13 19:37
0
雪    币: 313
活跃值: (250)
能力值: ( LV9,RANK:650 )
在线值:
发帖
回帖
粉丝
13
学习一下此壳
2006-5-13 20:08
0
游客
登录 | 注册 方可回帖
返回
//