首页 | 业界新闻 | 黑客教程 | 安全漏洞 | 安全文章 | 破解技术 | 技术文摘 | 黑客文化 | 本站原创 | 安全贴吧 | 在线留言 | IP查询 | 软件下载 | 繁体中文 |
您现在的位置: 黑色反击 >> 技术资讯 >> 破解技术 >> 破解实例 >> 正文
北斗nspack2.3 dll脱壳
时间:2005-9-4 11:09:39 出处:看雪学院 作者:stasi 编辑:mervin 点击数:
【破解作者】 stasi[DCM][BCG][DFCG][FCG][OCN][CZG][D.4s]
【作者邮箱】 stasi@163.com
【使用工具】 od
【破解平台】 Win9x/NT/2000/XP
软件名称】 北斗nspack2.3
下载地址】 www.nsdsn.com
【软件简介】 北斗nspack2.3 国产优秀加壳软件
软件大小】 5k
【加壳方式】 nspack2.3
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】


下载了有两个版本的北斗2.3和2.6,2.6脱壳不能跨平台,就只有2.3可用。
北斗加密dll,可以选择处理重定位表,直接在oep处脱壳后,找不到重定位表,说明对输出表动过手脚


100045F8 R> 9C           pushfd             **** entry point
100045F9   60           pushad
100045FA   E8 00000000     call REALIGN.100045FF
100045FF   5D           pop ebp
10004600   B8 07000000     mov eax,7
10004605   2BE8         sub ebp,eax
10004607   8DB5 88FEFFFF   lea esi,dword ptr ss:[ebp-178]
1000460D   8B06         mov eax,dword ptr ds:[esi]
1000460F   83F8 00       cmp eax,0
10004612   74 11         je short REALIGN.10004625

0006FB6C   100045F8 offset REALIGN.
0006FB70   0006FBA0
0006FB74   0006FBAC
0006FB78   0006FB8C

hr 0006FB6C

10004871   9D           popfd
10004872   - E9 EAD2FFFF     jmp REALIGN.10001B61    
10004877   8BB5 3CFEFFFF   mov esi,dword ptr ss:[ebp-1C4]
1000487D   0BF6         or esi,esi
1000487F   0F84 97000000   je REALIGN.1000491C

10001B61   /. 55         push ebp               **** oep=1B61  
10001B62   |. 8BEC       mov ebp,esp
10001B64   |. 53         push ebx
10001B65   |. 8B5D 08     mov ebx,dword ptr ss:[ebp+8]
10001B68   |. 56         push esi
10001B69   |. 8B75 0C     mov esi,dword ptr ss:[ebp+C]
10001B6C   |. 57         push edi
10001B6D   |. 8B7D 10     mov edi,dword ptr ss:[ebp+10]
10001B70   |. 85F6       test esi,esi
10001B72   |. 75 09       jnz short REALIGN.10001B7D
10001B74   |. 833D 041C0010 >cmp dword ptr ds:[10001C04],0


size=48 的输入表

10001000 77903039 IMAGEHLP.ImageNtHeader
10001004 00000000
10001008 77E69168 KERNEL32.CloseHandle
1000100C 77E6F2A6 KERNEL32.SetEndOfFile
10001010 77E7C912 KERNEL32.DisableThreadLibraryCalls
10001014 77E7D7CC KERNEL32.SetFilePointer
10001018 77E757E2 KERNEL32.CreateFileA
1000101C 77E732AF KERNEL32.GlobalFree
10001020 77E716B4 KERNEL32.GlobalAlloc
10001024 77E7154E KERNEL32.SetHandleCount
10001028 77E6A63A KERNEL32.LoadResource
1000102C 77E7D38D KERNEL32.FindResourceA
10001030 00000000
10001034 780014A9
10001038 7800BD6A
1000103C 78001DB0
10001040 7800119B
10001044 7801F4E5
10001048 7803A670


基址重定位表可手动修复:

找到重定位代码

1000108C 1000170B REALIGN.1000170B
10001090 10001711 REALIGN.10001711
1000109C 100019E9 REALIGN.100019E9
100010A0 100019EF REALIGN.100019EF



1000446C 10001000 REALIGN.10001000
100044B0 10001000 REALIGN.10001000


自己构造基址重定位表:

