1.载入PEID

使用核心扫描出的结果

nSPack 2.1 - 2.5 -> North Star/Liu Xing Ping

2.载入OD,一进来就是一个大跳转,F8跟着走

 >- E9 327E0000     jmp Aspack变.0041877B              ; //程序入口点
C7 ???
0041094A 4E dec esi
0041094B FFC3 inc ebx
0041094D FFFF ???
0041094F EB 0A jmp short Aspack变.0041095B
E8 40FFFF94 call
FD std
 

3.走到这里,看到一个push入栈,下一行ESP定律,下硬件断点,然后shift+F9运行

0041877B          push Aspack变.
E8 84FEFFFF call Aspack变. ; //ESP
inc ecx
A4 movs byte ptr es:[edi],byte ptr d>
add byte ptr ds:[eax],bl
3C adc al,0x3C
0041878B 38041C cmp byte ptr ss:[esp+ebx],al
 

4.落脚后记得删除硬件断点继续F8,看到一个向上跳转,按照常规思维是向上跳转的下一行F4,但是这样会跑飞,再按照常规思维是继续F8让这个向上跳转实现,但是实现后你会发现你继续F8的时候实际上是陷入了一个循环,那么我们要做的是在这个跳转的位置下断点F2,然后shift+F9运行,像最后一次异常法一样,找到最后一次异常。是第57次,58次就跑飞了

0041861B    89E5            mov ebp,esp                       ; //ESP落脚点
0041861D 81EC C0000000 sub esp,0xC0
89E7 mov edi,esp
add esi,dword ptr ss:[ebp]
8A06 mov al,byte ptr ds:[esi]
0041862A inc esi ; Aspack变.
0041862B 0FB6C0 movzx eax,al
0041862E ^ FF2485 2B814100 jmp dword ptr ds:[eax*+0x41812B] ; //下一行会跑飞
:8B45 mov ax,word ptr ss:[ebp]
 

5.shift+F9运行57次后取消断点,然后F8一次就落到了这里,你会发现,原先跟上去的时候会陷入的循环,现在没有了,然后继续F8

004185FC    89EC            mov esp,ebp                       ; //落脚点
004185FE 5A pop edx
004185FF 5A pop edx
5D pop ebp
pop ecx
9D popfd
pop eax
 

6.F8走到这里的时候,我们发现一个pushad,可以使用ESP定律了,下硬件断点,然后shift+F9运行

00410B19    9C              pushfd
00410B1A pushad
00410B1B E8 call Aspack变.00410B20 ; //ESP
00410B20 5D pop ebp
00410B21 81ED DC010000 sub ebp,0x1DC
00410B27 ^ E9 34FEFFFF jmp Aspack变.
 

7.ESP落脚点,删除硬件断点,然后继续F8

00410B7C    9D              popfd                             ; //落脚点
00410B7D EB 4E jmp short Aspack变.00410BCD
00410B7F F4 hlt
00410B80 FD std
00410B81 FFFF ???
00410B83 8BDD mov ebx,ebp
00410B85 81EB sub ebx,0x8
 

8.经过几次F8之后倒了这里,这个就是指向OEP的关键跳了,F8一下

00410BCD  - E9 EE16FFFF     jmp Aspack变.004022C0              ; //指向OEP的关键跳
00410BD2 8BB5 48FDFFFF mov esi,dword ptr ss:[ebp-0x2B8]
00410BD8 0BF6 or esi,esi
00410BDA 0F84 je Aspack变.00410C77
00410BE0 8B95 50FDFFFF mov edx,dword ptr ss:[ebp-0x2B0]
00410BE6 03F2 add esi,edx
 

9.来到OEP,可以脱壳了,需要注意的是,脱壳后需要使用LoadPE重建PE表才能正常运行

004022C0    E8 970B0000     call Aspack变.00402E5C             ; //OEP
004022C5 E8 C60A0000 call Aspack变.00402D90
004022CA 8BF0 mov esi,eax
004022CC 6A push 0x0
004022CE B3534000 push Aspack变.004053B3
004022D3 push esi
004022D4 E8 570D0000 call Aspack变.
004022D9 A2 F7594000 mov byte ptr ds:[0x4059F7],al
004022DE 6A push 0x0
004022E0 BA534000 push Aspack变.004053BA

10.运行,查壳

运行OK,查壳:TASM / MASM (312 ms)

