Professional Documents
Culture Documents
Manual - Unpacking.Safengine - Shielden-Licensor 2.xx - By.Sound
Manual - Unpacking.Safengine - Shielden-Licensor 2.xx - By.Sound
Manual - Unpacking.Safengine - Shielden-Licensor 2.xx - By.Sound
xx
Manual Unpacking
Safengine Shielden /
Licensor 2.xx
By: Sound
2016/8/4 22:39:11
http://www.safengine.com/index.php
Sound Manual Unpacking Safengine Shielden / Licensor 2.xx
Catalog
Introduction.............................................................................................................................................. 3
Content........................................................................................................................................................ 3
Require Tools............................................................................................................................................3
Find HWID.......................................................................................................................................... 4
Patched................................................................................................................................................ 7
Oep................................................................................................................................................................. 7
Find Method........................................................................................................................................ 7
IAT...................................................................................................................................................................9
Found IAT........................................................................................................................................... 11
Unpacked.................................................................................................................................................. 19
Magic JMP.........................................................................................................................................22
Done............................................................................................................................................................ 25
Greetz to:.................................................................................................................................................. 26
Sound Manual Unpacking Safengine Shielden / Licensor 2.xx
Introduction
Safengine 的代码分析引擎将在保护应用程序时提供完整的分析,从而对应用程序进行系统化的保护,将
您的原始代码移动和变形,并且加入无数垃圾代码和反调试、跟踪代码。
Safengine 处理的范围是整个程序,而不是程序里的某一个过程。所以,即使您的关键代码在保护后未经
变形,也需要耗费破解者很长的时间才能找到,而往往只是一行两行代码,穿插在数以万计的垃圾代码
中,是极其隐蔽和猥琐的。
Safengine 的代码虚拟机在同类产品中最稳定、最完善,整体运行架构线程安全,不会改变系统对受保护
代码的线程的调度。虚拟处理器采用了逻辑门级的指令拆分,使用与非和加法两个基础运算指令实现了大
部分复杂的 x86 指令,并且使用了随机的虚拟寄存器参与运算,极大程度提高了代码保护的安全性。
在同类的软件保护壳中,Safengine 提供了最完整的解决方案,集代码加密、虚拟化、授权于一体,并且
每一项功能都可圈可点。
Content
如果你对 Safengine Unpacking 未涉及分析或学习.请在浏览本 PDF 之前阅读此文章,也许会对你有帮
助 ! Unpacking Shielden 2.19 http://qwe.tw/?p=274 ,此文采用很简单的方式 对 Safengine
Shieden 2.19 保护的程序进行脱壳。
Require Tools
OllyDbg 1.10
http://www.ollydbg.de
Plugins:
StrongOD v0.48.892 by 海风月影
BreakOnExecution
样本下载地址:
http://release.crack4r.cc/Exercise/unpackme%20Safengine%20Licensor%202.3.7.0-
Pass%3A%20unpackme.rar
Find HWID
在对用了 Safengine 保护的样本 Patch HWID 时, 我们需要有一个正确使用的授权文件与相对应的机器码
PC_Hwid: 1+LKtQAIAgDUBgMAAAECAwQFBgdLH9/tVEXf/Q==
KeyHwid: yK/BrQAICAAgD2AA2MyMnr+9Bgdm51d1JTiyJQ==
载入 Ollydbg 停留在入口点。
005C6DA4 > $ E8 1C000000 CALL 005C6DC5 ; PUSH ASCII "Safengine Licensor v2.3.7.0"
第一次查找到的地址
第二次查找到的地址
0048EA53 . F8 CLC
0048EA54 > E8 11000000 CALL 0048EA6A ; PUSH ASCII "RegQueryValueExA"
0048EA70 Follow
0048EB22 . C3 RETN
ASCII ( SystemBiosVersion ) 将会出现在 EAX 中 , 跟随 EAX 地址在 Dump 窗口( Follow In Dump ) ,搜索
PC_Hwid DeCode: D7E2CAB500080200D406030000010203040506074B1FDFED5445DFFD
如果搜索不到,第二次中断,重新搜索 或者内存中搜索。
Run
第一次
第二次
D7E2CAB500080200D406030000010203040506074B1FDFED5445DFFD 匹配
Patched.
删除我们的所有断点, run ,
Oep
Find Method
55 push ebp
Code section Set Memory breakpoint on write > run > Code section Set Memory breakpoint on access >
Break On Execution > Apply (for this session only)
Sound Manual Unpacking Safengine Shielden / Licensor 2.xx
IAT
IAT encryption type
F7
0044CAA3 E8 2091FBFF CALL 00405BC8 00405BC8 53 PUSH EBX
00405BC9 8BD8 MOV EBX, EAX
00405BCB 33C0 XOR EAX, EAX
00405BCD A3 9CD04400 MOV DWORD PTR DS:[0x44D09C], EAX
00405BD2 6A 00 PUSH 0x0
00405BD4 E8 4B581700 CALL 0057B424
0057B424 /EB 7CJMP SHORT 0057B4A2
0057B426 |886424 01 MOV BYTE PTR SS:[ESP+0x1], AH
0057B42A |892C24 MOV DWORD PTR SS:[ESP], EBP
0057B42D |8D2C2E LEA EBP, DWORD PTR DS:[ESI+EBP]
0057B430 |EB 50 JMP SHORT 0057B482
0057B432 |B6 32 MOV DH, 0x32
0057B503 837C24 04 00 CMP DWORD PTR SS:[ESP+0x4], 0x0 这里在判断 IAT
是否已经初始化完毕
0057B508 ^ 0F85 44FFFFFF JNZ 0057B452
F8
Found IAT
找到地址
F7 跟进 CALL 004D829B F7 来到
Sound Manual Unpacking Safengine Shielden / Licensor 2.xx
004D793D 837C24 04 00 CMP DWORD PTR SS:[ESP+0x4], 0x0 判断 IAT 是否已
经初始化完毕
Push EAX 模拟的 API 存放地址压入 EAX
004D7779 ^\EB E2 JMP SHORT 004D775D EAX=00D00E2 被模拟后的 API 存放
地址
可以一直单步下去 会来到
004D79D POPFD
004D7 C3 RETN
最终停留在 第一个 API CALL 的下一行 00418403 33D2 XOR EDX, EDX
Sound Manual Unpacking Safengine Shielden / Licensor 2.xx
Code section Set Memorybreakpoint on write > run > near oep
前文有讲过
一共只有 14 个 API,暂时手工处理完毕 ,
一种更便捷的方法 :
仅仅替换 SE_GetModuleHandleA 与 GetProcAddress 不需要去修 IAT 就可以
Unpacked
这种方式 Unpacking 既有优点也有缺点
优点: 不需要修 IAT 与 VM CALL,而且 Unpack 速度快,
缺点: 体积大, Unpack 不干净.
Unpacking 的目的 >>>正常运行 / 运行速度快 / 修改内部代码 /不使用 Patch / 再
一次加壳 / Etc
Fix Resource s
现在看看资源需不需要处理 数据窗口 跟随到 基址 00400000,
Sound Manual Unpacking Safengine Shielden / Licensor 2.xx
其次往下拉动 查看资源信息,
这个样本并没有什么资源文件
_FINDRESBASE_:
VAR DosHead VAR
NTHead VAR
DataTable VAR
ResBase
VAR MODULEBASEADDR
Sound Manual Unpacking Safengine Shielden / Licensor 2.xx
GMI eip,MODULEBASE
ADD NTHead,78
MOV DataTable,NTHead ADD
DataTable,10
MOV ResBase,[DataTable] ADD
ResBase,DosHead RET
_GETFIXRESADDR_:
MOV ResFix_Start,ResPoint
MOV StructBase,ResPoint
MOV ResNum ber,[StructBase+0E],2 //获 取 数量
MOV Temp,[StructBase+0C],2 ADD
ResNumber,Temp
ADD StructBase,10 DEC
ResNumber MUL
ResNumber,8
ADD StructBase,ResNumber MOV
ResPoint,[StructBase+4]
AND ResPoint,7FFFFFFF
ADD ResPoint,ResBase //三级目录
MOV StructBase,ResPoint
MOV ResNum ber,[StructBase+0E],2 //获 取 数量
MOV Temp,[StructBase+0C],2 ADD
ResNumber,Temp
ADD StructBase,10 DEC
ResNumber MUL
ResNumber,8
_FIXRES_:
var Fix_Addr var
Souce_Addr var
Des_Addr var Res_Size
ASK "Do you have a place to save fixed Res?IF you input 0,script will alloc"
CMP $RESULT,0
JNE HAVE_SPACE
ASK "input Res Size" ALLOC
$RESULT HAVE_SPACE:
mov Des_Addr,$RESULT mov
Fix_Addr,ResFix_Start
FixResLoop:
mov Souce_Addr,[Fix_Addr]
Unpacked
用 Universal import Fixer 来修复指针类型!
修复指针完成如下
Sound Manual Unpacking Safengine Shielden / Licensor 2.xx
Dump:
Unpacked:
Sound Manual Unpacking Safengine Shielden / Licensor 2.xx
优化体积
使用 CFF Explorer
然后 选择 Rebuilder 重建 Pe
Sound Manual Unpacking Safengine Shielden / Licensor 2.xx
Expand
Magic JMP
magic JMP 每个加密壳保护后的程序代码里,基本上都有这个指令,它的作用:程序被壳保护,外壳会写获取原
始 IAT 再加密,
第三种方法: 总结了一个特征码,8D 64 24 ?? 0F ?? ?? ?? FB FF
样本采用 E 语言编译器编译。
Sound Manual Unpacking Safengine Shielden / Licensor 2.xx
查找
到的地址 全部设置 Int3 断点,
这里我们知道是 GetVersion ,
0056FD3F 61 POPAD
0056FD40 FF4424 08 INC DWORD PTR SS:[ESP+0x8]
0056FD44 9D POPFD
0056FD45 C3 RETN
Done .
1: 观察加密后 IAT CALL / JMP / FF15 /FF25 等 与加密前的差别
2: 寻找 Magic JMP 可以使我们的 Unpacking 更方便
3: 注意寻 找 SE_GetModuleHandleA Se_GetProcAddress
4: 我们还需要处理一个 Se_CreateThread 这样方便跑脚本 设置 Int3 断点在 KiUserExceptionDispatcher 查
找CreateThread
Sound Manual Unpacking Safengine Shielden / Licensor 2.xx
Greetz to:
- Apuromafo
- Bughoho
- 半斤八兩
- c0rk
- CCU
- CriticalError
- Danilo Scala
- Emil
- evernick
- fly
- giv
- Hmily
- JoyChou
- Kido
- L4nce
- MistHill
- OrdinAry
- Peace
- Raham
- The_Wolf
- wgz001
- White
- 19nuclear91
- XiaoWeiMe
- XiMo
- yoza
- ZeNix
Team/Forum
- [ASA]
- [CCG]
- [CLS]
- [CUG]
- [IPB]
- [LCG]
- [URET]
- [RET]
- [SnD]
- [TSRh]
- [UPK]
- [PEDIY]
- [Exetools]
Sound Manual Unpacking Safengine Shielden / Licensor 2.xx
- [tuts4you]
- [Black Storm]
- [DebugMan]
- [gERMAN rEVERSING nEWBIES]
Beautify:LzSkyline@LzSkyline.com
Blog..: http://qwe.tw
E.Mail:Sound@Crack4r.cc
Distro: release.crack4r.cc
2016/8/5 08:13:38
Reverse Engineering Team
By:Sound [R.E.T]