unsigned char data[320] = {

0x00, 0x10, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0x8C, 0x30, 0x90, 0x30, 0x9C, 0x30, 0xA0, 0x30,
0xBD, 0x30, 0xC3, 0x30, 0xEA, 0x30, 0x07, 0x31, 0x0E, 0x31, 0x15, 0x31, 0x3D, 0x31, 0x6F, 0x31,
0x96, 0x31, 0x9B, 0x31, 0xBE, 0x31, 0xDE, 0x31, 0xE4, 0x31, 0xFD, 0x31, 0x26, 0x32, 0x77, 0x32,
0x8D, 0x32, 0xAE, 0x32, 0xBD, 0x32, 0xC2, 0x32, 0xC8, 0x32, 0xCF, 0x32, 0xD9, 0x32, 0xE0, 0x32,
0xEA, 0x32, 0x1D, 0x33, 0x25, 0x33, 0x2B, 0x33, 0x30, 0x33, 0x4D, 0x33, 0x63, 0x33, 0x75, 0x33,
0x7B, 0x33, 0x83, 0x33, 0xA5, 0x33, 0xAD, 0x33, 0xB3, 0x33, 0xBE, 0x33, 0xC9, 0x33, 0xCF, 0x33,
0xE6, 0x33, 0xEC, 0x33, 0xF4, 0x33, 0xFD, 0x33, 0x0B, 0x34, 0x11, 0x34, 0x1A, 0x34, 0x20, 0x34,
0x2B, 0x34, 0x35, 0x34, 0x3E, 0x34, 0x47, 0x34, 0x4D, 0x34, 0x53, 0x34, 0x5F, 0x34, 0x81, 0x34,
0x9A, 0x34, 0xA1, 0x34, 0xAC, 0x34, 0xB3, 0x34, 0xBF, 0x34, 0xC5, 0x34, 0xCA, 0x34, 0xD6, 0x34,
0xE3, 0x34, 0xEA, 0x34, 0x11, 0x35, 0x17, 0x35, 0x20, 0x35, 0x35, 0x35, 0x3D, 0x35, 0x43, 0x35,
0x49, 0x35, 0x4F, 0x35, 0x5F, 0x35, 0x6C, 0x35, 0x74, 0x35, 0x80, 0x35, 0xB5, 0x35, 0xC2, 0x35,
0xCE, 0x35, 0xDD, 0x35, 0xE6, 0x35, 0xEE, 0x35, 0xF9, 0x35, 0x09, 0x36, 0x10, 0x36, 0x17, 0x36,
0x1D, 0x36, 0x22, 0x36, 0x38, 0x36, 0x3E, 0x36, 0x47, 0x36, 0x4D, 0x36, 0x53, 0x36, 0x5C, 0x36,
0x67, 0x36, 0x71, 0x36, 0x7A, 0x36, 0x80, 0x36, 0x86, 0x36, 0x8C, 0x36, 0x9D, 0x36, 0xAB, 0x36,
0xB1, 0x36, 0xB8, 0x36, 0xC7, 0x36, 0xD4, 0x36, 0xDB, 0x36, 0xE9, 0x36, 0x01, 0x37, 0x17, 0x37,
0x1D, 0x37, 0x29, 0x37, 0x2E, 0x37, 0x39, 0x37, 0x41, 0x37, 0x47, 0x37, 0x4F, 0x37, 0x96, 0x37,
0x9B, 0x37, 0x17, 0x3A, 0xB2, 0x3A, 0xC0, 0x3A, 0xC8, 0x3A, 0xCE, 0x3A, 0xD9, 0x3A, 0xE6, 0x3A,
0xEE, 0x3A, 0xFC, 0x3A, 0x01, 0x3B, 0x06, 0x3B, 0x0B, 0x3B, 0x16, 0x3B, 0x23, 0x3B, 0x2D, 0x3B,
0x42, 0x3B, 0x4E, 0x3B, 0x54, 0x3B, 0x76, 0x3B, 0x88, 0x3B, 0xE4, 0x3B, 0x00, 0x3C, 0x98, 0x3C,
0x00, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x3C, 0x34, 0x6C, 0x34, 0x90, 0x34, 0xB0, 0x34
};

基址重定位表有三部分组成:
0x00, 0x10, 0x00, 0x00 是 VirtualAdress: 0x00001000
0x30, 0x01, 0x00, 0x00 是 SizeOfBlock: 0x00000130   (0x130-0x8)/0x2=0x94 就是有148组
0x8C, 0x30 是 重定位数组 08C是偏移 3是HIGHLOW定义

同样:

0x00, 0x40, 0x00, 0x00,是 VirtualAdress: 0x00004000
0x10, 0x00, 0x00, 0x00 是 SizeOfBlock: 0x00000010   (0x10-0x8)/0x2=0x4 就是有4组
0x3C, 0x34 是 重定位数组 43C是偏移 3是HIGHLOW定义