手脱nSPack 2.1 - 2.5的更多相关文章

  1. 手脱NsPacK壳

    1.查壳 使用PEiD未能检测到壳信息,这时,我们更换其他工具 从图中可以看到壳的信息为[NsPacK(3.x)[-]] 2.百度壳信息 北斗程序压缩(Nspack)是一款压缩壳.主要的选项是:压缩资 ...

  2. 手脱nSPack 1.3

    1.PEID查壳 nSPack 1.3 -> North Star/Liu Xing Ping 2.载入OD,pushad下面的call哪里使用ESP定律,下硬件访问断点,然后shift+F9运 ...

  3. 手脱nSPack 2.2

    1.PEID查壳 深度扫描下:nSPack 2.2 -> North Star/Liu Xing Ping 2.载入OD,上来就是一个大跳转,F8单步跟下去 0040101B >- E9 ...

  4. 手脱nSPack 3.7

    方法一: 1.   OD查壳—nSpack3.7的壳 2. 载入OD 看起来很眼熟,F8一次,然后下面就可以使用ESP定律了,使用ESP定律下断点,然后F9四次 3.   F9四次后落到这个位置 接下 ...

  5. 简单脱壳教程笔记(2)---手脱UPX壳(1)

    本笔记是针对ximo早期发的脱壳基础视频教程,整理的笔记. ximo早期发的脱壳基础视频教程 下载地址如下: http://down.52pojie.cn/%E5%90%BE%E7%88%B1%E7% ...

  6. 手动脱NsPacK壳实战

    作者:Fly2015 这里脱壳的程序是吾爱破解培训的作业2,相较于作业1略微要强一点,可是仅仅要掌握了脱壳的ESP定律,脱这个Nspack壳并不难.只是还是蛮有意思的. 1.使用查壳软件对加壳的程序进 ...

  7. 手脱Aspack变形壳1

    1.载入PEID Aspack v2.12 -> www.aspack.com 2.载入OD,不管是看查壳信息还是看入口特征都跟我上一次发的一个手脱Aspack v2.12的帖子相同http:/ ...

  8. 简单脱壳教程笔记(7)---手脱PECompact2.X壳

    本笔记是针对ximo早期发的脱壳基础视频教程.整理的笔记.本笔记用到的工具下载地址: http://download.csdn.net/detail/obuyiseng/9466056 简单介绍: F ...

  9. 【个人笔记】ximo早期发的脱壳教程——手脱UPX壳

    [个人笔记]ximo早期发的脱壳教程--手脱UPX壳   壳分为两种:压缩壳和加密壳,UPX是一种很简单的压缩壳.   手脱UPX壳: 工具:ExeinfoPE.OD 对象:rmvbfix 方法1:单 ...

随机推荐

  1. 重构:越来越长的 switch ... case 和 if ... else if ... else

    在代码中,时常有就一类型码(Type Code)而展开的如 switch ... case 或 if ... else if ... else 的条件表达式.随着项目业务逻辑的增加及代码经年累月的修改 ...

  2. socket发送文字、图片、文件---基于python实现

    socket官方文档:https://docs.python.org/2/library/socket.html socket中文详细介绍:http://blog.csdn.net/rebelqsp/ ...

  3. 树状数组怒刷sum!!!(前缀和应用)

    我们知道我们利用树状数组维护的是存到其中的a[ ]数组,但是我们做题需要的是sum[ ]数组,这才是我们真正需要的有用的信息,写这篇博客的目的便是整理一下sum数组是怎么样来应用解题的. 1. Sta ...

  4. 实验一 MiniOS

    实验一.命令解释程序的编写实验 商软1班   杨晶晶  201406114102 一.        实验目的 (1)掌握命令解释程序的原理: (2)掌握简单的DOS调用方法: (3)掌握C语言编程初 ...

  5. Scrum立会报告+燃尽图 05

    此作业要求参见:[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2195] 一.小组介绍 组长:王一可 组员:范靖旋,王硕,赵佳璐,范洪达 ...

  6. a5

    今日内容: 今天主要还是素材的查找,图标的制作以及调整. 明日计划: 主要还是完成图标,尽可能的美化 困难: 一个是直男式的审美吧,另一个是PS的技术还不够深

  7. js中call(),apply(),以及prototype的含义

    最近段时间主要学习前端去了,然而所遇到的一些问题我觉得有必要去深究一下 prototype: 1 js中有三种表达方法 类方法,属性方法,原型方法 function People(name) { th ...

  8. EasyUI中DataGrid构建复合表头

    在使用easyui的DataGrid控件时,构建复合表头就显得非常简单了.只需要在使用columns属性时通过数组的方式编写列名即可.如我们需要构建成一个如下的表头: Columns的代码如下: co ...

  9. C# 模拟串口发送接收

    一.准备虚拟串口驱动工具 创建俩个虚拟串口,如图: 二.创建两个控制台程序 模拟串口的发送接收数据 1. 接收数据,代码如下: //遍历串行端口名称数组 foreach (string port in ...

  10. BZOJ 1222 产品加工(DP)

    某加工厂有A.B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成.由于受到机器性能和产品特性的限制,不同的机器加工同一产品所需的时间会不同,若同时由两台机器共同进行加工,所完成任 ...