修正pe头

100000E0   8D4F0000     DD 00004F8D     ; Relocation Table address = 4F8D
100000E4   08000000     DD 00000008     ; Relocation Table size = 8

改为:
100000E0   00900000     DD 00009000     ; Relocation Table address = 8E90
100000E4   40010000     DD 00000140     ; Relocation Table size = 140 (320.)


*Relocation Table address 可以随便找个空白的地方,因为重定位表的地方可以任意,我就选择和iat
放在一起。如果想使用reloc段,就要手动增加一个区段,那么段数目还要加一。


也可用relox帮助还原重定位表,比较简单。

; Original filename and image base (the separator is a TAB)
C:\1500000.dll 01500000

; Code section indexes (the separator is a TAB)
0 1

; Syntax for each relocation (the separator is a TAB)
; ---------------------------------------------------
; RVA Type
0000108C 3
00001090 3
0000109C 3
000010A0 3
000010BD 3
000010C3 3
000010EA 3
00001107 3
0000110E 3
00001115 3
0000113D 3
0000116F 3
00001196 3
0000119B 3
000011BE 3
000011DE 3
000011E4 3
000011FD 3
00001226 3
00001277 3
0000128D 3
000012AE 3
000012BD 3
000012C2 3
000012C8 3
000012CF 3
000012D9 3
000012E0 3
000012EA 3
0000131D 3
00001325 3
0000132B 3
00001330 3
0000134D 3
00001363 3
00001375 3
0000137B 3
00001383 3
000013A5 3
000013AD 3
000013B3 3
000013BE 3
000013C9 3
000013CF 3
000013E6 3
000013EC 3
000013F4 3
000013FD 3
0000140B 3
00001411 3
0000141A 3
00001420 3
0000142B 3
00001435 3
0000143E 3
00001447 3
0000144D 3
00001453 3
0000145F 3
00001481 3
0000149A 3
000014A1 3
000014AC 3
000014B3 3
000014BF 3
000014C5 3
000014CA 3
000014D6 3
000014E3 3
000014EA 3
00001511 3
00001517 3
00001520 3
00001535 3
0000153D 3
00001543 3
00001549 3
0000154F 3
0000155F 3
0000156C 3
00001574 3
00001580 3
000015B5 3
000015C2 3
000015CE 3
000015DD 3
000015E6 3
000015EE 3
000015F9 3
00001609 3
00001610 3
00001617 3
0000161D 3
00001622 3
00001638 3
0000163E 3
00001647 3
0000164D 3
00001653 3
0000165C 3
00001667 3
00001671 3
0000167A 3
00001680 3
00001686 3
0000168C 3
0000169D 3
000016AB 3
000016B1 3
000016B8 3
000016C7 3
000016D4 3
000016DB 3
000016E9 3
00001701 3
00001717 3
0000171D 3
00001729 3
0000172E 3
00001739 3
00001741 3
00001747 3
0000174F 3
00001796 3
0000179B 3
00001A17 3
00001AB2 3
00001AC0 3
00001AC8 3
00001ACE 3
00001AD9 3
00001AE6 3
00001AEE 3
00001AFC 3
00001B01 3
00001B06 3
00001B0B 3
00001B16 3
00001B23 3
00001B2D 3
00001B42 3
00001B4E 3
00001B54 3
00001B76 3
00001B88 3
00001BE4 3
00001C00 3
00001C98 3
0000443C 3
0000446C 3
00004490 3
000044B0 3


自动修复基址重定位表。
--------------------------------------------------------------------------------
【破解总结】


搞定dll的同时,温习基址重定位表知识。
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
精彩推荐
今天你泄露了吗 网络个
黑反归来,重要通知!
hack菜鸟入门
VB 从零开始编外挂(完
IPC入侵全接触
QQ跨站漏洞巧利用,强
WinXP中CPU占用100%原
黑客新技术 灰鸽子巧妙
实例讲解 黑客入侵论坛
BMP文件格式分析
热门软件
网 友 评 论
关于我们 - 联系方式 - 招聘信息 - 合作伙伴 - 网站地图 - 广告服务 - 我要投稿 - 设为首页 - 加入收藏
黑色反击 力倡网络安全,崇尚互联共享,欢迎各种媒体转载我们的原创作品 [转载请注明出处]。
报障QQ:281873518,479748258 EMAIL:hf110.com@gmail.com 备案:苏ICP备05010002号